linux文件系統啓動流程 ---筆記整理

下面是一張linux啓動流程圖:

在瞭解啓動流程之前,我們應該先知道系統的幾個重要腳本和配置文件,他們對應的路徑爲:

1. /sbin/init

2. /etc/inittab

3. /etc/rc.d/rc.sysinit

4. /etc/rc.d/rcN.d //這是幾個文件夾N代表數字1,2,3,4..

5. /etc/fstab

1.關於/sbin/init與/etc/inittab

關於/sbin/init ,它是一個二進制可執行文件,爲系統的初始化程序,而/etc/inittab是它的配置文件,我們可以通過/etc/inittab來一睹 它的功能, 裏面的內容是一種固定的文本格式,id:runlevels:action:process

我們來通過它的內容來學習它之前,先了解寫運行級別的分類(0-6):

0: 關機 half

1: 單用戶模式 singel user

2: 多用戶模式 multi user , 不提供nfs服務 without nfs

3: 完全多用戶字符模式 full multiuser text mod

4: 系統預留 officially undefined

5: 圖形登錄界面 graphical login

6: 重啓 reboot

id:3:initdefault:                                 //這裏定義linux的啓動時的運行級別,可以看到我的主機的啓動級別是3
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit                  //緊接着,運行系統第一個腳本/etc/rc.d/rc/sysinit    
                                                  //它的action:sysyinit指的是定義系統初始化過程
l0:0:wait:/etc/rc.d/rc 0                          
l1:1:wait:/etc/rc.d/rc 1                           
l2:2:wait:/etc/rc.d/rc 2                         //然後就是加載服務了,他們被定義在/etc/rc.d/rcN.d
l3:3:wait:/etc/rc.d/rc 3                         //action:waite 這個進程在在對應級別啓動一次,知道它結束爲止,我的系統啓動級別爲3,所有執行rc 3對應的服務
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
                          
ca::ctrlaltdel:/sbin/shutdown -t3 -r now        //這裏定義了一個組合快捷鍵,熟悉吧,沒錯就是重啓,你可以把它註釋掉不用   
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"  //這裏定義了ups電源,powerfail 指的是如果突然斷電,它對應的process命令是,提示用戶系統電源失效,將要關機,提醒用戶把數據都存儲好
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"  //這裏的action,powerokwaite,指的是系統恢復供電,關機取消...

1:2345:respawn:/sbin/mingetty tty1           //開啓終端,在系統準備工作做好後,就會啓動出6個終端,tty1~6 mingetyy就是終端的執行命令
2:2345:respawn:/sbin/mingetty tty2           //可以看到他們對應的級別是2345,你也可以註釋掉幾個,這樣啓動後,就會開啓你指定個數的終端... 
3:2345:respawn:/sbin/mingetty tty3           //這裏的動作respawn意思是如果用戶關閉,那麼這個進程會立刻再次執行 
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
x:5:respawn:/etc/X11/prefdm -nodaemon       //當一切準備完畢,就會運行守護進程,它是不分運行級別的,同樣也是respawn

2. 關於etc/rc.d/rc.sysyinit 和 /etc/rc.d/rc.Nd

在inittab文件中,我們瞭解到rc.sysinit是系統運行的第一個腳本,那麼它的作用都有哪些呢?如果有shell腳本基礎的話可以用vim打開這個文件來看看,它有900多行...是linux裏最牛的腳本,總結下它的作用,有如下幾點:(一定要牢記,必要時我們要重寫它!

1. 激活udev和selinux

2. 通過讀取/etc/sysct1.conf來設置內核參數

3. 設置系統時鐘

4. 設置鍵盤映射

5. 啓動交換分區。

6. 設置主機名

7. 檢查跟文件系統,並且如果沒有錯誤,以讀寫的方式來重新掛載文件系統 (重要)

8. 激活raid和lvm設備

9. 啓動磁盤限額

10 掛載其他/etc/fstab裏定義的尚未被掛載的設備

11. 清理過時的文件鎖和PID文件

12. 啓動服務/etc/rc.d/rcN.d

/etc/rc.d/rcN.d 是一個存放了系統啓動是加載的服務的文件夾,通過inittab,我們知道了,它的編號對應相應的啓動運行級別。

需要說明的是,它裏面的文件,以我的爲例 以K開頭的代表stop,以S開頭的代表啓動start,數字越小,有限級別越高

[root@server69 rc.d]# cd rc3.d
[root@server69 rc3.d]# ls
K01dnsmasq         K74nscd             S08ip6tables    S25bluetooth   S85gpm
K02avahi-dnsconfd  K85mdmpd            S08iptables     S25netfs       S90crond
K02NetworkManager  K87multipathd       S08mcstrans     S25pcscd       S90xfs
K05conman          K88wpa_supplicant   S10network      S26acpid       S95anacron
K05saslauthd       K89dund             S11auditd       S26apmd        S95atd
K10psacct          K89netplugd         S12restorecond  S26haldaemon   S97rhnsd
K20nfs             K89pand             S12syslog       S26hidd        S97yum-updatesd
K24irda            K89rdisc            S13irqbalance   S28autofs      S98avahi-daemon
K35vncserver       K99readahead_later  S13portmap      S50hplip       S99firstboot
K35winbind         S00microcode_ctl    S14nfslock      S55sshd        S99local
K50ibmasm          S02lvm2-monitor     S15mdmonitor    S56cups        S99smartd
K50netconsole      S04readahead_early  S18rpcidmapd    S56rawdevices
K69rpcsvcgssd      S05kudzu            S19rpcgssd      S58ntpd
K73ypbind          S06cpuspeed         S22messagebus   S80sendmail

3./etc/fstab文件

它定義了系統初始化掛載的設備,對系統的啓動至關重要,rc.sysinit通過讀取它來實現系統分區的掛載

它的內容如何呢?我們一起來看下

要掛載的設備 掛載點 文件系統類型 掛載選項 轉儲頻率 文件自檢次序

/dev/sda2               /                       ext3    defaults        0 0
/dev/sda1               /boot                   ext3    defaults        0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0

我截取了4個系統啓動時必須掛載的設備

/ 根文件目錄,由它你纔可以進入linux的世界,它在/dev/sda2裏

/boot 啓動目錄,在/下,裏面有grub,initrd和系統內核,它在/dev/sda1

sysfs 一個虛擬的文件系統,產生包含所有硬件層次視圖,和/proc類似

proc 這是一個虛擬的目錄,它映射內存裏的信息對應進程信息,也就是說它對應的是內存而不是硬盤


好了,瞭解了這些文件和目錄的作用,我們在回過頭來看那張流程圖:

1. linux開機從POST加電自檢開始,當自檢完成,讀取第一個硬盤的第0個磁頭裏的前446個字節,運行裏面的bootloader,linux一般   用的是grub。
2. 通過grub傳遞參數給內核,初始化加載內核過程,內核調用initrd(小型內存文件系統,五臟俱全,是一個微型linux),通過     initrd,以只讀方式掛載根文件系統
3. 當根文件系統被掛載後,就會讀取並運行/sbin/init來進行初始化工作。
4. 按次序依次執行/rc/sysinit ,這個時候會重新以讀寫的方式掛載根文件系統
5. 讀取/etc/rc.d/rcN.d/來啓動以s開頭的服務,停止以k開頭的服務
6. 當一切準備完畢,打印終端,出現熟悉的Login界面!(當然,如果你是以5級別啓動的話,Linux就會啓動圖形界~)

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