Linux系統啟動故障如何修復?這幾個案例幫你解決問題~
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 配置文件中選項設置錯誤;
- 二是 GRUB 配置文件丟失 (還有少數原因,如內核文件或鏡像文件損壞、丟失,/boot 目錄誤刪除等)。
如果是第一種情況,可以首先通過 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” 段指定了 GRUB 引導的系統:
- “root” 段指定了 /boot 分區所在的位置:
- “kernel” 段指定了內核文件所在位置,內核加載時權限屬性為只讀 (“ro”) 以及指定根分區所在位置 (root=LABEL=/);initrd 指定了鏡像文件所在位置。所以 GRUB 在引導時順序為首先加載 /boot 分區,然后依次載入內核與鏡像文件。
案例:“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 鍵命令補全功能
4、從 /boot 分區啟動 boot (hd0,0)
命令行模式可以在 GRUB 菜單模式中通過按 “c” 鍵調用,也可以用于測試新編譯的內核 (設置 kernel、initrd 引導新內核及鏡像文件)。增加對 GRUB 引導以及 Linux 系統引導知識的了解將對此類故障排除大有幫助。
(三)Linux 救援模式應用
當系統連單用戶模式都無法進入時或出現 GRUB 命令行也不能解決的引導問題,我們就需要使用 Linux 救援模式來進行故障排除了。步驟如下:
1、將 Linux 安裝光盤 (如果使用 CD 光盤,則放入第一張引導光盤) 放入光驅,設置固件 CMOS/BIOS 為光盤引導,當 Linux 安裝畫面出現后,在 “boot:” 提示符后輸入 “linux rescue” 回車進入救援模式。(想了解救援模式詳細信息,還可以按 F5 鍵查看)
2、系統會檢測硬件,引導光盤上的 Linux 環境,依次提示你選擇救援模式下使用的語言 (建議選擇默認的英文即可,根據筆者測試,部分 Linux 系統選擇中文會出現亂碼); 鍵盤設置用默認的 “us” 就好; 網絡設置可以根據需要,大部分故障修復不需要網絡連接,可不進行此項設置,選擇 “No”。
3、接下來系統將試圖查找根分區,出現掛載提示,設置默認在救援模式,硬盤的根分區將掛載到光盤 Linux 環境的 /mnt/sysimage 目錄下,默認選項 “continue” 表示掛載權限為讀寫:“Read-only” 為只讀,如果出現檢測失敗可以選擇 “skip” 跳過。此處,因為要對系統進行修復,所以需要有讀寫權限,一般選擇默認選項 “continue”。
進入下一步后,系統提示執行 “chroot /mnt/sysimage” 命令,可以將根目錄掛載到我們硬盤系統的根目錄中去。
案例一:雙系統啟動修復
當我們安裝雙系統環境,先安裝 Linux 再安裝 Windows; 或者已經安裝好雙系統環境的 Windows 損壞,在重新安裝 Windows 后,保存 GRUB 的 MBR(Master Boot Record,主引導記錄) 會被 Windows 系統的自舉程序 NTLDR 所覆蓋,造成 Linux 系統無法引導。
1、如果要恢復雙系統引導,首先用上述方法進入救援模式,執行 chroot 命令如下:sh-3.1# chroot /mnt/sysimage
2、將根目錄切換到硬盤系統的根目錄中,然后執行 grub-install 命令重新安裝 GRUB:sh-3.1# grub-install /dev/hda“/dev/hda” 為硬盤名稱,如使用 SCSI 硬盤或 Linux 安裝在第二塊 IDE 硬盤,此項設置要做相應調整。
3、然后依次執行 exit 命令,退出 chroot 模式及救援模式 (執行兩次 exit 命令):sh-3.1# exit 系統重啟后,將恢復 GRUB 引導的雙系統啟動。
案例二:系統配置文件丟失修復
系統在引導期間,很重要的一個過程就是 init 進程讀取其配置文件 /etc/inittab,啟動系統基本服務程序及默認運行級別的服務程序完成系統引導,如果 /etc/inittab 誤刪除或修改錯誤,Linux 將無法正常啟動,如圖 7 所示。此時,只有通過救援模式才可以解決此類問題。
/etc/inittab 文件丟失引導錯誤示例
1、有備份文件的恢復辦法進入救援模式,執行 chroot 命令后,如果有此文件的備份 (強烈建議系統中的重要數據目錄,如 /etc、/boot 等要進行備份),直接將備份文件拷貝回去,退出重啟即可。如果是配置文件修改錯誤,如比較典型的 /boot/grub/grub.conf 及 /etc/passwd 的文件修改錯誤,也可以直接修正恢復。假設有備份文件 /etc/inittab.bak,則在救援模式下執行: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
退出 chroot 模式:sh-3.1# exit
掛載存放 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” 表示覆蓋安裝,執行完成后,即已經恢復了此文件。
如果想只提取 RPM 包中的 /etc/inittab 文件進行恢復,可以在進入救援模式后,執行命令: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 的引導過程,才能夠對故障進行有效的判斷和處理。