導(dǎo)致linux無(wú)法啟動(dòng)的原因有很多,常見的原因有如下幾種:
文件系統(tǒng)配置不當(dāng),比如/etc/inittab文件、/etc/fstab文件等配置錯(cuò)誤或丟失,導(dǎo)致系統(tǒng)錯(cuò)誤,無(wú)法啟動(dòng)。
非法關(guān)機(jī),導(dǎo)致root文件系統(tǒng)破壞,也就是linux根分區(qū)破壞,系統(tǒng)無(wú)法正常啟動(dòng)
Linux內(nèi)核崩潰,從而無(wú)法啟動(dòng)
系統(tǒng)引導(dǎo)程序出現(xiàn)問題,比如grub丟失或者損壞,導(dǎo)致系統(tǒng)無(wú)法引導(dǎo)啟動(dòng)。
硬件故障,比如主板、電源、硬盤等出現(xiàn)問題,導(dǎo)致linux無(wú)法啟動(dòng)。
從這些常見的故障可知,導(dǎo)致系統(tǒng)無(wú)法啟動(dòng)的主要有兩個(gè)問題,硬件原因和操作系統(tǒng)原因,對(duì)于硬件出現(xiàn)的問題,只需通過更換硬件設(shè)備,即可解決,而對(duì)于操作系統(tǒng)出現(xiàn)的問題,雖然出現(xiàn)的問題可能千差萬(wàn)別,不過在多數(shù)情況下都可以用相對(duì)簡(jiǎn)單統(tǒng)一的一些方法來恢復(fù)系統(tǒng),下面我們就針對(duì)上面提出的幾個(gè)問題,結(jié)合Redhat Linux系統(tǒng)環(huán)境,給出一些常用的、普遍的解決問題的方法。
1./etc/fstab文件丟失,導(dǎo)致系統(tǒng)無(wú)法啟動(dòng)
/etc/fstab文件存放了系統(tǒng)中文件系統(tǒng)的相關(guān)信息,如果正確的配置了該文件,那么在linux啟動(dòng)時(shí),系統(tǒng)會(huì)讀取此文件,自動(dòng)掛載linux的各個(gè)分區(qū),如果此文件配置錯(cuò)誤,或者丟失,就會(huì)導(dǎo)致系統(tǒng)無(wú)法啟動(dòng),具體的故障現(xiàn)象是在檢測(cè)mount partition時(shí)出現(xiàn):
starting system logger
此后系統(tǒng)啟動(dòng)就停止了。
針對(duì)這個(gè)問題,我們的第一思路就是想辦法恢復(fù)/etc/fstab這個(gè)文件的信息,只要恢復(fù)了此文件,系統(tǒng)就能自動(dòng)掛載每個(gè)分區(qū),正常啟動(dòng)。可能很多讀者首先想到的是將系統(tǒng)切換到單用戶模式下,然后手動(dòng)掛載分區(qū),最后結(jié)合系統(tǒng)信息,重建/etc/fstab文件。
但是這種方法是行不通的,因?yàn)閒atab文件丟失導(dǎo)致linux無(wú)法掛載任何一個(gè)分區(qū),即使linux還能切換到單用戶下,那么此時(shí)的系統(tǒng)也只是一個(gè)read-only的文件系統(tǒng),無(wú)法向磁盤寫入任何信息。
我們介紹另外一個(gè)方法,就是利用linux rescue修復(fù)模式登錄系統(tǒng),進(jìn)而獲取分區(qū)和掛載點(diǎn)信息,重構(gòu)/etc/fstab文件。
這里以rhel5為例,首先將系統(tǒng)第一章光盤放入光驅(qū),設(shè)置BOIS從光驅(qū)啟動(dòng),這樣系統(tǒng)就從光驅(qū)引導(dǎo),然后在boot后輸入:linux rescue,如圖1所示:

圖1設(shè)置linux進(jìn)入修復(fù)模式
接著系統(tǒng)自動(dòng)開始引導(dǎo),進(jìn)入圖2所示畫面:

圖2 選擇語(yǔ)言
這里是選擇模式使用的語(yǔ)言,可以按照自己需要設(shè)定,我們這里選擇“English“,然后按tab鍵,選中“ok”,回車進(jìn)入下一步。
下面進(jìn)入的是鍵盤選擇界面,如圖3所示,這里選擇默認(rèn)的“us”即可。

圖3 選擇鍵盤類型
下面進(jìn)入網(wǎng)絡(luò)配置界面,如圖4所示:

圖4 是否啟用網(wǎng)絡(luò)
這里是選擇是否啟用網(wǎng)絡(luò),由于系統(tǒng)已經(jīng)無(wú)法啟動(dòng),我們已經(jīng)在linux系統(tǒng)上進(jìn)行操作了,啟用網(wǎng)絡(luò)與否都無(wú)所謂。這里選擇不啟用。
下面到了最關(guān)鍵的步驟了,如圖5所示,修復(fù)模式會(huì)自動(dòng)將系統(tǒng)的所有分區(qū)掛載到/mnt/sysimage目錄下,選擇“Continue”,則修復(fù)環(huán)境進(jìn)入到read-write狀態(tài)下,可以對(duì)分區(qū)進(jìn)行讀寫操作,選擇“Read-Only”,修復(fù)環(huán)境進(jìn)入到只讀模式,由于我們要重建fstab文件到/etc目錄下,因此選擇“Continue”進(jìn)入可讀寫模式下。

圖5 選擇修復(fù)模式的啟動(dòng)方式
下面是一個(gè)友情提示界面,如圖6所示,由于fstab文件丟失,修復(fù)模式找不到任何可掛載的分區(qū),從這里可知,修復(fù)模式在這里也讀取/etc/fstab文件,回車,進(jìn)入下一步。

圖6 無(wú)法掛載系統(tǒng)任何分區(qū)
下面就進(jìn)入了修復(fù)環(huán)境下,可以進(jìn)行操作了。如圖7所示

圖7 修復(fù)模式命令行
上面詳細(xì)演示了如何進(jìn)入linux的修復(fù)模式,其實(shí)很多情況下,linux無(wú)法啟動(dòng)時(shí),都可以通過這個(gè)方式登錄系統(tǒng)進(jìn)行修復(fù)和更改操作。
下面是恢復(fù)/etc/fstab文件的詳細(xì)過程:
首先查看一下系統(tǒng)分區(qū)情況,如下所示:
sh-3.1# fdisk -l
Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 25 200781 83 Linux
/dev/sda2 26 1300 10241437+ 83 Linux
/dev/sda3 1301 1682 3068415 83 Linux
/dev/sda4 1683 5221 28427017+ 5 Extended
/dev/sda5 1683 1873 1534176 83 Linux
/dev/sda6 1874 2064 1534176 83 Linux
/dev/sda7 2065 2255 1534176 83 Linux
/dev/sda8 2256 2382 1020096 83 Linux
/dev/sda9 2383 2484 819283+ 82 Linux swap / Solaris
/dev/sda10 2485 5221 21984921 83 Linux
因?yàn)榉謪^(qū)并沒有損壞,通過fdisk命令可以查看到系統(tǒng)分區(qū)的完整信息,但是每個(gè)分區(qū)對(duì)應(yīng)的label name信息我們還不知道,下面通過e2label命令查看每個(gè)分區(qū)對(duì)應(yīng)的label name:
sh-3.1# e2label /dev/sda1
/boot
sh-3.1# e2label /dev/sda2
/usr
sh-3.1# e2label /dev/sda3
/
sh-3.1# e2label /dev/sda5
/var
sh-3.1# e2label /dev/sda6
/tmp
sh-3.1# e2label /dev/sda7
/home
sh-3.1# e2label /dev/sda8
/opt
sh-3.1# e2label /dev/sda10
/webdata
這樣,就得到了所有分區(qū)的掛載點(diǎn)信息,接下來就可以構(gòu)造一個(gè)fstab文件了。
小技巧:可以參考其它系統(tǒng)中fstab文件的格式,結(jié)合本系統(tǒng)的分區(qū)和掛載點(diǎn)信息,構(gòu)造出自己的fstab文件來。
由于fstab文件是存放在系統(tǒng)根目錄下的,因此需要掛載原來系統(tǒng)的根分區(qū),從上面可知根分區(qū)對(duì)應(yīng)的設(shè)備名為/dev/sda3,接著在修復(fù)模式創(chuàng)建的臨時(shí)根分區(qū)下創(chuàng)建一個(gè)掛載點(diǎn),然后掛載原來系統(tǒng)的根分區(qū)。操作過程如下所示:
sh-3.1# pwd
/
sh-3.1# mkdir temp
sh-3.1# mount /dev/sda3 /temp
sh-3.1# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev 515644 0 515644 0% /dev
/tmp/loop0 79872 79872 0 100% /mnt/runtime
/dev/sda3 2972268 259916 2558932 10% /temp
這樣以來,原有根分區(qū)的文件全部掛載到了/temp目錄下,接著就可以創(chuàng)建我們需要的fatab文件了。
sh-3.1# vi /temp/etc/fstab
LABEL=/ / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
LABEL=/cicro /cicro ext3 defaults 1 2
devpts /dev/pts devpts gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs defaults 0 0
LABEL=/home /home ext3 defaults 1 2
LABEL=/opt /opt ext3 defaults 1 2
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
LABEL=/tmp /tmp ext3 defaults 1 2
LABEL=/usr /usr ext3 defaults 1 2
LABEL=/var /var ext3 defaults 1 2
LABEL=SWAP-sda9 swap swap defaults 0 0
配置完畢,保存退出,然后重啟系統(tǒng)。
sh-3.1#reboot
2、root文件系統(tǒng)破壞,導(dǎo)致系統(tǒng)無(wú)法啟動(dòng)
Linux下普遍采用的是ext3文件系統(tǒng),ext3是一個(gè)具有日志記錄功能的日志文件系統(tǒng),可以進(jìn)行簡(jiǎn)單的容錯(cuò)和恢復(fù),但是在一個(gè)高負(fù)荷讀寫的ext3文件系統(tǒng)下,如果突然發(fā)生掉電,就很有可能發(fā)生文件系統(tǒng)內(nèi)部結(jié)構(gòu)不一致,導(dǎo)致文件系統(tǒng)破壞。
Linux在啟動(dòng)時(shí),會(huì)自動(dòng)去分析和檢查系統(tǒng)分區(qū),如果發(fā)現(xiàn)文件系統(tǒng)有簡(jiǎn)單的錯(cuò)誤,會(huì)自動(dòng)修復(fù),如果文件系統(tǒng)破壞比較嚴(yán)重,系統(tǒng)無(wú)法完成修復(fù)時(shí),系統(tǒng)就會(huì)自動(dòng)進(jìn)入單用戶模式下或者出現(xiàn)一個(gè)交互界面,提示用戶介入手動(dòng)修復(fù),現(xiàn)象類似下面所示:
checking root filesystem
/dev/sdb5 contains a file system with errors, check forced
/dev/sdb5:
Unattached inode 68338812
/dev/sdb5: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY
(i.e., without -a or -p options)
FAILED
/contains a file system with errors check forced
an eror occurred during the file system check
****dropping you to a shell;the system will reboot
****when you leave the shell
Press enter for maintenance
(or type Control-D to continue):
give root password for maintenance
從這個(gè)錯(cuò)誤可以看出,系統(tǒng)根分區(qū)文件系統(tǒng)出現(xiàn)了問題,系統(tǒng)在啟動(dòng)時(shí)無(wú)法自動(dòng)修復(fù),然后進(jìn)入到了一個(gè)交互界面,提示用戶進(jìn)行系統(tǒng)修復(fù)。
這個(gè)問題發(fā)生的機(jī)率很高,引起這個(gè)問題的主要原因就是系統(tǒng)突然掉電,引起文件系統(tǒng)結(jié)構(gòu)不一致。一般情況下解決此問題的辦法是采用fsck命令,進(jìn)行強(qiáng)制修復(fù)。
根據(jù)上面的錯(cuò)誤提示,當(dāng)按下“Control-D”組合鍵后系統(tǒng)自動(dòng)重啟,當(dāng)輸入root密碼后進(jìn)入系統(tǒng)修復(fù)模式,在修復(fù)模式下,可以執(zhí)行fsck命令,具體操作過程如下:
[root@localhost /]#umount /dev/sdb5
[root@localhost /]#fsck .ext3 -y /dev/sdb5
e2fsck 1.39 (29-May-2006)
/ contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Inode 6833812 ref count is 2, should be 1. Fix<y>? yes
Unattached inode 6833812
Connect to /lost+found<y>? yes
Inode 6833812 ref count is 2, should be 1. Fix<y>? yes
Pass 5: Checking group summary information
Block bitmap differences: -(519--529) -9273
Fix<y>? yes
…… ……
/: ***** FILE SYSTEM WAS MODIFIED *****
/: 19/128520 files (15.8% non-contiguous), 46034/514048 blocks
上面就是fsck修復(fù)受損文件系統(tǒng)的過程,fsck詳細(xì)用法在本書第四章有詳細(xì)的講述,這里不在多講。需要注意的是,在執(zhí)行fsck的時(shí)候,一定要先卸載要修復(fù)的分區(qū),然后再執(zhí)行修復(fù)操作,切記!
三、其它故障的一般解決方案
如果是linux的引導(dǎo)程序出現(xiàn)問題,那么也可以通過光盤引導(dǎo)的方式進(jìn)入linux修復(fù)模式,然后修改對(duì)應(yīng)的引導(dǎo)程序或者重新安裝引導(dǎo)程序。
如果linux內(nèi)核崩潰或者丟失,同樣可以先進(jìn)入linux rescue下,然后加載root分區(qū),最后重新編譯內(nèi)核。
如果出現(xiàn)了最壞的情況,文件系統(tǒng)破壞嚴(yán)重,同時(shí)內(nèi)核也崩潰,那么此時(shí)重新安裝系統(tǒng)反而比較容易,在這種情況下可以先將linux上有用的數(shù)據(jù)和文件備份轉(zhuǎn)移到其它設(shè)備,然后對(duì)整個(gè)文件系統(tǒng)進(jìn)行全新安裝。
在這里我們不可能對(duì)每個(gè)出現(xiàn)的問題,都給出詳細(xì)的解決方案,問題都是千差萬(wàn)別的,每個(gè)問題的處理都不盡相同,本書要傳授給大家的是當(dāng)linux系統(tǒng)出現(xiàn)問題后,解決問題的一般思路和通用策略,熟練掌握了這些技巧,處理任何linux問題都能游刃有余。