標籤:linux啟動 linux引導
************************************************************************ ****原文:blog.csdn.net/clark_xu 徐長亮的專欄************************************************************************1 linux系統啟動和引導
linux的啟動過程為:電腦執行BIOS代碼,確認載入並啟動核心,核心檢測系統的硬體,產生系統的init進程,這個進程總是PID 1;系統必須檢查並安裝檔案系統,而且系統的守護進程必須啟動,這些步驟由init進程按照順序運行一系列rc(run commond)檔案指令碼
綜上,linux典型的引導過程由6個不同的階段組成。
l 載入並初始化核心
l 檢測好配置裝置
l 建立核心線程
l 操作員幹預
l 執行系統啟動指令碼
l 多使用者模式運行
初始化核心:路徑名通常為/boot/vmlinux,在第一個階段,系統rom載入一個小的引導程式到記憶體中,然後這個程式在安排載入核心。核心執行檢測多少RAM可用,核心佔用一部分靜態空間(使用者進程不可用),然後核心列印資訊,實體記憶體總量和使用者進程可用記憶體量。
配置硬體:BIOS告訴核心有哪些硬體裝置,核心需要找到硬體裝置並且初始化每個裝置。沒有檢測到裝置的驅動會被禁用;
核心線程:核心在使用者空間建立init進程。
操作員幹預:在單使用者環境下,檔案系統的根目錄以唯讀方式安裝的。/tmp是根目錄的一部分,需要使用tmp檔案的命令如(vi)不能執行。可以這樣mount –o rw,remount / 來將根目錄以讀寫的方式重新安裝。
執行啟動指令碼:由init根據一定的演算法來選擇運行rc指令碼
多使用者運行: init直接生產getty進程,來監控終端和控制台接受使用者登入。init擁有單使用者和多使用者的運行級,決定啟動哪些資源。
BOIS載入:BIOS選擇引導裝置(IDE硬碟,CD-ROM等),選定裝置讀取MBR(硬碟頭512位元組資訊:master boot record主引導記錄)。MBR程式告訴CPU從第幾個硬碟分區載入引導載入程式(boot loader)。之後boot loader載入核心。
1.1 boot loader引導載入程式
lilo是傳統的linux引導載入程式(debian使用),grub(grand unified boot loader)成為redhat, suse和fedora的預設引導載入程式。
grub裝置命名(hd0,0)等同於linux /dev/hda1
使用者將grub安裝到引導磁碟機/dev/hda1上。
grub-install ‘(hd0,0)’ #用引號避免shell解析括弧
預設情況下,grub從/boot/grub/grub.conf讀取它預設的引導配置。
如果grup在10s內(timeout=10)沒有接受到來著鍵盤的輸入,那麼就自動引導(default=0),
預設配置
default=0
timeout-10
titile redhat linux
root(hd0,0)
kernel /boot/vmlinux ro root=/dev/hda1
root:制定根裝置(一個分區)
boot: 以特定的核心影像檔案啟動系統
1.1.1 lilo: 傳統linux引導載入程式
lilo命令通過/etc/lilo.conf的內容安裝配置資訊。重新運行lilo
boot=/dev/hda 將boot loader on MBR
root=/dev/hda1
delay=20 2秒
image=/vmlinz 核心
lable=linux
read-only
image=/vmlinuz-backup 備份核心
lable=backup
read-only
1.1.2 grub的多重開機配置
先裝好作業系統然後對/boot/grub/grub.conf進行相應的修改。
引導windows的grub.conf配置
title windows xp
rootnoverify (hd0,0)
chainloader +1
chainloader這個選項從一個指定的位置載入引導載入程式(從第一個IDE分區引導)
rootnoverify選項確保grub不會嘗試指定的分區。如引導三個分區:
hiddenmenu
title windows xp
rootnoverify (hd0,0)
chainloader +1
title red hat
root (hd0,1)
kernel /boot/vmlinuz
title fedora
root (hd0,2)
kenrel /boot/vmlinuz
1.2 啟動指令碼
傳統的init定義7個運行級run level, 0級是完全關閉系統的層級;1級代表單一使用者模式;2-5表示多使用者層級;6級是重新引導(reboot)層級
/etc/initab規定了系統進入到每一個層級時要運行(或者保持運行)的命令initab調用/etc/init.d/rc裡面命令,來改變運行級。initab主指令碼尋找rc0.d、rc1.d、rc2.d …等目錄來運行層級的指令碼。
當從低向進階別的指令碼的時候,按照S開頭遞增順序執行,帶start參數
ln –s /etc/init.d/cups /etc/rc2.d/s80cups
當從高向低層級過渡的時候,按照K開頭數字遞減,帶stop指令碼
ln –s /etc/init.d/cups /etc/rc0.d/k880cups
1.2.1 啟動服務配置
在服務啟動過程中,redhat引導過程的大多數配置通過操作/etc/sysconfig中的設定檔來完成。
/etc/sysconfig的子目錄
l clock:指定時鐘類型
l https:決定apache的處理模式
l hwconfg:硬體的資訊
l i18n: 作業系統的本地配置:日期格式,語言等。
l init:配置啟動指令碼的訊息顯示方式
l network: 全域網路參數:主機名稱,網關,轉寄機制
1.3 重新引導和關機
15分鐘之後關機
shutdown –h +15 “going down for emergency disk repar”
上午9點半關機
shutdown –h 09:30 “going down for expected downtime is 1 hour”
改變init的運行層級
telinit 1
【Linux管理】Linux系統啟動和引導