Ubuntu

如何讓 Linux 在加密分區上找到根文件系統?

  • February 1, 2022

我有一台經過多次核心升級的 Ubuntu 機器。在一天開始時,我安裝了 3 個核心:5.11.0-34、5.11.0-46 和 5.11.0-49。我不得不升級一堆軟體包,然後趁機刪除了中間核心以在我的引導分區中騰出空間。

現在,我無法讓剩餘的核心啟動。它們都沒有提示輸入密碼來解密安裝 Linux 的驅動器。無論我是否啟動到恢復模式都沒有關係,它們會列印消息並最終進入這樣的外殼:

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 菜單選項中。

如何修復我的安裝以啟動?

某處發生了故障,我不得不逃跑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 -&gt; ../../nvme2n1p1
lrwxrwxrwx 1 root root 15 Jan 31 12:29 743ab129-75bb-429b-8366-9c066f00c4fe -&gt; ../../nvme2n1p3
lrwxrwxrwx 1 root root 15 Jan 31 12:29 773ceeb2-5c0f-4838-baad-a1182d7fdd80 -&gt; ../../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

然後我能夠重新啟動機器並啟動到已安裝的核心之一。

引用自:https://unix.stackexchange.com/questions/688707