經過漫長的啟動修復過程後,進入 systemd 緊急提示。問題:fstab 檔案中缺少 FS

經過漫長的啟動修復過程後,進入 systemd 緊急提示。問題:fstab 檔案中缺少 FS

我意識到已經遇到啟動問題的人提出了幾個問題,但我認為我的情況相當特殊,因此我發布了另一個問題,希望能解決一些新問題。

我一直在修復虛擬機器的啟動過程,該虛擬機具有來自不再安裝的核心的initramfsinitrd.imgvmlinuz檔案),並且仍然嘗試從它們啟動。/boot

我即將完成,但它不斷重新啟動到systemd's emergency mode(其中顯示:)

You are in emergency mode. After logging in, type "journalctl -xb" to view system logs, "systemctl reboot" to reboot, "systemctl default" or "exit" to boot into default mode.
Give root password for maintenance
(or press Control-D to continue):

我從 Live CD 啟動,將 3 個相關分割區安裝到/mnt,chroot 到/mnt

mount /dev/sda3 /mnt
mount /dev/sda2 /mnt/boot
mount /dev/sda1 /mnt/boot/efi
for i in proc dev dev/pts sys tmp run; do mount --bind /$i /mnt/$i; done
chroot /mnt

我的修復並重新啟動。

現在我fstab沒有安裝我的分割區。我認為它配置正確 - UUID 直接從blkid | grep /dev/sda.我並不認為它缺少任何東西。

以下是我在進入緊急模式提示之前看到的錯誤:

[FAILED] Failed to mount /boot
See 'systemctl status boot.mount' for details.
[DEPEND] Dependency failed for Local File Systems
[DEPEND] Dependency failed for Unattended Upgrades Shutdown
[DEPEND] Dependency failed for /boot/efi

因此,我當然查看了systemctl status boot.mount,但它處於活動狀態(綠色)並表示已加載,即使我的/boot資料夾是空的,除非我手動掛載/dev/sda2

看起來很奇怪。如果明顯不是,為什麼會boot.mount說正在載入分區?/boot

答案1

所以我在寫問題的時候實際上就弄清楚了這個問題。正如你從我一開始寫的內容中看到的,這是一個非常漫長的過程(我花了大約兩天的時間才達到想要尋求幫助的地步)。

如果你看看問題的最後,我dmesg在啟動過程中收到了這則訊息:

[FAILED] Failed to mount /boot
See 'systemctl status boot.mount' for details.

因此,我當然嘗試systemctl status boot.mount查看它所說的內容,但它說boot.mount處於活動狀態(綠色),它已加載並正常運行,即使/boot是空的,除非我手動安裝/dev/sda2(這與我的預期完全相反)。

所以我開始認為服務可能出了問題。我禁用了boot.mount即使它它工作正常:

systemctl disable --now boot.mount

我嘗試重新啟用它,但出現錯誤:

systemctl enable --now boot.mount
Failed to enable unit: Unit /run/systemd/generator/boot.mount is transient or generated

好的,這是有道理的,它是透過啟動過程觸發的,不能透過使用者命令呼叫。所以我嘗試使用以下命令重新安裝所有設備:

mount -a

發現/etc/fstab文件中有錯誤:

error: rw,relatime is not a valid file system

(或類似的東西)。

這裡的關鍵是,如果我沒有嘗試手動安裝檔案系統,我將永遠不會收到該回饋。mount -a當包含不正確的語法時收到的錯誤訊息fstab非常有幫助。比以下內容更有幫助:

[FAILED] Failed to mount /boot
See 'systemctl status boot.mount' for details.

boot.mount....然後在未安裝時看到“工作”systemd 單元/boot(即使它做過最終讓我到達正確的地方)。

因此,我編輯了fstab並輸入了無法安裝的分區的文件系統信息/boot,然後我重新運行mount -a(本質上與 執行相同的操作boot.mount)並獲得了積極的響應。

現在,兩個分區在重新啟動後可以正確安裝,在辣根和果醬的土地上一切都很好。

如果這不能解決您的任何問題,以下是我在到達上述尋求幫助的過程之前所經歷的過程的一些附加說明(在遇到問題後請隨時停止閱讀):

兩天前我遇到的最初問題是系統嘗試從系統上不再存在的核心啟動。因此,在使用 Live CD 啟動後,我刪除了該/boot資料夾的內容(所有initrd檔案都位於其中)。

我想我只需從我安裝的當前核心重新建立initramfsusing update-initramfs -c -k all,但後來我了解到我無法單獨重新建立configSystem.map檔案depmod。結果這比我預想的要麻煩一些。

我發現重新生成或獲取所有這些文件的最簡單方法是:

  1. 刪除 的所有內容/boot
  2. 卸載任何我無意使用的 ,linux-imagelinux-header文件,linux-modules
  3. 刪除所有殘留目錄/usr/lib/modules,然後
  4. 重新安裝linux-imagelinux-modules以及linux-headers我打算使用的檔案(最新的通用兩個版本)

注意:重新安裝這3種類型的文件全部同時這就是我設法找回文件的方法/boot/System.map-/boot/config之前僅重新安裝linux-image文件並沒有做到這一點。它們可能包含在modules(模組是有意義的)或headers包中,但這對我有用。

  1. 然後我update-grub在重新安裝這些文件並確認/boot已正確填充後運行。
  2. 我還運行了bootctl install/etc/kernel/postinst.d/zz-udpate-systemd-boot,所以我會systemd-boot安裝作為後備。

在重新啟動後的某一時刻,我不得不重新配置system.targetmulti-user.target而不是graphical.target,可能是因為幾天前chroot在圖形 Live CD 中安裝了所有這些安裝來運行該程序,這需要圖形(我相信並且是必需的)去上班):boot-repair/dev/pts /tmp/rundisplay :0.0

systemctl set-default multi-user.target

好的,就是這樣。希望這對某人有幫助。

相關內容