如何让克隆到SSD的Ubuntu系统在无独立EFI引导分区的情况下独立启动
看起来你现在的情况是:用dd把HDD上的Ubuntu系统分区克隆到了SSD,但没克隆EFI引导分区(ESP),所以现在必须依赖HDD的ESP才能启动SSD上的系统——因为UEFI固件需要从ESP加载引导程序,而你的SSD目前没有这个分区。之前直接复制文件到/boot/efi没用,是因为那个目录只是系统里的普通文件夹,并没有挂载真正的ESP分区,UEFI根本读不到里面的内容。
不用重新克隆HDD的ESP,我们可以自己在SSD上创建一个ESP分区,然后把GRUB引导程序安装进去,让SSD能独立启动。下面是一步步的操作指南:
准备工作
- 用Ubuntu Live USB启动你的电脑,确保SSD(从你的Boot Info看是
sda)已经连接,HDD可以暂时保留连接,但操作时一定要注意别搞混设备! - 打开GParted(如果Live系统里没有,先安装:
sudo apt install gparted),确认SSD的设备名以及当前的系统分区信息。
步骤1:在SSD上创建ESP分区
- 在GParted里选中SSD的系统分区(比如
sda1),右键选择Resize/Move,把分区的结尾往前拖,腾出至少512MB的空间(建议512MB-1GB,足够用)。操作前最好备份重要数据,以防意外。 - 点击Apply按钮执行分区缩小操作,等待完成。
- 在腾出的未分配空间上右键选择New:
- 文件系统选择
fat32 - 点击Manage Flags,勾选
esp和boot两个标志(这是UEFI识别ESP分区的关键)
- 文件系统选择
- 再次点击Apply完成分区创建。
步骤2:挂载SSD的系统分区和新ESP分区
打开终端,执行以下命令(注意替换设备路径为你实际的分区路径):
# 挂载SSD的系统分区到/mnt sudo mount /dev/sda1 /mnt # 挂载刚创建的ESP分区到/mnt/boot/efi sudo mount /dev/sda2 /mnt/boot/efi # 绑定系统必要目录,确保chroot环境正常工作 sudo mount --bind /dev /mnt/dev sudo mount --bind /proc /mnt/proc sudo mount --bind /sys /mnt/sys
步骤3:进入SSD系统环境配置引导
- 进入SSD的系统环境:
sudo chroot /mnt
- 查看新ESP分区的UUID(后续要用到):
blkid /dev/sda2
输出里会有类似UUID="XXXX-XXXX"的内容,记下来。
3. 编辑/etc/fstab,更新/boot/efi的挂载配置:
nano /etc/fstab
找到原来的/boot/efi行,把UUID替换成刚才记录的新ESP分区UUID,保存退出(按Ctrl+O回车,再按Ctrl+X)。
4. 安装GRUB引导程序到SSD的ESP:
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu
这个命令会把GRUB的EFI文件放到新ESP分区,同时给UEFI固件添加启动项。
5. 更新GRUB配置文件:
update-grub
这个命令会扫描系统内核,生成适配SSD系统的GRUB菜单。
步骤4:完成并测试
- 退出chroot环境:
exit
- 卸载挂载的目录:
sudo umount /mnt/boot/efi sudo umount /mnt/dev sudo umount /mnt/proc sudo umount /mnt/sys sudo umount /mnt
- 重启电脑,拔掉HDD,在UEFI固件的启动菜单里选择新的
ubuntu启动项,测试是否能正常启动。
补充说明
你之前复制文件到/boot/efi没用,核心原因是UEFI固件只能从标记为esp的FAT32分区读取引导程序,而当时的/boot/efi只是普通的ext4目录,UEFI根本无法访问。必须要有独立的ESP分区,并且让GRUB把引导文件安装到里面,才能让UEFI识别并启动SSD上的系统。
如果操作中遇到GParted无法缩小分区的情况,可能是分区存在错误,可以先运行e2fsck -f /dev/sda1检查并修复文件系统错误,再尝试缩小分区。
备注:内容来源于stack exchange,提问作者Marco Luzzara

