一.首先簡單看一下系統啓動的流程圖html
能夠參考:http://maoqiu.blog.51cto.com/8570467/1368586 linux
http://www.opsers.org/base/learning-that-the-rhel6-day-boot-linux-troubleshooting.html shell
二.linux系統啓動過程數據庫
1,BIOS自檢,檢測硬件,決定啓動介質vim
BIOS爲寫入到主板上的一塊閃存或EEPROM的程序,它在開機時候執行,並經過BIOS程序去加載CMOS的信息,並經過CMOS內的設置取得主機的各項硬件配置,BIOS程序也能夠修改CMOS當中的參數,通常使用Del按鍵進入BIOS設置界面。bash
2,從硬盤啓動,讀硬盤第一個扇區MBR,而後將啓動引導工做交給boot loader網絡
MBR引導記錄位於物理硬盤的第一塊扇區的一段引導代碼(第一塊扇區512個字節,其中MBR佔446字節,分區表佔64字節,結束標誌佔2字節),該扇區又稱爲主引導扇區(MBR扇區)ide
3,boot loader去找grub,grub讀取配置文件grub.conf,決定默認啓動項,找到內核(kernel)和驅動(initrd)測試
Boot loader:認識操做系統的文件格式並加載內核到內存中去執行,因爲不一樣的操做系統的文件格式不一致,所以每種操做系統都有本身的bootloader,ui
bootloader分爲兩階:
一、stage1: 執行boot loader加載文件系統驅動
二、stage2:加載真正的配置文件: grub.conf
b. grub.conf裏面有內核和驅動的信息,下面會對grub.conf文件作具體的介紹
4,內核會主動調用init進程,讀取配置文件/etc/inittab,決定啓動級別,運行初始化腳本/etc/rc.d/rc.sysinit,運行相應的啓動級別下的腳本/etc/rc.d/rcN.d/
a. 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
b./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界面,等待用戶輸入用戶名和密碼
a.經過/etc/passwd、/etc/shadow驗證,若是用戶名和密碼輸入正確,
讀取4個初始化文件:/etc/profile、/etc/bashrc、~/.bashrc、~/.bash_profile
文本界面直接開啓shell
圖形界面開啓桌面,進入X Window,經過開啓終端打開shell
b.系統還會自定義設備與模塊對應文件爲/etc/modprobe.conf
三. 介紹grub.conf文件
#vim /etc/grub.conf
default=0 # 默認的啓動項,也就是啓動那個title,從0開始計數。
timeout=5 #就是默認在啓動選擇界面停留的時間,等待5秒自動進入默認操做系統
splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz #splashp_w_picpath是grub啓動背景畫面,這個能夠不要。
hiddenmenu #hiddenmenu 是隱藏菜單隻有按上下鍵纔會出現
title Red Hat Enteprise 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內核鏡象的名字
四,下面是幾個故障修復的例子
1.把title下面的三行刪掉,而後重啓系統
重啓系統後,會卡在這裏,由於修改了grub.conf這個文件
須要把grub.conf裏的三行內容手動添加進去,須要指定/boot所在的分區,linux內核,和initrd文件,而後boot啓動。
看到紅色的Red Hat就證實你的內核加載成功了
啓動成功後再把/etc/grub.conf文件的那三行內容加回去
2.把/boot/grub/grub.conf刪掉,會怎樣呢
能夠把這個grub.conf文件備份到其餘地方,這樣啓動後能夠把文件恢復回去, 運行root或find /vmlinuz-2.6.18-53el5(可使用TAB補全),能夠搜索vmlinuz所在分區.
內核成功被加載
3.MBR損壞
#dd if=/dev/zero of=/dev/hda bs=446 count=1 //模擬Boot loader 損壞
#reboot
從光盤啓動,在這以前要把鏡像掛載上
選擇語言:enginsh-----選擇美式鍵盤----對網絡接口選擇no----對掛載之前的操做系統選擇continue-----進入救援模式操做
4.把/boot/下的內容刪了再試一下
一樣使用光盤啓動,進入linux rescue模式,查看一下/boot下什麼都沒有了
把光盤掛上,而後安裝kernel
內核安裝完,還須要安裝grub
沒有grub.conf文件,手動添加進去,而後重啓系統
內核加載成功
5.若是boot分區刪了(前提是df能夠看到/dev/hda1是boot分區記錄),也能夠恢復。
從光盤進入到救援模式後,把那個boot分區添加回去,按照上面安裝內核和grub就能夠啓動系統了,添加grub.conf文件。
注:若是重啓後出現fsck.ext4: Unable to resolve 'LABEL=boot',從新進入救援模式
解決方法:# e2label /dev/sda1 /boot #e2label能夠給分區加上label
6.initramfs故障的解決
RHEL6由initrd走向initramfs ,initramfs目的和initrd同樣的,就是提供開機過程當中所須要的最重要內核模塊,以讓系統開機過程能夠順利完成。由於內核模塊放在/lib/modules/$(uname -r)/kernel/ 當中, 這些模塊在根目錄(/)被掛載時纔可以被讀取。若是內核自己不具有磁盤的驅動程序時, 固然沒法掛載根目錄,也就沒有辦法取得驅動程序,那麼就形成開不了機了。雖然通常狀況下,沒有這個文件,系統一樣啓動,但遇到一些特殊應用時候,系統就啓動不了了。
如今咱們來刪除這個文件(建議備份)。
要想從新建立這個文件其實很簡單就是用mkinitrd這個命令來建立,下面就來看看這個的用法。
(例如: mkinitrd /boot/initramfs-2.6.32-71.el6.i686.img 2.6.32-71.el6.i686)
經過上面的幫助,咱們能夠看到他給的例子就是用mkinitrd建立initramfs的。那麼OK,咱們也來建立一個。
咱們發現啓動後就黑屏了,沒有反應。一樣仍是進入救援模式,而後chroot /mnt/sysp_w_picpath
執行下面的命令,若是要查看具體的建立過程,咱們能夠加上-v參數。
再來看看/boot目錄下面,是否是有了這個initramfs-2.6.32-71.el6.i686.img文件了,軟後從新啓動系統
7.運行級別的故障解決
系統運行級別的實際相關文件都在/etc/rc.d這個目錄下,因此咱們刪除這個目錄裏面的所有文件。
從新啓動系統錯誤提示以下
只能硬啓動了 ,在運行級別5下,啓動時候的錯誤提示以下
進入救援模式 ,chroot /mnt/sysp_w_picpath後,
只須要把運行級別inittab文件裏面的5改爲3或者是2就能登錄系統了,若是是改爲1的話,會在Entering non-interactive startkup處卡住。
注1:若是你的默認運行級別是5(圖形模式)的話,系統是啓動不了的。但若是你的默認運行級別是二、3(命令行模式)的話,系統能啓動,只是少了不少有服務而已。
注2:在RHEL6中,若是沒有inittab這個文件系統一樣能啓動,但啓動的級別是3。
注3:若是想讓整個服務和系統安裝時候的同樣,那麼就只能本身動手來增長了(參考其餘的系統來配置相應的服務)
解決方法:
進入救援模式 ,chroot /mnt/sysp_w_picpath後
把運行級別inittab文件裏面的5調整到3後,進入系統(固然不換到3運行級別也行,直接在救援模式下操做)
首先建立咱們的rc?.d這7個目錄,否則執行chkconfig命會出錯
建立目錄
在不一樣運行級別中的服務,調用的都是/etc/init.d這個目錄中腳本,因此咱們想增長什麼服務,就能夠參考這個目錄。
咱們以network這個服務爲例
若是不知道如何使用chkconfig命令,就能夠用幫助,咱們來增長一個network服務
增長後,咱們再來看看/etc/rc.d/rcN.d中的變化
8.系統超級用戶root密碼破解
開機的時候進入Centos的畫面按Esc----按鍵盤的"e"鍵,出現下面界面:
用鍵盤上的方向鍵移動光標至第二項,而後再按「e」鍵,會出現下面界面:
先輸入一個空格鍵,而後再輸入數字1,按回車;或者輸入空格鍵,再輸入single,按回車。而後會出現下面界面:
按鍵盤的「b」鍵,重啓系統,而後就進入單用戶模式了,進入系統後輸入#passwd root,就能夠從新更改root密碼了,而後重啓系統就Ok了
9.硬盤扇區錯亂
在啓動過程當中最容易遇到的問題就是硬盤有壞道或扇區錯亂(數據損壞)狀況,這種狀況多因爲異常斷電、不正常關機致使。
此種問題發生,在系統啓動的時候,屏幕會顯示:
Press root password or ctrl+D:
此時輸入root密碼系統自動進入單用戶模式,輸入「fsck -y /dev/sda6」(fsck爲文件系統檢測修復命令,「-y」設定檢測到錯誤自動修復,/dev/sda6爲發生錯誤的硬盤分區,請依據具體狀況更改此參數),系統修復完成後,用命令「reboot」從新啓動便可。
10.系統配置文件丟失修復
系統在引導期間,很重要過程就是init進程讀取其配置文件/etc/inittab,啓動系統基本服務程序及默認運行級別的服務程序完成系統引導,若是/etc/inittab誤刪除或修改錯誤,Linux將沒法正常啓動此時,只有經過 救援模式解決。
一、有備份文件的恢復辦法
進入救援模式,執行chroot命令後,若是有此文件的備份(強烈建議系統中的重要數據目錄,如/etc、/boot等要進行備份),
直接將備份文件拷貝回去,退出重啓便可。若是是配置文件修改錯誤,如比較典型的/boot/grub/grub.conf及 /etc/passwd的文件修改錯誤,也能夠直接修正恢復。假設有備份文件/etc/inittab.bak,則在救援模式下執行:
sh-3.1# chroot /mnt/sysp_w_picpath
sh-3.1# cp /etc/inittab.bak /etc/inittab
二、沒有備份文件的恢復辦法
若是一些配置文件丟失或軟件誤刪除,且無備份,能夠經過從新安裝軟件包來恢復,首先查找到/etc/inittab屬於哪個RPM包(即使文件丟失,由於存在RPM數據庫,同樣能夠查找到結果):
sh-3.1# chroot /mnt/sysp_w_picpath
sh-3.1#rpm -qf /etc/inittab
initscrīpts-8.45.3-1
退出chroot模式:
sh-3.1#exit
掛載存放RPM包的安裝光盤(在救援模式下,光盤一般掛載在/mnt/source目錄下):
sh-3.1# mount /dev/sdc /mnt/source
Fedora系統的RPM包存放在光盤Fedora/RPMS目錄下,其餘Linux存放位置大同小異,另外,由於要修復的硬盤系統的根目錄在/mnt/sysp_w_picpath下,須要使用--root選項指定其位置。覆蓋安裝/etc/inittab文件所在的RPM包:
sh-3.1# rpm -ivh --replacepkgs --root /mnt/sysp_w_picpath /mnt/source/Fedora/RPMS/initscrīpts-8.45.3-1.i386.rpm
其中的rpm命令選項「--replacepkgs」表示覆蓋安裝,執行完成後,即已經恢復了此文件。
若是想只提取RPM包中的/etc/inittab文件進行恢復,能夠在進入救援模式後,執行命令:
sh-3.1#rpm2cpio /mnt/source/Fedora/RPMS/initscrīpts-8.45.3-1.i386.rpm | cpio -idv ./etc/inittab
sh-3.1# cp etc/inittab /mnt/sysp_w_picpath/etc
注意此命令執行時不能將文件直接恢復至/etc目錄,只能提取到當前目錄下,且恢復的文件名稱所在路徑要寫完整絕對路徑。提取文件成功後,將其複製到根分區所在的/mnt/sysp_w_picpath目錄下相應位置便可。
11.雙系統啓動修復
當咱們安裝雙系統環境,先安裝Linux再安裝Windows;或者已經安裝好雙系統環境的Windows 損壞,在從新安裝Windows後,保存GRUB的MBR(Master Boot Record,主引導記錄)
會被Windows系統的自舉程序NTLDR所覆蓋,形成Linux系統沒法引導。
一、若是要恢復雙系統引導,首先進入救援模式,執行chroot命令以下:
sh-3.1# chroot /mnt/sysp_w_picpath
二、將根目錄切換到硬盤系統的根目錄中,而後執行grub-install命令從新安裝GRUB:
sh-3.1#grub-install /dev/sda
「/dev/sda」爲硬盤名稱,如使用SCSI硬盤或Linux安裝在第二塊scsi硬盤,此項設置要作相應調整。
三、而後依次執行exit命令,退出chroot模式及救援模式(執行兩次exit命令):
sh-3.1# exit
sh-3.1# exit
系統重啓後,將恢復GRUB引導的雙系統啓動。
grub(1,2)文件修復
1、grub1文件修復
一、內核
cat /etc/debian_version
5.0.10
二、版本
uname -r
2.6.26-2-amd64
三、先模擬破壞mv /boot/grub/menu.lst /boot/grub/menu.lst.bak ,這樣的話系統會找不到配置文件 直接進入grub命令行
五、使用root命令查看賦值並賦值
root (hd0,0)
六、kernel命令
kernel /boot/vmlinuz-2.6.26-2-amd64 root=/dev/sda1
七、initrd命令
initrd /boot/initrd.img-2.6.26-2-amd64八、使用boot命令進入系統
boot
九、進入系統後使用update-grub命令來檢測內核、啓動文件,並添加全部的操做系統,自動生成你的啓動菜單。
cd /boot/grub && update-grub
十、確認下文件是否已生成
ls /boot/grub/menu.lst
/boot/grub/menu.lst
十一、最後使用grub-install命令對/dev/sda
grub-install /dev/sda
2、grub2文件修復
一、內核
cat /etc/debian_version
7.8
二、版本
uname -r
3.2.0-4-amd64
三、先模擬破壞mv /boot/grub/grub.cfg /boot/grub/grub.cfg.bak ,這樣的話系統會找不到配置文件 直接進入grub命令行
八、linux命令
linux /boot/vmlinuz-3.2.0-4-amd64 root=/dev/sda1
九、initrd命令
initrd /boot/initrd.img-3.2.0-4-amd64
十、使用boot命令進入系統
boot
十一、進入系統後使用update-grub命令來檢測內核、啓動文件,並添加全部的操做系統,自動生成你的啓動菜單。
cd /boot/grub && update-grub
Generating grub.cfg ...
Found linux p_w_picpath: /boot/vmlinuz-3.2.0-4-amd64
Found initrd p_w_picpath: /boot/initrd.img-3.2.0-4-amd64
done
十二、確認下文件是否已生成
ls /boot/grub/grub.cfg
/boot/grub/grub.cfg
1三、最後使用grub-install命令對/dev/sda
grub-install /dev/sda
Installation finished. No error reported.