介紹Linux系統的開機流程

Posted by admin on 四月 2nd, 2011

一、簡單介紹RHEL開機時的先後順序
BIOS —> MBR —> Kernel —> init
1、當電腦一打開電源時電腦就會進入BIOS(BIOS的工作主要是檢測一些硬件設備);
2、檢測完後會進入MBR也就是boot loader(MBR位於硬盤的第一個扇區總共512bytes,其中前446bytes裡面的編碼是在選擇引導分區也就是決定要由哪個分區來引導);
3、載入系統的Kernel(核心),在Kernel裡主要是載入電腦設備的驅動程序,以便可以控制電腦上的設備,並且以只讀方式來掛載根目錄,也就是一 開始只能讀取到根目錄所對應的那個分區,所以/etc、/bin、/sbin、/dev、/lib這五個目錄必須同根目錄在一個分區中;
4、最後啟動init這個程序,所以init這個程序的進程編號為1,是Linux中第一個執行的程序;
init這個程序會根據Run level來執行以下這些程序:
·/etc/rc.d/rc.sysinit;
·/etc/rc.d/rc 和etc/rc.d/rc?.d/
·/etc/rc.d/rc.local
·如果有適當的圖形界面管理程序 
二、BIOS初始化時主要的三個任務
BIOS 
( B asic I nput/ O utput S ystem)
1、電腦周邊設備的檢測,加電自檢 POST (Power on self test);
2、BIOS會選擇要由哪一個設備來開機,例如:軟盤啟動、光盤啟動、網絡啟動、最常見的從硬盤啟動;
3、選擇好由哪個設備開機後,就開始讀取這個設備的MBR 引導扇區; 
三、介紹Boot Loader中的主要工作
1、Boot Loader可以安裝在兩個地方:
· 安裝在硬盤的MBR中;
· 當有時候MBR中被其他開機管理程序佔用就可以將Boot Loader 安裝在硬盤中的其中一個分區的引導扇區上,;
2、Boot Loader的程序碼分為兩個階段:
(1)Boot Loader第一階段的程序碼非常小,只有446bytes,可以存入在MBR或是某一個分區的引導扇區裡,
(2)Boot Loader第一階段的程序碼是從boot 分區來載入的,就是說Boot Loader 第二階段程序碼存放在/boot 這個分區中; 
3、下面來看三個Boot Loader 的開機流程範例,如在一塊硬盤中安裝了兩個系統分別為:windows 2003 和Red hat linux
當電腦開機後,會先載入MBR通過第一階段程序碼來載入第二階段程序碼,進入GRUB開機菜單這裡選擇哪個系統就會載入相應的核心;

四、介紹GRUB和grub.conf 這個配置文件的內容
其實從MBR載入Boot Loader開始,載入Kernel,載入init這些程序之間都是由GRUB這個多重開機管理程序所負責的。
1、GRUB ( GR and U nified B ootloader)擁有以下特性:
· GRUB的開機管理程序可以在開機提示字元的界面下輸入指令;例如在GRUB界面下可以按C鍵就會來到以grub> 開頭的提示符來輸入據指令;
· GRUB的開機管理程序可以支持以下幾種文件系統:ext2/ext3、ReiserFS、JFS、FAT、minix、FFS 等等;
· 支持MD5的密碼來保護GRUB的配置文件;
2、/boot/grub/ grub.conf 這個配置文件是GRUB的配置文件,在做修改前推薦先做好備份
下面來介紹這個配置文件的內容以及里面的語法:
· 以#開頭的行為註解執行時不會使用;
·可以以 title 開頭的一行為準,分為上下兩部分:
(1)基本設定: 
default=0 指預設使用第一組title的系統記錄開機,如果有多個title表示有多重啟動,如果預設要使用第二組系統開機就將此值設為1
timeout=5 指進入GRUB的界面後,會有5秒時間讓使用者選擇要啟動的系統,如果未選擇自動使用上面的default設定的值;
splashimage=(hd0,0)/grub/splash.xpm.gz 開機時使用的背景圖案,這裡的 hd0,0 ) 意思為 (硬盤編號,分區編號 
hiddenmenu 隱藏開機的菜單
(2)用於區分多個系統的設定,如果這台主機中還安裝了其它系統並設定了多重啟動,在這裡還可以看到其它系統的設定; 
title Red Hat Enterprise Linux AS (2.6.9-11.EL) 在GRUB開機菜單中所顯示的開機的系統名稱
root (hd0,0) 指定下面的檔案位於哪個目錄中,這個hd0,0同樣指的是用於指引導的目錄,通常指/boot目錄
kernel /vmlinuz-2.6.9-11.EL ro root=LABEL=/ rhgb quiet 設定kernel鏡像的存放位置,這個位置相對於上面root那一行所指定的位置的相對位置, ro root=LABEL=/是設定/在根目錄的位置,ro是只讀的意思,也就是以只讀方式掛載根目錄,也可以使用root=/dev/hda2類似於這種形 式來掛載根目錄;rhgb意思是以圖形界面顯示開機過程,去掉則以文字界面顯示;quiet意思是設定開機過程中不顯示錯誤信息;
initrd /initrd-2.6.9-11.EL.img 將這個指定的文件載入到內存中,這個文件裡都是存放一些驅動程序;
3、如果我們修改完grub.conf 這個配置文件後,設定為立即生效;
4、另外,如果硬盤上的MBR被清除掉了,可使用下面的指令來重新安裝boot loader 到MBR中:
/sbin/grub-install /dev/hda 
5、介紹進入GRUB的開機管理程式可以做哪些動作(開機前改Kernel的參數)
(1)開機後在進入GRUB界面後,先選擇要使用的系統(這裡選擇Linux)
(2)按下a鍵,可以在開機修改Kernel的參數,也就是可以傳一個參數給Kernel;這時可以看到下面這個界面

(3)上圖中root=LABEL=/ 這部分不可以動,將後面的都去掉後,先輸入一個空格再輸入一個1,如下圖:

這個1 就是附加的一個參數,表示要進入單用戶模式,不需要輸入root密碼就可以以root身份登錄;
(4)當進入到#提示字元時,就可以設定root 密碼了。

這時會發現一個問題任何人到主機前都可以通過這種方式修改ROOT密碼是很不安全的。
6、為GRUB進入單用戶模式設定密碼及加密方法:
在GRUB的設定檔中設定密碼,以防止非法者以單用戶模式進入。
(1)編輯grub.conf配置文件,在基本設定的部分裡,插入一行 password 123456 來設定密碼,這裡是將密碼設定為123456 。

(2)當重新開機後,在GRUB的菜單中,需要輸入P ,再輸入密碼才可以進行下一步,選擇其它的模式。

(3)可以發現上面設定的密碼是明文的,在GRUB中是可以對這個密碼進行加密的,如下圖:

注: grub-md5-crypt這個指令在設定一個加密的密碼的時候,就算每次輸入的密碼相同經加密後也是不同的,所以上面的幾組密碼都不一樣, grub-md5-crypt >> /boot/grub/grub.conf 這行指令在執行後不會你上面那樣會提示出輸入兩次密碼,雖然沒有提示但還是可以輸入的,每輸入一次密碼按一次回車,等設定好密碼後,再打開 grub.conf文件時,就會發現經過加密的密碼就追加到了grub.conf文件中去了,將追加文件中的前二行去掉,第三行就是要使用的密碼了,然後 就像上圖中那樣進行設定,等上面的設定好後,一定要刪除掉最後三行的內容,不然會出錯的。
password –-md5 這裡面的md5 表示後面使用的密碼是經過md5加密的。
7、在進入系統前,按E鍵進入命令編輯模式,來修改引導配置文件
在GRUB菜單選擇時,按"e"鍵,就可以看到所對應系統的三行grub.conf中的配置參數,選擇有錯誤的一行,再按"e"鍵,可修改這一行:

如下圖:選擇了第二行,按E鍵,就可以修改這行內容了,這裡只是未了舉例子,將正常啟動的一行改為了要使用單用戶模式啟動,修改完成後按回車,返回上一界面,再按"b"鍵,使用編輯後的設定開機。

五、介紹Kernel初始化時所做的工作
Kernel在開機時,有以下四項工作:
1、檢測電腦上的硬件設備;
2、將檢測到的硬件驅動程序載入Kernel;
3、如果必要的驅動載入後Kernel 將根目錄以只讀方式掛載進來;
4、Kernel載入第一個程序init 這個程序; 
六、介紹init 這個程序在初始化時做了哪些工作
init 程序讀取的是/etc/inittab 這個配置文件來決定要做哪些操作
1、決定預設要使用哪個Run Level 下面介紹幾個常用的(Run Level 將在下節做詳細介紹)
Run Level 可以從0 到6 分為7種

· run level 1 :單用戶模式,主要用來維護系統,這在前面已經使用過了;
· run level 3 :會啟用完整的服務但登錄後進入文字模式;
· run level 5 :啟用完整的服務登錄後進入圖形界面模式;
注: 在inittab的配置文件裡 id:5:initdefault: 這項initdefault的前面設定為5表示預設會用run level 5,也就是默認啟用完整服務並進入圖形界面模式。
2、init 會執行初始作業系統的程序

3、init會根據執行的run level 來執行run level 對應目錄裡面的程序,如果inittab 配置文件裡預設的run level 是5,那麼就會把5的參數傳給/etc/rc.d/rc 這個程序執行,在/etc/rc.d目錄下就可以看到rc0.d 至rc6.d 七個目錄run level 所對應的目錄,所以init 程序會根據執行的run level 來執行run level 對應目錄裡面的程序,來決定要啟用哪些服務。

4、設某個組合鍵,如下圖:定義快捷鍵,按這三個組合鍵3秒後重啟系統

6、在定義UPS不斷電系統,當電源發生問題時,以及電源恢復時都要執行哪些程序。

6、產生六個virtual consoles (虛擬控制台)(tty1~tty6)

7、如果啟動的是run level 5 ,初始化工作就會啟動X11(圖形界面)

七、iniit初始化流程圖

以下小節將依據上面的流程圖為準逐一介紹 
八、介紹Run Level (init初始化流程第一步)
其中在Run Level 裡除了0~6這七種外,還有S 和emergency 這兩種

Run Level
功能
0
用來做關機用的(不可以設在initdefault裡) 
1,S,emergency
單用戶模式(只允許root帳號登錄,主要是用來做維護系統工作) 
2
可以允許所有使用者登錄,但不啟用網絡功能 
3
允許所有使用者登錄,擁有完整的功能,但是以文字模式進入系統 
4
用戶可自定義的,預設下與Run level 3是相同的 
5
與Run level 3 功能是一樣的,允許所有使用者登錄,擁有完整功能,以圖形界面模式進入系統 
6
用於重啟主機(不可以設在initdefault裡)
Run Level 1,S,emergency 這三種執行時的主要差別在於執行程序的多少:
· 1 :執行init程序後,會接著執行/etc/rc.sysinit程序來初始化系統,再執行/etc/rc1.d/目錄下的所有程序;
· S:執行init程序後,只會執行/etc/rc.sysinit 程序來初始化系統;
· emergency:執行init程序後,只會執行/etc/rc.sysinit 程序中某些必要的程序,並不會全部執行;
1、介紹一些Run level 的特性
Run level 是使用init 這個指令來定義要使用哪個run level。
2、下面有三種方式可以選擇要使用哪個Run level
(1)在開機時,預設run level會設定在/etc/inittab 這個文件中,例如:initdefault 前面的值;
(2)可以從boot loader 傳一個參數給kernel (例如:在GRUB的引導菜單按“a”鍵,在開機前可以給kernel傳一個參數以單用戶模式登錄系統)
(3)在開機進入Linux 系統後,可以使用init 指令,再輸入要進入哪個run level ;(例如:init 5 進入run level 5)
3、使用runlevel 指令執行後,就可以在下面顯示當前在哪個級別下;
/sbin/runlevel
九、介紹/etc/rc.d/rc.sysinit 這個程序主要做哪些工作(init初始化流程第二步)
rc.sysinit 這個文件是一個腳本文件,主要是一些判斷程序,還有一些設定變數的程式;
rc.sysinit 這個文件的工作如下:
1、啟動udev ,也就是啟用熱插拔的設備,例如:USB,並且也會啟動SELinux;
2、會把kernel的參數設定在/etc/sysctl.conf配置文件裡;這個配置文件下下單元詳細說明;
3、設定係統時間;
4、載入keymaps 設定,keymap設定是在定義鍵盤,這樣電腦開機時才能找到相對應的鍵盤設定;
5、啟用swap這個虛擬內存的分區;
6、設定主機名稱,主機名稱設定在/etc/sysconfig/network 配置文件中的HOSTNAME= 項下;
7、 檢查根目錄有沒有問題,並且重新掛載成為可讀可寫的狀態;
8、啟用RAID磁盤陣列,以及LVM的設備;
9、啟用磁盤配額的功能,就是限制使用者最多可以使用多少硬盤空間;
10、檢查其它的文件系統,並且把它們掛載進來;
11、最後會清除被修改過的locks及PID files,其實就是清除一些開機時的緩存文件,以及一些沒有用的信息及文件; 
十、介紹/etc/rc.d/rc 這個程式的作用
1、 這個步驟就是根據載入的Run Level 來執行Run Level 對應目當裡面的程序來決定要啟用哪些服務,例如,如果Run level 的值是5,就會去執行/etc/rc.d/rc5 .d/* 這個目錄下的所有程序,來停用或啟動這個運行級別下應該有的服務,如下圖:

就用 rc5.d 這個目錄來作說明,可以看到這個目錄下都是一些鏈接文件,所有的鏈接文件都鏈接到了 ../init.d/*這個目錄下的某個執行文件,其實 init. d 和 rc5.d 後面的 d 是代表 Daemon( 【unix】新進程;端口監督[控]程序 ) 的意思。
十一、介紹Daemon Processes ( Process進程 )
1、 Daemon Processes就是在後台執行的程序,主要功能就是在提供一些系統的服務,所以在init.d 目錄裡的所有程序全部都是在後台執行提供系統服務的程序,而這些在後台執行提供系統服務的程序都是在等待別人提出需求來提供服務,例如:httpd 這個程序就是提供web 的服務,主要是會開啟80端口,讓別人可以通過80端口連接進來。
2、Daemon 主要分為兩種類型,主要差別在於提供服務的方式,說明如下:
(1) Standalone (中文翻譯為:獨立):在Standalone的程序裡,當使用者提出需求要求服務時,會自己提供服務組使用者;
(2) Transient (中文翻譯為:暫時程序,暫存區):當使用者提出需求時,會先跟 xinetd(以稱為:Supper Daemon) 這個Daemon程序要求服務,然後xinetd程序再去呼叫Transient類型的程序,最後Transient類型的程序才能夠提供服務給使用者;
3、在 Standalone 的 Daemon 里分為兩種:
(1)在開機時,就由 init 這個程序直接啟動的;
例如:Virtual Console;
(2) System V Daemon 程式
例如:httpd程序(提供web服務的); 
十二、介紹System V 程式的特性
1、其實Run Level 是在定義電腦啟動時,要提供哪些服務:
· 在每個runlevel裡都有他相對應的目錄;就像前面提到的rc5.d的目錄;
· 而用來初始化System V的程序都存放在/etc/rc.d/init.d/這個目錄裡;
2、介紹runlevel 是如何定義要提供哪些服務的。
因為在runlevel對應的目錄裡,都有一些連接,而這些鏈接就是用來呼叫 init.d 目錄裡的程序的,並夾代一個啟動或停止服務的參數,所以根據runlevel對應目錄裡的鏈接,就可以設定係統在啟動後要提供哪些服務。
3、下面介紹前面提到的那個鏈接文件名稱的格式:

這個鏈接文件的名稱主要分為三區:
(1)以 K 或 S 開頭: K ( Kill的縮寫)開頭,表示要停用鏈接的這個服務; S (start的縮寫)開頭,表示要啟用鏈接的這個服務;
(2) 為兩位的數字:表示執行的先後順序,數字越小的越先執行,但是在K 與S 執行的先後順序是先執行K 停用鏈接的服務,再執行S 啟用鏈接的服務,這是因為要先將所有服務停用類似歸零的意思,然後再啟用服務,所以執行完這些鏈接的程序,就初始化了系統上的服務;
(3) 鏈接的System V 程序名稱:
4、另外,System V 程序有種特性,就是啟動和停止都用同一個程序,只是後面加上不同的參數:
例:/etc/init.d/httpd start 啟用web服務 
/etc/init.d/httpd stop 停用web服務
這裡的start , stop 就是使用的參數 
十三、介紹/etc/rc.d/rc.local 這個程式的作用(init初始化流程第三步)
1、在執行完run level 下相對應的那個目錄裡的鏈接後都會執行rc.local 這個程式;如下圖: run level2到5下都有這個程式:
其中S 表示啟用,99表示執行的順序最後才會執行,執行的程式就是rc.local;

2、因此,可以修改rc.local 這個文件,將runlevel2-5都要執行的指令或程序設定在rc.local文件中。 
十四、介紹Virtual Consoles 的特性(init初始化流程第四步)
Virtual consoles,Virtual consoles具有以下幾點特性:
1、定義在/etc/inittab 檔案裡,使用/sbin/mingetty 來產生tty1 到tty6 這六個Virtual consoles;

2、如果要切換Virtual consoles ,同時按下ctrl-alt-F(1~6)
3、Virtual consoles的檔案是在/dev/這個目錄中,對應的文件是tty1、tty2、tty3、tty4、tty5、tty6;但這個目錄下有許多以tty開頭的文件
4、/dev/tty0 是代表當前使用的Virtual consoles
5、在RHEL中有以下三個預設的Virtual consoles設定:
· RHEL中共定義了12個Virtual consoles;
· 在這12個Virtual consoles裡,只有1~6的可以登錄
· 如果使用圖形界面登錄,剛會先使用Virtual consoles 7 登錄(也就是tty7)
注:當圖形界面已啟動時,才可以使用ctrl-alt-F7 才能切換回到圖形界面。 
十五、如何控制系統上服務的停止與啟動
在控制系統的服務停止與啟動裡,主要分為兩種類型的工具
1、控制系統預設是會自動啟動的服務;
有以下三種工具可以控制Linux 作業系統,預設會自動啟動的服務:
(1) ntsysv :這個工具在Virtual consoles下也可以使用,此命令執行後出現的界面,如下圖:可以啟動Services界面來設定係統預設要啟動哪些服務,如果在ntsysv後面未 加參數,只會設定目前這個Run level ,如果要設定其它的run level ,需要在後面加參數:
例如: ntsysv –level 35 指定要修改runlevel 3和5預設要啟動的服務
注:這個指令在文字模式下也是可以使用的。

(2) chkconfig :這個工具可以快速設定,並且適用在各種Linux下的命令行模式工具
例如:如下圖:查看預設自動啟動的設定注:下面的gpm 的服務是在Virtual consoles下可以使用鼠標的服務,通過下圖可以看到gpm 服務在runlevel2~5下都以以S開頭,也是是預設會自動啟動的意思;

執行下面的指令,可以讓runlevel1~3預設不自動啟動gpm的服務,如下圖可以看到原來的2和3原來是以S開頭的現在已經變成了以K開頭,表示預設是停有的。

可以使用chkconfig –list 查看某個服務預設是否會自動啟動,如下圖:off 表示不啟用,on表示啟用,如果想查看所有的服務可以將gpm去掉,這時會看到許多服務的列表,

(3) system-config-services
這個工具是圖形界面的工具,只能在圖形界面下執行,開啟視窗後,左邊窗口可以勾選預設要啟動的服務;點選Edit Runlevel 可以選擇要修改哪個級別的預設服務,但只能設定3~5的,如下圖:

2、在系統開機後,可以手動控制服務的停止與啟動,立即控制服務的啟動狀態;
有以下三個工具可以手動控制服務的啟動與停止:
(1) service :這個工具可以立即啟動或停用standalone類型的服務;

在文字模式下如果啟用了鼠標功能,使用鼠標選中文字點後,按鼠標的中鍵就可以將選中的文字粘貼到光標所在處,這樣很方便選中一些文字,現在來停用gpm 這個服務,指令如下:
· service gpm stop 停用gpm服務(這種方法不一定支持所有的Linux版本)
· /etc/init.d/gpm stop 立即停用gpm服務(推薦使用絕對路徑的方法來執行這個指令:這種方法支持所有Linux版本)
· /etc/init.d/gpm start 立即開啟gpm服務
· /etc/init.d/gpm reload 立即重啟服務
· /etc/init.d/gpm restart 立即重啟服務
· /etc/init.d/gpm status 顯示服務啟用狀態
(2) chkconfig :這個工具可以立即啟動或停用xinetd程式所管理的服務
例如:chkconfig telnet off 停用telnet服務;
chkconfig telnet on 啟用telnet服務;
(3) system-config-services
圖形界面工具,選擇服務,再點start(啟用) 或stop(停止) 或restart(重啟)。 
十六、介紹使用指令關機
有四個指令可以用來關機
1、shutdown –h now h是halt(終止的意思), now 是參數表示立即,也可輸入時間例如: 13:22 表示下午1點22分關機
2、halt 
3、power off
4、init 0 進入runlevel 0級做關機動作;
注:這四個指令在關機前都會執行sync 這個指令,進行資料的同步,將內存中的數據寫入硬盤中,以免將記憶體中的資料丟失。 
十七、介紹使用指令重啟電腦
1、shutdown –r now -r 就是reboot(重新啟動)的意思,這裡的now也可以換成時間
2、reboot
3、init 6
6、ctrl-alt-del (在virtual Console環境中使用)

 

轉貼自:  http://linux-rss.com/blog/19/ 

arrow
arrow
    全站熱搜

    小宇哥 發表在 痞客邦 留言(1) 人氣()