如何使用UEFI在单个硬盘上安装两个独立的Ubuntu安装?


8

出于安全原因,我想使用UEFI在单硬盘计算机上安装完全独立的辅助操作系统。两种安装都应该能够使用不同的LUKS加密分区作为根设备(在加密之上的LVM),并且需要能够使用自己的内核。

使用两个不同的操作系统进行双重引导并不重要。一个Ubuntu和Fedora不会干扰并且可以共享EFI系统分区,但是两个Ubuntu安装会相互竞争,因为他们希望两者都将Grub实例安装在同一EFI位置。

  • 有没有一种方法可以更改Ubuntu,以在安装过程中将Grub安装在其他位置/boot/efi/EFI/ubuntu?我需要一种持久的方法,以便软件包更新和内核/ grub更新仍然安装在该路径中。就像Fedora的Grub如何安装在中一样/boot/efi/EFI/fedora。我在Grub中找不到该配置选项。如果可以,我的Dell UEFI启动菜单将允许我选择要加载的操作系统。也许我在这里缺少efibootmgr和grub-efi之间的粘合。

  • 或者,是否可以使用两个Ubuntu安装之一中的一个Grub安装,并使其自动检测正确的引导设置?我的意思是,我知道os-prober将找到另一个/boot带有内核的分区,但是如何知道该操作系统的正确启动参数(例如,锁定的加密卷中的LVM卷作为根文件系统)?我可以理解,它可以在未加密的单分区安装中使用,但不能将/boot其与相应的根文件系统匹配,对吗?如果进行加密,那是完全不可能的。因此,这将需要大量手动调整grub配置文件。我还不喜欢单个共享引导加载程序配置的此选项,这使得两个操作系统在某种程度上不那么孤立。

顺便说一句,我对基于服务器文本的专家安装很好。还有一些自定义配置,只要我不必为每个内核/ Grub更新重复这些步骤即可。

Answers:


6

我有两个建议...

选项1:单独的ESP

在EFI下,引导加载程序位于“ the” EFI System Partition(ESP)上。我将“ the”一词用引号引起来,因为没有规则说您仅限于一个ESP。如果在硬盘上创建两个ESP,则可以在第一次安装中使用其中一个,而在第二次安装中使用第二个ESP。尽管您必须手动创建分区(在安装过程中使用“ Something Else”选项),但这至少可以无缝进行,至少在第二次Ubuntu安装中。

这种方法的一个问题是,尽管EFI规范明确指出您可以创建任意数量的ESP,但某些软件可能会对此感到困惑。一个重要的例子是Windows安装程序,至少是通过Windows 7(我不知道Windows 8或更高版本)。当Windows 7安装程序看到带有两个ESP的磁盘时,它会掉落并发生奇怪的事情。IIRC,它无法正确完成其自身的安装。可以想象Windows修复工具会遇到同样的问题。如果您不在该系统上启动Windows,那么这没什么大不了的。如果你使用Windows引导时,您应该只需要意识到问题所在,因为如果遇到问题,可以通过临时更改非Windows ESP的类型代码来轻松解决该问题。请注意,Windows可以在具有多个ESP的磁盘上正常启动。只是安装程序在此类磁盘上阻塞。

另一个问题是如何在两个发行版之间切换。您可能需要使用GRUB Customizer之类的工具来自定义安装的一个或两个GRUB设置另一个(但不兼容)的选择是使用固件自己的启动管理器在两个GRUB安装之间进行切换,并使用每个启动器仅启动其自己的Ubuntu版本。

选项2:放弃GRUB(或至少使用Ubuntu的GRUB工具)

针对您的情况,GRUB的问题在于您已经进行了两次安装,并且GRUB维护工具可能会因该配置而变得混乱。这一观察结果导致了一个显而易见的解决方案,即您不应该使用这些工具。还有其他几种适用于Linux的EFI引导加载程序,其中大多数比GRUB易于维护。您可以设置ELILO,SYSLINUX,Fedora的修补GRUB Legacy,gummiboot或rEFInd,然后手动管理这两个安装。实际上,由于rEFInd每次启动时都会检测到内核,因此rEFInd一旦设置就应该几乎无需维护。或者,但也可以类似地,您可以手动编辑grub.cfg文件以执行所需的操作,而不是依赖GRUB设置脚本。

除了rEFInd之外,所有这些工具都将要求您在更新内核时进行配置更改,这会很麻烦。还有一个问题,何时以及如何安装额外的启动程序。我可能会推迟到第二次安装Ubuntu之后,因为每个安装都会将其GRUB副本注册为默认的引导加载程序,并且您想覆盖该默认值。

还要注意,这些工具都无法从加密的文件系统或LVM中读取内核,因此您需要/boot为每个Ubuntu安装都拥有一个单独的未加密分区。无论如何,这是我所见过的大多数指令都说明如何设置加密的Ubuntu安装的方式,因此,除非您想在磁盘加密的“出血边缘”发挥作用,否则这可能并不重要。

某些EFI引导加载程序还有其他特定的分区或文件系统要求。最值得注意的是,ELILO,SYSLINUX和gummiboot都要求内核驻留在FAT分区上,而ESP对此最有效。您可以通过在挂载ESP来执行此操作/boot,但这在Ubuntu中是一个很不稳定的解决方案,因为某些软件包更新需要符号链接。使用两个单独的Ubuntu安装时,您也会遇到麻烦,因为它们都会尝试声明相同的文件。(在这种情况下,“ ESP”实际上表示“引导加载程序所运行的分区”,因此在这种情况下,您只能拥有一个ESP。)GRUB Legacy和rEFInd对此更加灵活。

我的建议

就个人而言,我会为此使用rEFInd,但是当我维护rEFInd时,我并不是没有偏见。实际上,我有一台计算机可以在三个Ubuntu安装之间进行多次引导,并且可以在它们之间进行rEFInd切换。这个特定的系统不使用加密,但是从rEFInd的角度来看,这是否会引起任何新的问题,我对此表示怀疑。

也就是说,单独的ESP也应该可以正常工作,但需要注意的是,您可能需要使用GRUB Customizer来调整那些GRUB副本中至少一个的设置。


很好的建议,谢谢!我确定您对规范可以具有多个ESP是正确的,但是我怀疑我的Dell Latitude UEFI实施是否也支持它。它仅允许我按单个驱动器浏览路径。我实际上必须尝试一下。
gertvdijk 2015年

如果您的戴尔EFI实施被破坏到无法处理多个ESP,则应将其退还给商店以进行退款。认真地 这种不好的情况表明它太糟糕了,以至于我不相信固件能够执行其最基本的任务。在实践中,我认为这不会那么糟。我从未听说过无法处理多个ESP的EFI。
罗德·史密斯

1

这是我以前使用Rod Smith推荐的选项#2在带有UEFI的单个硬盘上使用两个LUKS加密Ubuntu系统进行双引导的步骤。这特别适用于Ubuntu 18.04.1-desktop。由于担心eCryptfs的可靠性和维护问题,因此在安装过程中不再提供主目录加密选项。建议改用LUKS,因此我认为让多个用户使用加密的主分区是最佳选择。

    1. 引导到实时USB,方法是下载ISO并使用启动磁盘创建器格式化和设置USB驱动器。
    1. 使用GParted对磁盘进行分区。这是基于https://help.ubuntu.com/community/ManualFullSystemEncryption上的建议,并在为整个磁盘选择磁盘加密时使用了Ubuntu安装程序设置的一些默认值。
      • EFI系统分区/ 512MiB / FAT32 /引导,特别是(标志)
      • 引导系统#1 / 732MiB / EXT4
      • 引导系统2 / 732MiB / EXT4
      • 数据加密#1 / [所需大小] /已清除
      • 数据加密#2 / [所需大小] /已清除
    1. 重新引导回Live USB
      • 安装Ubuntu
      • 选择安装首选项
      • 选择“其他”作为分区磁盘布局,并在该分区配置中进行安装:
        • 在底部菜单中,选择“ EFI系统分区”作为引导程序。
        • 选择“数据加密#1”并选择“用于加密的物理设备”,然后输入要用于分区的加密短语。
        • 使用EXT4选择新创建的分区,并将安装点更改为“ /”。
        • 选择“引导系统#1”,并将其安装点为“ / boot”。
      • 继续安装
    1. 重新启动到新安装
      • 通过“ apt-get install refind”安装“ refind”,并将其自动安装到ESP(“ EFI系统分区”)中。
    1. 重新启动回到实时USB
      • 对安装第二个Ubuntu安装的#2引导系统和数据加密的#2分区重复步骤3和4。
    1. 根据需要配置和升级每个安装。

1

我对单个ESP使用以下方法:

我为每个操作系统创建了其他引导加载程序

sudo grub-install --bootloader-id=ID

ID每个操作系统使用不同的名称。

例:

我安装了Ubuntu 16.04和Ubuntu 18.04。我启动到Ubuntu 16.04并运行

sudo grub-install --bootloader-id=Ubuntu1604

然后从启动进入Ubuntu 18.04

sudo grub-install --bootloader-id=Ubuntu1804

在UEFI的设置,我看到了新的启动项与名称Ubuntu1604Ubuntu1804和重新排列启动顺序新条目首位的集合中的一个。

我还可以在ESP中看到带有此名称的文件夹。

当系统升级附带新版本的grub时,它将重新安装grub的新实例到ubuntuESP上的-folder上,这不会影响我自己创建的引导加载程序,但是我必须重新排列引导顺序因为ubuntu-entry将被引导到引导顺序的第一位。

这是efibootmgr -v我的配置中显示的内容:

〜$ efibootmgr -v
开机电流:0001
超时:0秒
引导顺序:0001,0002,0004,0000,0003,0005
Boot0000 * ubuntu HD(1,GPT,249ac0f6-d3e4-4b91-91d5-6e8d63c093c3,0x800,0x9a000)/ File(\ EFI \ ubuntu \ shimx64.efi)
Boot0001 * US1804 HD(1,GPT,249ac0f6-d3e4-4b91-91d5-6e8d63c093c3,0x800,0x9a000)/ File(\ EFI \ US1804 \ grubx64.efi)
Boot0002 * US1604 HD(1,GPT,249ac0f6-d3e4-4b91-91d5-6e8d63c093c3,0x800,0x9a000)/ File(\ EFI \ US1604 \ grubx64.efi)
Boot0003 * UEFI OS HD(1,GPT,249ac0f6-d3e4-4b91-91d5-6e8d63c093c3,0x800,0x9a000)/ File(\ EFI \ BOOT \ BOOTX64.EFI)
Boot0004 * US1904 HD(1,GPT,249ac0f6-d3e4-4b91-91d5-6e8d63c093c3,0x800,0x9a000)/ File(\ EFI \ US1904 \ shimx64.efi)
Boot0005 * ubuntu HD(1,GPT,249ac0f6-d3e4-4b91-91d5-6e8d63c093c3,0x800,0x9a000)/ File(EFI \ Ubuntu \ grubx64.efi)

仍然没有为我工作。我将/ etc / default / grub中的default更改为类似于发行版,GRUB_DISTRIBUTOR="Bionic_18_04"然后重新安装grub将其用作UEFI默认ID。但是每次它只使用/EFI/ubuntu/grub.cfg作为默认位置,而不是从我新的/EFI/bionic_18_04/grub.cfg引导时。
oldfred

@oldfred对我来说,运行三次启动可以在几年内正常工作。
mook765

尝试过命令,而不是在/ etc / default / grub中重命名。没有区别。UEFI设置为默认启动新项。但是它使用我的/ efi / ubuntu和Disco作为默认启动程序启动,而不是在新的/ EFI / ubuntu1804文件夹中启动。我认为造成差异的原因不是UEFI。
oldfred

@oldfred请查看efibootmgr -v我添加到答案中的输出。有用。您可能需要进行其他更改,以防止这样做。我所描述的是我要做的唯一一件事。
mook765

我确实检查了efibootmgr -v并将其设置为新条目,但是在/ EFI / ubuntu中启动了grub。我的正在启动/EFI/ubuntu1804/shimx64.efi。您使用的是grubx64.efi还是shimx64.efi,也许有所不同?我确实关闭了安全启动,但是默认情况下将shim作为第一个ubuntu1804条目。有时,我在/ EFI中遇到了太多UEFI条目或文件夹,以致于启动时遇到问题,不得不在另一个驱动器上使用rEFInd进行启动。因此,我现在不希望在/ EFI文件夹或UEFI中的条目过多。
oldfred
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.