linux啓動故障總結

一.首先簡單看一下系統啓動的流程圖html

wKiom1UuAsXjSY6pAAF6iYGqw-A549.jpg

能夠參考: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)測試

  1. 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下面的三行刪掉,而後重啓系統

wKiom1UuC8TxL2ORAAGOJPFbY8U119.jpg

重啓系統後,會卡在這裏,由於修改了grub.conf這個文件

wKiom1UuC_3Sy3NWAACcnxJ9bI0178.jpg

須要把grub.conf裏的三行內容手動添加進去,須要指定/boot所在的分區,linux內核,和initrd文件,而後boot啓動。

wKiom1UuDLyhBfUkAAG-h-5_fS4493.jpg

看到紅色的Red Hat就證實你的內核加載成功了

wKiom1UuDI7Bn0psAADP1XOSmCE959.jpg

啓動成功後再把/etc/grub.conf文件的那三行內容加回去

wKioL1UuDkjA3dbjAAH5GCYZUaw913.jpg

2.把/boot/grub/grub.conf刪掉,會怎樣呢

能夠把這個grub.conf文件備份到其餘地方,這樣啓動後能夠把文件恢復回去,   運行root或find /vmlinuz-2.6.18-53el5(可使用TAB補全),能夠搜索vmlinuz所在分區.

wKioL1UuD1-i1zOcAAEWRN51QB4361.jpg

內核成功被加載

wKiom1UuD-uhWniLAADOKPGwDq8986.jpg

3.MBR損壞

#dd if=/dev/zero of=/dev/hda bs=446 count=1 //模擬Boot loader 損壞

#reboot

從光盤啓動,在這以前要把鏡像掛載上

wKioL1UuEcLyktWEAACaBVJ_dtE492.jpg

選擇語言:enginsh-----選擇美式鍵盤----對網絡接口選擇no----對掛載之前的操做系統選擇continue-----進入救援模式操做

wKioL1UuEmLzNnRNAAI1maIMKsg072.jpg

4.把/boot/下的內容刪了再試一下

wKiom1UuEanh4ZW-AACxRacCZAs659.jpg

一樣使用光盤啓動,進入linux rescue模式,查看一下/boot下什麼都沒有了

wKioL1UuEyXCVtehAADBRpscxwY695.jpg

把光盤掛上,而後安裝kernel

wKioL1UuE1eDeG_TAAD43R0nh1o000.jpg

wKioL1UuE4jRfX1UAABd45ugEVQ783.jpg

內核安裝完,還須要安裝grub

wKioL1UuE7KS4XFNAAFrlq66D38803.jpg

沒有grub.conf文件,手動添加進去,而後重啓系統

wKiom1UuEojjG8NCAAFxPApYrBw656.jpg

內核加載成功

wKiom1UuEyWwbpAAAAFS_JGjrqs453.jpg

5.若是boot分區刪了(前提是df能夠看到/dev/hda1是boot分區記錄),也能夠恢復。

wKioL1UuFJaQoie7AAHidedVzAU107.jpg

從光盤進入到救援模式後,把那個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這個命令來建立,下面就來看看這個的用法。 

wKioL1UuHMPQFbWZAACsEzPFuj8053.jpg

(例如: mkinitrd /boot/initramfs-2.6.32-71.el6.i686.img 2.6.32-71.el6.i686)

經過上面的幫助,咱們能夠看到他給的例子就是用mkinitrd建立initramfs的。那麼OK,咱們也來建立一個。

wKioL1UuHQuCJSzxAACEs2T0qMo563.jpg

咱們發現啓動後就黑屏了,沒有反應。一樣仍是進入救援模式,而後chroot  /mnt/sysp_w_picpath 
執行下面的命令,若是要查看具體的建立過程,咱們能夠加上-v參數。 

wKioL1UuHWzR_gEdAACgWBq4Q5A107.jpg

再來看看/boot目錄下面,是否是有了這個initramfs-2.6.32-71.el6.i686.img文件了,軟後從新啓動系統

wKiom1UuHGrSyZusAABfB7CqOT8678.jpg

7.運行級別的故障解決

系統運行級別的實際相關文件都在/etc/rc.d這個目錄下,因此咱們刪除這個目錄裏面的所有文件。

wKiom1UuHWfyPgY6AABdya4D4_0411.jpg

從新啓動系統錯誤提示以下

wKioL1UuHwjD4XwbAAAQcZ9zpyY214.jpg

只能硬啓動了 ,在運行級別5下,啓動時候的錯誤提示以下 

wKioL1UuHyyhPsu3AAM5B8UcJY4485.jpg

進入救援模式 ,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命會出錯 

wKiom1UuH0zjLA6WAACmJrJn44o120.jpg

建立目錄

wKioL1UuIMyR9aKTAACsHfKvAA0200.jpg

在不一樣運行級別中的服務,調用的都是/etc/init.d這個目錄中腳本,因此咱們想增長什麼服務,就能夠參考這個目錄。 
咱們以network這個服務爲例 
若是不知道如何使用chkconfig命令,就能夠用幫助,咱們來增長一個network服務 

wKiom1UuH7zydysyAAD-otFvYy0797.jpg

wKiom1UuIAjz1o7wAABLRpQhojE901.jpg

增長後,咱們再來看看/etc/rc.d/rcN.d中的變化

wKiom1UuIDTgj-D2AAD6bpEV9bo989.jpg

8.系統超級用戶root密碼破解

開機的時候進入Centos的畫面按Esc----按鍵盤的"e"鍵,出現下面界面:

wKiom1UuI0fQDo_jAADLPY9i6qM425.jpg

用鍵盤上的方向鍵移動光標至第二項,而後再按「e」鍵,會出現下面界面:

 wKioL1UuJpWyTYJ8AAC8BMAVDO4487.jpg

先輸入一個空格鍵,而後再輸入數字1,按回車;或者輸入空格鍵,再輸入single,按回車。而後會出現下面界面:

wKiom1UuJVngI6yHAAC-PjhiPsA290.jpg

按鍵盤的「b」鍵,重啓系統,而後就進入單用戶模式了,進入系統後輸入#passwd root,就能夠從新更改root密碼了,而後重啓系統就Ok了

wKioL1UuJvXDaGavAACyR_kJi_4710.jpg

9.硬盤扇區錯亂

在啓動過程當中最容易遇到的問題就是硬盤有壞道或扇區錯亂(數據損壞)狀況,這種狀況多因爲異常斷電、不正常關機致使。

此種問題發生,在系統啓動的時候,屏幕會顯示:

Press root password or ctrl+D

此時輸入root密碼系統自動進入單用戶模式,輸入「fsck -y /dev/sda6」(fsck爲文件系統檢測修復命令,「-y」設定檢測到錯誤自動修復,/dev/sda6爲發生錯誤的硬盤分區,請依據具體狀況更改此參數),系統修復完成後,用命令「reboot」從新啓動便可。

10.系統配置文件丟失修復

系統在引導期間,很重要過程就是init進程讀取其配置文件/etc/inittab,啓動系統基本服務程序及默認運行級別的服務程序完成系統引導,若是/etc/inittab誤刪除或修改錯誤,Linux將沒法正常啓動此時,只有經過 救援模式解決。

wKiom1UuKAHy1yUGAAEKGcoW-CE175.jpg


一、有備份文件的恢復辦法

進入救援模式,執行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命令行

wKioL1YjfszzkAHwAADXWVO8urU012.jpg

五、使用root命令查看賦值並賦值     

root (hd0,0)

wKioL1YjfzmQ7YtiAAECw0aRi_8645.jpg

六、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命令行

wKioL1YjgEyiOb3pAACqLtaTNy0580.jpg

wKiom1YjgHWRhFI1AABSGw26qOg991.jpg

wKiom1YjgIDRtNBgAAD6Izo3mJo181.jpg

八、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.

相關文章
相關標籤/搜索