我将非常感激您能帮助和提示来解决 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
然后重新启动。一切都恢复了。希望这能对某人有所帮助。