修复带LUKS加密根分区的Grub2引导,消除启动Ubuntu时的initramfs手动操作
看起来你的问题核心是Ubuntu的initramfs不知道要自动解锁LUKS加密根分区,加上Grub引导时没传递正确的加密参数,导致每次启动都要手动进initramfs解锁。咱们一步步来解决:
1. 先让Ubuntu的initramfs支持自动解锁加密分区
首先你得先进入Ubuntu系统——就用你现在的方法,手动在initramfs里解锁后进入系统,然后做以下操作:
配置加密分区映射:打开终端,编辑
/etc/crypttab文件,确保系统能识别你的加密分区:sudo nano /etc/crypttab添加这一行(对应你的
/dev/sdc4加密分区,映射名用你手动输入的myVolume):myVolume /dev/sdc4 none luks按
Ctrl+O保存,回车确认,再按Ctrl+X退出编辑器。添加加密和LVM所需模块:编辑
/etc/initramfs-tools/modules,让initramfs包含处理加密和LVM的必要驱动:sudo nano /etc/initramfs-tools/modules添加以下几行:
dm-crypt cryptd dm-mod ahci这些模块分别负责LUKS加密、加密性能辅助、LVM逻辑卷管理和磁盘控制器支持,确保initramfs能正确识别你的加密分区和里面的LVM卷。
更新initramfs镜像:让刚才的配置生效,更新所有内核版本对应的initramfs:
sudo update-initramfs -u -k all
2. 修复Grub引导条目,传递加密参数
现在有两种方式更新Grub配置,选一种适合你的就行:
方式一:让Fedora的Grub自动探测正确的Ubuntu配置
回到Fedora系统,打开终端,运行命令让Grub重新扫描所有可引导系统,自动生成正确的Ubuntu引导条目:
sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
这个命令会重新生成Fedora的Grub配置文件,其中Ubuntu的条目会自动包含加密分区的参数,启动时就会直接提示你输入LUKS密码,不用再进initramfs手动操作。
方式二:手动修改Fedora中的Ubuntu引导条目(如果自动探测失败)
如果自动探测没生效,或者你想手动调整,可以直接修改Grub的自定义条目:
打开Fedora中的Grub自定义文件:
sudo nano /etc/grub.d/40_custom修改现有的Ubuntu条目,添加加密相关模块和参数,修改后的内容如下:
menuentry 'Ubuntu 22.04 LTS' { insmod part_gpt insmod ext2 insmod cryptodisk insmod luks insmod lvm set root='hd2,gpt3' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd2,gpt3 --hint-efi=hd2,gpt3 --hint-baremetal=ahci2,gpt3 07baf26d-6f32-4a0d-b264-336d15177aba else search --no-floppy --fs-uuid --set=root 07baf26d-6f32-4a0d-b264-336d15177aba fi linux /vmlinuz-5.15.0-56-generic root=/dev/mapper/vg0-root ro quiet splash cryptdevice=/dev/sdc4:myVolume $vt_handoff initrd /initrd.img-5.15.0-56-generic }关键修改点:
- 新增了
insmod cryptodisk、insmod luks、insmod lvm三个模块,让Grub能识别加密分区和LVM卷 - 在
linux行末尾添加了cryptdevice=/dev/sdc4:myVolume,告诉内核启动时先解锁/dev/sdc4并映射为myVolume
- 新增了
保存退出后,重新生成Grub配置:
sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
3. 测试效果
重启系统,选择Ubuntu的Grub条目,现在应该直接弹出LUKS密码输入框,输入密码后就能正常进入系统,不会再进入initramfs需要手动解锁了。
备注:内容来源于stack exchange,提问作者HFR1994

