大家好,我是高勝寒,本文是Linux運維-循序漸進學運維-基礎篇的第59篇文章
文章目錄
前言
七月新秋風露早,今天我們一起聊聊Linux啓動過程及相關的配置文件。 我們以centos6爲例,一起來研究一下它的啓動過程
centos 6的啓動過程
centos6的啓動過程,包含以下幾個部分
- 加載BIOS硬件信息
- grub引導
- 加載kernel
- 加載init進程
- 讀取/etc/inittab配置文件
- 執行 /etc/rc.d/rc.sysinit腳本
- 執行/etc/rc.d/rc腳本
- 啓動mingetty進程,等待用戶登錄系統
1. 加載BIOS硬件信息
a) 通電自檢
系統通電之後,主板的BOIS 運行POST(Power on self test)代碼,檢測系統外圍的一些設備,比如: cpu,內存,顯卡,IO,鍵盤鼠標等。
b) MBR引導
檢測通過後,根據BIOS裏boot設置的(光驅,硬盤,網盤)啓動順序,搜索相應的啓動驅動器,並獲取第一個啓動設備的代號。讀取第一個啓動設備的MBR的引導加載程序(lilo,grub,spfdisk)啓動信息,從MBR中加載啓動引導管理器(grub),並運行該啓動引導管理,進入grub啓動引導階段。
注意: MBR引導記錄: 用於引導磁盤空間小於2T的空間
GPT引導記錄: 用於引導磁盤空間大於2T的空間
2. grub引導
所謂的grub引導,就是讀取MBR的boot Loader
MBR的硬盤的0柱面、0磁頭、1扇區稱爲主引導扇區(也叫主引導記錄MBR)。它由三個部分組成,主引導程序、硬盤分區表DPT(Disk Partition table)和硬盤有效標誌(55AA)
備註: 爲什麼MBR分區表,只能分四個主分區?
注:磁盤默認一個扇區大小爲:512字節。MBR由以下3部分組成:
第一部分是:主引導程序(boot loader)佔446個字節。主引導程序,它負責從活動分區中裝載,並運行系統引導程序。
第二部分是Partition table區(分區表),即DPT,佔64個字節,硬盤中分區有多少以及每一分區的大小都記在其中。每個分區表項長16個字節,164=64字節。爲分區項1、分區項2、分區項3、分區項4。64字節只存4個分區表。
第三部分是MBR有效標識位,佔2個字節,固定爲55AA。如果這個標誌位0xAA55,就認爲這個是MBR。
所以:164+446+2=512
3. 加載(內核)kernel
依據 boot loader 的設定,到引導分區加載 Kernel ,Kernel 會開始偵測硬件並加載驅勱程序;
4. 加載init進程
在硬件驅動成功後,Kernel 會主動執行 init 程序,而 init 會取得 run-level 信息;
init是執行的第一個程序,所以他的進程編號pid =1 ,其他的進程都是從它衍生出來的,都是它的子進程。
前面我們有提到過,對於孤兒進程,一般是送到init進程來處理。
5. 讀取/etc/inittab配置文件
init 執行 /etc/rc.d/rc.sysinit 文件來準備軟件執行的作業環境 (如網絡、時區主機名,selinux等);
6. 執行 /etc/rc.d/rc.sysinit腳本
init 執行 run-level 下各個服務並啓動 (script 方式);
腳本的內容是:
- 獲取網絡環境和主機類型
- 測試掛載/proc /sys /usb 等裝置
- 決定是否啓動selinux
- 周邊設備的偵測
- 讀取.etc.sysctl.conf 檔案中的設定值
- 設定系統時間
- 設定終端字形
- 設定RAID,LVM功能
- 使用fsck檢測文件系統
- 清除開機中的暫存檔案 將開機相關信息載入/var/log/dmesg檔案中
7. 執行/etc/rc.d/rc腳本
init 執行開機後自動運行腳本 /etc/rc.d/rc.local 文件;
這個腳本主要是一些自動以的開機啓動程序,如果你想開啓時啓動什麼內容,可以在裏面寫
可以看到這裏創建了一個 /var/lock/subsys/local 這個文件的創建只是爲了證明rc.local 這個腳本已經執行過了,目的在於避免這個腳本重複執行。
在系統裏會有一個star()的函數來判斷文件是否已經創建,如果已經創建,後面讀取的時候就不會在去重建,避免系統重複啓動。
8. 啓動mingetty進程,等待用戶登錄系統
所有的服務都運行成功後,接下來進入登錄用戶系統的操作, 返回init , 這時候初始環境都已經配好了, init 打開虛擬終端機控制程序 mingetty 來啓動 login 程序,最後就等待用戶登入
虛擬終端由 mingetty程序產生的:
語法:
mingetty [–long-hostname][–noclear][tty]
9. 登錄系統,啓動完成
當我們看到mingetty的登錄界面的時候,就可以輸入用戶名和密碼了。
login會接收mingetty傳來的用戶名作爲用戶名的參數,先判斷用戶名不是root,且存在/etc/nologin文件,然後輸出nologin的文件內容並退出,這樣做一般是爲了防止非root用戶登錄。
之後就可以根據passwd ,和shadow來驗證賬號的信息。
啓動相關的配置文件
1. boot目錄
[root@ecs-c13b ~]# ls /boot
config-2.6.32-696.el6.x86_64
config-2.6.32-754.27.1.el6.x86_64
efi
grub
initramfs-2.6.32-696.el6.x86_64.img
initramfs-2.6.32-754.27.1.el6.x86_64.img
initrd-2.6.32-754.27.1.el6.x86_64kdump.img
symvers-2.6.32-696.el6.x86_64.gz
symvers-2.6.32-754.27.1.el6.x86_64.gz
System.map-2.6.32-696.el6.x86_64
System.map-2.6.32-754.27.1.el6.x86_64
vmlinuz-2.6.32-696.el6.x86_64
vmlinuz-2.6.32-754.27.1.el6.x86_64
查看grub的配置文件
(圖片有註釋)
2. 運行級別
運行級別一共有6個:
# 0 - 停機(千萬別把initdefault設置爲0,否則系統永遠無法啓動)
# 1 - 單用戶模式
# 2 - 多用戶,沒有 NFS
# 3 - 完全多用戶模式(標準的運行級)
# 4 – 系統保留的
# 5 - X11 (x window)
# 6 - 重新啓動 (千萬不要把initdefault 設置爲6,否則將一直在重啓 )
總結
centos6的啓動和centos7有點區別,但大同小異,下一篇文章我們來討論centos7的啓動過程。
如果是面試問到啓動過程:
加點自檢-內核引導-運行init-系統初始化-建立終端-用戶登錄系統
我是高勝寒,一個在教培行業,不忘初心的人,歡迎點贊收藏,我們下篇文章再見!