Grub 未使用 LUKS/LVM 启动 Ubuntu

Grub 未使用 LUKS/LVM 启动 Ubuntu

我已经在 LUKS/LVM 上安装了 Ubuntu 20.04,但不幸的是在启动时我只得到了幼虫>迅速的。

# lsblk
NAME                  MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                     8:0    0 465.8G  0 disk
├─sda1                  8:1    0   731M  0 part  /boot
└─sda5                  8:5    0   465G  0 part     
  └─sda5_crypt        253:0    0   465G  0 crypt  
    ├─ubuntu--vg-home 253:1    0   356G  0 lvm   /home
    └─ubuntu--vg-root 253:2    0   109G  0 lvm   /

安装grub到MBR并生成grub.cfg(看1,2

# grub-install /dev/sda

# grub-mkconfig -o /boot/grub/grub.cfg

Grub.cfg 似乎具有正确的 LVM 根卷 UUID:

# cat /boot/grub/grub.cfg
....
set root='lvmid/MGzfKv-uhLG-wmry-Yqb2-D09r-OfKh-SDs3eb/lZDSre-QLBU-9OvM-aVrN-kR6V-DFXg-lBhRn7'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint='lvmid/MGzfKv-uhLG-wmry-Yqb2-D09r-OfKh-SDs3eb/lZDSre-QLBU-9OvM-aVrN-kR6V-DFXg-lBhRn7'  617f84d9-1433-4620-a0c0-833fb8ce1e2f
else
  search --no-floppy --fs-uuid --set=root 617f84d9-1433-4620-a0c0-833fb8ce1e2f
fi
....

# blkid
/dev/sda5: UUID="3fbd1007-9f85-4b85-bdf2-ae55e0244bb6" TYPE="crypto_LUKS" PARTUUID="005a4774-05"
/dev/sda1: UUID="27ca1bd4-7811-4c3a-b319-2b8dd1ce57cd" TYPE="ext4" PARTUUID="005a4774-01"
/dev/mapper/sda5_crypt: UUID="UoR32h-GB2N-GYf4-XBEP-P0rd-RrZ6-f6PK6d" TYPE="LVM2_member"
/dev/mapper/ubuntu--vg-home: UUID="0d81e74f-fe7b-4ef4-ba61-6d664d54d77c" TYPE="ext4"
/dev/mapper/ubuntu--vg-root: UUID="617f84d9-1433-4620-a0c0-833fb8ce1e2f" TYPE="ext4"

# ls -l /dev/disk/by-id
rwxrwxrwx 1 root root 10 Oct 19 21:45 dm-name-sda5_crypt -> ../../dm-0
lrwxrwxrwx 1 root root 10 Oct 19 21:45 dm-name-ubuntu--vg-home -> ../../dm-1
lrwxrwxrwx 1 root root 10 Oct 19 21:45 dm-name-ubuntu--vg-root -> ../../dm-2
lrwxrwxrwx 1 root root 10 Oct 19 21:45 dm-uuid-CRYPT-LUKS2-3fbd10079f854b85bdf2ae55e0244bb6-sda5_crypt -> ../../dm-0
lrwxrwxrwx 1 root root 10 Oct 19 21:45 dm-uuid-LVM-MGzfKvuhLGwmryYqb2D09rOfKhSDs3ebHvMqdeqlhxMFcNl0XqdTRiC9sdWUmnVU -> ../../dm-1
lrwxrwxrwx 1 root root 10 Oct 19 21:45 dm-uuid-LVM-MGzfKvuhLGwmryYqb2D09rOfKhSDs3eblZDSreQLBU9OvMaVrNkR6VDFXglBhRn7 -> ../../dm-2
lrwxrwxrwx 1 root root 10 Oct 19 21:45 lvm-pv-uuid-UoR32h-GB2N-GYf4-XBEP-P0rd-RrZ6-f6PK6d -> ../../dm-0

将 sda5 UUID 和卷 UUID 添加到 crypttab 和 fstab(请参阅1):

# cat /etc/crypttab
sda5_crypt UUID=3fbd1007-9f85-4b85-bdf2-ae55e0244bb6 none luks

# cat /etc/fstab:
UUID=27ca1bd4-7811-4c3a-b319-2b8dd1ce57cd  /boot       ext4    defaults      0       2
UUID=617f84d9-1433-4620-a0c0-833fb8ce1e2f / ext4 defaults,errors=remount-ro 0 1
/swapfile                                 none            swap    sw              0       0

生成 initramfs(参见1):

# update-initramfs -c -k all

# ls -lah /boot
drwxr-xr-x  4 root root 4.0K Oct 19 21:31 grub
-rw-r--r--  1 root root  81M Oct 19 20:55 initrd.img-5.4.0-42-generic

答案1

由于您的 LVM 位于 LUKS 加密分区上,因此在解锁加密之前,LVM 根卷 UUID 将不可见。

默认情况下,Debian/Ubuntu GRUB 配置可能引用位于根文件系统上的多个内容,包括:

  • 字体文件/usr/share/grub/unicode.pf2
  • GRUB 背景图像,例如/usr/share/desktop-base/futureprototype-them/grub/grub-16x9.pngDebian 10

如果您不想输入两次 LUKS 密码(一次用于 GRUB,然后再次输入 initramfs),则需要确保将这些密码复制到/boot(或 GRUB 能够访问的任何其他未加密文件系统)并且 GRUB将从那里寻找他们。

对于字体文件,您可以在运行之前设置GRUB_FONT=/boot/grub/unicode.pf2in/etc/default/grub并将字体文件复制到。/boot/grubgrub-mkconfig

至少在 Debian 10 上,该/etc/grub.d/05_debian_theme脚本似乎具有将背景图像复制到的内置功能,例如,/boot/grub/.background_cache.png如果 GRUB 无法直接读取根文件系统(如您的情况,因为它将被加密)。您需要验证此功能(或相应 Ubuntu 脚本中的等效功能)是否已正确触发,如果没有,请使用GRUB_BACKGROUND=/boot/grub/<filename>in/etc/default/grub覆盖背景图像路径并手动复制适当的图像文件/boot/grub/

注意:凡是grub.cfgset root=<something>orsearch ... --set=root命令,都只是指定任何后续 GRUB 命令将从中加载任何文件的文件系统。不一定要参考Ubuntu 安装的根文件系统root=...:将由内核引导选项专门指定就行了linux /boot/vmlinuz-...

就您而言,解锁 LUKS 加密并在其中查找根文件系统将是initramfs的工作,而不是 GRUB 的工作。

相关内容