【linux】循序漸進學運維-基礎篇-Linux系統啓動原理

大家好,我是高勝寒,本文是Linux運維-循序漸進學運維-基礎篇的第59篇文章

前言

七月新秋風露早,今天我們一起聊聊Linux啓動過程及相關的配置文件。 我們以centos6爲例,一起來研究一下它的啓動過程

centos 6的啓動過程

centos6的啓動過程,包含以下幾個部分

  1. 加載BIOS硬件信息
  2. grub引導
  3. 加載kernel
  4. 加載init進程
  5. 讀取/etc/inittab配置文件
  6. 執行 /etc/rc.d/rc.sysinit腳本
  7. 執行/etc/rc.d/rc腳本
  8. 啓動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。
所以:16
4+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-系統初始化-建立終端-用戶登錄系統

我是高勝寒,一個在教培行業,不忘初心的人,歡迎點贊收藏,我們下篇文章再見!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章