Linux

initramfs 中的空 fstab 引導問題

  • October 8, 2019

我最近從 USB 重新安裝了我的 Linux Mint 19.2,一切正常。但是,在啟動系統時,它會卡在 initramfs 中。以上狀態的錯誤消息

Mount: mounting /dev on /root/dev failed: no such file or directory
Mount: mounting /run on /root/run failed: no such file or directory
run-init: opening console: No such file or directory
Target: filesystem doesn't have requested /sbin/init.
Try passing init= bootarg.

從 initramfs 我對我的根分區 sda2 進行了 fsck,結果很乾淨。我用 e2fsck 重複了它,結果相同。我再次啟動到 USB 上的 Live-System,安裝了 sda1(我的 EFI 啟動分區)和 sda2,並檢查了 grub 和 fstab 中的 UUID 值是否一致。現在我再次陷入 initramfs 並查看 /etc 的內容,發現 fstab 的大小為 0 字節。

(initramfs) ls -la /etc/fs*
-rw-r--r--   1        0 /etc/fstab

因此掛載 /dev/sda2 是不可能的(在 fstab 中沒有條目)。現在,我不確定此時是否應該包含任何內容,因為這顯然不是位於 /etc 中 /dev/sda2 上的 fstab,但坦率地說,我不知道還有什麼可能導致系統沒有找到根分區,當 grub 和 fstab 從 live 系統中看到時似乎沒問題。

順便說一句,這是我第一次在具有 EFI 的系統上安裝,其 EFI 引導分區 (vfat) 為 1GB (sda1)。我確保在安裝之前以 EFI 模式啟動到實時系統(實際上我在 BIOS 中禁用了傳統模式,因此它只會顯示 EFI 可啟動作業系統)。是否有任何其他設置我應該知道可能導致系統找不到它的根分區?在 init= 之後我可能會傳遞給引導載入程序的值是多少?

如果這有助於確定這裡有什麼問題,請隨時詢問其他資訊。謝謝!

補充:在 sda1 上,/EFI/ubuntu 中有一個 grub.cfg,內容如下:

search.fs_uuid 734be585-8baf-408e-850a-69555c89c955 root hd0,gpt2 
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg

在 /boot/grub 文件夾中的 sda2 上有引用的 grub.cfg,其中包含以下內容:

export linux_gfx_mode
menuentry 'Linux Mint 19.2 Cinnamon' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-734be585-8baf-408e-850a-69555c89c955' {
   recordfail
   load_video
   gfxmode $linux_gfx_mode
   insmod gzio
   if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
   insmod part_gpt
   insmod ext2
   set root='hd0,gpt2'
   if [ x$feature_platform_search_hint = xy ]; then
     search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  734be585-8baf-408e-850a-69555c89c955
   else
     search --no-floppy --fs-uuid --set=root 734be585-8baf-408e-850a-69555c89c955
   fi
       linux   /boot/vmlinuz-4.15.0-54-generic root=UUID=734be585-8baf-408e-850a-69555c89c955 ro ignore_bootid live-media-path=/multibootusb/linuxmint-19.2-cinnamon-64bit/casper floppy.allowed_drive_mask=0 ignore_uuid root=UUID=759A-1D86 quiet splash $vt_handoff
   initrd  /boot/initrd.img-4.15.0-54-generic
}

sda 的 blkid 提供以下資訊:

/dev/sda1: UUID="EE9A-4B64" TYPE="vfat" PARTLABEL="boot" PARTUUID="33a95580-f254-4f54-937e-143da0e1e37c"
/dev/sda2: LABEL="/" UUID="734be585-8baf-408e-850a-69555c89c955" TYPE="ext4" PARTLABEL="/" PARTUUID="92a4ec7f-d1f6-441b-abdf-0bc0a9970d0b"
/dev/sda4: LABEL="home" UUID="7b3b371b-6447-4e33-822d-d2535215b863" TYPE="ext4" PARTUUID="70686b24-b09d-4f83-a715-73fb1e4224d1"

sda3應該是swap分區,不知道這裡不出現是否正常。

在啟動過程中,直到 grub 之前我都很好。只有在選擇了上述條目或隨附的“擴展選項”條目之後,我才會以 initramfs 而不是登錄名結束。

Mount: mounting /dev on /root/dev failed: no such file or directory
Mount: mounting /run on /root/run failed: no such file or directory
run-init: opening console: No such file or directory
Target: filesystem doesn't have requested /sbin/init.

看起來像正在掛載的任何內容,因為根文件系統沒有正確的掛載點目錄……

這是引導條目的核心行,為清楚起見,每個引導選項都位於單獨的行中。

linux   /boot/vmlinuz-4.15.0-54-generic \
   root=UUID=734be585-8baf-408e-850a-69555c89c955 \
   ro \
   ignore_bootid \
   live-media-path=/multibootusb/linuxmint-19.2-cinnamon-64bit/casper \
   floppy.allowed_drive_mask=0 \
   ignore_uuid \
   root=UUID=759A-1D86 \
   quiet \
   splash

現在您可能會看到:您有兩個root=選擇。後者將覆蓋前者。並且基於第二個“UUID”的簡短性,看起來你最終會嘗試使用一些 FAT 文件系統作為你的根文件系統。不過,這不是你的/dev/sda1

live-media-path如果您嘗試啟動已完全安裝在 HDD 上的作業系統,該選項看起來也很奇怪。

第一個root=UUID=734be585-8baf-408e-850a-69555c89c955正確地引用了您的 UUID /dev/sda2,因此它是正確的。

我的猜測是,這root=UUID=759A-1D86可能是指您安裝系統的 USB。UEFI 引導載入程序的安裝過程可能出錯:它無法辨識這是從安裝介質root=UUID=759A-1D86引導的選項的一部分,不應將其複製到完成的安裝中。

如果存在,您應該從您的引導選項中刪除root=UUID=759A-1D86並且可能也live-media-path=/multibootusb/linuxmint-19.2-cinnamon-64bit/casper從其中刪除,即 from/boot/grub/grub.cfg和 from /etc/default/grubin /dev/sda2。前者應該解決眼前的問題;後者應該可以防止在您安裝核心更新或update-grub出於任何其他原因執行時再次發生該問題。

/multibootusb選項中的選項讓我覺得您可能已經使用MultiBootUSBlive-media-path=之類的東西完成了安裝,而不是使用“香草”Mint 19.2 安裝介質。此類自動化解決方案需要重建引導載入程序配置以建構其引導菜單,並且並不總是能夠完美地做到這一點。

ignore_uuid用於casper未與安裝了 HDD 的作業系統一起使用的實時媒體實用程序,並且ignore_bootid似乎也與casper. 只是告訴核心跳過磁片驅動器檢測,這floppy.allowed_drive_mask=0在通常情況下可能會加快啟動速度大約 3 秒左右。(在一些具有非傳統磁片驅動器設置的舊筆記型電腦上,可能需要防止啟動時掛起。)

您很可能會刪除所有這三個引導選項,但為了安全起見,當系統在 GRUB 引導菜單中時,按下E以編輯目前引導條目(僅針對此特定引導)並刪除那裡的那些引導選項。如果您可以成功啟動,您知道您可以從實際配置文件中刪除它們 - 如果系統在沒有這些選項的情況下在啟動時掛起,只需重置系統,它將再次正常啟動。

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