Ubuntu系统迁移翻车实录:用dd命令克隆分区后,boot-repair救了我的引导

张开发
2026/4/10 21:35:45 15 分钟阅读

分享文章

Ubuntu系统迁移翻车实录:用dd命令克隆分区后,boot-repair救了我的引导
Ubuntu系统迁移实战从克隆分区到引导修复的全流程指南最近给笔记本加装了一块新固态硬盘打算把原来的Ubuntu系统迁移过去。本以为用dd命令克隆分区就能轻松搞定没想到在引导修复环节踩了不少坑。如果你也准备进行类似的系统迁移不妨看看我的经验分享或许能帮你少走些弯路。1. 系统迁移前的准备工作在开始迁移之前有几个关键步骤需要提前完成。首先是制作一个Ubuntu Live USB启动盘建议使用与当前系统相同版本的ISO镜像。我选择了Ubuntu 22.04 LTS版本因为它的长期支持特性确保了更好的稳定性。制作启动盘可以使用RufusWindows下或者Ubuntu自带的启动盘创建器工具。记得选择GPT分区方案和UEFI非CSM模式这对后续的EFI引导修复至关重要。准备好启动盘后还需要确认新硬盘的分区表类型。使用以下命令查看sudo fdisk -l /dev/nvme0n1输出中的Disklabel type会显示是GPT还是MBR。现代系统建议使用GPT分区表特别是当你的主板支持UEFI启动时。另一个重要准备是安装必要的工具。在Live USB环境中我们需要sudo apt update sudo apt install -y gparted boot-repairGParted是图形化的分区工具而boot-repair则是专门用于修复GRUB引导的工具。记得在安装boot-repair前添加其PPA源sudo add-apt-repository ppa:yannubuntu/boot-repair2. 分区克隆与UUID处理克隆分区是整个迁移过程中最直接的步骤但也是最容易出问题的环节。我选择使用dd命令进行克隆因为它能实现比特级别的精确复制。首先确认源分区和目标分区的对应关系源分区目标分区分区类型建议大小/dev/nvme1n1p6/dev/nvme0n1p1EFI系统分区500MB/dev/nvme1n1p7/dev/nvme0n1p2根分区根据需求克隆EFI分区sudo dd if/dev/nvme1n1p6 of/dev/nvme0n1p1 bs4M statusprogress克隆根分区这个过程可能较长时间sudo dd if/dev/nvme1n1p7 of/dev/nvme0n1p2 bs4M statusprogress克隆完成后最大的问题来了两个分区的UUID完全一样。这会导致系统无法正确识别新分区。我们需要为新分区生成新的UUID# 为EFI分区生成新UUID sudo tune2fs -U random /dev/nvme0n1p1 # 为根分区生成新UUID sudo tune2fs -U random /dev/nvme0n1p2生成后使用blkid命令查看新UUIDsudo blkid /dev/nvme0n1p1 /dev/nvme0n1p2记下这些UUID我们稍后需要它们来修改fstab文件。3. 引导修复的关键步骤克隆分区只是完成了数据迁移要让系统能够正常启动还需要修复引导。这是整个过程中最容易出问题的环节。首先使用GParted为新EFI分区设置正确的标志右键点击新EFI分区通常是/dev/nvme0n1p1选择管理标志勾选boot和espEFI系统分区如果不设置这些标志系统可能无法识别这是一个可启动的EFI分区。接下来我们需要修改fstab文件。挂载新根分区sudo mount /dev/nvme0n1p2 /mnt然后编辑fstab文件sudo nano /mnt/etc/fstab将文件中所有的旧UUID替换为新生成的UUID。特别注意以下几行# 原内容可能类似 UUIDold-efi-uuid /boot/efi vfat umask0077 0 1 UUIDold-root-uuid / ext4 errorsremount-ro 0 1 # 修改为 UUIDnew-efi-uuid /boot/efi vfat umask0077 0 1 UUIDnew-root-uuid / ext4 errorsremount-ro 0 1保存退出后现在可以运行boot-repair工具了sudo boot-repair在boot-repair的图形界面中选择高级选项然后在GRUB位置选项卡中勾选单独的/boot/efi分区确保选择了正确的根分区和EFI分区在GRUB选项中可以选择重新安装GRUB点击应用开始修复注意运行boot-repair时需要保持网络连接因为它可能需要下载一些必要的组件。修复完成后boot-repair会显示一个包含详细信息的URL。建议保存这个URL以便后续参考。4. 常见问题排查与解决即使按照上述步骤操作仍然可能会遇到各种问题。以下是我在迁移过程中遇到的一些典型问题及其解决方法。问题1启动时直接进入GRUB rescue模式这通常意味着GRUB找不到正确的根分区。解决方法# 在GRUB rescue模式下 ls # 列出所有分区 set prefix(hdX,gptY)/boot/grub set root(hdX,gptY) insmod normal normal进入系统后重新安装GRUBsudo grub-install /dev/nvme0n1 sudo update-grub问题2BIOS启动项中没有新系统这可能是因为EFI分区中的引导文件没有被正确识别。可以尝试sudo efibootmgr -c -d /dev/nvme0n1 -p 1 -L Ubuntu (New SSD) -l \\EFI\\ubuntu\\grubx64.efi问题3系统启动后挂载的是旧分区检查当前挂载的分区lsblk -o NAME,MOUNTPOINT,UUID如果发现挂载的是旧分区可能需要手动修改/etc/fstab文件或者使用以下命令重新挂载sudo mount /dev/nvme0n1p2 / -o remount问题4性能下降或奇怪的系统行为这可能是因为缓存或临时文件的问题。尝试sudo apt update sudo apt full-upgrade sudo apt autoremove sudo apt clean5. 迁移后的优化与清理成功迁移系统后还有一些收尾工作要做。首先建议更新initramfssudo update-initramfs -u -k all然后检查所有服务的状态sudo systemctl --typeservice --staterunning对于不再需要的旧分区可以在确认新系统稳定运行后安全删除。在Windows中可以使用磁盘管理工具在Linux中可以使用GParted。最后别忘了清理旧系统的GRUB条目。在Ubuntu中可以使用sudo efibootmgr # 找到旧系统的启动项注意BootXXXX编号 sudo efibootmgr -b XXXX -B如果一切顺利你现在应该可以在新固态硬盘上流畅运行Ubuntu系统了。整个迁移过程虽然有些复杂但通过这次经历我对Linux的引导机制和分区管理有了更深入的理解。

更多文章