EFI 中 grub-install 生成的 UUID 错误?

EFI 中 grub-install 生成的 UUID 错误?

我正在组装一个新的 Debian 系统,它有一些特点:

我没有使用标准安装程序,而是使用 debootstrap 手动安装。原因:我的底层磁盘(1 个 SSD 和 2 个大硬盘)具有任何标准安装程序均未涵盖的某些要求。我将其中一个 HD(支持分区)的 bcache 映射到 SSD(缓存)上的一个分区。最重要的是,我有多个 luks 加密分区(包括加密的 /boot),然后是多个 LVM。此选择特定于我将使用该机器执行的某些应用程序。经过大量的试验和错误,并咨询了大量的在线资源,我已经按照我想要的方式安装了它,我可以挂载分区,并chroot到系统中。我已经设置了一个用户,以及我需要的包等。

我遇到的问题是EFI和grub。系统无法启动(即使在进入 grub 屏幕之前也未找到可启动设备 - 因此问题出在 EFI 上)。是的,我在实时 USB 启动中使用了 efi=runtime 内核选项,确认 /sys/firmware/efi/efivars 不为空,并且 efibootmgr 报告系统的 EFI 条目存在。我在 chroot、update -u -k all、grub-install /dev/sda 和 update-grub 之前挂载了 /sys/firmware/efi/efivars。为了安全起见,我在 grub 安装之前删除了所有 EFI 条目(除了 live USB)。我在 BIOS 中禁用了安全启动。这台机器上曾经安装过旧的可运行的 Linux,所以我知道 BIOS 没有任何反 Linux 的怪癖。

我对 UUID 格外小心,这让我注意到一些奇怪的事情:

通过以上命令在 /boot/efi/debian.. grub.cfg 中在 chroot 内生成的 UUID 不对应于任何系统上存在的许多 UUID(是的,我已经检查并重新检查)。当然不是 /dev/sdc1,它是容纳加密 /boot 的块设备,当然也不是映射到 /boot 的 luks 容器。 /boot/efi 是我的设置中唯一未加密的分区。

我曾考虑过在 EFI 中手动编辑 grub.cfg,但为了防止出现预期行为而推迟了。

还有一些可能相关的信息。该系统在/dev/sda1上有/boot/efi(未加密),在/dev/sdd1上有/dev/mapper/EncryptedBootPartition(/dev/sdb被外部USB磁盘占用(不,它不用于安装),而 /dev/sdc1 是后备分区,缓存位于 /dev/sda2)。 /boot 分区位于任何 LVM 组之外,因此 /boot 不涉及 LVM。鉴于存在外部 USB 磁盘,我对 /etc/fstab 和 /etc/crypttab 中的所有内容使用 UUID。无论如何,最后一件事对于这个问题来说并不重要,因为我无法通过 EFI。

其中一个磁盘上曾经安装过旧的 Linux,但在此设置过程中所有磁盘都经过了 ATA 安全清理和多次重新格式化,因此我无法想象旧的过时 UUID 将如何进入这个新系统。

为什么 grub-install 会生成伪造的 UUID?我应该怎么做才能解决这个问题?我更喜欢可编写脚本的解决方案,因为一旦证明此设置可以产生一个工作系统,我计划分发我编写的长 bash 脚本来完成上述所有操作。

相关内容