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啟動流程
過程的文字描述
- 加載BIOS的硬件信息(POST),獲取第一個啟動設(shè)備 (上圖的深粉紅色箭頭部分)蚯窥。
- 讀取第一個啟動設(shè)備MBR的引導(dǎo)加載程序。(grub)的啟動信息(上圖綠藍(lán)色箭頭)塞帐。
- 加載核心操作系統(tǒng)的核心信息,核心開始解壓縮,并嘗試驅(qū)動所有的硬件設(shè)備(上圖最后一個綠色箭頭)拦赠。
- 核心執(zhí)行init程序并獲取運行信息。(讀取/etc/initt)
- init執(zhí)行/etc/rc.d/rc.sysinit這個系統(tǒng)管理shell腳本文件葵姥。
- 啟動核心的外掛模塊(/etc/modprobe.conf)荷鼠。
- init執(zhí)行運行的各個批處理文件(scripts)。
- init執(zhí)行/etc/rc.d/rc.local榔幸。
- 執(zhí)行/bin/login程序,等待用戶登錄允乐。
- 登錄之后開始以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/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
這兩種文件如果損壞時的修復(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)容:
- 設(shè)置主機(jī)名
- 設(shè)置歡迎信息
- 激活udev和selinux
- 掛載/etc/fstab文件中定義的文件系統(tǒng)
- 檢測根文件系統(tǒng),并以讀寫方式重新掛載根文件系統(tǒng)
- 設(shè)置系統(tǒng)時鐘
- 激活swap設(shè)備
- 根據(jù)/etc/sysctl.conf文件設(shè)置內(nèi)核參數(shù)
- 激活lvm及software raid設(shè)備
- 加載額外設(shè)備的驅(qū)動程序
- 清理操作