我有一个块1T的硬盘用来备份数据,但在工作了一段时间之后,硬盘满了。
我买了一块4T的硬盘用来替换它,但1T硬盘中的数据还有用,所以必须将数据迁移到4T硬盘中。
首先说明下两个硬盘的情况:
1T硬盘(/dev/sdc)采用msdos分区表,只划分了一个分区 /dev/sdc1,容量为1T,文件系统类型EXT4
4T硬盘(/dev/sdb)采用GPT分区表,也只划分了一个分区/dev/sdb1,容量为4T,文件系统类型EXT4
拷贝开始,使用dd工具从1T硬盘拷贝数据到4T盘,命令如下:
# dd if=/dev/sdc1 of=/dev/sdb1
提示,可以另开一个终端输入
# watch -n 1 killall -USER1 dd
命令来显示拷贝进度
关于dd工具的具体使用方法见man
这里要注意的是拷贝的源和目标分别是/dev/sdc1 和 /dev/sdb1 这两个分区,而不是/dev/sdc 和 /dev/sdb这两个硬盘名称
如果使用硬盘名称作为源和目标,那么因为dd是二进制拷贝,会用1T 硬盘的分区表和分区信息覆盖4T硬盘的分区表和分区信息,而我们知道msdos分区表是不支持2T以上的硬盘的。
dd工具会将uuid也一起拷贝,所以拷贝完成之后,只要将1T的硬盘拆卸下来,替换上4T的硬盘,不用修改/etc/fstab文件,就能按照你以前的设置自动挂载。
做完上述操作之后,使用df -h命令查看,会发现4T的硬盘虽然已经自动挂载了,但它显示的容量却不对,明明/dev/sdb1分区划分了4T,但用df命令查看却发现,它的总容量竟然是1T,也就是之前1T硬盘/dev/sdc1分区的总容量。
这是因为文件系统没有更新硬盘信息,依然按照之前的1T 硬盘在计算容量。可以使用e2fsck和resize2fs工具修改此问题。参考
# umount /dev/sdb1 // 记得在操作之前先卸载所有挂载
# e2fsck -f /dev/sdb1
# resize2fs /dev/sdb1