记录一次硬盘迁移过程中遇到的问题

前情

家里的AIO服务器硬盘原本是2T+4T组合,2T硬盘上部署了emby等服务,4T硬盘上存放了大量的视频文件。由于2T硬盘空间不足,所以需要将2T硬盘替换为4T硬盘,然后将原来4T硬盘位换一个大容量的硬盘。

迁移过程

网上选购了一段时间,考虑到性价比等因素最后网购了一个12T的希捷银河企业盘,体验一下炒豆子的感觉。
迁移要先把4T硬盘的数据直接拷贝到12T硬盘上,然后格式化4T硬盘,再将2T硬盘的数据拷贝到4T硬盘上。最终将2T硬盘替换为4T硬盘。

迁移4T硬盘的数据到12T硬盘上没有遇到什么问题,因为原本4T就是数据盘,没有乱七八糟的分区,直接拷贝即可。
对比了多种全盘拷贝方法,最后使用了 dd 命令方法,dd 命令可以将整个硬盘的数据拷贝到另一个硬盘上,拷贝完成后,新硬盘的分区表和原硬盘一样,不需要再次分区,甚至UUID都一样,拷贝完成后直接挂载即可.

以下操作都是在硬盘未挂载的情况下进行的,AIO宿主机是PVE系统,最终硬盘是通过硬盘直通到ubuntu虚拟机上的。因此只需要将ubuntu虚拟机关机,登录pve终端操作即可。

  1. 拷贝4T硬盘数据到12T硬盘

    1
    2
    # 4T -> 12T, 4T硬盘是sdb, 12T硬盘是sdc
    dd if=/dev/sdb of=/dev/sdc bs=4M conv=noerror,sync status=progress
  2. 格式化4T硬盘

    1
    2
    # 格式化4T硬盘
    mkfs.ext4 /dev/sdb
  3. 拷贝2T硬盘数据到4T硬盘

    1
    2
    # 2T -> 4T, 2T硬盘是sda, 4T硬盘是sdb
    dd if=/dev/sda of=/dev/sdb bs=4M conv=noerror,sync status=progress

遇到的问题

  1. dd 命令拷贝速度慢

以上第一步操作使用 dd 命令拷贝4T到12T时,没有加 bs=4M 命令,导致了拷贝速度非常慢,大概只有30M/s,后来加上 bs=4M 后,拷贝速度提升到了100M/s左右。这是因为dd默认是以512字节为单位拷贝的,加上 bs=4M 后,以4M为单位拷贝,速度提升了很多。

  1. 拷贝2T硬盘数据到4T硬盘后,挂载4T硬盘启动后,4T硬盘只有2T大小

原本的2T硬盘上有一个sdb1分区,sdb1分区有2t大小的使用空间,拷贝到4T硬盘后,4T硬盘上也存在了一个同样大小的分区。但是4T硬盘的剩余空间没有被分区,所以只有2T大小的使用空间。
查找方法后,可以使用 parted 命令来扩展分区大小。

1
2
3
4
5
6
7
8
# 查看分区
parted /dev/sdb print free

# 扩展分区
parted /dev/sdb resizepart 1 100%

#扩展分区后,再使用 `resize2fs` 命令来扩展文件系统大小。
resize2fs /dev/sdb1

以上操作按常理是可以顺利运行的,但是在扩展分区时,出现了MBR分区表无法扩展到2T以上的问题,这是因为MBR分区表最大只能支持2T的硬盘,所以需要将MBR分区表转换为GPT分区表。
转换硬盘的分区表,大部分方案都是需要格式化分区的,还好后面找到了DiskGenius这个工具,可以不格式化硬盘的情况下转换分区表。
使用DiskGenius转换分区表后,再使用 parted 命令扩展分区,最终成功扩展了4T硬盘的分区大小。

  1. 4T硬盘挂载后,进入挂载点 /media目录下使用 ls 命令查看,报错
1
2
root@myubuntu:/media# ls
ls: reading directory '.': Bad message

这是因为可能在硬盘分区扩展的过程中,文件系统出现了问题,使用 e2fsck 命令检查文件系统,修复文件系统。

1
e2fsck -fy /dev/sdb1

修复可能需要比较长的时间。

  1. 修复完成后可以正常挂载硬盘,但是进入 /media 目录下查看文件时,发现只有 lost+found 目录,但是空间占用显示正常,进入 lost+found 目录下查看,发现了大量的文件。但文件名都是数字,不是原来的目录名称。

这是因为e2fsck修复文件系统后,如果有文件无法关联到其正确的目录条目中,这些文件将被移动到lost+found文件夹。这是一个专门用于存放因修复文件系统而“丢失”的文件的特殊目录。
在lost+found文件夹中,每个找到的文件会被分配一个以inode编号命名的文件名。这意味着文件名可能不再保持原来的文件结构。
进入数字目录下查看,发现是原来的文件,只有最上层的目录结构丢失了,因此只需要将这些文件移动到正确的目录下即可。
使用 mv 命令将文件移动到正确的目录下。
最后启动服务,一切正常。

Donate comment here