如何在外部硬盘上安装 Grub?

如何在外部硬盘上安装 Grub?

因此,我使用 Ubuntu 和 Windows 8 双启动一两个月了,它看起来运行良好,但是由于某种原因它坏了,我不得不恢复整个 PC。由于这次糟糕的经历,我决定在与我的主要 Windows 机器分开的外部硬盘上重新安装 Ubuntu。这个选项似乎对两个操作系统都很好。

但是,在安装 Ubuntu 时,由于某种原因,引导加载程序 Grub 未安装在外部驱动器上,同时,“旧”的 Grub 引导加载程序从未从 PC 内置硬盘驱动器中删除。因此,我处于一种奇怪的情况:当我想运行 Windows 时,我只需打开 PC 即可。当我想运行 Linux 时,我必须插入外部驱动器,进入启动菜单,并将引导加载程序从 Windows 更改为 Grub。外部硬盘驱动器不可启动(例如作为 USB 棒),每次都需要重复这一长串操作。

快速回顾:

  1. PC 内置硬盘包含来自旧 Linux 安装的 Windows 操作系统、Windows 引导加载程序和 Grub。
  2. 外部硬盘包含 Ubuntu 15.10,可能还有 Grub,但不能像 USB 那样启动。
  3. 每次我想要切换操作系统时,我都需要在启动菜单中手动更改引导加载程序,这很繁琐。
  4. 启动设备的顺序如下:1. USB 2. 外部驱动器 3. 内部驱动器

我的问题:如何使外部驱动器可启动,以便当我想从 Windows 切换到 Linux 时,只需关闭电脑,插入 USB,打开电脑即可?(不会丢失我已经存储在其中的数据和所有首选项)

PS. 由于某种原因,当通过内置驱动器中的 Grub 引导加载程序加载时,Windows 的速度非常慢。此外,如果未插入外部硬盘驱动器,Grub 引导加载程序只会显示 Grub 救援面板。因此,使用已安装的 Grub 作为唯一的引导加载程序不是一个选择。

答案1

这就是我将 grub 安装到安装了 Ubuntu 17.04 的外部硬盘 (GPT) 上的方法。执行此操作后,您可以使用外部 grub 在任何支持 UEFI 的 PC 上启动 Ubuntu,而无需依赖 PC grub。如果 Windows 的 EFI 出现问题,它还可以用作备份 grub。

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

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

  2. 列出所有设备的分区:

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

  4. 特殊挂载linux分区:

      sudo mount /dev/sdXY1 /mnt
    
  5. 挂载关键虚拟文件系统:

     for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
    
  6. chroot进入您挂载的 Linux 分区:

     sudo chroot /mnt
    

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

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

     mkdir -p /boot/efi
    

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

  8. 挂载步骤 3 中的 efi 分区:

     mount /dev/sdXY2 /boot/efi
    
  9. 将 grub 安装到外部硬盘:

     grub-install /dev/sdX
    
  10. 更新 grub:

    update-grub
    
  11. 找到 efi 分区(又名“vfat”)的 UUID 并记下来:

    blkid
    

    或者

    ls -l /dev/disk/by-uuid
    
  12. 现在我们需要告诉 fstab 在启动时挂载该 efi 分区:

    cp /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 条目,以免发生冲突。

  13. 退出 chroot:

    exit
    
  14. 重新启动电脑:

    sudo reboot
    

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

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

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

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

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

替代方案 #1– 使用 EasyUEFI

  1. 在 Windows 中下载 EasyUEFI,安装并运行。

  2. 选择EFI 选项管理器

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

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

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

  6. 选择浏览

  7. 导航/efi/ubuntu/shimx64.efi或者/efi/ubuntu/grubx64

  8. 节省

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

  10. 重新开始

替代方案 #2- 使用efibootmgr

  1. 列出启动菜单项:

     efibootmgr
    
  2. 创建启动项:

     efibootmgr -c [-L label] [-d /dev/sdX]
    

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

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

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

  3. 现在你可以重新启动,无需你的干预,Ubuntu 将在插入外部硬盘时自动启动。当未插入外部硬盘时,PC 将跳过我们的Ubuntu启动项到下一个项,可能是Windows 启动管理器

答案2

我最终找到了解决问题的方法。我会在这里发布它,以防有人需要它。此外,我并不完全确定什么方法有效,以及我采取的所有步骤是否真的有必要,但这种方法有效。

  1. 使用 gparted 或类似工具确保外部驱动器上有 EFI 分区。该分区应为 FAT32,具有 boot 和 esp 标志,并安装在 /boot/efi。大小应至少为 200 Mb,尽管我将其设置为 1Gb,因为我的硬盘上有可用空间。如果您没有此分区,请创建它。
  2. 检查外部硬盘上的 EFI BOOT 分区的 UUID 是否与 fstab 文件中的 UUID 匹配。

要检查分区的 UUID,只需在终端中输入

ls -l /dev/disk/by-uuid

编辑 fstab 文件

sudo nano /etc/fstab
  1. 现在安装 Grub。(您也可以尝试将 grub 从内部驱动器复制到外部驱动器分区,但对我来说不起作用)。

    sudo grub-install /dev/sdX

用实际驱动器替换 sdX。

  1. 如果您还没有这样做,请启用从 USB 驱动器启动,并确保从 UEFI 设置菜单中加载外部引导加载程序,然后再加载内部引导加载程序。现在您的机器应该首先从 USB 启动,然后(如果未找到引导加载程序)从内部硬盘驱动器启动。

相关内容