我有一台 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
。我在三个不同的地方找到了非常相似的说明:
- https://ubuntuforums.org/showthread.php?t=2409754&s=e1f324bf5e566b3bb93374cd07bdcc17&p=13828993
- https://askubuntu.com/a/868726/538768
- 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
然后我就可以重新启动机器并启动其中一个已安装的内核。