出于安全原因,我想使用 UEFI 在单硬盘计算机上安装第二个完全独立的操作系统。两个安装都应该能够使用不同的 LUKS 加密分区作为根设备(加密之上的 LVM),并且需要能够使用自己的内核。
拥有两个不同操作系统的双启动并不是什么大问题。Ubuntu 和 Fedora 不会相互干扰,并且可以共享 EFI 系统分区,但两个 Ubuntu 安装会相互冲突,因为它们都希望在同一个 EFI 位置安装 Grub 实例。
有没有办法将 Ubuntu 更改为在
/boot/efi/EFI/ubuntu
安装期间以外的位置安装 Grub?我需要一种持久的方法,以便软件包更新和内核/grub 更新仍安装在该路径中。就像 Fedora 的 Grub 安装在 中一样/boot/efi/EFI/fedora
。我在 Grub 中找不到该配置选项。如果可以的话,我的戴尔 UEFI 启动菜单将允许我选择要加载哪个操作系统。也许我在这里遗漏了 efibootmgr 和 grub-efi 之间的一些粘合剂。或者,是否可以使用两个 Ubuntu 安装之一中的单个 Grub 安装并让其自动检测正确的启动设置?我的意思是,我知道
os-prober
会找到带有内核的另一个/boot
分区,但它如何知道该操作系统的正确启动参数(例如,锁定加密卷内的 LVM 卷作为根文件系统)?我可以理解它可以与未加密的单分区安装一起使用,但它无法/boot
与其相应的根文件系统匹配,对吗?如果加密,这是完全不可能的。因此,这将需要对 grub 配置文件进行大量手动调整。我也不喜欢这种单一共享引导加载程序配置的选项,这在某种程度上使两个操作系统的隔离性降低。
顺便说一句,我对基于服务器文本的专家安装很满意。此外,我还可以进行一些自定义配置,只要我不必为每个内核/Grub 更新重复这些步骤即可。
答案1
我有两个建议...
选项 1:单独的 ESP
在 EFI 下,引导加载程序位于“EFI 系统分区 (ESP)。我把“the”放在引号中,因为没有规定说你只能使用一个 ESP。如果你在硬盘上创建了两个 ESP,你可以使用其中一个进行第一次安装,第二个 ESP 进行第二次安装。这应该可以无缝运行,尽管你必须手动创建分区(在安装过程中使用“Something Else”选项),至少对于你的第二个 Ubuntu 安装来说是这样。
这种方法的一个问题是,尽管 EFI 规范明确指出您可以创建任意数量的 ESP,但某些软件可能会因此感到困惑。一个突出的例子是 Windows 安装程序,至少在 Windows 7 中是这样(我不知道 Windows 8 或更高版本);当 Windows 7 安装程序看到带有两个 ESP 的磁盘时,它会崩溃并做出奇怪的事情。如果我没记错的话,它无法正确完成自己的安装。可以想象,Windows 修复工具也会遇到同样的问题。如果您没有在此系统上启动 Windows,这应该不是什么大问题。如果您是使用 Windows 启动时,您应该只是意识到这个问题,因为如果遇到问题,您可以通过临时更改非 Windows ESP 的类型代码轻松克服它。请注意,Windows 可以在具有多个 ESP 的磁盘上正常启动;只是安装程序会在这样的磁盘上卡住。
另一个问题是如何在两个发行版之间切换。你可能需要使用类似以下工具自定义一个或两个安装的 GRUB 设置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 副本的设置。
答案2
我对单个 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 设置中,我看到了带有名称的新启动条目Ubuntu1604
,Ubuntu1804
并重新排列启动顺序以将其中一个新条目设置为第一位。
我还可以在 ESP 中看到具有此名称的文件夹。
当系统升级附带新版本的 grub 时,它会将 grub 的新实例重新安装到ubuntu
ESP 上的 -folder,它不会影响我自己创建的引导加载程序,但我必须重新排列引导顺序,因为 -entryubuntu
将被推送到引导顺序中的第一位。
这是efibootmgr -v
我的配置中显示的内容:
〜$ efibootmgr -v 启动电流:0001 超时:0 秒 启动顺序:0001,0002,0004,0000,0003,0005 Boot0000* ubuntu HD(1,GPT,249ac0f6-d3e4-4b91-91d5-6e8d63c093c3,0x800,0x9a000)/文件(\EFI\ubuntu\shimx64.efi) Boot0001* US1804 HD(1,GPT,249ac0f6-d3e4-4b91-91d5-6e8d63c093c3,0x800,0x9a000)/文件(\EFI\US1804\grubx64.efi) Boot0002* US1604 HD(1,GPT,249ac0f6-d3e4-4b91-91d5-6e8d63c093c3,0x800,0x9a000)/文件(\EFI\US1604\grubx64.efi) Boot0003* UEFI OS HD(1,GPT,249ac0f6-d3e4-4b91-91d5-6e8d63c093c3,0x800,0x9a000)/文件(\EFI\BOOT\BOOTX64.EFI) Boot0004* US1904 HD(1,GPT,249ac0f6-d3e4-4b91-91d5-6e8d63c093c3,0x800,0x9a000)/文件(\EFI\US1904\shimx64.efi) Boot0005* ubuntu HD(1,GPT,249ac0f6-d3e4-4b91-91d5-6e8d63c093c3,0x800,0x9a000)/文件(EFI\Ubuntu\grubx64.efi)
答案3
以下是我使用 Rod Smith 之前推荐的选项 #2 在单个硬盘上使用 UEFI 双启动两个 LUKS 加密的 Ubuntu 系统的步骤。这专门用于 Ubuntu 18.04.1-desktop。由于对 eCryptfs 的可靠性和维护存在担忧,因此在安装过程中不再提供主目录加密选项。建议改用 LUKS,所以我认为这是让多个用户使用加密主分区的最佳选择。
- 启动到 Live USB,这是通过下载 ISO 并使用启动盘创建器来格式化和设置 USB 驱动器。
- 使用 GParted 对磁盘进行分区。这是基于以下建议:https://help.ubuntu.com/community/ManualFullSystemEncryption并在为整个磁盘选择磁盘加密时使用 Ubuntu 安装程序设置的一些默认设置。
- EFI 系统分区 / 512MiB / FAT32 / 启动,esp(标志)
- 启动系统 #1 / 732MiB / EXT4
- 启动系统 #2 / 732MiB / EXT4
- 数据加密 #1 / [所需大小] / 已清除
- 加密数据 #2 / [所需大小] / 已清除
- 使用 GParted 对磁盘进行分区。这是基于以下建议:https://help.ubuntu.com/community/ManualFullSystemEncryption并在为整个磁盘选择磁盘加密时使用 Ubuntu 安装程序设置的一些默认设置。
- 重新启动回到 Live USB
- 安装 Ubuntu
- 选择安装首选项
- 选择“其他”作为分区磁盘布局,并在该分区内进行安装配置:
- 在底部的菜单中选择“EFI System Partition”作为引导加载程序。
- 选择“数据加密#1”,并选择“用于加密的物理设备”,然后输入该分区要使用的加密短语。
- 选择刚刚创建的EXT4分区,并将挂载点改为“/”。
- 选择“Boot System #1”并将其挂载点设置为“/boot”。
- 继续并安装
- 重新启动回到 Live USB
- 重新启动进入新安装
- 通过“apt-get install refind”安装“refind”并让其自动安装到 ESP,即“EFI 系统分区”。
- 重新启动进入新安装
- 重新启动并回到 Live USB
- 对#2 启动系统和数据加密#2 分区重复步骤 3 和 4,安装第二个 Ubuntu 安装。
- 重新启动并回到 Live USB
- 根据需要配置和升级每个安装。
答案4
我尝试使用单个 ESP 和单独的 bootloader-id 的方法,它基本上有效。我可以确认 update-grub 可以检测到所有 Ubuntu 安装,即使它们位于具有单独的未加密 /boot 分区的加密 LVM 上。
我遇到的唯一问题是,grub 一直显示“非主”安装的启动菜单,即使在 EFI 固件中首先选择了“主”。所以我不得不再次运行 grub-install,而没有 bootloader-id。不知道为什么会这样,它根本不应该使用默认 EFI/ubuntu 中的 grub.cfg。