使用 dd 命令迁移 linux 系统

准备工作:旧硬盘、新硬盘、liveCD。(以下操作都是在虚拟机进行的。)

虚拟机加载系统镜像,进入 liveCD 系统后把新旧硬盘挂载进虚拟机。因为新硬盘(ssd)比旧硬盘(hdd)小,所以先用分区工具将旧硬盘的系统分区缩小。这也是为了后面 dd 快一点。然后新硬盘按照旧硬盘的分区创建相应的分区。图形工具无效就换 fdisk。

分好区后,进入命令行通过 dd 命令拷贝。在拷贝之前,需要设置一下 liveCD 的 root 密码。

~$ sudo passwd root

我的旧硬盘 efi 分区和系统分区标识为 /dev/sda1 和 /dev/sha2,新硬盘为 /dev/sdb1 和 /dev/sdb2。

~$ dd if=/dev/sda1 of=/dev/sdb1 bs=1M
~$ dd if=/dev/sha2 of=/dev/sdb2 bs=1M

dd 默认的复制块大小为 1024 字节,这种情况下我硬盘的拷贝速度只有不到 5M,设置了 bs 为 1M 后达到了 90M 左右。

为了方便看拷贝进度,可以另开一个终端,输入命令:

~$ watch -n 10 pkill -USR1 ^dd$

拷贝好之后就是修复引导了。网上的都是 chroot、grub-install 什么的。而我这个修复引导属于误打误撞。

首先,将新硬盘 efi 分区挂载到 mnt 下面。

sudo mount /dev/sdb1 /mnt

然后编辑 mnt 下面的 grub.cfg 文件。将其中的 uuid 改成新硬盘系统分区的 uuid。这个新硬盘系统分区的 uuid 我是通过 df 看到的。

That’s all.