如何修复将 Ubuntul EFI 文件复制到外部驱动器的问题?

如何修复将 Ubuntul EFI 文件复制到外部驱动器的问题?

我这里遇到了一个很大的问题,所以我在 500GB 的外部 SSD 上安装了 Ubuntu。但是 Ubuntu 引导加载程序或 grub 与我的 Microsoft Windows 引导加载程序一起安装在我的内部驱动器上。我想让我的外部驱动器完全便携,并且我希望能够在任何计算机上使用它来启动 Ubuntu,但我做不到。我如何将 grub 或 EFI 文件复制到我的外部驱动器中?

答案1

将 Grub 安装到已安装 Ubuntu 的外部硬盘上

启动 Ubuntu live USB 并连接外部硬盘。

列出所有设备的分区:

 lsblk

从 lsblk 的结果中,识别外部硬盘的 linux 分区和 efi 分区,即分别为 /dev/sdXY1 和 /dev/sdXY2。将 XY1 和 XY2 替换为您自己的分区名称。

特殊挂载linux分区:

  sudo mount /dev/sdXY1 /mnt

挂载关键虚拟文件系统:

 for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done

chroot 进入您挂载的 Linux 分区:

 sudo chroot /mnt

您现在位于外部硬盘驱动器的 Linux 文件系统中。

创建 grub 安装其文件的目录:

 mkdir -p /boot/efi

如果已经存在,则跳至步骤 8。

挂载步骤 3 中的 efi 分区:

 mount /dev/sdXY2 /boot/efi

将 grub 安装到外部硬盘:

 grub-install /dev/sdX

更新 grub:

update-grub

找到 efi 分区(又名“vfat”)的 UUID 并记下来:

blkid

或者

ls -l /dev/disk/by-uuid

现在我们需要告诉 fstab 在启动时挂载该 efi 分区:

cd /etc/fstab /etc/fstab.bak  
sudo nano /etc/fstab  

将以下两行添加到 fstab,用步骤 11 中的 UUID 替换 xxxx-xxxx:

#my modified fstab to mount external hard drive's esp  
UUID=xxxx-xxxx   /boot/efi   vfat   umask=0077   0   1  

确保注释掉 Windows esp 的 fstab 条目,以免发生冲突。

退出 chroot:

exit

重新启动电脑:

sudo reboot

此时,当您重新启动并从 EFI 启动管理器中选择外部设备时,它将启动到 grub。

为了使 Ubuntu 在插入外部设备时自动启动,并且使 Windows 在未插入外部设备时自动启动,您必须为 Ubuntu 创建自定义启动项,以指向外部驱动器上的 efi:

为 Ubuntu 创建自定义启动项以指向外部硬盘上的 efi

从 Windows简易UEFI可以添加或删除启动项。

从 Linux启动管理器可以添加或删除启动项。

替代方案 #1 – 使用简易UEFI

在 Windows 中下载简易UEFI,安装并运行。

  • 选择EFI 选项管理器

  • 选择创建“新条目”带有 + 符号

  • 选择Linux 或其他操作系统并在描述框中为其命名

  • 选择包含 grub 引导加载程序的外部驱动器上的 FAT32 EFI 分区

  • 选择浏览

  • 导航至/efi/ubuntu/shimx64.efi/efi/ubuntu/grubx64

  • 节省

  • 将其移至启动项列表的顶部

  • 重新开始

替代方案 #2 – 使用启动管理器

  • 列出启动菜单项:

efibootmgr

  • 创建启动项:

efibootmgr -c [-L 标签] [-d /dev/sdX]

例如:efibootmgr -c -L myubuntu -d /dev/sdX

该启动项将自动成为第一个项。

/dev/sdX是带有 grub 引导加载程序的外部硬盘驱动器。

  • 现在您可以重新启动,并且无需您的干预,当插入外部硬盘时,Ubuntu 就会自动启动。当未插入外部硬盘时,PC 将跳过我们的 Ubuntu 启动项,直接进入下一个项,该项可能是 Windows 启动管理器。

相关内容