发行版升级后,加密磁盘在启动过程中不可用

Maj*_*jiy 5 upgrade encryption boot btrfs luks

不久前,我按照本指南使用 btrfs-luks 加密安装了 Ubuntu 20.04。

过去,启动过程一开始只涉及一个密码短语提示。

今天升级到Ubuntu 22.04后,启动失败。

在启动过程的一开始,我仍然收到密码短语提示。但现在我收到以下输出(为了清楚起见,所有 UUID 均已修改):

Btrfs loaded, crc32c=crc32c-intel, zoned=yes, fsverity=yes
Scanning for Btrfs filesystems
done.
Begin: Waiting for root file system ... Begin Running /scripts/local-block ... done.
done.
Gave up waiting for root file system device. Common problems:
- Boot args (cat /proc/cmdline)
  - Check rootdelay= (did the system wait long enough?)
- Midding modules (cat /proc/modules; ls /dev)
ALERT! UUID=xxx-xxx-xxx-xxx-xxx does not exist. Dropping to a shell!
Run Code Online (Sandbox Code Playgroud)

在此输出之后,它会让我进入 (initramfs) 提示符。

跑步cat /proc/cmdline给了我:

BOOT_IMAGE=/@/boot/vmlinuz-5.15.0-46-generic root=UUID=xxx-xxx-xxx-xxx-xxx ro rootflags=subvol=@
Run Code Online (Sandbox Code Playgroud)

通过 uuid 列出磁盘ls -l /dev/disk/by-uuid/给了我(再次,为了清楚起见,UUID 被替换):

aaa-aaa-aaa-aaa-aaa -> ../../nvem0n1p2
bbb-bbb-bbb-bbb-bbb -> ../../nvem0n1p3
ccc-ccc -> ../../nvme0n1p1
ddd-ddd-ddd-ddd-ddd -> ../../nvme0n1p4
Run Code Online (Sandbox Code Playgroud)

因此,提到的 UUID 不可用。

如果我使用cryptsetup open /dev/nvme0n1p3 cryptdata(并再次输入密码)手动解密,我会收到:

BTRFS: device fsid=xxx-xxx-xxx-xxx-xxx devid 1 transid 797369 /dev/dm-0 scanned by systemd-udevd (527)
Run Code Online (Sandbox Code Playgroud)

当我现在运行时ls -l /dev/disk/by-uuid/,丢失的 uuid 现已包含在内:

aaa-aaa-aaa-aaa-aaa -> ../../nvem0n1p2
bbb-bbb-bbb-bbb-bbb -> ../../nvem0n1p3
ccc-ccc -> ../../nvme0n1p1
ddd-ddd-ddd-ddd-ddd -> ../../nvme0n1p4
xxx-xxx-xxx-xxx-xxx -> ../../dm-0
Run Code Online (Sandbox Code Playgroud)

当我现在时exit,启动过程继续运行,没有问题。

现在我正在寻找一种方法让启动过程再次自行运行。我怀疑某些配置文件可能在升级过程中被覆盖,我认为除了上面链接的安装指南之外,还需要进行一些调整,但我不记得确切了。

我尝试过的:

  • 从 USB 记忆棒启动,手动解密和挂载,chroot 到挂载中,并update-initramfs按照类似问题的答案所建议的方式运行。没有效果。

Maj*_*jiy 5

解决方案结果是:

echo "KEYFILE_PATTERN=/etc/luks/*.keyfile" >> /etc/cryptsetup-initramfs/conf-hook

update-initramfs -c -k all
Run Code Online (Sandbox Code Playgroud)

看来conf-hook已被更新覆盖。恢复 KEYFILE_PATTERN 并运行 update-initramfs 后,它再次按预期工作。