詳解Linux系統(tǒng)啟動過程:從BIOS自檢到登錄界面
Linux系統(tǒng)的啟動過程可概括為:BIOS自檢 → 引導(dǎo)加載程序(GRUB/LILO) → 內(nèi)核加載 → init進(jìn)程啟動 → 系統(tǒng)初始化 → 登錄界面。 下面將對各個階段進(jìn)行詳細(xì)闡述:
計算機(jī)啟動后,BIOS首先進(jìn)行POST (Power-On Self-Test) 自檢,檢測硬件。此后,BIOS根據(jù)CMOS設(shè)置的引導(dǎo)順序,從硬盤、軟盤或光驅(qū)等設(shè)備讀取引導(dǎo)扇區(qū)。Linux系統(tǒng)通常從硬盤的MBR (Master Boot Record) 開始引導(dǎo),MBR位于磁盤的第一個扇區(qū)(0柱面0磁頭1扇區(qū))。BIOS將控制權(quán)交給MBR中的引導(dǎo)加載程序。 要查看MBR內(nèi)容,可以使用以下命令(需root權(quán)限):
dd if=/dev/sda of=mbr.bin bs=512 count=1 od -xa mbr.bin
(/dev/sda替換為你的引導(dǎo)磁盤)
GRUB和LILO是常見的引導(dǎo)加載程序,負(fù)責(zé)加載操作系統(tǒng)內(nèi)核。GRUB擁有交互式命令界面,支持網(wǎng)絡(luò)引導(dǎo),其配置文件錯誤不會導(dǎo)致系統(tǒng)無法啟動;而LILO則相反。 兩者都讀取MBR中的引導(dǎo)信息,但GRUB更靈活,能支持多個操作系統(tǒng)。
引導(dǎo)加載程序加載內(nèi)核映像(zImage或bzImage)到內(nèi)存。內(nèi)核映像是壓縮的,加載后會進(jìn)行解壓,并放入高端內(nèi)存。如有初始RAM磁盤映像,也會被加載。 內(nèi)核加載完成后,開始內(nèi)核引導(dǎo)過程。
內(nèi)核引導(dǎo)完成后,啟動init進(jìn)程 (PID為1)。init進(jìn)程是所有其他進(jìn)程的祖先,負(fù)責(zé)系統(tǒng)初始化和運行級別管理。它扮演終結(jié)父進(jìn)程的角色,并根據(jù)/etc/inittab (或systemd)文件執(zhí)行相應(yīng)的腳本,進(jìn)行系統(tǒng)初始化工作,例如設(shè)置鍵盤、字體、加載模塊、配置網(wǎng)絡(luò)等。
init進(jìn)程根據(jù)/etc/inittab (或systemd)文件執(zhí)行一系列初始化腳本,例如/etc/rc.d/rc.sysinit,完成系統(tǒng)初始化。 初始化完成后,系統(tǒng)進(jìn)入登錄界面,等待用戶登錄。
通過以上步驟,Linux系統(tǒng)完成啟動過程,進(jìn)入可操作狀態(tài)。 需要注意的是,現(xiàn)代Linux系統(tǒng)普遍使用systemd代替?zhèn)鹘y(tǒng)的init系統(tǒng),其啟動流程更為復(fù)雜,但基本原理與上述過程類似。