dracut 和 initramfs 有什麼關係?
當遇到啟動失敗時,我看到系統下降到顯示 dracut 的提示。
我的理解是 dracut 用於生成 initramfs 的圖像。我感到困惑的是,基於我正在放入一個名為“dracut”的 shell 的事實,它似乎不僅僅是一個用於生成 initramfs 的實用程序,但它實際上也是一個獨立的程序在啟動時執行。它是否正確?- 如果以上內容準確,那麼 initramfs 和 dracut 之間的區別/關係是什麼?
Dracut 既是一個生成 initramfs 實例的工具,它也有所謂的 dracut 緊急外殼。initramfs 的目的是提供一個能夠查找、載入並將執行傳遞給根文件系統的環境。如果在此過程中出現任何問題,initramfs 將進入 dracut 緊急 shell,讓您有機會調試/嘗試修復問題。
關於評論:
“我很樂意。澄清一下,最初發生的事情是我有一個執行 RHEL 的 VMWare VM。由於將 VM 直接導入 VMWare Workstation 時出現問題,我決定只將 VM 的硬碟從 ESXi 拉到一個新 VM 上在VMWare Workstation中。但是,當我嘗試啟動VM時,我能夠成功載入GRUB並隨後載入dracut,但是dracut無法找到根文件系統。這很奇怪,因為人們會期望如果dracut可以載入,系統也將能夠找到根文件系統。”
當您安裝 RHEL 時,dracut 會生成一個 initramfs 實例,該實例僅包含與安裝作業系統的硬體兼容所需的驅動程序。當我將 RHEL 實例的硬碟從一組虛擬硬體上的 ESXi 移動到另一組虛擬硬體 VMWare Workstation 時,與核心關聯的 initramfs 不再具有查找和載入根文件系統所需的適當驅動程序集.
要解決此問題,在移動硬碟驅動器之前,您需要執行
dracut --force --no-hostonly
. 引用https://fedoramagazine.org/initramfs-dracut-and-the-dracut-emergency-shell/force 參數告訴 dracut 可以覆蓋現有的 initramfs 存檔。no-hostonly 參數覆蓋了僅包含與目前執行的電腦密切相關的驅動程序的預設行為,並導致 dracut 將所有驅動程序包含在 initramfs 中。
這意味著 dracut 現在將“臃腫”,並且具有移動硬碟驅動器所需的所有適用驅動程序。完成移動硬碟驅動器後,您必須重新執行 dracut 以
dracut --force
重新生成輕量級版本的 dracut。