如何在外置硬盘中安装 Grub?

mic*_*kkk 5 boot grub2 usb

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

然而,在安装 Ubuntu 时,由于某种原因,引导加载程序 Grub 没有安装在外部驱动器上,同时,“旧”的 Grub 引导加载程序从未从 PC 内部硬盘驱动器中删除。结果,我陷入了一种奇怪的境地:当我想运行 Windows 时,我只需打开电脑电源就可以了。当我想运行 Linux 时,我必须插入外部驱动器,进入启动菜单,然后将引导加载程序从 Windows 更改为 Grub。外部硬盘驱动器不可启动(例如作为 U 盘),每次都需要重复这一长串操作。

快速回顾:

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

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

附注。出于某种原因,Windows 在通过内部驱动器中可用的 Grub 引导加载程序加载时非常慢。此外,如果未插入外部硬盘驱动器,Grub 引导加载程序仅显示 Grub 救援面板。所以使用已经安装的 Grub 作为唯一的引导加载程序是不可行的。

pte*_*227 5

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

\n

将 Grub 安装到已安装 Ubuntu 的外部硬盘驱动器

\n
    \n
  1. 启动至 Ubuntu live USB 并连接外部硬盘驱动器。

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

    \n
     lsblk\n
    Run Code Online (Sandbox Code Playgroud)\n
  4. \n
  5. 从结果中lsblk,识别 linux 分区以及外部硬盘驱动器的 efi 分区,\ni.e. /dev/sdXY1/dev/sdXY2分别。替换XY1XY2替换为您自己的分区名称。

    \n
  6. \n
  7. 特殊挂载linux分区:

    \n
      sudo mount /dev/sdXY1 /mnt\n
    Run Code Online (Sandbox Code Playgroud)\n
  8. \n
  9. 挂载关键虚拟文件系统:

    \n
     for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done\n
    Run Code Online (Sandbox Code Playgroud)\n
  10. \n
  11. chroot进入您安装的 Linux 分区:

    \n
     sudo chroot /mnt\n
    Run Code Online (Sandbox Code Playgroud)\n

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

    \n
  12. \n
  13. 创建 grub 将安装其文件的目录:

    \n
     mkdir -p /boot/efi\n
    Run Code Online (Sandbox Code Playgroud)\n

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

    \n
  14. \n
  15. 挂载步骤 3 中的 efi 分区:

    \n
     mount /dev/sdXY2 /boot/efi\n
    Run Code Online (Sandbox Code Playgroud)\n
  16. \n
  17. 将 grub 安装到外部硬盘:

    \n
     grub-install /dev/sdX\n
    Run Code Online (Sandbox Code Playgroud)\n
  18. \n
  19. 更新grub:

    \n
    update-grub\n
    Run Code Online (Sandbox Code Playgroud)\n
  20. \n
  21. 找到 efi 分区的 UUID(又名“vfat”)并记下:

    \n
    blkid\n
    Run Code Online (Sandbox Code Playgroud)\n

    或者

    \n
    ls -l /dev/disk/by-uuid\n
    Run Code Online (Sandbox Code Playgroud)\n
  22. \n
  23. 现在我们需要告诉 fstab 在启动时挂载该 efi 分区:

    \n
    cp /etc/fstab /etc/fstab.bak  \nsudo nano /etc/fstab  \n
    Run Code Online (Sandbox Code Playgroud)\n

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

    \n
    #my modified fstab to mount external hard drive's esp  \nUUID=xxxx-xxxx   /boot/efi   vfat   umask=0077   0   1  \n
    Run Code Online (Sandbox Code Playgroud)\n

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

    \n
  24. \n
  25. 退出 chroot:

    \n
    exit\n
    Run Code Online (Sandbox Code Playgroud)\n
  26. \n
  27. 重新启动电脑:

    \n
    sudo reboot\n
    Run Code Online (Sandbox Code Playgroud)\n
  28. \n
\n

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

\n

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

\n

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

\n

EasyUEFI可以从 Windows添加或删除启动项。

\n

从 Linux efibootmgr可以添加或删除引导条目。

\n

替代方案#1使用 EasyUEFI 的

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

    \n
  2. \n
  3. 选择EFI 选项管理器

    \n
  4. \n
  5. 选择创建“新条目”使用 + 号

    \n
  6. \n
  7. 选择Linux或其他操作系统并在描述框中为其指定名称

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

    \n
  10. \n
  11. 选择浏览

    \n
  12. \n
  13. 导航到/efi/ubuntu/shimx64.efi/efi/ubuntu/grubx64

    \n
  14. \n
  15. 节省

    \n
  16. \n
  17. 将其移动到启动项列表的顶部

    \n
  18. \n
  19. 重新开始

    \n
  20. \n
\n

替代 #2 \xe2\x80\x93 使用efibootmgr

\n
    \n
  1. 列出启动菜单条目:

    \n
     efibootmgr\n
    Run Code Online (Sandbox Code Playgroud)\n
  2. \n
  3. 创建启动项:

    \n
     efibootmgr -c [-L label] [-d /dev/sdX]\n
    Run Code Online (Sandbox Code Playgroud)\n

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

    \n

    该引导条目将自动成为第一个条目。

    \n

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

    \n
  4. \n
  5. 您现在可以重新启动,无需您的干预,插入外部硬盘驱动器时,Ubuntu 将自动启动。未插入外部硬盘驱动器时,PC 会跳过\n我们的Ubuntu启动条目到下一个条目,该条目可能是Windows 启动管理器

    \n
  6. \n
\n


mic*_*kkk 1

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

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

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

ls -l /dev/disk/by-uuid
Run Code Online (Sandbox Code Playgroud)

while 编辑 fstab 文件

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

    sudo grub-install /dev/sdX

将 sdX 替换为实际驱动器。

  1. 如果您尚未执行此操作,请启用从 USB 驱动器启动,并确保在 UEFI 设置菜单中先加载外部启动加载程序,然后再加载内部启动加载程序。现在,您的机器应该首先从 USB 启动,然后(如果未找到启动加载程序)从内部硬盘驱动器启动。