CentOS啓動流程

 

第一步、POST加電自檢

POST(Power On Self Test)首先對每一個設備進行檢查。完成後會尋找存有引導記錄的設備,找到後讀入操作系統引導記錄,然後將系統控制權交給引導記錄,並由引導記錄來完成系統的順利啓動。

 

第二步、MBR引導

MBR(Master Boot Record) MBR記錄一般是在磁盤 0 磁道 1 扇區,共512個字節。前446個字節是BootLoder,後 4*16 64 個字節是存放分區信息的,最後 2 個字節是校驗信息,一般是 55AA

 

第三步、GRUBGRand Unified Bootloader)加載內核

就是MBR中的前 446 個字節,是BooTLoader的一種,它的作用是要選擇要啓動的內核。

[root@Linux_1 grub]# ll

總用量 274

-rw-r--r--. 1 root root     6311 15 00:12 device.map

-rw-r--r--. 1 root root  1339211 15 00:12e2fs_stage1_5

-rw-r--r--. 1 root root  1263211 15 00:12fat_stage1_5

-rw-r--r--. 1 root root  1176011 15 00:12ffs_stage1_5

-rw-------. 1 root root    73711 15 00:12 grub.conf

-rw-r--r--. 1 root root  1176811 15 00:12 iso9660_stage1_5

-rw-r--r--. 1 root root  1328011 15 00:12jfs_stage1_5

lrwxrwxrwx. 1 root root     1111 15 00:12 menu.lst-> ./grub.conf

-rw-r--r--. 1 root root  1196811 15 00:12minix_stage1_5

-rw-r--r--. 1 root root  1442411 15 00:12reiserfs_stage1_5

-rw-r--r--. 1 root root   134111 15 2010splash.xpm.gz

-rw-r--r--. 1 root root    51211 15 00:12 stage1

-rw-r--r--. 1 root root 126108 11 15 00:12 stage2

-rw-r--r--. 1 root root  1203611 15 00:12ufs2_stage1_5

-rw-r--r--. 1 root root  1137611 15 00:12vstafs_stage1_5

-rw-r--r--. 1 root root  1397611 15 00:12xfs_stage1_5

 

stage:用於grub引導程序過大,所以分2段引導,第一段存放在MBR中,第二段存放於內核文件系統中,第一段引導完成後可以找到第二段。但是,第二段是存放於內核文件系統中的,此時還沒有格式化文件系統,如何可以訪問到第二段的 menu.lst 呢??就需要藉助於中間層stage1_5,有它來協助 stage1段來訪問 stage2 段。stage1_5通常位於 stage1 字段後的 63 個扇區。 由於stage2 在內存中存放可以使用的文件系統不確定,所以這就是有多個 stage1_5 的原因了。

 

 

1grub.conf 文件參數意義

default=1   # 默認啓動的內核title, 0 表示是第一個

timeout=5   # 默認等待時間

splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz    # 指定菜單的背景圖片的路徑。爲xpm格式,採用gzip壓縮,只能爲14bits

hiddenmenu    # 隱藏菜單

title CentOS (2.6.32-358.el6.x86_64)    # 標題名,用戶可自定義

   root (hd0,0)    # 指定 grub 的根位置

    #指定 kernel 文件的位置,還要指出 root(系統啓動後)的位置,掛載方式 ro,這項很關鍵。

    #加載後會啓動 init 進程。

   kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/vg0-rootrd_NO_LUKS rd_NO_DM.UTF-8 rd_LVM_LV=vg0/swap rd_NO_MDSYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg0/root  KEYBOARDTYPE=pc KEYTABLE=us rhgb crashkernel=autoquiet rhgb quiet

    #在內核啓動過程中裝載根文件系統時有用

initrd /initramfs-2.6.32-358.el6.x86_64.img

 

initramfs-2.6.32-358.el6.x86_64.img的本質

#initramfs 是以 gzip 壓縮的 cpio 格式的文件。內核啓動時將他作爲一個臨時的根文件系統

# grub stage2 initrd加載到內存裏,讓後將其中的內容釋放到內存中

# 內核便去執行init腳本,這時內核將控制權交給了init文件處理

#init 它也主要是加載各種存儲介質相關的設備驅動程序。當所需的驅動程序加載完後

# 會創建一個根設備,然後將根文件系統rootfs以只讀的方式掛載

# 這一步結束後,釋放未使用的內存,轉換到真正的根文件系統上面去,同時運行/sbin/init程序

# 執行系統的1號進程。此後系統的控制權就全權交給/sbin/init進程了

 

 

四、啓動 init 進程

init 進程是系統啓動的第一個進程。其他進程都是有此進程控制fork出來的,也就是說,init是其他進程的“祖先”,PID=1。當然,PID=0進程我們稱爲空閒進程是屬於內核的。

init啓動後所做的事情:

1、讀取/etc/inittab來讀取默認級別 假設:讀取到的默認級別是3

/etc/init/*.conf

0:關機shutdown init 0

1:單用戶模式(single user)無須認證,維護模式,直接登錄不需密碼

2:多用戶模式(multi user)會啓動網絡功能,但不會啓動NFS,維護模式

3:多用戶模式(multi user)完全功能模式,只是文本界面,不會啓動圖形界面

4:預留級別:目前無特別使用目的,但習慣以同3級別功能使用

5:多用戶模式(multi user)完全功能模式,圖形界面

6:重啓reboot

 

2、執行初始化系統腳本 /etc/rc.d/rc.sysinit

  • 獲取網絡環境與主機類型。首先會讀取網絡環境設置文件"/etc/sysconfig/network",獲取主機名稱與默認網關等網絡環境。 

  • 歡迎信息。 

  • 掛載/etc/fstab文件中定義的其它文件系統。 

  • 激活swap 

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

  • 決定是否啓動SELinuxudev 

  • 接口設備的檢測與即插即用(pnp)參數的測試。 

  • 用戶自定義模塊的加載。用戶可以再"/etc/sysconfig/modules/*.modules"加入自定義的模塊,此時會加載到系統中。 

  • 加載核心的相關設置。按"/etc/sysctl.conf"這個文件的設置值配置功能。 

  • 設置系統時間(clock)。 

  • 設置終端的控制檯的字形。 

  • 設置raidLVM等硬盤功能。 

  • 以方式查看檢驗磁盤文件系統。 

  • 進行磁盤配額quota的轉換。 

  • 重新以讀取模式載入系統磁盤。 

  • 啓動quota功能。 

  • 啓動系統隨機數設備(產生隨機數功能)。 

  • 清楚啓動過程中的臨時文件。 

  • 將啓動信息加載到"/var/log/dmesg"文件中

 

3、然後執行 /etc/rc.d/rc 腳本

 

此腳本運行的時候此腳本的時候,會讀取/etc/rc.d/rc3.d/下的所有腳本,來控制系統啓動的時候啓動或者關閉那些服務

[root@Linux_1 rc3.d]# pwd

/etc/rc.d/rc3.d

[root@Linux_1 rc3.d]# ll

總用量 0

lrwxrwxrwx. 1 root root 15 11 15 00:57 K80kdump -> ../init.d/kdump

lrwxrwxrwx. 1 root root 24 11 15 00:57 K84wpa_supplicant -> ../init.d/wpa_supplicant

lrwxrwxrwx. 1 root root 21 11 14 23:57 K87restorecond -> ../init.d/restorecond

lrwxrwxrwx. 1 root root 14 11 15 00:57 K88sssd -> ../init.d/sssd

lrwxrwxrwx. 1 root root 15 11 14 23:57 K89rdisc -> ../init.d/rdisc

lrwxrwxrwx. 1 root root 19 11 15 00:57 K95firstboot -> ../init.d/firstboot

lrwxrwxrwx. 1 root root 14 11 15 00:10 K99rngd -> ../init.d/rngd

lrwxrwxrwx. 1 root root 17 11 15 00:09 S01sysstat -> ../init.d/sysstat

lrwxrwxrwx. 1 root root 22 11 15 00:09 S02lvm2-monitor -> ../init.d/lvm2-monitor

lrwxrwxrwx. 1 root root 22 11 15 01:01 S03vmware-tools -> ../init.d/vmware-tools

lrwxrwxrwx. 1 root root 19 11 15 00:00 S08ip6tables -> ../init.d/ip6tables

lrwxrwxrwx. 1 root root 18 11 14 23:57 S08iptables -> ../init.d/iptables

lrwxrwxrwx. 1 root root 17 11 14 23:57 S10network -> ../init.d/network

lrwxrwxrwx. 1 root root 16 11 15 00:11 S11auditd -> ../init.d/auditd

lrwxrwxrwx. 1 root root 21 11 14 23:53 S11portreserve -> ../init.d/portreserve

lrwxrwxrwx. 1 root root 17 11 14 23:59 S12rsyslog -> ../init.d/rsyslog

 

#這裏面的腳本大致分爲 2 類,以 S 開頭的和以 K 開頭的腳本。 

# S 代表開機時啓動的,K 表示開機時不啓動。 

# 啓動的定義是在每個腳本中定義的:例如 

# # chkconfig: - 85 15 

# 默認級別 啓動次序 不啓動次序

 

 

4、執行/etc/rc.d/rc.local腳本,此腳本是啓動過程中最後啓動的一個腳本。

最後會執行 /bin/login 登錄用戶。至此係統啓動過程完成。

 


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