Linux系統故障排查和修複技巧

來源:互聯網
上載者:User

標籤:http   os   io   使用   ar   strong   檔案   資料   2014   

Linux系統故障排查和修複技巧 

任何作業系統都有出現故障的時候,Linux系統也不例外,在啟動過程中可能會出現一些故障,從而導致系統無法正常啟動。本文從單一使用者模式、GRUB命令操作、Linux救援模式這三個方面分析了故障排查和修複案例,來協助大家解決此類問題。

AD:2014WOT全球軟體技術峰會北京站 課程視頻發布

 

我發現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系統故障排查和修複技巧

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.