以centos6.9為例,系統啟動流程如下
post --> boot sequence(bios)-->bootloader --> grub --> kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 設定預設執行級別 --> 系統初始化指令碼rc.sysinit --> 關閉或啟動對應級別的服務 --> 啟動終端
1.加電自檢post(power on self test)
主機加電開機後,首先進行硬體自檢。主機通電後,主機板會自動讀取rom中的程式,並從cmos中載入bios資訊,負責完成對cpu、主機板、記憶體、硬碟子系統、顯示子系統、串並行介面、鍵盤、cd-rom光碟機等硬體情況的檢測。如遇到硬體故障的話將按兩種情況進行處理:對於嚴重故障(致命性故障)則直接停機,此時由於各種初始化操作未完成,不能給出任何提示或訊號;對於非嚴重故障,則會給出相應的提示或聲音報警訊號,等待使用者處理。如果沒有遇到故障,則加電自檢通過,將後續工作交接給bios處理。
2.啟動順序boot sequence
post完成後,系統控制權轉交到bios,bios通過預設的引數識別基礎硬體裝置,啟動硬體初始化;同時按照系統啟動順序依次查詢各引導裝置,第乙個有引導程式的裝置即為本次啟動用到裝置(一般為本地硬碟)。bios完成相關工作後,將後續工作交接給mbr中的bootloader處理。
3.啟動載入bootloader
硬碟上第0頭0道第1扇區被稱為mbr(master boot record),即主引導記錄。雖然mbr僅有512個位元組,但卻存放了前446個位元組的啟動載入器(bootloader,其中裝有grub)、中間64個位元組的磁碟分割槽表(disk partition table)以及最後2個位元組的結束標識(magic number)。啟動裝置讀取mbr中前個446位元組的bootloader尋找grub,接著讀取mbr後的扇區來識別磁碟分割槽表dpt以及核心kernel所在的區域,最後啟動grub。
4.引導載入器grub(grand uniform bootloader)
第1階段(stage 1)
讀取磁碟裝置上第0頭0道第1扇區的mbr;用來載入第2階段, 只存放了bootloader的部分**
第1.5階段(stage 1.5)
讀取mbr之後的扇區,讓第1階段中的bootloader能夠識別到第2階段所在分割槽上的檔案系統
第2階段(stage 2)
找到grub的配置檔案(/boot/grub/grub.conf <-- /etc/grub.conf或/boot/grub2/grub.cfg),並根據其中的預設內容給使用者提供乙個可選擇的選單,用於選擇想要啟動的系統或核心版本。同時stage2即/boot/目錄下還提供了linux系統核心檔案(vmlinuz檔案)和虛擬檔案系統檔案(initramfs)等其它核心檔案。
最後,grub把使用者選定的啟動系統或核心裝載到記憶體中的特定空間中解壓、展開,並把系統控制權移交給核心kernel。
5.載入kernel
自身初始化
探測可識別到的所有硬體裝置;
載入硬體驅動程式(有可能會借助於ramdisk載入驅動);
以唯讀方式掛載根檔案系統rootfs;
切換至根檔案系統switchroot;
執行使用者空間的第乙個應用程式:/sbin/init
至此,核心初始化完成,後續任務交給使用者空間程式,只在模式切換或系統發生中斷時,核心才會參與。
6.初始化init
/sbin/init最主要的功能就是準備系統執行環境,包括系統的主機名稱、網路配置、語系處理、檔案系統格式及其他服務的啟動等
init程式的型別:
centos 5:sysv init
配置檔案:/etc/inittab
centos 6:upstart init
配置檔案:/etc/inittab, /etc/init/*.conf
centos 7:systemd systemd
配置檔案:/usr/lib/systemd/system, /etc/systemd/system
7.配置檔案/etc/inittab,設定預設執行級別
執行級別:為了系統的執行或維護等應用目的而設定;
0-6:7個級別
0:關機
1:單使用者模式(root, 無須登入), single, 維護模式;
2: 多使用者模式,會啟動網路功能,但不會啟動nfs;維護模式;
3:多使用者模式,正常模式;文字介面;
4:預留級別;可同3級別;
5:多使用者模式,正常模式;圖形介面;
6:重啟
8.配置檔案/etc/rc.d/rc.sysinit,執行系統初始化指令碼,完成系統初始化
(1) 設定主機名;
(2) 設定歡迎資訊;
(3) 啟用udev和selinux;
(4) 掛載/etc/fstab檔案中定義的檔案系統;
(5) 檢測根檔案系統,並以讀寫方式重新掛載根檔案系統;
(6) 設定系統時鐘;
(7) 啟用swap裝置;
(8) 根據/etc/sysctl.conf檔案設定核心引數;
(9) 啟用lvm及software raid裝置;
(10) 載入額外裝置的驅動程式;
(11) 清理操作;
9.對應指令碼程式,關閉需要關閉的服務,啟動需要啟動服務
根據執行級別的不同,系統會執行/etc/rc.d/rc0.d到/etc/rc.d/rc6.d中的響應的指令碼程式,來完成相應服務的關閉和啟動,並執行使用者自定義開機啟動程式指令碼/etc/rc.d/rc.local。
10.配置檔案/sbin/mingetty,設定啟動終端
mingetty會呼叫/etc/login程式,登入成功後,整個系統啟動流程完成。
linux啟動流程
linux系統主要通過以下步驟啟動 讀取mbr的資訊,啟動boot manager windows使用ntldr作為boot manager,如果您的系統中安裝多個版本的windows,您就需要在ntldr中選擇您要進入的系統。linux通常使用功能強大,配置靈活的grub作為boot manage...
linux啟動流程
bios basic input output system mbr main boot record kernel kernel自解壓 核心初始化 核心啟動 start kernel 自身為0 程序,建立1 程序執行,直接執行在物理記憶體空間上,沒有虛位址。1 程序裝入並執行程式 sbin ini...
Linux啟動流程
下面簡單介紹下啟動,詳細的後續再補。1.載入bios的硬體資訊並進行自我測試,並依據設定取得第乙個可以啟動的裝置 2.讀取並執行第乙個裝置內的mbr master boot record,硬碟的主引導記錄 的boot loader 即是grub,spfdisk等程式 3.依據boot loader的...