
我意識到已經遇到啟動問題的人提出了幾個問題,但我認為我的情況相當特殊,因此我發布了另一個問題,希望能解決一些新問題。
我一直在修復虛擬機器的啟動過程,該虛擬機具有來自不再安裝的核心的initramfs
(initrd.img
和vmlinuz
檔案),並且仍然嘗試從它們啟動。/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
檔案都位於其中)。
我想我只需從我安裝的當前核心重新建立initramfs
using update-initramfs -c -k all
,但後來我了解到我無法單獨重新建立config
或System.map
檔案depmod
。結果這比我預想的要麻煩一些。
我發現重新生成或獲取所有這些文件的最簡單方法是:
- 刪除 的所有內容
/boot
, - 卸載任何我無意使用的 ,
linux-image
和linux-header
文件,linux-modules
- 刪除所有殘留目錄
/usr/lib/modules
,然後 - 重新安裝
linux-image
,linux-modules
以及linux-headers
我打算使用的檔案(最新的通用兩個版本)
注意:重新安裝這3種類型的文件全部同時這就是我設法找回文件的方法/boot/System.map
-/boot/config
之前僅重新安裝linux-image
文件並沒有做到這一點。它們可能包含在modules
(模組是有意義的)或headers
包中,但這對我有用。
- 然後我
update-grub
在重新安裝這些文件並確認/boot
已正確填充後運行。 - 我還運行了
bootctl install
和/etc/kernel/postinst.d/zz-udpate-systemd-boot
,所以我會systemd-boot
安裝作為後備。
在重新啟動後的某一時刻,我不得不重新配置system.target
為multi-user.target
而不是graphical.target
,可能是因為幾天前chroot
在圖形 Live CD 中安裝了所有這些安裝來運行該程序,這需要圖形(我相信並且是必需的)去上班):boot-repair
/dev/pts
/tmp
/run
display :0.0
systemctl set-default multi-user.target
好的,就是這樣。希望這對某人有幫助。