linuxinitrd
1. linux開機 | initramfs、initrd、systemd、kernel等
開機過程中的初始化文件系統(initramfs)與initrd、systemd和kernel之間的關系以及它們在Linux系統啟動中的作用。當系統處於hibernation狀態時,initramfs從該狀態恢復到可以正常使用的狀態。如果在安裝另一操作系統後,swap分區的UUID發生變化,可能會出現一些提示信息,但通常並不需要干預。默認情況下,initrd會指定當前的swap分區作為resume分區,通過設置RESUME變數可以覆蓋這種行為。
休眠和喚醒的概念在此上下文中涉及到從hibernation狀態恢復到系統可以正常運行的過程。CPio(Copy In and Out)文件格式在系統啟動時用於復制文件和目錄。initramfs文件系統在系統啟動時載入根文件系統,它是一個包含了用於引導內核的根文件系統鏡像的壓縮cpio存檔。
initramfs工具管理和監控本地機器上的initramfs映像,包括創建、更新或刪除操作。update-initramfs命令調用mkinitramfs來根據所需參數管理initramfs。initrd盤(初始化RAM盤)在引導載入程序載入內核之前初始化為讀取只寫塊設備,用於在引導過程中載入額外模塊和啟動根文件系統。
initrd.img-5.4.0.89-generic文件中的「5.4.0.89」代表Linux內核的版本號,與ubuntu版本不完全一致。此文件的發布日期和系統實際更新日期之間的差異可能需要特定的操作來處理,如使用linux-update-symlinks命令更新損壞的軟鏈接,或者確認grub BootLoader在其他地方查找舊內核的信息。
對於查看安裝的內核版本,可以使用特定的命令,如在ubuntu 20.04下執行「linux-version list」。內核文件,如/boot/initrd.img*,在某些情況下可以刪除並重新生成,以確保系統的穩定運行。
在Linux內核的演變中,從早期的vmunix和vmlinux到後來的vmlinuz,名稱保持不變,盡管壓縮功能等特性已被添加。init和systemd在系統管理和啟動中扮演了關鍵角色,其中systemd提供了系統和服務管理器,具有並行化能力,使用socket和D-Bus激活來啟動服務,以及在需求時啟動守護進程。
systemctl命令用於控制systemd系統和管理器,盡管在新應用程序中不再推薦使用。Upstart作為一種歷史性的進程管理工具,在Linux系統中已被systemd所取代,盡管它曾提供非同步服務啟動,減少了Linux系統的啟動時間。
重啟(reboot)與hibernate或睡眠後恢復(resume)的概念有所不同。禁用resume功能後,系統可以正常啟動但無法hibernate,這可以通過在initramfs配置中添加「RESUME=none」來實現。重啟通常通過調用shutdown -r命令來完成。
2. initrd和initramfs的區別是什麼
Initrd 的英文是 initial ram disk,initi指linux的初始階段,ram disk指RAM 盤。initrd文件中包含各種可執行程序和驅動程序。在嵌入式Linux系統中,initrd 就是最終的根文件系統。
initramfs:init ram filesystem,它是一個cpio格式的內存文件系統。現在的 initramfs 是一個 gzip 壓縮的 cpio 文件系統打包。遇到特殊情況時,可建立一個臨時目錄,解壓initramfs,再直接解壓 cpio -idv,改之後再用 cpio 和 gzip 封上。其工作方式更為簡單直接,啟動時載入內核和 initramfs 到內存執行,內核初始化之後,切換到用戶態執行 initramfs
的程序/腳本,載入需要的驅動模塊、必要配置等,然後載入 rootfs 切換到真正的 rootfs 上去執行後續的 init 過程。
現在所說的initrd都指的是 initramfs 。因為initrd 是2.4 及更早的用法,運行過程大概是內核啟動,執行一些 initrd 的內容,載入模塊啥的,然後交回控制權給內核,最後再切到用戶態去運行用戶態的啟動流程。