我有一个 LUKS 加密的 Ubuntu 20.04 安装程序。我在这里按照我自己的说明缩小 LUKS 分区并安装 Ubuntu 22.04,也是 LUKS 加密的。现在,我的 grub 启动菜单不再提供启动旧 LUKS 加密 Ubuntu 20.04 版本的选项。相反,它只是启动新的 22.04。
如何重新添加 LUKS 加密的 Ubuntu 20.04 版本?
这是我的磁盘,如 gparted 所示,同时登录到新的 Ubuntu 22.04 操作系统。
描述:
/dev/nvme0n1p1
是 512 MiB EFI 分区/dev/nvme0n1p2
是旧 Ubuntu 20.04 操作系统的 ext4/boot
非加密分区/dev/nvme0n1p3
是包含单个 LVM 卷的 LUKS 加密分区,其中包含 Ubuntu 20.04(不再在 grub 菜单中)/dev/nvme0n1p4
是新的 Ubuntu 22.04 操作系统的 ext4/boot
非加密分区/dev/nvme0n1p5
是包含单个 LVM 卷的 LUKS 加密分区,其中包含 Ubuntu 22.04(在grub 菜单中,操作系统正在运行)
可能有用:
- 对于更有经验的人来说,这个对不同问题的回答可能有一些线索,但我不明白:How to get grub to boot from a newly encrypted partition
/boot
LUKS加密硬盘如何修复?
经过大量的努力和调查,我想通了!
1. 如何将其他 LUKS 加密的 Linux 发行版添加回您的 Grub 引导加载程序启动菜单
快速总结
如果您只想快速回答,请停在这里。
细节
编辑您的文件以在其中
/etc/default/grub
添加行:GRUB_DISABLE_OS_PROBER=false
该
GRUB_DISABLE_OS_PROBER=false
行启用操作系统探测器,它会扫描您的文件系统以查找有效的操作系统并将它们添加到 Grub 引导加载程序。默认情况下禁用此功能,因此要启用它,我们设置GRUB_DISABLE_OS_PROBER=false
。以下是 Grub 用户手册对此的说明:https://www.gnu.org/software/grub/manual/grub/html_node/Simple-configuration.html:自我注意:虽然它似乎没有必要:如果以上内容本身不起作用,请尝试添加
GRUB_ENABLE_CRYPTODISK=y
。从上面的链接:解锁所有包含您想要添加到 Grub 菜单的操作系统的 LUKS 加密分区。
就我而言,我的旧 Ubuntu 20.04 操作系统在我的
/dev/nvme0n1p3
分区中,如我的问题中所述。注意:我喜欢在 GUI 分区编辑器中查看我的分区
gparted
。因此,这是解锁该分区的方法:
如需更多帮助,请参阅
man cryptsetup
。请注意,该luksOpen
选项等效于open --type luks
.现在您的 LUKS 加密分区已解锁,并且您已经告诉 Grub 在您的文件系统中搜索其他操作系统,更新 Grub 引导加载程序:
在其输出中,查找类似这样的行,表明它正在查找操作系统并将其添加到 Grub 菜单:
我的完整示例命令和输出,输出中包含上面的行:
要验证新的 Grub 菜单条目,您可以手动打开文件并在该文件中的注释后面
/boot/grub/grub.cfg
查找条目。不要直接编辑该文件。menuentry
### BEGIN /etc/grub.d/30_os-prober ###
故障排除、调试和额外信息。
运行时
sudo update-grub
,如果您在输出中看到这些行:...那么这意味着您忘记添加
GRUB_DISABLE_OS_PROBER=false
到您的/etc/default/grub
文件中。如果您
sudo update-grub
在没有首先解锁所有包含可启动操作系统的 LUKS 加密分区的情况下运行,那么当您运行时,这些操作系统将从您的 Grub 菜单中删除(如果它们以前存在)update-grub
(请参阅下一节)。如果您发现自己处于这种情况,只需启动到 Grub 菜单中可用的任何 Linux 操作系统,然后按照上述步骤将其他操作系统添加回 Grub 菜单。sudo fdisk -l
您可以通过查看和的输出来了解哪些分区已解锁lsblk
。只有我的运行分区 (
/dev/nvme0n1p5
) 解锁(即:在重新启动后),这就是我的输出。请注意,在这两种情况下,只nvme0n1p5_crypt
显示:现在,在运行
sudo cryptsetup luksOpen /dev/nvme0n1p3 nvme0n1p3_crypt
以解锁 LUKS 加密的分区之后,这就是我所看到的。请注意,我现在也看到了nvme0n1p3_crypt
LUKS加密分区中的逻辑卷 (LVM) 在/dev/mapper/system-root
哪里:/dev/mapper/system-root
/dev/mapper/nvme0n1p3
注意:对于每个分区的 UUID(通用唯一标识符)编号,请运行以下命令:
请注意,要注意以下 3 个与磁盘相关的主要文件。查看它们
cat
:2. 如何从 Grub 引导加载程序启动菜单中删除其他 LUKS 加密的 Linux 发行版
要从 Grub 启动菜单中删除除正在运行的操作系统之外的所有操作系统,只需重新启动到您想要的操作系统(这将再次锁定所有其他 LUKS 加密的分区),然后运行:
由于没有其他 LUKS 加密分区被解锁,它们将自动从 Grub 引导加载程序中删除。以下是该命令和输出对我来说的样子:
/boot
如果您的所有操作系统都有一个共享分区(与我不同),那么就是这样!在此操作系统中运行sudo update-grub
将更新该单个/boot
分区,从而影响用于引导的 Grub 引导加载程序。或者,如果您使用的是最新安装的操作系统,它会更新/boot
您的 Grub 引导加载程序实际使用的分区,就是这样!但是,如果您使用的是任何其他操作系统,它将更新自己的旧分区
/boot
,而不是实际用于引导的最新分区。在这种情况下,您可能需要将最新的/boot
分区重新挂载到/boot
文件系统的目录中,然后sudo update-grub
再次运行,或者您可以运行某种chroot
魔法。但是,我没有时间这样做,所以这是我做的一个肮脏的黑客攻击:快速总结:
我只是手动将新创建的
/boot/grub/grub.cfg
文件复制到实际(最新)引导分区上的正确位置,因为/boot
创建它的路径位于旧的(现在未使用的)引导分区上。细节:
我启动到我的
/dev/nvme0n1p3
Ubuntu 20.04 操作系统,它自动将旧的(现在是错误的/未使用的)/dev/nvme0n1p2
引导分区安装到 path 的文件系统中/boot
。我跑去sudo update-grub
更新/dev/nvme0n1p2
path 上的那个(现在是错误的/未使用的)引导分区/boot
。我打开了一个 GUI 文件浏览器并双击位于 的新启动分区
/dev/nvme0n1p4
,以将其自动挂载到位于路径 的文件系统中/media/gabriel/abcd-1234-efgh-abcdefghij
。换句话说,当我登录分区中的 Ubuntu 20.04 时,/dev/nvme0n1p3
路径与登录分区中的 Ubuntu 22.04 操作系统时的路径/media/gabriel/abcd-1234-efgh-abcdefghij
完全相同!/boot
/dev/nvme0n1p5
肮脏的 hack:备份旧的 grub.cfg 文件并将新文件复制到它的位置。
命令总结:
另一个用于撤消先前肮脏黑客的肮脏黑客:
要撤消此操作,只需恢复
grub.cfg
您之前备份的旧文件grub.cfg.bak
:参考:
GRUB_DISABLE_OS_PROBER=false
到的地方/etc/default/grub
:https://forum.manjaro.org/t/warning-os-prober-will-not-be-executed-to-detect-other-bootable-partitions/57849man update-grub
man 8 grub-mkconfig
man cryptsetup
man 5 crypttab
和https://man7.org/linux/man-pages/man5/crypttab.5.html