Ubuntu
如何讓 Linux 在加密分區上找到根文件系統?
我有一台經過多次核心升級的 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
。我在三個不同的地方發現了非常相似的說明:
- 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
然後我能夠重新啟動機器並啟動到已安裝的核心之一。