我發現Linux系統在啟動過程中會出現一些故障,導致系統無法正常啟動,我在這裡寫了幾個應用單用戶模式、GRUB命令操作、Linux救援模式的故障修復案例幫助大家了解此類問題的解決。
一、單用戶模式Linux系統提供了單用戶模式(類似Windows安全模式),可以在最小環境中進行系統維護。在單用戶模式(運行級別1)中,Linux引導進入根shell,網絡被禁用,只有少數進程運行。單用戶模式可以用來修改文件系統損壞、還原配置文件、移動用戶數據等。
以下列舉了幾個單用戶模式修復系統故障的典型案例:
案例一:root密碼忘記在單用戶模式中,Linux不需要root密碼(Red Hat系統不需要root密碼,但SuSe則需要,不同Linux系統稍有差別,本文以Fedora Core 6為例講解),這使更改root密碼非常容易。了解當系統引導進入多用戶模式失敗時,如何進入單用戶模式,非常重要。
1、 在系統啟動過程中,會出現開始界面,按任意鍵,進入GRUB菜單選項。(若希望以後無此提示,直接進入GRUB菜單選項,刪除配置文件grub.conf中「hiddenmenu」項即可。)
2、 按「e」鍵編輯GRUB引導菜單選項,按「e」鍵後的GRUB屏幕。通過箭頭鍵下移到kernel行,並按「e」鍵,
3、在尾行光標處添加single,按回車鍵返回前一個屏幕,按「b」鍵進行引導,則系統自動進入單用戶模式,如果要改變root密碼,則執行命令:sh-3.1# passwd root
更改成功後,執行命令exit退出重啟即可。
大家可以在單用戶模式中去糾正阻止系統正常啟動的很多問題,比如:
1、 禁用可能中止系統運行的服務如禁用Samba服務,則執行:sh-3.1# chkconfig smb off下次系統引導就不會啟動Samba服務了。
2、 更改系統預設運行級如果X Window無法啟動或者出現故障,可以編輯/etc/inittab文件,採用文本方式登錄,更改initdefault引導級別為3:id:3:initdefault:
案例二:硬碟扇區錯亂在啟動過程中最容易遇到的問題就是硬碟可能有壞道或扇區錯亂(數據損壞)的情況,這種情況多由於異常斷電、不正常關機導致。
此種問題發生,在系統啟動的時候,屏幕會顯示:
Press root password or ctrl+D:
此時輸入root密碼系統自動進入單用戶模式,輸入:
fsck -y /dev/hda6
(fsck為文件系統檢測修復命令,「-y」設定檢測到錯誤自動修復,/dev/hda6為發生錯誤的硬碟分區,請依據具體情況更改此參數)
系統修復完成後,用命令「reboot」重新啟動即可。
案例三、GRUB選項設置錯誤
「Error 15」顯示系統無法找到grub.conf中指定的內核。
GRUB引導錯誤信息,我們觀察發現因為打字錯誤,內核文件的「vmlinuz」打成了「vmlinux」,所以系統無法找到內核的可執行文件。
我們可以按任意鍵回到GRUB編輯界面,修改此錯誤,回車保存後按「b」鍵即可正常引導,當然不要忘記進入系統後修改grub.conf文件中此處錯誤。
這是很多初學Linux的用戶在修改GRUB設置時很容易犯的錯誤,出現此黑屏提示時注意觀察報錯信息,即可針對性修復。
二、GRUB引導故障排除我發現有時Linux啟動後會直接進入GRUB命令行界面(只有「grub>」提示符),此時很多用戶就選擇了重新安裝GRUB甚至重新安裝系統。
其實一般而言此故障的原因最常見的有兩個:
如果是第一種情況,可以首先通過GRUB命令引導系統後修復;若是第二種情況,則要使用Linux救援模式修復了(本文後續有描述)。
首先,我們需要了解GRUB啟動系統的引導過程,grub.conf文件中主要的配置選項如下:
(注意:GRUB配置文件為/boot/grub/grub.conf, /etc/grub.conf只是此文件的軟連結)
title Fedora Core (2.6.18-1.2798.fc6)
root (hd0,0)
kernel /boot/vmlinuz-2.6.18-1.2798.fc6 ro root=LABEL=/ rhgb quiet initrd /boot/initrd-2.6.18-1.2798.fc6.img
「title Fedora Core (2.6.18-1.2798.fc6)」段被誤刪除
此時,系統啟動後會自動進入「GRUB>」命令行,為排除故障我們可以依次做如下操作:
1、查找/boot/grub/grub.conf文件所在分區GRUB>find/boot/grub/grub.conf(hd0,0)
2、查看grub.conf文件錯誤GRUB>cat (hd0,0)/boot/grub/grub.conf建議系統安裝設置好後,要將grub.conf文件備份,如果有備份文件如grub.conf.bak,則此時可以查看備份文件,與當前文件比較,發現錯誤:GRUB>cat (hd0,0)/boot/grub/grub.conf.bak
3、確認錯誤後,先通過命令行方式完成GRUB引導,進入系統後再行修復grub.conf文件錯誤:
1)指定/boot分區root (hd0,0)
2)指定內核加載kernel /boot/vmlinuz-2.6.18-1.2798.fc6 ro root=LABEL=/ rhgb quiet
3)指定鏡像文件所在位置initrd /boot/initrd-2.6.18-1.2798.fc6.img
提示:GRUB支持tab鍵命令補全功能
sh-3.1# chroot /mnt/sysimage sh-3.1# cp /etc/inittab.bak /etc/inittab
2、沒有備份文件的恢復辦法如果一些配置文件丟失或軟體誤刪除,且無備份,可以通過重新安裝軟體包來恢復。首先查找到/etc/inittab屬於哪一個RPM包(即便文件丟失,因為存在RPM資料庫,一樣可以查找到結果):sh-3.1# chroot /mnt/sysimage sh-3.1# rpm -qf /etc/inittab initscripts-8.45.3-1
掛載存放RPM包的安裝光碟(在救援模式下,光碟通常掛載在/mnt/source目錄下):sh-3.1# mount /dev/hdc /mnt/source
Fedora系統的RPM包存放在光碟Fedora/RPMS目錄下,其他Linux存放位置大同小異,我在這裡不一一列舉;另外,因為要修復的硬碟系統的根目錄在/mnt/sysimage下,需要使用——root選項指定其位置。覆蓋安裝/etc/inittab文件所在的RPM包:sh-3.1# rpm -ivh ——replacepkgs ——root /mnt/sysimage /mnt/source/Fedora/RPMS/ initscripts-8.45.3-1.i386.rpm
其中的rpm命令選項「——replacepkgs」表示覆蓋安裝,執行完成後,即已經恢復了此文件。sh-3.1# rpm2cpio /mnt/source/Fedora/RPMS/initscripts-8.45.3-1.i386.rpm | cpio -idv ./etc/inittab sh-3.1# cp etc/inittab /mnt/sysimage/etc
注意此命令執行時不能將文件直接恢復至/etc目錄,只能提取到當前目錄下,且恢復的文件名稱所在路徑要寫完整的絕對路徑。提取文件成功後,將其複製到根分區所在的/mnt/sysimage目錄下相應位置即可。救援模式是維護Linux的有力武器,本文以上述兩個例子講解了它的應用方法,希望能夠給讀者一點啟示。解決Linux系統啟動的故障,必須充分理解Linux的引導過程,才能夠對故障進行有效的判斷和處理。作者:csghjnbj
來源:http://blog.chinaunix.net/uid-26567710-id-3050269.html