无法再启动任何内核;它们均未提示解密磁盘

无法再启动任何内核;它们均未提示解密磁盘

我有一台 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/mapper/vgubuntu-root does not exist.  Dropping to a shell!

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

我找到了一个类似的帐户这里,但我在 /dev 中没有任何以 sda 为前缀的设备。我猜这是因为我没有任何 SATA 驱动器。我的驱动器都是 NVMe,我不知道哪一个有根文件系统。

很久以前我添加 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哪些分区是启动分区和 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

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

相关内容