linux啓動過程

 

                    RedHat Enterprise 5linux

1.文件系統佈局小程序

/bin/sbin/lib/dev、與/etc5個分區必須存放於根文件系統(Root Filesystem)中.安全

所謂根文件系統就是存儲根目錄數據的文件系統,有時又稱根設備。服務器

/bin:存儲經常使用且開機時必須用到的執行文件。ssh

/sbin:存儲着開機過程當中所需的系統執行文件佈局

/lib:存儲/bin/sbin的執行文件所需的連接庫,以及linux內核模塊ui

/dec:存儲設備文件spa

/etc:存儲重要的配置文件,好比各類服務的啓動時的配置文件操作系統

這樣就是爲何grub.conf中開機三巨頭中有一句htm

kernel  /VMlinuxz-2.6.18-8.el5   ro   root=LABEL=/  rlgb  quiet

                           以只讀方式掛在根文件系統  

根文件系統之因此在前面加一個」根「,說明它是加載其它文件系統的」根「,既然是根的話,那麼若是沒有這個根,其它的文件系統也就沒有辦法進行加載的。它包含系統引導和使其餘文件系統得以掛載(mount)所必要的文件

/boot分區最好建在磁盤的第一個分區中,而且最好不要創建於LVM的邏輯捲上。

But FreeBSD中不要設置/boot  分區,這樣會形成沒法啓動。

③若是不知道建多大的交換內存,則創建一個物理內存兩倍大的SWAP

PS:若是要架設因特網的服務器,則/var分區分的大一些。若是作桌面系統則,/home分區大一些。若是打算多裝些軟件,那麼/usr能多大就多大。

2.分區

1、硬盤的組成(一個硬盤有若干張磁盤(Disk)構成):

①磁面:每一張磁盤的表面,稱爲磁面(Head

②磁道:每個磁面的空間,會邏輯地切割出許多磁道(Track

③扇區:每個磁道能夠再切割出若干扇區(Sector,也是調用磁盤的最小單位。現今磁盤中的扇區的默認大小爲512字節。

④柱面:一個硬盤有多個磁盤,n個磁盤上同一編號的磁道就組成一個柱面(Cylinder

2、主引導扇區(引導扇區在每一個分區裏都存在,*主引導扇區*是硬盤的第一物理扇區。

PS: 備份主引導扇區:dd  if=file_name  of=/devsda1  bs=512  count=1

       還原主引導扇區:dd  if=/dev/sda1  of=file_name  bs=512  conut=1  

整張磁盤的第0號柱面的第0號磁面的第0號扇區就是主引導扇區。

|                                              <-----------------512Bytes--------->|

初始化程序加載器

446Bytes

分區數據表

64字節

檢驗碼2

  446+64+2=512主引導扇區主引導記錄MBRMain Boot Record)和分區表DPTDisk Partition Table和驗證碼。

初始化程序加載器(主引導記錄):用來存儲操做系統的內核(只是內核的一部分,起到引導內核加載)

分區數據表:存儲磁盤的分區信息。因爲每個分區都會佔用16個字節,因此只能分4個主分區。(詳見《鳥哥的私房菜》)

驗證碼:用來存放初始化程序加載器的驗證碼。

3、分區 細節 (分區後能夠用partprobe  partx + 設備名來跟新分區表)

①分區系統標識符

81---->linux的第一代ext

82---->swap空間

83---->ext2ext3

8e--->LVM使用的分區

fd---->軟件磁盤列陣的分區

5---->系統標識爲5的擴展分區----最多隻能存儲12個邏輯分區的信息

85---->系統標識爲85的擴展分區

IDE磁盤最多隻能存儲60個邏輯分區的信息

SCSI磁盤最多隻能存儲12個邏輯分區的信息

/etc/fstab  開機自動掛載文件.<-------/etc/mtab是它的備份配置文件

因爲RedHat關機的最後一步包括卸載全部已掛載的文件系統。因此/etc/fstab就應運而生了。

磁盤設備名      掛載點   分區文件系統  文統參數  是否被dump   是否fsck檢驗扇區

LABEL=/         /          ext3      defaults            1            1

LABEL=/boot    /boot        ext3      defaults            1            2

這是正常掛載分區卷標名、掛載點 、文件系統、和其餘參數

tmpfs           /dev/shm     tmpfs    defaults             0            0

devpts          /dev/pts      devpts   gid=5,mode=620      0            0

sysfs           /sys          sysfs    defaults              0            0

proc           /proc         procfs    defaults              0            0

這種掛載的第一列和第3列看起來差距這麼大是由於這些是和內核有關掛載在內存中的。

Linux提供了一種特殊的文件系統procfs,他一般以/proc目錄的形式呈現。該目錄包含了許多特殊文件用來對驅動程序和內核信息進行跟高層的訪問。

5列:是否能被dump備份(eg: dump 0 -f  /dev/sda1  /boot   /dev/sda1按照0備份級別備份到/boot目錄下),0表示不要作dump備份,1表示要天天進行dump的操做,2表示不按期備份。一般這一列的值是10.

6列:開機過程當中,系統會默認會以fsck檢驗文件系統是否完整(clean)。不過,某些文件系統不用檢驗好比swap和一些特殊文件系統/peoc/sys等。因此存在fsck自段來設置是否檢驗文件系統。0表示不檢驗,1表示最先檢驗(通常只有根文件系統設爲1),2也是檢驗不過沒有1早,其餘文件系統設爲2就好了。

Ps: 千萬不要對已掛載的文件系統執行fsck

4、mount

monut  | grep  ‘/dev/sda1’  查看掛載信息

mount   -o  remountro  (已只讀方式從新掛載,不須要先卸載哦)  /dev/sda1   /boot 

由於每一個文件系統都有一個根目錄,因此掛載這個動做只是把某一個文件系統的根目錄,放在另外一個目錄中,本來文件系統的目錄下的文件就暫時被遮蔽,取消掛載後又會恢復。即掛載就是使一個分區能夠讀取存入,就是放在一個目錄下。誰掛上去就能夠操做誰,互不影響,取消掛載後文件也不會消失。

3.系統啓動流程

     

(1)BOIS

1.檢測全部外置設備

2.尋找啓動磁盤

(2)啓動加載器

尋找主引導記錄(經過這個446字節的小程序來加載存儲到其餘位置的操做系統)

(3)啓動內核

BOIS順利執行啓動加載器後,啓動加載器會尋找存儲在其餘扇區中的操做系統,而後順利啓動操做系統。如果Red Hat 操做系統,那麼啓動加載器能夠在啓動LINUX內核時,傳遞一些參數給內核,以便讓內核可以改變啓動方式,或者取得啓動時重要的信息。這些參數稱爲內核啓動參數(Kernel Boot Parameter

即在引導三巨頭之一的後面加內核啓動參數

kernel  /VMlinuxz-2.6.18-8.el5   ro   root=LABEL=/  rlgb  quiet  3(啓動Run level 3

Linux啓動內核後會執行下面幾項工做

①檢測全部硬件設備

Linux內核首先會向BIOS查詢計算機的全部硬件設備的信息,而後本身接手管理這些硬件設備,以便提供給Red Hat Linux 系統使用。

②驅動硬件設備

要驅動硬件設備,linux就必須加載硬件的驅動程序。Red Hat Enterprise的驅動程序能夠分爲編譯在內核鏡像文件中的靜態驅動程序(initrd鏡像,初始化內存磁盤鏡像)和內核模塊(kernel Module,所有存儲在文件系統上)的動態驅動程序。

因爲Linux此時還沒掛載文件系統,因此不能使用在文件系統上的模塊。啓動內核階段只會

使用靜態驅動程序,驅動必要的硬件設備。

這裏就引出了引導三巨頭的最後一句:在內存中加載必要的驅動。

 initrd   /initrd-2.6.18-194.el5.img   它和內核版本是對應的!!

啓動內核時,把initrd鏡像文件加載到內存,內核即可以從initrd鏡像文件加載外置設備的模塊,再去驅動這些外置設備。如此一來,就可讓Linux 系統順利掛載根文件系統並正常的啓動Red Hat Enterprise Linux了。

③以只讀方式掛載根文件系統.

掛載根文件系統的目的有兩個:

1.安裝適當的內核模塊,以便驅動某些硬件設備或啓動某些功能

2.啓動存儲於根文件系統中的init服務,以便讓init服務接手後續的啓動工做。

Ps: 根文件系統是採用只讀方式進行掛載的即Linux內核只能讀取根文件系統,而沒法改變。這樣作是由於此時的Linux內核仍在啓動階段,還不是很穩定,若是與讀寫方式掛載,萬一Linux宕機了,可能破壞根文件系統上的數據,若破壞下次開機時還得花不少時間來修復。

④啓動init服務

Linux內核啓動後的最後一個動做,就是從根文件系統上找出並執行init服務。內核會按照下列順序查尋init服務

①找/sbin是否有init服務

/etc/init

/bin/init

④若是都找不到,最後執行/bin/sh

在這個過程當中,只要有某一步找到initlinux內核就會去執行該目錄之中的init。而後讓init服務輔助後續初始化系統使用環境的工做。

若是最後內核仍是沒找到init服務,Red Hat Linux內核就會顯示「Kernel panic - not sysncing

Attempted to kill  init !!」,而後內核就慢慢的「死去」了。

(4)執行init服務

init服務時Linux啓動後第一個被啓動的程序,所以init服務的進程標識符永遠是1.啓動init服務時,init服務會讀取/etc/inittab文件,根據/etc/inittab中的設置數據進行初始化系統環境的工做。/etc/inittab定義init服務在Linux啓動過程當中必須依序執行如下幾個RC script

· /etc/rc.d/rc.sysinit

· /etc/rc.d/rc

· /etc/rc.d/rc.local

 

①/etc/rc.d/rc.sysinit

/etc/rc.d/rc.sysinit主要功能是設置系統的基本環境。當init服務執行rc.sysinit時,會作以下工做

·啓動udevSELinux子系統

udev負責管理 /dev中全部的設備文件,而SELinux則能夠加強Linux系統的安全性。當rc.sysinit執行時,必須先啓動這兩個子系統,才能進行其餘的初始化環境的工做。

你能夠在啓動內核時添加內核參數 selinux=0來禁止啓動SELinuxSelinux=0,內核不識別它會把該參數向下傳遞給init服務供其使用,儘管參數不是給內核用的他也叫內核參數---》由於只能在啓動內核前添加參數。

·設置內核參數

   rc.sysctl會執行 sysctl  -p(/etc/sysctl.conf文件內容設置成Linux的內核參數)把配置文件讀入內核參數。

·設置系統時間

·加載鍵盤對應表

·啓用置換內存空間

    rc.sysinit會執行  swapon -a 將/etc/fstab文件中全部設置爲swap的設備,啓動爲交換區。)-e (不知道它是什麼東西常與參數a一塊兒出現)命令,以便根據/etx/fstab的設置啓用全部的內存交換空間。

·設置主機名

   rc.sysinit會根據 /etc/sysconfig/networkHOSTNAME參數設置Linux的主機名。

·檢查並掛載全部文件系統

·初始化硬件設備

     Linux除了在啓動內核時以靜態驅動程序驅動部分的硬件外,在執行rc.sysinit時,也會驅動幾項硬件設備

1.定義在 /etc/modprobe.config的模塊

2. ISA   PnP的硬件設備

3.USB設備

 

·啓用軟件磁盤列陣與LVM

·若果有必要,卸載/initrd/

      由於初始化內存磁盤鏡像只在啓動前有用,所以當Linux進入到這個階段時,初始化內存磁盤已經沒有價值了,因此rc.sysint會視狀況卸除initrd ,以節省更多的內存空間。

·初始化串行端口設備

·清除過時的鎖定文件與IPC文件

      某些服務爲了確保同時間只能執行一個實例(instance),一般會使用下面方法:

首先,當服務被執行時,先檢查是已經有鎖定文件(Lock File)存在。若是有,就表示以前已經有人執行過這個服務,那麼服務就會結束;若是沒有,那就會產生一個空的文件而且鎖定。等到服務順利結束的時候,在解除這個文件的鎖定狀態並將其刪除。如此一來,就能夠避免同時有多個進程實體執行。

Linux主機因不正常關機而從新啓動時,在不正常關機的一剎那,服務來不及刪除這些鎖定文件;從新開機時,鎖定文件仍保留在磁盤上,這樣會使Linux啓動服務時發現鎖定文件已經存在而沒法順利啓動。

因此在啓動過程當中Linux會強迫清除全部殘留下來的老舊鎖定文件。

·從新設置磁盤參數

  rc.sysinit的最後一項工做,則是根據 /etc/sysconfig/harddisk  device_name 配置文件從新設置該dev設備的磁盤參數。

init服務執行完 /etc/rc.d/rc.sysinit後,緊接着就會執行/etc/rc.d/rc 

/etc/rc.d/rc

    /etc/rc.d/rc 這個Script用來創建Runlevel的環境。

 

l0:0:wait:/etc/rc.d/rc 0  ===== /etc/rc.d/rc0.d/

l1:1:wait:/etc/rc.d/rc 1  ===== /etc/rc.d/rc1.d///單用戶模式下,只啓動惟一一個控制檯終端

l2:2:wait:/etc/rc.d/rc 2  ===== /etc/rc.d/rc2.d/

l3:3:wait:/etc/rc.d/rc 3  ===== /etc/rc.d/rc3.d/

l4:4:wait:/etc/rc.d/rc 4  ===== /etc/rc.d/rc4.d/

l5:5:wait:/etc/rc.d/rc 5  ===== /etc/rc.d/rc5.d/

l6:6:wait:/etc/rc.d/rc 6  ===== /etc/rc.d/rc6.d/

/etc/rc.d/rcN.d裏面存放了許多S.*(啓動某服務,start)和K.*(關閉某服務,kill)的腳本。

Chkconfig   --level   [服務]  [on/off] 來改變/etc/rc.d/rcN.d裏面的文件。

Egchkconfig  --level  3  sshd on

這樣/etc/rc.d/rc3.d裏面只有一個K25sshdnumber決定執行的順序

#init   n    切換運行級別(runlevel 查看當前運行級別),好比當前是init 5而後運行init 3 。則系統進行的操做是。查看init  3  的文件,即/etc/rc.d/rc3.d裏面的全部K***S***。若是發現有K***的服務,在運行則運行K***  stop 來關閉服務。若果發現有S***開頭的服務關閉,則運行S***  start 來開啓這個服務。

開機啓動時也是根據相應的運行級別,查看相應的/etc/rc.d/rcN.d 來開啓關閉服務!!

/etc/rc.d/rcN.d裏面的文件則是經過chkconfig來設置!!!eg:chkconfig  sshd off

/etc/rc.d/rcN.d裏面只有K**sshd 這個文件!!從這也能夠看出chkconfig能夠設置開機啓動某服務,就是經過控制/etc/rc.d/rcN.d來實現的!(詳見鳥哥)

由此能夠看出/etc/rc.d/rc是經過許多腳原本開關不一樣的服務來配置不一樣的RunLevel環境。

 

/etc/rc.d/rc.local

     /etc/rc.d/rc.local是整個啓動過程當中惟一一個能夠修改的Rc Script.(由於若是 rc.sysintrc出錯的話可能直接致使系統沒法啓動,因此輕易不要修改這兩個RC script)

若是你想在Linux啓動過程當中執行某些命令,或者執行某些工做的話,你能夠把這寫工做命令寫入/etc/rc.d/rc.local

Eg在開機登陸信息中顯示最後啓動的時間信息。

首先,先接紹下/etc/issue.

Linux的虛擬控制檯(Virtual Console)登陸系統時,你會看到相似下面的歡迎界面

   Red  Hat Enter[rise linux Server release 5 (Tikanga)                    

   Kernel  2.6.18-8el5 on an i686                                  

   Login:                                                      

上面的歡迎界面由/etc/issue.  文件提供,該文件以下

(由man手冊可知mingtty 可以識別/etc/issue文件中的特殊字符,見附錄1

  Red  Hat Enter[rise linux Server release 5 (Tikanga)                    

  Kernel  \r  on  an  \m  

/etc/inittab文件中

1:2345:respawn:/sbin/mingetty tty1

2:2345:respawn:/sbin/mingetty tty2      

3:2345:respawn:/sbin/mingetty tty3  

4:2345:respawn:/sbin/mingetty tty4

5:2345:respawn:/sbin/mingetty tty5

6:2345:respawn:/sbin/mingetty tty6

###在二、三、四、5級別上以ttyX爲參數執行/sbin/mingetty程序,打開ttyX終端用於用戶登陸,
  ###若是進程退出則再次運行mingetty程序(respawn) 

 

 

PS幾個Unix的主要分支:①FreeBSD LinuxSolariMacOS XX爲羅馬數字,發音爲ten

相關文章
相關標籤/搜索