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

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

前段时间,我安装了 Ubuntu 20.04,如下所示本指南使用 btrfs-luks 加密。

引导过程最初仅涉及一个密码提示。

今天升级到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!

输出此信息后,系统会将我带入 (initramfs) 提示符。

跑步cat /proc/cmdline让我:

BOOT_IMAGE=/@/boot/vmlinuz-5.15.0-46-generic root=UUID=xxx-xxx-xxx-xxx-xxx ro rootflags=subvol=@

通过 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

因此,提到的 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)

当我现在运行时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

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

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

我已尝试过:

  • 从 USB 启动,手动解密和挂载,chroot 进入挂载,并update-initramfs按照类似问题的答案建议运行。没有效果。

答案1

解决方案如下:

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

update-initramfs -c -k all

conf-hook 似乎被更新覆盖了。恢复 KEYFILE_PATTERN 并运行 update-initramfs 后,它又可以正常工作了。

答案2

我偶然发现了另一个可能的解决方案,但不确定它是否适用于您的设置。

sda3_crypt:从 20.04 升级到 22.04 后 cryptsetup 失败

我执行了完全相同的步骤从 20.04 升级到 22.04,遇到了同样的问题。我不知道是什么原因造成的,但我能够通过从 ubuntu live usb 启动并添加新密码来使用旧密码解密分区,从而解决这个问题。

Boot from the ubuntu live usb.

I've used the 22.04 from the official downloads page.

Using the UI I've unlocked the partition. 
  - just try open the disk from file manager

Determine which partition is the encrypted one. 
  the partition UUID is stored on the /etc/crypttab relative to your drive. 
  For example cat /media/GUID/ubuntu/etc/crypttab. 

Then use blkid | grep PARTITION_GUID <- change the guid to determine the partition name. 

In my case it was /dev/nvme0n1p3

Add a new additional passphrase sudo cryptsetup luksAddKey 
  /dev/nvme0n1p3 <- change the partition name.

You will be prompted twice for a new passphrase.

Reboot into your primary os

旧密码仍然不起作用,但新密码却能起作用。

很可能有更优化的方法来实现这一点,但这个方法对我有用:p

答案3

cryptsetup-initramfs如果由于某种原因删除了该软件包,则可能会发生相同的错误。此实用程序将cryptsetup命令添加到 initramfs BusyBox shell。

要再次安装:

sudo apt install cryptsetup-initramfs

如果 initramfs 映像未更新,你可以使用以下方法手动更新

sudo update-initramfs -u -k <your-kernel-version>

相关内容