我这里遇到了一个很大的问题,所以我在 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 启动管理器。