Linux啟動過程及系統初始化

一、前言

    服務器在正常的運行過程中,很少有重啟的機會。在正常的情況下,也很少有出現啟動異常的情況,但是在遭到了人為或者誤操作的情況后,可能會出現啟動異常的情況。為了加深學習系統啟動流程,能夠更加深入理解Linux系統的啟動流程??偨Y了這篇文字。

二、簡述啟動流程

    在服務器被加電后,大體流程如下:POST—->MBR(bootloader)—->kernel(ramdisk)—->掛載rootfs(ro)—->運行/sbin/init—->運行系統初始化腳本—->啟動終端

1、第一階段POST(POWER ON and SELF TEST即加電自檢)是主板上的BIOS系統在加電后自動檢測硬件設備比如:cpu、內存、主板等等,加載各種硬件運行參數,確保硬件正常運行,保護硬件的作用。如果在此過程中出現故障,一般會有提示音?;蛘邥谄聊簧厦骘@示故障信息,提醒用戶處理;如果正常,則進入下一步,根據BIOS的設定的啟動順序(BootLoader),找到第一序列的啟動設備,一般是的啟動設備就是硬盤(在特定的情況下也有光盤或者U盤)。

2、在找到第一啟動設備后,系統會去讀該設備的MBR(Master Boot Record),然后系統就可以根據引導加載程序(Boot Loader)開始執行以下的工作:

    BootLoader主要安裝在啟動設備的第一個扇區.系統會在第一個扇區446bytes加載grub程序成為一個階段,以及在加載2-27扇區的第1.5階段,最后找到/boot/grub,完成第二階段。在Linux系統目錄下,有一個/boot目錄,里面有grub目錄以及VMLinuz(內核)、initramfs等文件。

blob.png

而在grub目錄中,則有grub啟動的第一階段、第1_5階段以及第二階段,還有grub的配置文件(grub.conf)提供啟動配置。

blob.png

    3、grub在啟動的過程中提供啟動菜單、并提供交互式接口;加載用戶選擇的內核或者操作系統;為菜單提供保護機制。同時,編輯grub的配置文件grub.conf能夠改變啟動是提供給用戶的交互接口。grub.conf的內容如下:

blob.png

相應的配置:

    default=#: 設定默認啟動的菜單項;落單項(title)編號從0開始
    timeout=#:指定菜單項等待選項選擇的時長
    splashimage=(hd#,#)/PATH/TO/XPM_FILE:菜單背景圖片文件路徑
    hiddenmenu:隱藏菜單
    password [–md5] STRING: 啟動菜單編輯認證
    title TITLE:定義菜單項“標題” , 可出現多次
    root (hd#,#)grub查找stage2kernel文件所在設備分區;為grub“根”
    kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:啟動的內核
    initrd /PATH/TO/INITRAMFS_FILE: 內核匹配的ramfs文件
    password [–md5] STRING: 啟動選定的內核或操作系統時進行認證

    在啟動的時候,grub提供的界面如下:

blob.png

供用戶選擇在配置文件grub.conf里面設置啟動選項,通過下面的提示符,可以進入某一個選項,里面的配置如下:

blob.png

是不是和在配置文件里面看到的一樣。如果在配置文件里面加入password字段的話,要進入這個界面是需要密碼的,這也提供了很好的保護機制,不是每個人都有權利進入這個界面的。

    當啟動流程進入這個步驟后,下一步就是grub程序的引導下找到/boot目錄下找到內核文件以及為服務加載內核的文件initramfs。然后就是將內核文件成功的加載到內存中。

    4、內核加載完成后,就可以掛載根文件系統(rootfs)。但是要加載rootfs,就必須要其下的設備,而設備的驅動是在根文件系統中,而根文件系統現在還沒有掛載就沒辦法取得設備的驅動,這就形成了一個死循環。而/boot下面的initramfs文件就是解決這一問題的。為加載后的內核提供根文件系統的所在設備的驅動,讓能正常掛載。initramfs文件里面的內容如下:

blob.png

可以看見它提供了很多為掛載根文件系統的很多程序以及驅動。將initramfs加載后,相當于運行了一個過度系統,該系統有根文件系統的設備驅動,能夠將其掛載上,但是,此時掛載的根文件系統是以只讀的方式。到此內核空間的任務完成,開始進入用戶空間的進程。

    5、進入用戶空間流程,執行的第一個程序就是/sbin/init,該程序完成了用戶空間的啟動流程,完成后啟動/etc/inittab文件,初始化用戶空間。/顎突出/inittab如下:

blob.png

設定啟動的默認模式,默認的是多用戶命令行模式:

    0:關機

    1:單用戶模式

    2:不帶網絡文件系統個功能的多用戶模式

    3:多用戶模式

    4:未設置

    5:圖形界面模式

    6:重新啟動

blob.png

上圖中小框的內容是系統初始化腳本:

     (1)設置主機名

    (2) 設置歡迎信息

    (3) 激活udev和selinux

    (4) 掛載/etc/fstab文件中定義的文件系統

    (5) 檢測根文件系統,并以讀寫方式重新掛載根文件系統

    (6) 設置系統時鐘

    (7) 激活swap設備

    (8) 根據/etc/sysctl.conf文件設置內核參數

    (9) 激活lvm及software raid設備

    (10) 加載額外設備的驅動程序

    (11) 清理操作

大框內的內容是設定不同啟動模式下的服務啟動配置:在/etc/rc.d目錄下的文件是這樣的

blob.png

rc#.d中的數字#代表是7中啟動模式,每個目錄定義的是在不同的啟動模式下啟動或關閉的服務的設置,里面的文件如下:

blob.png

里面的文件按都是以S#和K#開頭的文件,且都是軟連接的文件,它們都指向/etc/init.d目錄下的文件,K即kill,代表在該模式下停止服務,S為start,代表在不同的模式下啟用服務,數字定義服務開啟或者關閉的順序。而每個文件的格式如下:

blob.png

框內的為固定格式,chkconfig后面的3組數字分別代表在3、4、5模式下的動作(啟動或者關閉)、啟動順序和關閉順序。

blob.png

上圖從上到下分別定義:

    a、定義ctrl+alt+delete組合鍵的功能

    b、定義在斷電是ups電源的設定

    c、設置虛擬終端,可以通過修改這些設置添加或者減少虛擬終端

    d、定義圖像界面啟動設置

在/etc/rc.d中有一個腳本rc.local,在開機最后加載,可以根據自己的需求將一些執行命令或是腳本寫到里面,當開機時,就可以加載。

blob.png

最后,完成所有用戶空間的設置,進入登錄提示界面,啟動完成。

總結,在整個啟動過程中,至關重要的文件有:

    A、boot 一般將這個目錄單獨分區掛載為簡單分區

    B、grub以及grub.conf文件

    C、vmlinuz以及initrd文件

    D、/etc/inittab腳本

    E、/etc/rc.d/rc.sysinit腳本等

原創文章,作者:王更生,如若轉載,請注明出處:http://www.www58058.com/60456

(0)
王更生王更生
上一篇 2016-11-22 17:01
下一篇 2016-11-23 13:54

相關推薦

  • 網絡23期心得

    1、描述計算機的組成及其功能 計算機系統是由五大部分組成:運算器、控制器、存儲器、輸入設備、輸出設備   運算器(Datapath):運算器的功能是對數據進行各種算術去處和邏輯運算,即對數據進行加工處理。   控制器(Control):控制器是整個計算機的中樞神經,其功能是對程序規定的控制信息進行解釋,根據其要求進行控制,調度程序、數據、…

    Linux干貨 2016-09-19
  • Linux文件權限管理及目錄文件的深入理解。

    文件權限及目錄 初學Linux,感覺這個東西該復雜,而且邏輯非常的強。難~! 自己根據學習到的理論和實踐,得出的對文件權限,進程,以及特殊權限的深入理解。希望能解決初學者對于權限的困惑。如有錯誤請指正。 文件的權限,指定的是什么? 是文件的權限位上的權限,針對三類用戶,任何用戶都必須是三類用戶中的一種,屬主屬組和其他人的權限rwx   &…

    Linux干貨 2016-08-10
  • lvs初探

    1,lvs是什么 lvs是Linux Virtual Server縮寫,linux虛擬服務器,擔任負載調度器(load balance)的角色,它不提供任何服務,用戶請求到這里的時候,它是將客戶需求轉發至后端真正提供服務的服務,LVS分為兩部分組成,ipvsadm管理集群服務的命令行工具,ipvs,是內核模塊。由于ipvs采用基于ip負載均衡技術,所以具有很…

    Linux干貨 2016-10-30
  • linux中用戶、組和權限認識

    linux中用戶、組和權限認識 Linux 用戶和組的主要配置文件:/etc/passwd :用戶及其屬性信息( 名稱、UID 、主組ID 等)                  …

    Linux干貨 2017-02-23
  • 海量數據處理算法—Bloom Filter

    1. Bloom-Filter算法簡介         Bloom-Filter,即布隆過濾器,1970年由Bloom中提出。它可以用于檢索一個元素是否在一個集合中。        Bloom Filter(BF)是一種空間效率很高的隨機數據結構,它利用位數組很簡潔地表…

    Linux干貨 2015-10-22
  • 第九周

    統計可登錄shell與不能登陸shell的個數 2. 寫一個腳本 3.寫一個腳本    4、寫一個腳本,完成如下功能 腳本能夠接受一個參數。 (1) 如果參數1為quit,則顯示退出腳本,并執行正常退出。 (2) 如果參數1為yes,則顯示繼續執行腳本。 (3) 否則,參數1為其它任意值,均執行非正常退出。    5、…

    Linux干貨 2016-12-26
欧美性久久久久