当我想从外部硬盘驱动器运行Ubuntu时,应该在哪里安装引导程序?

我有一台运行Windows 10的笔记本电脑,我想在外部硬盘上安装Ubuntu,每当我需要它时,我只需将其插入并从外部驱动器启动即可。

我已经按照一个教程,实际上是两个,并且都表示必须在外部硬盘上安装引导加载程序。 这导致我只能在插入外置硬盘时访问Windows。每当我没有插入笔记本电脑时,笔记本电脑就无法启动,我只会得到带有白线的黑屏。 修复我的主启动记录后,我可以访问Windows。

现在我想再试一次,但我担心如果我在内部驱动器上安装bootloader,我可能会以某种方式删除我的Windows分区,否则我的启动会出现问题。

所以我该怎么做?

首先,了解您的启动模式非常重要。 现代计算机可以通过以下两种方式启动:

  • BIOS – 这是旧的启动方式,用于2011年之前推出的大多数计算机。现代计算机通过称为兼容性支持模块(CSM)的function支持BIOS模式启动,即“传统模式启动支持”或一个类似的术语。 因此,此方法可以通过三个名称来引用:BIOS,CSM或legacy。 它涉及在主引导记录(MBR)和其他各种地方喷溅的16位引导加载程序代码。 这是一种不优雅但成熟的引导方法,大多数未明确提及引导模式的站点都描述了BIOS模式引导。 但是,如果您的计算机附带Windows 8或更高版本,则可能不使用此方法启动。
  • EFI / UEFI – 这是自2011年中期以来引入的大多数计算机的本机启动模式,它与BIOS模式启动完全不同 ,因此您应该忽略任何明确说明用于BIOS模式启动的建议,或任何没有提到启动模式(因为它可能是旧的或由不知道差异的人写的)。 一个例外:令人困惑的是,许多人甚至计算机制造商都将其EFI称为“BIOS”。 这种做法造成了很大的混乱。

由于您提到的是Windows 10,因此您的计算机很可能是基于EFI的,并且可以在EFI模式下启动。 我会按照这个假设继续下去。 如果这不正确,请忽略此答案的其余部分。

要在EFI模式下引导内部磁盘,操作系统通常将引导加载程序存储为磁盘上EFI系统分区(ESP)上的文件。 这个文件名可以是合法的,但对于Ubuntu,它将是EFI/ubuntu/shimx64.efi ,后者又启动EFI/ubuntu/grubx64.efi 。 操作系统安装程序使用EFI的内置启动管理器注册启动加载程序的名称,该启动管理器将该名称存储在NVRAM中。 如果EFI正常工作(并非全部工作),则会导致工作启动过程。

应用于可移动磁盘的此过程遇到的问题有三个:

  • Ubuntu安装程序将GRUB安装到“ESP” – 但您可能有多个ESP可用(几乎可以肯定一个在硬盘上,也可能在USB驱动器上有一个)。 控制GRUB安装的位置可能很棘手。 它不是通过使用标有明确标题的选项来完成的,关于安装GRUB的位置。 相反,只能通过标记要用作“EFI启动分区”或“EFI系统分区”(其名称取决于Ubuntu版本)的ESP,从“Something Else”安装选项完成(AFAIK)。
  • 如果您将GRUB安装到USB驱动器上的ESP,那么当您移除USB驱动器时,EFI可能会注意到它有一个无效的已注册引导加载程序条目,并删除该条目。 许多EFI都这样做,这意味着如果您将GRUB安装到外部磁盘然后拔掉它,即使重新插入磁盘,也会失去从该磁盘启动的能力。
  • Ubuntu配置GRUB的方式使它依赖于Ubuntu /boot/grub目录中的配置文件,该目录不太可能在ESP上。 因此,如果Ubuntu将GRUB安装到内部磁盘上的ESP中,您将避免第一个问题,但会遇到另一个问题,因为当您启动USB驱动器断开连接时,GRUB将启动并无法找到其配置文件。 结果是grub>提示会使大多数用户神秘化。

这些问题有很多解决方案,包括:

  • 手动将GRUB安装到外部磁盘上的回退文件名 – 操作系统安装程序使用EFI/BOOT/bootx64.efi回退文件名启动。 如果将Shim(启动GRUB)复制到此文件名(通过在ESP shimx64.efi EFI/ubuntu复制到EFI/BOOT ,然后在EFI/BOOT bootx64.efi重命名为bootx64.efi ),您的固件将能够启动USB与Ubuntu安装程序一样,基于GRUB。 这将解决我刚刚发现的两个问题,但您需要使用计算机的内置启动管理器来选择要启动的操作系统。 此内置启动管理器的范围从不可用到可容忍,因此这可能是也可能不是可接受的解决方案。 在安装Ubuntu之后,您可能还需要调整引导顺序,以防止它默认从内部磁盘的ESP或外部磁盘的ESP启动GRUB。
  • 在内部磁盘上放置/boot分区 – 如果将GRUB安装到内部磁盘,则还可以在内部磁盘上放置/boot分区。 这将使GRUB能够在所有靴子上正常工作; 但是,即使拔下USB磁盘,Ubuntu选项也会一直显示。 这可能是不合需要的,特别是如果Ubuntu是默认的。 此外,此解决方案意味着您的外部USB驱动器只能在您准备它的计算机上启动。 如果您希望能够在其他计算机上使用该磁盘,则应避免使用此解决方案。
  • 使用更智能的启动管理器 – 启动管理器为您提供了可选择的启动操作系统,而启动加载程序则将内核加载到内存中。 GRUB完成这两项工作,而EFI的内置启动管理器只执行第一项工作。 还有其他可用的启动管理器,其中一些可以帮助您避免我发现的问题。 我自己的rEFInd,例如,如果安装到内部磁盘的ESP并作为默认启动程序,当且仅当存在GRUB或Linux内核时才会检测并呈现Ubuntu选项 – 也就是说,当插入USB驱动器时通过适当地设置refind.confdefault_selection选项,您可以配置rEFInd以在插入Ubuntu USB驱动器时自动启动Ubuntu,并在未插入Ubuntu USB驱动器的情况下直接启动到Windows。我对这个问题的回答提供有关此类配置的更多详细信息,虽然在Mac而不是PC上。

运气好的话,其中一种方法可以帮助您正常运转。

  1. 启动Ubuntu Live USB / CD
  2. 插入外置硬盘
  3. 在外部硬盘驱动器上安装Ubuntu(高级,因此您可以设置引导加载程序的安装位置)
  4. 配置BIOS以从外部硬盘启动

您需要在UEFI / BIOS用于引导的任何驱动器上安装引导加载程序。 您可以在BIOS设置中更改此驱动器,通常可以在计算机启动后立即按F10F12Del键进行访问。 因此,作为第一步,您可以尝试将机器设置为从外部驱动器而不是内部驱动器启动。 如果在外部驱动器上正确安装了引导加载程序,则应该可以使用。

对于日常使用,为了方便起见,您可能希望始终从同一驱动器启动,因此您需要将引导加载程序安装到内部驱动器。 但是,在执行此操作之前,您应该进行备份,最好是工作内部驱动器的完整磁盘映像。 如果在安装Ubuntu和Windows之后遇到问题, Boot-Repair工具可能会有所帮助。

我会在外部设备上安装启动加载程序! 这样,您的Windows安装就不会破坏或删除引导加载程序。 将BIOS设置为启动是一项简单的任务:

 USB-Key USB-Disk HDD etc etc 

注意:请确认您已禁用SECUREBOOT(如果您找到该选项)

这样,如果由于某种原因断开外部设备,则不会对您的计算机造成问题。

而且:如果你远离专有驱动程序,你将能够在其他计算机上运行该系统……

(顺便说一句,我不会推荐这种类型的安装用于永久使用,因为它会比eSATA慢)