首頁  >  文章  >  運維  >  如何進行排查與修復Linux系統故障的技巧

如何進行排查與修復Linux系統故障的技巧

巴扎黑
巴扎黑原創
2017-08-10 11:38:141646瀏覽

[導讀] 我發現Linux系統在啟動過程中會出現一些故障,導致系統無法正常啟動,我在這裡寫了幾個應用單一用戶模式、GRUB命令操作、Linux救援模式的故障修復案例幫助大家了解此類問題的解決。 (一)單一使用者模式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/sysimagesh-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/inittabsh-3.1# cp etc/inittab /mnt/sysimage/etc

注意此命令执行时不能将文件直接恢复至/etc目录,只能提取到当前目录下,且恢复的文件名称所在路径要写完整的绝对路径。提取文件成功后,将其复制到根分区所在的/mnt/sysimage目录下相应位置即可。

救援模式是维护Linux的有力武器,本文以上述两个例子讲解了它的应用方法,希望能够给读者一点启示。解决Linux系统启动的故障,必须充分理解Linux的引导过程,才能够对故障进行有效的判断和处理。

以上是如何進行排查與修復Linux系統故障的技巧的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn