如何让 Linux 找到加密分区上的根文件系统?

如何让 Linux 找到加密分区上的根文件系统?

我有一台已经过多次内核升级的 Ubuntu 机器。当天开始时,我安装了 3 个内核:5.11.0-34、5.11.0-46 和 5.11.0-49。我必须升级一堆软件包,然后趁机删除中间内核以在启动分区中腾出空间。

现在,我无法启动剩余的内核。它们都不会提示输入密码来解密安装 Linux 的驱动器。无论我是否启动进入恢复模式,它们都会打印消息并最终进入 shell,如下所示:

Unable to init MCE device (rc: -5)
Volume group "vgubuntu" not found
Cannot process volume group vgubuntu
Gave up waiting for suspend/resume device
Gave up waiting for root file system device. Common problems:
 - Boot args (cat /proc/cmdline)
   - Check rootdelay= (did the system wait long enough?)
 - Missing modules (cat /proc/modules; ls /dev)
ALERT!  /dev/mapp/vgubuntu-root does not exist.  Dropping to a shell!

BusyBox v1.30.1 (Ubuntu 1:1.30.1-6ubuntu2.1) built-in shell (ash)

很久以前我添加 mce=off作为内核参数。它出现在每个 GRUB 菜单选项中。

如何修复我的安装以启动?

答案1

某处出了什么问题,我不得不逃跑update-initramfs。我在三个不同的地方发现了非常相似的说明:

  1. https://ubuntuforums.org/showthread.php?t=2409754&s=e1f324bf5e566b3bb93374cd07bdcc17&p=13828993
  2. https://askubuntu.com/a/868726/538768
  3. https://feeding.cloud.geek.nz/posts/recovering-from-unbootable-ubuntu-encrypted-lvm-root-partition/

我是这样到达那里的。

我从实时 USB 加载 Ubuntu,然后跑去fdisk -l查看我的分区并猜测哪个分区被加密。我看到了这些(除其他外):

  • /dev/nvme2n1p1:512M电喷系统
  • /dev/nvme2n1p2: 732M Linux 文件系统
  • /dev/nvme2n1p3: 1.8T Linux 文件系统 <-- 我猜是这个。

然后我解密分区并安装它,如下所示:

sudo -i
cryptsetup open /dev/nvme2n1p3 $name
vgchange -ay
mkdir /mnt/root
mount /dev/mapper/$name /mnt/root

这让我可以检查/etc/crypttab解密分区时使用哪个设备名称(nvme0n1p3_crypt在本例中):

nvme0n1p3_crypt UUID=743ab129-75bb-429b-8366-9c066f00c4fe none luks,discard

然后我查看了/etc/fstab哪些分区是boot分区和EFI分区:

# /boot was on /dev/nvme0n1p2 during installation
UUID=773ceeb2-5c0f-4838-baad-a1182d7fdd80 /boot           ext4    defaults        0       2
# /boot/efi was on /dev/nvme0n1p1 during installation
UUID=5C17-FB32  /boot/efi       vfat    umask=0077      0       1

安装时,这些分区的名称类似于nvme0n1p*,但不再命名。我可以通过列出来找到他们当前的名字/dev/disk/by-uuid

$ ls -l /dev/disk/by-uuid/
lrwxrwxrwx 1 root root 15 Jan 31 12:29 5C17-FB32 -> ../../nvme2n1p1
lrwxrwxrwx 1 root root 15 Jan 31 12:29 743ab129-75bb-429b-8366-9c066f00c4fe -> ../../nvme2n1p3
lrwxrwxrwx 1 root root 15 Jan 31 12:29 773ceeb2-5c0f-4838-baad-a1182d7fdd80 -> ../../nvme2n1p2

现在我已经拥有了遵循说明所需的所有部件。以下是我执行的实际命令:

sudo -i
cryptsetup open /dev/nvme2n1p3 nvme0n1p3_crypt
mount /dev/mapper/nvme0n1p3_crypt /mnt/root
mount /dev/nvme2n1p2 /mnt/root/boot
mount /dev/nvme2n1p1 /mnt/root/boot/efi
mount --bind /dev /mnt/root/dev
mount --bind /run /mnt/root/run
chroot /mnt/root
mount -t proc proc /proc
mount -t sysfs sys /sys
update-initramfs -c -k all

然后我就可以重新启动机器并启动到已安装的内核之一。

相关内容