Linux(CentOS5/6)開機(jī)啟動流程

Linux的組成:內(nèi)核 & 根文件系統(tǒng)(rootfs)

  • kernel (核心文件地址:/boot/vmlinuz-release,模塊文件地址:/lib/modules/release)

進(jìn)程管理纳账、內(nèi)存管理旭绒、網(wǎng)絡(luò)管理冤今、驅(qū)動程序绍填、文件系統(tǒng)潮改、安全功能止剖。支持模塊化(.ko內(nèi)核模塊對象)的動態(tài)裝載與卸載媚值。

  • rootfs(根文件系統(tǒng))

符合FHS文件層級結(jié)構(gòu)
程序: 二進(jìn)制執(zhí)行文件
glibc(庫): GNU發(fā)布的libc庫红省,即c運行庫。glibc是linux系統(tǒng)中最底層的api晶疼,幾乎其它任何運行庫都會依賴于glibc函數(shù)集合, function, 調(diào)用接口(頭文件負(fù)責(zé)描述)
過程調(diào)用: procedure酒贬,無返回值又憨。
函數(shù)調(diào)用: function。

內(nèi)核設(shè)計流派

  • 單內(nèi)核:Linux

把所有功能集成于同一個程序锭吨。

  • 微內(nèi)核:Window

每種功能使用一個單獨的子系統(tǒng)實現(xiàn)蠢莺。

Linux內(nèi)核

  • Linux內(nèi)核特點:

支持模塊化、支持模塊(.ko)運行時動態(tài)裝載或卸載

  • Linux內(nèi)核組成:

1.核心文件 ---> 例如/boot/vmlinuz-3.10.0-229.el7.x86_64
ramdisk:把內(nèi)存中的某一段空間當(dāng)磁盤用零如。它是一個臨時的根文件系統(tǒng)躏将。當(dāng)真正的根文件系統(tǒng)掛載后會將其“擠走”。對發(fā)行版本它是必須的考蕾,但對于個人編譯的內(nèi)核來說其并不是必需的祸憋。例如/boot/initramfs-2.6.32-642.el6.x86_64.img CentOS5上叫做initrd。(知道為什么會改名嗎肖卧?)
2.模塊文件 ---> 例如/lib/modules/3.10.0-229.el7.x86_64/

CentOS啟動流程

CentOS啟動流程圖
過程的文字描述
  1. 加載BIOS的硬件信息(POST),獲取第一個啟動設(shè)備 (上圖的深粉紅色箭頭部分)蚯窥。
  2. 讀取第一個啟動設(shè)備MBR的引導(dǎo)加載程序。(grub)的啟動信息(上圖綠藍(lán)色箭頭)塞帐。
  3. 加載核心操作系統(tǒng)的核心信息,核心開始解壓縮,并嘗試驅(qū)動所有的硬件設(shè)備(上圖最后一個綠色箭頭)拦赠。
  4. 核心執(zhí)行init程序并獲取運行信息。(讀取/etc/initt)
  5. init執(zhí)行/etc/rc.d/rc.sysinit這個系統(tǒng)管理shell腳本文件葵姥。
  6. 啟動核心的外掛模塊(/etc/modprobe.conf)荷鼠。
  7. init執(zhí)行運行的各個批處理文件(scripts)。
  8. init執(zhí)行/etc/rc.d/rc.local榔幸。
  9. 執(zhí)行/bin/login程序,等待用戶登錄允乐。
  10. 登錄之后開始以shell控制主機(jī)。
啟動流程相關(guān)名詞說明
相關(guān)名詞 說明
POST Power On Self Test 即加電自檢牡辽,包含ROM與RAM喳篇。 是BIOS功能的一個主要部分.負(fù)責(zé)完成對CPU、主板 內(nèi)存 硬盤子系統(tǒng)态辛、顯示子系統(tǒng)麸澜、串并行接口、鍵盤 CD-ROM漁區(qū)等硬件情況的檢測奏黑。
ROM BIOS里保存著POST等運行程序代碼的內(nèi)存空間炊邦。
BIOS Basic Input and Output System, 保存著有關(guān)計算機(jī)系統(tǒng)最重要的基本輸入輸出程序,系統(tǒng)信息設(shè)置、開機(jī)加電自檢程序和系統(tǒng)啟動自舉程序等熟史。
RAM CMOS互補(bǔ)金屬氧化物半導(dǎo)體馁害,保存各項參數(shù)的設(shè)置。斷電即丟蹂匹,但主板有電池所以不影響碘菜。
Boot Sequence 按次序查找各引導(dǎo)設(shè)備,第一個有引導(dǎo)程序的設(shè)備即為本次啟動要用到的設(shè)備。
bootloader 引導(dǎo)加載器忍啸,引導(dǎo)程序仰坦。提供一個菜單,允許用戶選擇要啟動的系統(tǒng)或不同的內(nèi)核版本计雌,把用戶選定的內(nèi)核裝載到RAM中的特定空間中悄晃,對其解壓展開,而后把系統(tǒng)控制權(quán)移交給內(nèi)核凿滤。Window:ntloader;Linux:LILO,GRUB
Grub grand unified bootloader妈橄,分為0.x與1.x版,其中1.x版為重寫幾乎與0.x沒什么關(guān)系了翁脆。0.x又稱為Grub Legacy眷蚓,CentOS7上已改名為grub2。
MBR 前446個bytes的bootloader的一個階段的代碼反番、中間64bytes的分區(qū)表溪椎、最后2個bytes為MagicNumber,通程窨冢“55AA”表示有效。

Grub詳細(xì)說明 (更詳細(xì)內(nèi)容見grub詳解)

分成1段:
第一段1st stage:446個bytes在MBR里(備份文件地址:/boot/grub/stage1)沼侣;其任務(wù)是加載Grub的第二階段祖能。
第二段filesystem driver 1.5stage:secondary boot load(備份文件在/boot/grub/xx_stage1_5);mbr之后的扇區(qū)蛾洛,讓stage1中的bootloader能識別stage2所在的分區(qū)上的文件系統(tǒng)养铸。
第三段2nd stage:分區(qū)文件(系統(tǒng)備份在/boot/grub/stage2),其任務(wù)是將內(nèi)核加載到內(nèi)存中。開機(jī)菜單出現(xiàn)則說明系統(tǒng)進(jìn)入/boot目錄準(zhǔn)備加載內(nèi)核了轧膘。*

Kernel過程

  • 自身初始化
    -- 探測可識別到的所有硬件設(shè)備
    -- 加載硬件驅(qū)動程序(有可能加載ramdisk加載驅(qū)動)
    -- 以只讀方式掛載根文件系統(tǒng)(為了避免kernel的bug或操作過程中的錯誤導(dǎo)致根文件系統(tǒng)的損壞)
    -- 運行用戶空間的第一個應(yīng)用程序:/sbin/init
 init程序的類型:
    CentOS5-: SysV init
        配置文件:/etc/inittab
    CentOS6: Upstart是SysVinit的改進(jìn)
        配置文件:/etc/inittab,主要是讀取/etc/init/*.conf
    CentOS7:Systemd
        配置文件:/usr/lib/systemd/system/, /etc/systemd/system/

/boot/grub/grub.conf文件(即開機(jī)內(nèi)核選擇菜單顯示內(nèi)容)
上圖結(jié)束后則grub引導(dǎo)結(jié)束將系統(tǒng)操作權(quán)交給kernel

/boot/initramfs-xxx.img(CentOS6)者/boot/initrd-xxx.img(CentOS5)必要的驅(qū)動程序钞螟,包括根文件系統(tǒng)的驅(qū)動程序等。這個文件是一個虛擬的文件系統(tǒng)谎碍,解壓出來的模樣類似于Linux根下的目錄鳞滨,解壓方式及內(nèi)容如下:

cp /boot/initramfs-2.6.32-642.el6.x86_64.img initramfs-2.6.32-642.el6.x86_64.img.gz
gunzip -d initramfs-3.9.0-rc3+.img.gz
ls
initramfs-2.6.32-642.el6.x86_64.img 
# 現(xiàn)在較新的initrd一般是cpio文檔格式,而很老的initrd(如Linux 2.4 kernel的年代)則直接就是普通image
# #### mount -o loop initrd-kernel-2.6.img /mnt/  ##基本很少見了
cpio -idmv < initramfs-2.6.32-642.el6.x86_64.img

initramfs.xx.img文件解壓的內(nèi)容

這兩種文件如果損壞時的修復(fù)工具命令: mkinitrd,CentOS6蟆淀、7上的mkinitrd其實是封裝了dracut程序只是為了兼容CentOS5拯啦,因為它們都是在安裝操作系統(tǒng)時根據(jù)根目錄的文件系統(tǒng)動態(tài)生成的,所以是可以隨時修復(fù)的熔任。用法示例:mkinitrd /boot/initrd- $(uname -r).img $(uname -r)

/etc/rc.d/rc.sysinit:這個腳本文件只在系統(tǒng)啟動時運行一次褒链,其定義了大致如下內(nèi)容:

  1. 設(shè)置主機(jī)名
  2. 設(shè)置歡迎信息
  3. 激活udev和selinux
  4. 掛載/etc/fstab文件中定義的文件系統(tǒng)
  5. 檢測根文件系統(tǒng),并以讀寫方式重新掛載根文件系統(tǒng)
  6. 設(shè)置系統(tǒng)時鐘
  7. 激活swap設(shè)備
  8. 根據(jù)/etc/sysctl.conf文件設(shè)置內(nèi)核參數(shù)
  9. 激活lvm及software raid設(shè)備
  10. 加載額外設(shè)備的驅(qū)動程序
  11. 清理操作
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市疑苔,隨后出現(xiàn)的幾起案子甫匹,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兵迅,死亡現(xiàn)場離奇詭異抢韭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)喷兼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進(jìn)店門篮绰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人季惯,你說我怎么就攤上這事吠各。” “怎么了勉抓?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵贾漏,是天一觀的道長。 經(jīng)常有香客問我藕筋,道長纵散,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任隐圾,我火速辦了婚禮伍掀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘暇藏。我一直安慰自己蜜笤,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布盐碱。 她就那樣靜靜地躺著把兔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瓮顽。 梳的紋絲不亂的頭發(fā)上县好,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天,我揣著相機(jī)與錄音暖混,去河邊找鬼缕贡。 笑死,一個胖子當(dāng)著我的面吹牛儒恋,可吹牛的內(nèi)容都是我干的善绎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼诫尽,長吁一口氣:“原來是場噩夢啊……” “哼禀酱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起牧嫉,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤剂跟,失蹤者是張志新(化名)和其女友劉穎减途,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體曹洽,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡鳍置,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了送淆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片税产。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖偷崩,靈堂內(nèi)的尸體忽然破棺而出辟拷,到底是詐尸還是另有隱情,我是刑警寧澤阐斜,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布衫冻,位于F島的核電站,受9級特大地震影響谒出,放射性物質(zhì)發(fā)生泄漏隅俘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一笤喳、第九天 我趴在偏房一處隱蔽的房頂上張望为居。 院中可真熱鬧,春花似錦杀狡、人聲如沸颜骤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至八孝,卻和暖如春董朝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背干跛。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工子姜, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人楼入。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓哥捕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嘉熊。 傳聞我的和親對象是個殘疾皇子遥赚,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容