操做環境:linux Redhat 5.8
一.首先簡單看一下系統啓動的流程圖,而後再做詳細的解釋
二.
1,BIOS自檢,檢測硬件,決定啓動介質
BIOS爲寫入到主板上的一塊閃存或EEPROM的程序,它能夠在開機的時候執行,並經過BIOS程序去加載CMOS的信息,並經過CMOS內的設置取得主機的各項硬件配置(CMOS:CMOS的主要功能就是記錄主板上面的重要參數,包括系統時間,CPU電壓與頻率,各項設備的I/O地址與IRQ等),BIOS程序也能夠修改CMOS當中的參數,用BIOS設定程序的按鍵都不一樣,通常常見的使用Del按鍵進入BIOS設置界面
2,從硬盤啓動,讀硬盤的第一個扇區MBR,而後將啓動引導工做交給boot loader
MBR引導記錄位於物理硬盤的第一塊扇區的一段引導代碼(第一塊扇區512個字節,其中MBR佔446字節,分區表佔64字節,結束標誌佔2字節),該扇區又稱爲主引導扇區(MBR扇區)
3,boot loader去找 grub,grub讀取配置文件grub.conf,決定默認啓動項,找到內核(kernel)和驅動(initrd)
@1. Boot loader:它的主要功能是認識操做系統的文件格式並加載內核到內存中去執行,因爲不一樣的操做系統的文件格式不一致,所以每種操做系統都有本身的bootloader,bootloader分爲兩個階:
一、stage1: 執行boot loader加載文件系統驅動
二、stage2:加載真正的配置文件: grub.conf
@2. grub.conf裏面有內核和驅動的信息,下面會對grub.conf文件作具體的介紹
4,內核會主動調用init進程,讀取配置文件 /etc/inittab,決定啓動級別, 運行初始化腳本/etc/rc.d/rc.sysinit,運行相應的啓動級別下的腳本 /etc/rc.d/rcN.d/
@1. vim /etc/inittab
id:5:initdefault: //默認的runlevel設置,此處爲5
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit //準備系統軟件執行的環境的腳本執行文件
l0:0:wait:/etc/rc.d/rc 0 //0 - 關機(千萬不要把initdefault 設置爲0 )
l1:1:wait:/etc/rc.d/rc 1 //1 - 單用戶模式
l2:2:wait:/etc/rc.d/rc 2 //2 - 多用戶,可是沒有 NFS服務
l3:3:wait:/etc/rc.d/rc 3 //3 - 徹底多用戶模式
l4:4:wait:/etc/rc.d/rc 4 //4 - 沒有用到(系統保留功能)
l5:5:wait:/etc/rc.d/rc 5 //5 - X11(與 3相似,可是加載使用X Window)
l6:6:wait:/etc/rc.d/rc 6 //6 - 從新啓動 (千萬不要把initdefault 設置爲6 )
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
//是否容許按【ctrl】【alt】【del】就從新啓動的選項
#不斷電系統的pf,pr兩種機制,一個是沒電時的關機,一個是覆電的處理
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
#tty1~tty6是由這六行決定的
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
#啓動X window是由這裏決定的
x:5:respawn:/etc/X11/prefdm -nodaemon
@2./etc/rc.d/rc.sysinit做用:這裏簡單說幾個
1.取得網路環境和主機類型
2.測試與掛載內存設備/proc及USB設備 /sys
3.決定是否啓動SELinux
4.啓動系統的隨機數生成器
5.用戶自定義模塊
6.加載內核的相關設置
7.初始化軟件磁盤陣列,lvm
8.啓動相關信息加載/var/log/dmesg文件中
5.依據/etc/inittab 執行/etc/rc.d/rc0~6.d
找到/etc/rc.d/rcN.d/K??*開頭的文件,並進行 /etc/rcN.d/K??* stop 的動做
找到/etc/rc.d/rcN.d/S??* 開頭的文件,並進行 /etc/rcN.d/S??* start 的動做
若是默認啓動是文本開啓6個文本控制檯 [ALT+F1~F6]
若是默認啓動項是圖形則開啓圖形界面以及6個文本控制檯
用戶自定義的開機啓動程序/etc/rc.d/rc.local
6, 加載X Window界面,等待用戶輸入用戶名和密碼
@1. 經過/etc/passwd、/etc/shadow
驗證,若是用戶名和密碼輸入正確
讀取4個初始化文件:
/etc/profile、/etc/bashrc、~/.bashrc、~/.bash_profile
文本界面直接開啓shell
圖形界面開啓桌面,進入X Window,經過開啓終端打開shell
@2.系統還會自定義設備與模塊對應文件爲/etc/modprobe.conf
三. 介紹一下grub.conf這個文件
#vim /etc/grub.conf
default=0 # 默認的啓動項,也就是啓動那個title,從0開始計數。
timeout=5
#timout=5,就是默認在啓動選擇界面停留的時間,等待5秒自動進入默認操做系統
splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz
#splashp_w_picpath是grub啓動背景畫面,這個能夠不要
#hiddenmenu 是隱藏菜單隻有按上下鍵纔會出現
title Red Hat Enterprise Linux Server (2.6.18-308.el5)
#title後面就是系統在啓動時候顯示的名字
root (hd0,0)
#root 分指定你的內核所在的分區。hd0表示第一塊硬盤設備。 0表示第一個分區 也是/boot所在的分區
kernel /vmlinuz-2.6.18-53.el5 ro root=LABEL=/ rhgb quiet
#kernel 內核在哪裏;ro 只讀;root=LABEL=/ 根分區是誰;rhgb (圖形化顯示啓動過程) ;quiet (靜默式啓動,不顯示dmesg信息)
initrd /initrd-2.6.18-53.el5.img
#initrd內核鏡象的名字
#rhgb:表示redhat graphics boot,就是用圖片來代替啓動過程當中顯示的文本信息,這些信息在啓動後用dmesg能夠看到
#quiet:表示在啓動過程當中只顯示要信息,相似硬件自檢的消息不回顯示
四. 下面是幾個故障修復的例子
@1
1.咱們把title下面的三行刪掉,而後重啓系統,
2,重啓系統後,會卡在這裏,由於修改了grub.conf這個文件,
3,這裏就須要吧grub.conf裏的那三行手動添加進去了,須要指定/boot所在的分區,linux內核,和initrd文件,而後boot啓動
4,看到紅色的Red Hat就證實你的內核加載成功了
5,啓動成功後再把/etc/grub.conf文件的那三行加回去
@2
1.把/boot/grub/grub.conf刪掉,會怎樣呢?
能夠把這個文件備份到其餘地方,這樣啓動後能夠把文件恢復回去, 運行root或find /vmlinuz-2.6.18-53el5(能夠使用TAB補全),能夠搜索vmlinuz所在分區
2. 內核成功被加載
3.把以前備份好的grub文件還原回去
@3 . MBR損壞
# dd if=/dev/zero of=/dev/hda bs=446 count=1 //模擬Boot loader 損壞
#reboot
1.從光盤啓動,在這以前要把鏡像掛載上
2.輸入linux rescue進入救援模式
3.選擇語言
4.選擇美式鍵盤
5.這裏咱們不啓動網絡接口,
選擇NO
6.這裏是系統自動幫你掛載之前的系統,選擇Continue
7. 真正進入救援模式的操做
#chroot /mnt/sysp_w_picpath root虛擬家目錄
#grub-install /dev/hda
# reboot
@4. 把/boot/下的內容刪了再試一下
1. 一樣是同光盤啓動,進入linux rescue模式,看一下/boot下什麼都沒有了
2.把光盤掛上,而後安裝kernel
3.內核安裝完,還須要安裝grub
4. 安裝grub
5.沒有grub.conf文件,手動添加進去,而後重啓
6.內核加載成功
@5. 若是boot分區刪了(前提是df能夠看到/dev/hda1是boot分區記錄),也能夠恢復
從光盤進入到救援模式後,把那個boot分區添加回去,按照上面安裝內核和grub就能夠啓動系統了,添加grub.conf文件
注:若是重啓後出現fsck.ext3: Unable to resolve 'LABEL=boot',從新進入救援模式
解決方法:# e2label /dev/hda1 /boot #e2label能夠給分區加上label(這個地方糾結了我好長時間,本想再截張圖,但是弄了好幾回,都沒有那個錯誤出現了)