Linux運維人員應該知道的系統故障排查及修復技巧

2022-01-31 金冠同利

我發現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

「kernel」段指定了內核文件所在位置,內核加載時權限屬性為只讀(「ro」)以及指定根分區所在位置(root=LABEL=/);所以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將無法正常啟動。此時,只有通過救援模式才可以解決此類問題。/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

掛載存放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的引導過程,才能夠對故障進行有效的判斷和處理。

作者:csghjnbj

來源:http://blog.chinaunix.net/uid-26567710-id-3050269.html

相關焦點

  • Linux 系統日常運維九大技能和運維網絡知識總結 | 周末送資料
    以下內容基本上可以涵蓋RedHat和CentOS層面90%的日常運維工作,並總結了系統運維中網絡方面的規劃、操作及故障處理等知識。
  • 面對大規模系統故障,看Facebook如何修復(二)
    昨天,小數已經為大家帶來了Ben Maurer分享的「面對大規模系統工程,看Facebook如何處理故障排查(一)」的上半部分,主要涉及導致故障的原因、以及可以使用一個通用的系統等相關內容,今天,正式為大家帶來了最終的解決方案,跟小數一起來了解下吧~故障是任何大規模工程系統的一部分。Facebook的文化價值之一就是擁抱失敗。
  • 談談如何通過linux系統RHCE考試
    大學過後基本上也就把老師教給自己的都還給老師了,所以偶爾還是會感覺到自己知識體系的匱乏,對於遇到的故障不能用自己的體系來合理的進行排障,每次處理故障都是無頭蒼蠅,一方面對於自己的技術沒有提升,另一方面也對客戶的效率有了一定的影響。
  • Linux運維常見故障及處理的 32 個錦囊妙計(一)
    此文匯總了Linux運維在做項目過程可能出現的故障及解決方法,看看是否與你有共鳴,並對你有幫助呢?問題:某天研發某同事找我說幫他看看他寫的shell腳本,死活不執行,報錯。我看了下,腳本很簡單,也沒有常規性的錯誤,報「:badinterpreter:Nosuchfileordirectory」錯。
  • 作為高級Java,你應該了解的Linux知識
    Linux上,最常用的一批命令解析(10年精選)Linux生產環境上,最常用的一套「Sed「技巧Linux生產環境上,最常用的一套「AWK「技巧Linux生產環境上,最常用的一套「vim「技巧Linux命令好像還真不少,根本原因就是軟體多,也有像ag這樣的命令想替代grep,但大多數命令古老而堅挺。
  • Linux伺服器重啟啟動故障修復(一)
    系統啟動時,如果出現在了故障,則需要進行修復。
  • linux運維人員必會開源運維工具體系
    linux運維人員必會開源運維工具體系說明:不同的技術人員,不同的階段確定知識邊界非常重要,否則,就像馬拉車,不知道終點在哪,累死也達不到目標
  • 2017年Linux運維人員必會的開源運維工具體系
    本文出自 「老男孩linux培訓」 博客,請務必保留此出處http://oldboy.blog.51cto.com
  • 一套完整的弱電工程售後服務運維方案
    1.3.2、一級故障處理運維過程中,如果遇到一級故障,按以下流程進行處理:  a)當得知系統出現故障時,首先在最短的時間趕到故障現場查看故障點狀態,並分析故障原因;b)立即報告給運維中心主管人員,告知主管人員故障原因;c)客戶經理在排查出故障後,如能夠立即解決,則立刻解決故障,如需要設備廠商的技術人員到現場,應立即撥打技術廠商的技術工程師聯繫電話
  • 2017年Linux運維人員必會開源運維工具體系
    本文出自 「老男孩linux培訓」 博客,請務必保留此出處http://oldboy.blog.51cto.com/2561410
  • 系統管理員應該知道的20條Linux命令
    特定的命令和工具包可幫助開發者組織、排查故障並優化他們的應用程式,而且當出現錯誤時,也可以為運維人員和系統管理員提供有價值的分類信息。無論你是新手開發者還是希望管理自己的應用程式,下面 20 條基本的系統管理命令都可以幫助您更好地了解您的應用程式。它們還可以幫助解決為什麼應用程式可在本地正常工作但不能在遠程主機上工作這類的系統故障。
  • 從苦逼到牛逼,詳解Linux運維工程師的打怪升級之路
    你應該不是說出懂這個軟體和配置,你儘可能的說怎麼優化,怎麼深入提高網站性能:下面說說運維在工作中需要掌握的核心技術。需要注意的是,這是在工作中掌握的,在學習中很難掌握。查看剩餘內存:free -m#-/+ buffers/cache:       6458       1649#6458M為真實使用內存  1649M為真實剩餘內存(剩餘內存+緩存+緩衝器)#linux會利用所有的剩餘內存作為緩存,所以要保證linux運行速度,就需要保證內存的緩存大小系統信息:uname
  • 這些Linux技巧你應該知道
    —— Linux用戶有哪些應該知道的提高效率的技巧。我覺得挺好的,總結得比較好,把其轉過來,並加了一些自己的理解。 首先,我想告訴大家,在Unix/Linux下,最有效率技巧的不是操作圖形界面,而是命令行操作,因為命令行意味著自動化。
  • 系統管理員應該知道的 20 條 Linux 命令
    (點擊上方公眾號,可快速關注)英文:OpenSource,翻譯:開源中國/局長my.oschina.net/editorial-story
  • linux運維工程師的定義
    在一些規模較大的公司(比如:Google、FaceBook、百度、阿里、騰訊等),運維工程師和系統管理員是有一定的區別:系統管理員:主要負責機房網絡、伺服器等硬體基礎設施的運行和維護。運維工程師:主要負責管理並維護在運行在海量伺服器上的軟體服務。
  • 不認命,就是運維人員的命!
    《運維工程師自述:別問我怎麼禿的,問就是「重複」!》作為企業運維人員,日常系統安裝及維護工作中,我們難免要跟「重複」這個敵人打照面,比如部署伺服器作業系統,一臺、兩臺尚可手動操作,但企業級伺服器動輒幾十、幾百甚至成千上萬的規模,若仍人工地一臺臺安裝,必定浪費大量時間,造成低效。面對這種情況,運維人員就該認命般埋頭繼續嗎?
  • 故障分析:看Linux如何判斷系統「死機」
    在系統的日常運維中,最令人頭疼的莫過於各種應用程式或者作業系統hung住不響應的問題。對於處在用戶態的程序相對來說還比較容易排查,而一旦程序hung在內核態或者作業系統本身hung住,kill信號甚至硬體中斷都無法響應,此時我們能做的就只有重啟了。然而重啟並不能解決根本問題,更麻煩的是這種情況下我們幾乎拿不到任何有用的信息,後續原因的分析和排查更是步履維艱。
  • IT運維工作到底是做什麼的?
    運維人員對公司網際網路業務所依賴的基礎設施、基礎服務、線上業務進行穩定性加強,進行日常巡檢發現服務可能存在的隱患,對整體架構進行優化以屏蔽常見的運行故障,多數據中接入提高業務的容災能力。制定服務穩定性指標及準入標準,同時不斷完善和優化程序和系統的功能、效率,提高運行質量。完善監控內容,提高報警準確度。在線上服務出現故障時,第一時間響應,對已知線上故障能按流程進行通報並按預案執行,未知故障組織相關人員聯合排障。
  • 運維方法論(2)
    比如通過運維目標的確定我們可以觀察目標細化的思路,反思我們的日常生活中哪些目標讓實現目標的手段「綁架」了,下面我們繼續通過管理看一些方法論。在一個運維項目團隊中,你知道你同事的技能類型嗎?理想情況下一個運維團隊應該是通用型人才+專項領域技能多樣化專家的組合,新手入職就應該清楚自己的定位。
  • 修理 Mac 不求人《Mac故障排查指南》
    經常有客戶提出一些關於 Mac 硬體/系統的使用難題,比如網速慢、揚聲器沒聲音、風扇噪音大、軟體總是閃退等等故障,這些問題仔細調查起來原因都不是一致的