centos啓動

Linux 系統啓動流程

下面按照系統的啓動順序來進行逐一的講解。

一、POST

當我們按下開機的電源後,主板上的芯片組會首先向CPU發出一個reset指令,之後待芯片組檢測到電源供電穩定後便撤去reset指令,CPU就 會跳轉到BIOS中的啓動代碼位置; BIOS首先要檢測關鍵設備(如內顯、顯卡等)是否正常,這個過程就稱爲POST(加電後自檢)。

POST完成後BIOS會調用其它代碼來進行完整的硬件檢測。

二、(BIOS) boot sequence

引導次序:按次序找引導設備,第一個有引導程序的設備,即爲啓動PC Server所用到的設備。

三、MBR(Bootloader)

MBR(Mater Boot Record),即主引導記錄。其位置在第一個扇區的前512字節。Bootloader是安裝於MBR當中的引導 管理程序,早期比較常見的Bootloader程序爲LILO,但因爲其不支持1023柱面以後的分區,所以現在比較常用的爲GRUB。

GRUB(Grand Unified Bootloader)是由GNU下的FSF組織所推行的;CentOS 5和CentOS 6上使用的版本爲Grub 0.97,而CentOS 7上使用的版本爲Grub2 1.96。

下面以CentOS 6爲例來了解一下GRUB:

我們先來看一下系統的上GRUB目錄中的內容,如下圖所示:

p_w_picpath2017-2-9_8-48-56.png?version=1&modi

從上圖中可以看到stage1、*_stage1_5和stage2這三類文件,它們分別表示GRUB引導時的三個階段。

1)stage 1

stage 1文件其實是MBR中Bootloader的備份文件,雖然stage 1也是512B但只有前446B與MBR相同,後64B完成不一樣。

p_w_picpath2017-2-9_8-49-12.png?version=1&modip_w_picpath2017-2-9_8-49-34.png?version=1&modip_w_picpath2017-2-9_8-49-45.png?version=1&modi

2)stage1_5

grub目錄中存在許多以stage1_5結尾的文件,這些文件都是stage1_5階段功能的文件,裏面存放着文件系統的格式,其作用是連接stage1和stage2的一個通道。

stage1_5文件的內容保存在MBR後面的32K中;其實stage1.5文件會在安裝GRUB時安裝到MBR後的32K中,系統啓動時會直接讀取MBR後面的內容,即使這些文件不存在也不會影響GRUB的正常工作。

3)stage 2

在此階段會讀取grub.conf配置文件中設置信息來完成系統的引導,並且可以實現引導功能的擴展。

p_w_picpath2017-2-9_8-50-10.png?version=1&modi

GRUB的功能如下:

1)提供菜單,並提供交互式接口

e:進入編輯模式;

a:直接修改內核參數;

c:進入命令行模式。

2)選擇要啓動的內核或系統

允許傳遞引導參數給內核;

選擇界面可隱藏。

3)爲編輯功能提供機制

可以爲指定的內核得添加密碼。

grub.conf文件內容:

default=:選擇第幾個title配置的內核或系統,各title從0開始編號;

timeout=#:菜單顯示的超時時長;

splashp_w_picpath=/path/to/some-p_w_picpath_file:指定菜單背景圖片,此圖片只能爲14bits色,xpm格式,gzip壓縮;

hiddenmenu:隱藏菜單;

tiltle TITLE SIRING:顯示於菜單中的標題;

root:指定引導分區;

kernel:指明kernel的位置;

initrd:指明initramfs的位置。

四、kernel+ramdisk (initramfs)

在GRUB的選擇界面裏按e,進入編輯模式,可以看到kernel和ramdisk,如下圖所示:

p_w_picpath2017-2-9_8-50-28.png?version=1&modi

kernel是操作系統的內核程序,所有的軟硬件都是通過kernel來溝通的。在上圖中的vmlinuz文件就是開機時所用的kernel。

initrd(initial ramdisk),是激活系統所必須加載的文件系統。

當kernel被載入到內存後,需要加載相應驅動程來識別文件系統,這時initrd就充當了臨時的系統被掛載到rootfs上,其作用就是協助kernel來加載驅動程序。

五、/sbin/init(/etc/init/*.conf)設定默認運行級別

/sbin/init會使用/etc/init/目錄中的.conf配置文件來對系統進行配置,之後調用/etc/rc.d/rc.sysinit文件對系統進行初始化。

在進行系統配置的過程時,init會檢測系統默認的runlevel(運行級別),並根據runlevel的信息來做相應的配置,在說明啓動服務時會集中講解runlevel,這裏就只是先介紹一下CentOS的7個運行級別:

0:關機;

1:單用戶,s,S,single;

2:多用戶,不支持NFS功能;

3:完全多用戶,文本接口;

4:未使用,預留級別;

5:完全多用戶,圖形接口;

6:重啓。

六、使用/etc/rc.d/rc.sysinit初始化系統

1、設定主機名:讀取/etc/sysconfig/network文件中的HOSTNAME參數,並以之設定主機名;

2、打印文本歡迎信息;

3、激活SElinux和udev;

4、掛載/etc/fstab文件中定義的其它文件系統;

5、激活swap;

6、檢測根文件系統,並以讀寫方式重新掛載;

7、設置系統時鐘;

8、根據/etc/sysctl.conf設置內核參數;

9、激活LVM和RAID;

10、加載額外設備的驅動程序;

11、清理工作。

七、啓動或關閉指定服務

啓動指定的級別默認爲啓動的服務,停止指定的級別下默認爲關閉的服務。

/etc/rc.d/目錄中rc0.d-rc6.d這7個目錄中分別存放了不同運行級別啓動或關閉時所要執行的腳本。

p_w_picpath2017-2-9_8-50-48.png?version=1&modi

p_w_picpath2017-2-9_8-51-1.png?version=1&modif

以rc3.d爲例,在上面列出的所有腳本文件都是鏈接文件,其中:S##表示啓動的服務,K##表示要停止的服務,##的範圍是從0到99,數字越小,優先級越高。

根據系統默認的運行級別來調用各級別對應的腳本,默認運行級別在配置文件/etc/inittab中設置。

p_w_picpath2017-2-9_8-51-14.png?version=1&modi

也可以手動修改腳本的默認運行級別。

使用chkconfig命令來調整服務腳本在各運行級別下默認的啓動與關閉。

p_w_picpath2017-2-9_8-51-39.png?version=1&modi

如果期望自定義的腳本使用chkconfig來控制,需要按照以下步驟操作:

1、在腳本中添加以下語句:

#chkconfig: – 85 15

-:當此腳本由chkconfig控制時,默認哪些級別是開啓的,“-”表示全部級別;

85:啓動優先級;

15:關閉優先級;

2、將腳本複製到/etc/init.d/目錄中;

3、加入腳本到運行級別列表:

chkconfig –add 腳本名

從運行級別列表中刪除腳本:chkconfig –del 腳本名

/etc/rc.d/rc.local(/etc/rc.local):是一個腳本,通常爲系統啓動完成的最後運行的一個腳本。

八、顯示終端登錄界面



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