带有 root LUKS 加密的 GRUB 引导加载程序:仅 grub shell

带有 root LUKS 加密的 GRUB 引导加载程序:仅 grub shell

我将非常感激您能帮助和提示来解决 GRUB 引导加载程序的问题。我的系统带有 root LUKS 加密。这意味着除了带有引导加载程序的分区外,整个系统都位于加密的 LUKS 容器中。我不确定可能的问题出在哪里,所以我会告诉你更多细节。

系统更新后,GRUB 现在挂在 GRUB shell 中(不是救援模式)。

不过我可以手动启动:

insmod cryptodisk
insmod luks
insmod lvm
insmod ext2
cryptomount -a
set root=(lvm/system-root)
linux (lvm/system-boot)/vmlinuz-[...]-generic root=/dev/system/root
initrd (lvm/system-boot)/initrd.img-[...]-generic

在我的系统上运行 lsblk 如下所示:

nvme0n1           259:0    0 953,9G  0 disk
├─nvme0n1p1       259:1    0   450M  0 part
├─nvme0n1p2       259:2    0   100M  0 part  /boot/efi
├─nvme0n1p3       259:3    0    16M  0 part
├─nvme0n1p4       259:4    0  97,9G  0 part
└─nvme0n1p5       259:5    0 839,4G  0 part
  └─system        253:0    0 839,4G  0 crypt
    ├─system-boot 253:1    0   512M  0 lvm   /boot
    ├─system-swap 253:2    0  16,1G  0 lvm   [SWAP]
    └─system-root 253:3    0 822,8G  0 lvm   /

p1、p3、p4 属于已安装的 Windows 10。p2 是 fat32 EFI 系统分区 p5 是带有启动、交换和根分区的 luks 加密系统。

也许 Grub 无法加载 grub.cfg?

我认为 Grub 没有在 /boot/efi/grub/grub.cfg 中的 p2 分区中找到配置文件。

但如果是这种情况,配置文件的手动执行应该会成功。所以我在启动时在 grub shell 中执行(使用自动完成,因此路径应该正确):

configfile (hd0,gpt2)/grub/grub.cfg

但是我只是得到一个清除的 grub shell(没有任何错误)。

我之所以认为 grub 找不到 grub.cfg,是因为 EFI 文件夹中的 grub 配置文件的内容(根据我的理解,该文件首先被加载):/boot/efi/EFI/ubuntu/grub.cfg:

search.fs_uuid db041d94-37fa-42a6-b2f3-87572a38f23c root lvmid/uWUnvj-b70J-Gfam-Tfr3-87I3-GQAP-bL2Lym/gEpImK-yuWK-W6Ip-v5KF-ZGKm-8GZS-ALhXxF 
set prefix=($root)'/grub'
configfile $prefix/grub.cfg

这里它查找的 UUID(列表在最后)是加密启动分区的 UUID。这看起来很奇怪:在我输入密码之前,它不应该对 grub 可见吗?

但是由于我的手动加载配置文件的命令不起作用,所以我猜这不是我的问题。

检查 /etc/default/grub

所以它可能是我的配置文件:我无法判断这个文件有多正确,所以这里是该文件的摘要内容:

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_ENABLE_CRYPTODISK=y

GRUB_CMDLINE_LINUX="cryptdevice=UUID=8d82f654-43fd-40ba-a185-1ead48838f54:system root=/dev/system/system-root resume=/dev/system/system-swap ro"

GRUB_PRELOAD_MODULES="luks cryptodisk lvm ext2"

对我来说这看起来还不错。cryptdevice 的 UUID 看起来不错。我尝试将“/dev/system/system-root”更改为“/dev/system/system”,因为这是运行系统时的路径,但没有任何效果。我也运行了 update-grup 和 grub-install。

此外,我还安装了 grub-emu(grub 引导加载程序的模拟器)。这至少向我显示了 gurb 菜单。当选择启动 ubuntu 的条目时,我至少会收到一些错误:

error: no such cryptodisk found.
error: no such device: db041d94-37fa-42a6-b2f3-87572a38f23c.
error: can't find command `linux'.
error: can't find command `initrd'.

什么可以帮助我

  • 当然,请指出问题所在并告诉我解决方法。由于我现在必须处理它,所以我对 grub 的启动过程很好奇:
  • 我不明白 /boot/efi/EFI/ubuntu/grub.cfg 的内容。
  • 这里的 ($root) 内容是什么?为什么它要寻找加密分区?
  • 在哪里确定这个文件中的内容?
  • 为什么即使存在会阻止系统启动的错误,它至少也不显示 grub 菜单?

非常感谢,Ecco

更多内容

/boot/efi/grub/grub.cfg 的内容可以在以下位置找到:https://pastebin.com/D1X7jPsS

UUID(我省略了 Windows 特定的分区)

  • /dev/nvme0n1p2:UUID="2885-45AC" TYPE="vfat" PARTLABEL="EFI 系统分区" PARTUUID="1043df12-d11d-4023-bf6a-6acc2919c06f"
  • /dev/nvme0n1p5:UUID=“8d82f654-43fd-40ba-a185-1ead48838f54”TYPE=“crypto_LUKS”PARTLABEL=“系统”PARTUUID=“2457b24a-7695-4737-ae46-5687aca3ab01”

LUKS 容器的 UUID

  • /dev/mapper/system:UUID=“X7XHJG-pQ21-edgj-d73H-kK8Z-DxM8-eXBCh6”TYPE=“LVM2_member”
  • /dev/mapper/system-root:LABEL="root" UUID="07e1d1e4-cd00-42dd-96cf-4f99864d0b7f" TYPE="ext4"
  • /dev/mapper/system-swap:UUID=“02664e3e-3ba7-4a03-8b03-eb0335ca40f9” TYPE=“swap”
  • /dev/mapper/system-boot:LABEL="boot" UUID="db041d94-37fa-42a6-b2f3-87572a38f23c" TYPE="ext4"

答案1

最后它又起作用了:cmd刷新成功了此命令将文件 /boot/efi/EFI/ubuntu/grub.cfg 的内容更改为:

search.fs_uuid 2885-45AC root 
set prefix=($root)'/EFI/ubuntu/grub'
configfile $prefix/grub.cfg

这比以前更有意义:搜索未加密的分区。但现在更大的 grub.cfg 文件存储在另一个文件夹中,这没问题。

它现在显示菜单,但启动失败,我不得不在 /etc/default/grub.cfg 中更改以下行:

GRUB_CMDLINE_LINUX="cryptdevice=UUID=8d82f654-43fd-40ba-a185-1ead48838f54:system root=/dev/system/root resume=/dev/system/swap ro"

答案2

我尝试按照上面列出的命令操作,但没有成功,所以我最终从这里下载了 grub rescue CD:下载 grub rescue

我使用以下命令将 CD 映像刻录到闪存盘:

 sudo dd if=/home/User/Downloads/supergrub2-2.06s1-beta2-multiarch-USB.img of=/dev/sdb status=progress

然后,我从 grub 救援 CD 启动系统。

首先,我选择启用 LVM 支持,然后加载加密卷。最后,显示可用的启动选项。我选择了正确的启动选项,系统正常启动。移除闪存盘后,系统恢复到 grub。我再次启动系统,然后运行以下命令:

sudo grub-install

sudo grub update

然后重新启动。一切都恢复了。希望这能对某人有所帮助。

相关内容