迁移Linux到新硬盘

从旧硬盘迁移Linux到新硬盘,包括硬盘对拷、UUID修复、GRUB引导重建和fstab更新

迁移Linux到新硬盘

第一步:硬盘对拷

将新旧硬盘都接入目标作业系统,并插入PE U盘,进入WinPE(FirPE)

打开DiskGenius,启动硬盘对拷,将旧盘的所有数据对拷进新盘,如有需要,可将Linux主分区扩容

第二步:迁移硬盘分区UUID

由于Linux启动的时候认硬盘的UUID。由于我们刚刚进行了硬盘对拷,则会将Linux在曾经创建的分区UUID映射一并拷贝过来,但新硬盘中新的分区自身的UUID不会改变。所以我们需要临时外挂一个Linux系统来chroot进原系统,然后迁移UUID

接下来,重启,进入Ubuntu Server 安装镜像。进入安装向导界面

Alt+F2 进入命令行界面,输入 sudo -i 切换为 root 用户

sudo -i

查看新硬盘的分区信息

lsblk -f

挂载根分区和EFI分区

mount /dev/nvme0n1p2 /mnt
mount /dev/nvme0n1p1 /mnt/boot/efi

第三步:更新UUID

chroot 进入原系统

mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
chroot /mnt

更新 grub 引导和 initramfs

update-grub
update-initramfs -u

第四步:更新 fstab

查看当前分区 UUID

blkid

编辑 /etc/fstab,将旧的 UUID 替换为新的

nano /etc/fstab

第五步:重启验证

exit
umount -R /mnt
reboot

重启后确认系统正常启动,所有分区正确挂载。

思考

为什么要迁移 UUID?

Linux 系统通过 /etc/fstab 文件记录每个分区的 UUID 来挂载。硬盘对拷后,旧盘的 fstab 里仍然是旧盘的 UUID。如果直接启动,内核找不到对应 UUID 的分区,会进入 emergency mode。

为什么不用 dd?

dd 是逐扇区拷贝,包括空扇区。对于不同容量的新旧硬盘,dd 需要额外处理分区表。DiskGenius 的对拷功能更智能,只拷贝有效数据,且能自动调整分区大小。