天天看點

排查一些常見的系統故障

排除系統啟動類故障

    在Linux系統的啟動過程中,涉及到MBR主引導記錄、GRUB啟動菜單、系統初始化配置檔案、分區挂載配置檔案等各方面,其中任何一個環節出現故障都可能會導緻系統啟動的失常,是以一定要注意做好相關檔案的備份功能。

一、MBR扇區故障

    MBR引導記錄位于實體硬碟的第一個扇區(512個位元組),該扇區又稱為主引導扇區(MBR扇區),除了包含系統引導程式的部分資料以外,還包含了整個硬碟的分區表記錄。當主引導扇區發送故障時,将可能無法進入主引導菜單,或者因無法找到正确的分區位置而無法加載系統,通過該硬碟引導主機時很可能進入黑屏狀态。

備份MBR扇區資料

    由于MBR扇區包含了整個硬碟的分區表記錄,是以該扇區的備份檔案必須存在其他的儲存設備中,否則在恢複時将無法讀取帶備份檔案。

使用dd指令将第1塊硬碟(sda)的MBR扇區備份到第2塊硬碟的sdb1分區中(挂載到/backup目錄)

1

2

3

<code># mkdir  /backup                      </code>

<code># mount  /dev/sdb1  /backup             </code>

<code># dd if=/dev/sda  of=/backup/sda.mbr.bak  bs=512  count=1</code>

模拟MBR扇區故障

   仍然使用dd指令,人為将MBR扇區的記錄覆寫,以便模拟出MBR故障

<code># dd if=/dev/zero  of=/dev/sda  bs=512  count=1</code>

   完成上述操作後重新開機系統,将會出現"Operating system not found "的提示資訊,表示無法找到可能的作業系統,是以無法啟動主機。

從備份檔案中恢複MBR扇區資料

    由于MBR扇區被破壞以後,已經無法再從該硬碟啟動系統,是以需要使用其他硬碟中的作業系統進行引導,或者直接使用RHEL5系統的安裝CD光牒進行引導。不管使用哪種方式,目地都是相同的:獲得一個可以執行指令的Shell環境,以變從備份檔案中恢複MBR扇區中的資料,

以使用RHEL6安裝CD光牒引導為例,當出現安裝向導界面時,選擇“Rescue installed system”并回車或單擊“ESC”鍵,輸入“linux rescue”,将以”急救模式“引導CD光牒中的Linux系統。之後一次按Enter鍵接受預設的語言、鍵盤合适,提示是否配置網卡時一般選擇”No’,然後系統會自動檢視硬碟中的Linux分區并嘗試将其挂載到"/mnt/sysimage"目錄(選擇“Continue”确認并繼續)。之後單擊“OK”,進入帶“bash-4.1#”提示符的Bash Shell環境,目前使用系統環境是CD光牒中的Linux系統目錄結構

4

<code> </code><code># mkdir  /asd                                 </code>

<code> </code><code># mount  /dev/sdb1  /abcd                    </code>

<code> </code><code># dd if=/abcd/sda.mbr.bak  of=/dev/sda        </code>

<code> </code><code># reboot</code>

   系統将自動重新開機,恢複正常

二、GRUB引導故障

   GRUB是大多數Linux系統預設使用的引導程式,可以通過啟動菜單的方式選擇進入不同的作業系統(如果有的話)。當"/boot/grub.conf'配置檔案丢失,或者關鍵配置出現錯誤,或者MBR記錄中的引導程式遭到破壞時,Linux主機啟動後可能會出現"grub&gt;“的提示符,無法完成進一步的系統啟動過程。

如果在該提示符,可以進行編輯,通過輸入對應的引導指令(可以參考”/boot/grub/grub.conf"檔案中的配置),再執行"boot'指令也可以進行引導Linux系統。

 通過在"grub&gt;"環境中手動輸入引導指令啟動Linux系統。

<code> </code><code>grub&gt;root (hd0,0)                                  </code>

<code> </code><code>grub&gt;kernel</code><code>/vmlinux-2</code><code>.6.32-431.e16 ro root=</code><code>/dev/VolGroup00/LogVo100</code> <code>rhgb quiet</code>

<code> </code><code>grub&gt;inited </code><code>/initrd-2</code><code>.6.32-431.e16.img                 </code>

<code> </code><code>grub&gt;boot</code>

   之後的啟動成功與正常啟動RHEL5系統的過程是一樣的。登入進入系統以後,需要找到配置檔案"/boot/grub/grub.conf',并修複其中的錯誤,或者直接重建該檔案。具體内容可以參考其他正常主機的同名檔案。

 檢視grub.conf啟動菜單配置檔案的預設内容。       

<code> </code><code>#grep -v "^#" /boot/grub/grub.conf</code>

<a href="http://img1.51cto.com/attachment/201307/223322787.jpg" target="_blank"></a>

其中,各主要配置項的含義說明:

title:指定在啟動菜單中顯示的作業系統名稱。

root:指定包含核心等引導檔案的/boot分區所在的位置。

kernel:指定核心檔案所在的位置,核心加載時權限為隻讀"ro",并通過"root="指定根分區裝置檔案的位置。

initrd:指定啟動核心所使用的臨時系統鏡像檔案所在的位置。

   由于在"grub&gt;"環境中使用的指令較為複雜,而且一般難以記得相關的指令選項,核心加載參數等。是以使用者可以采用另一種修複辦法,同樣使用RHEL6的安裝CD光牒進入急救模式,如果分區表并未被破壞,則急救模式将會找到硬碟中的Linux根分區,并将其挂載到CD光牒目錄結構中的"/mnt/sysimage/"檔案夾中。

進入"bash-4.1"的Shell環境以後,執行"chroot /mnt/sysimage"指令可以将目錄結構切換到待修複的Linux系統中。然後重建立立新的grub.conf配置檔案即可。

eg:确認待修複的Linux系統分區的挂載情況,并重建grub.conf檔案。

<code>bash</code><code>-4.1</code><code># chroot /mnt/sysimage       //切換到待修複的Linux系統根環境  </code>

<code>sh-4.1</code><code># vi /boot/grub/grub.conf      //重建grub.conf檔案,内容略     </code>

<code>sh-4.1</code><code># exit                         //退出chroot環境               </code>

<code>bash</code><code>-4.1</code><code># reboot                       //退出sh-4.1環境,系統會自動重新開機</code>

   在上例中,若為執行"chroot /mnt/sysimage"指令,則重建立立的grub.conf配置檔案應該位于"/mnt/sysimage/boot/grub/grub.conf"

   如果是MBR扇區中的引導程式出現損壞,可能在重建grub.conf配置檔案後仍然無法成功啟動系統,這時候可以在救援模式的Shell環境重新安裝grub

  進入待修複的Linux系統根環境,重新将grub引導程式安裝到第一塊硬碟(sda)中的MBR扇區中。

<code>bash</code><code>-4.1</code><code># chroot /mnt/sysimage                       </code>

<code>sh-4.1</code><code># grub-install /dev/sda                        </code>

<code>sh-4.1</code><code># exit                                         </code>

<code>bash</code><code>-4.1</code><code># reboot</code>

   上述方法同樣适用于在Linux主機中那種Windows系統(不覆寫Linux系統)後導緻Linux系統無法啟動的情況。因為i對于使用雙作業系統的主機,後安裝的Windows系統将使用自己的引導資料覆寫MBR扇區中的記錄,導緻開機後不再出現GRUB菜單進而無法進入Linux系統。如果是後安裝Linux系統,GRUB程式将會自動識别硬碟中的Window系統并将其加載到GRUB菜單配置中。

三、/etc/inittab 檔案丢失

   "/etcinittab"檔案是系統初始化程序init的配置檔案,當該檔案被誤删或者存在錯誤配置時,可能導緻無法啟動系統。丢失"/etc/inittab"檔案後,啟動後将會出現"INIT:No inittab file found"的錯誤提示資訊。

這類故障同樣可以在RHEL6安裝CD光牒的急救模式下進行修複。如果檔案配置錯誤,則進行糾正或者從備份檔案中進行恢複即可。預設情況下,如果并未使用chroot指令切換環境,則需要修改的檔案"/mnt/sysimage/etc/inittab"。

若inittab檔案已經丢失,且沒有可用的備份。則需要從RHEL6的CD光牒目錄中重新安裝initscript軟體包。

 在急救模式的"sh-4.1#"環境中挂載RHEL6CD光牒裝置,并重新安裝initscript軟體包,結合rpm 指令的"--replacepkgs"選項用于替代現有檔案。

<code>bash</code><code>-4.1</code><code># chroot /mnt/sysimage</code>

<code>sh-4.1</code><code># mount /dev/hdc /media/cdrom</code>

<code>sh-4.1</code><code># rpm -vhi --replacepkgs /media/cdrom/Server/initscripts-8.45.14.EL.i386.rpm</code>

在急救模式的Shell環境中通常不再保留cdrom連接配接檔案,而直接通過裝置檔案"/dev/hdc'使用CD光牒。安裝完畢重新開機系統即可。

四、/etc/fstab 檔案丢失

   "/etc/fstab"配置檔案決定了Linux系統在啟動後如何加載各分區,例如根分區"/"、"/boot"分區等,若這些分區無法挂載,系統也就無法成功啟動。丢失"/etc/fstab"檔案後,啟動時将會出現錯誤提示資訊。

同樣使用RHEL6的安裝CD光牒進入急救模式的Shell環境中,由于缺少fstab檔案,CD光牒系統将無法找到待修複的Linux分區,是以必須通過手動的方式查找并挂載根分區,然後重建fstab配置檔案後重新開機系統即可。

  在急救模式的Shell環境中掃描邏輯卷組,激活邏輯卷,以便找到根分區裝置,然後手動挂載根分區,并重建fstab配置檔案。

<code># lvm vgscan                            //查找邏輯卷    </code>

<code># lvm  vgchange -ay /dev/VolGroup00     //激活找到的邏輯卷# mkdir /tmpdir                </code>

<code># mount /dev/VolGroup00/LogVol00 /tmpdir  //挂載根分區到/tmpdir目錄   </code>

<code># vi  /tmpdir/etc/fstab   //重建fstab配置檔案,或直接複制備份的檔案</code>

遺忘root使用者密碼

1.通過單使用者模式重設root賬号的密碼;

(1)重新開機主機,在出現GRUB菜單是按“上、下”箭頭取消倒計時,按“e”進入編輯模式

(2)定位到以 kernel 開頭的一行并按“e”,在行尾添加“s”或“1”,進入單使用者模式

(3)執行“passwd root”指令重設root使用者密碼

2.通過急救模式重設root賬号的密碼

   若使用RHEL6的安裝CD光牒進入急救模式的Shell環境,則隻需切換到待修複Linux系統的根目錄環境,直接執行"passwd root"指令重設root使用者的密碼即可;或者修改 "/etc/shadow"檔案,将root使用者的密碼字段清空,重新開機,正常進入系統再修改密碼。

  在急救模式中,切換到待修複的Linux根分區環境,修改root賬号的密碼。 

<code> </code><code># chroot  /mnt/sysimage                   </code>

<code> </code><code># passwd root</code>

排除檔案系統類故障

    檔案系統及磁盤中所存儲資料的價值是無法估量的,管理者的工作職責之一就是確定資料的安全。由于磁盤屬于易損耗品,無法預測什麼時候會損壞,最好的辦法就是建立完善的備份機制。當出現檔案類或磁盤類故障時,一定要慎重處理。

一、修複檔案系統

    在Linux中,主機經常因為非正常關機、突然斷電、裝置資料讀寫異常等原因導緻檔案系統的破壞。比較常見的是超級塊(super-block)損壞,超級塊是檔案系統的核心"檔案",它記錄了該檔案系統的類型、大小、空閑磁盤塊等資訊。當檔案系統的超級塊資料損壞時,Linux将無法識别該檔案系統,也就無法挂載使用。

   當通過"/etc/fstab"配置檔案自動加載的檔案系統出現錯誤時,Linux系統開機後一般會自動進行檢測,并提示使用者需要進行檔案系統的修複操作,例如:當"/dev/sdb1"分區的超級塊出現錯誤時,啟動後系統将提示"Give root password for maintenance"

<code> </code><code># dd if=/dev/zero  of=/dev/sdb1  bs=512  count=4     </code>

<code> </code><code># mount  /dev/sdb1  /mnt/</code>

    這時隻需要輸入root使用者的密碼,即可進入到一個臨時的Shell環境,在這裡使用者可以對出現錯誤的檔案系統進行修複。修複一般的檔案系統錯誤可以使用fsck指令,結合"-t"選項指定檔案系統類型,結合“-y”選擇對發現的問題自動回答“yes”。需要注意的是,如果該檔案系統遭受破壞的情況很嚴重,則修複完畢後可能仍然會丢失一些資料,是以請慎重決定是否進行修複。

 使用fsck指令修複位于"/dev/sdb1"分區中的ext4檔案系統。

<code> </code><code># fsck -y -t ext4  /dev/sdb1</code>

二、磁盤資源耗盡故障

   顯而易見,當一個檔案系統的磁盤空間被耗盡以後,将無法繼續在該分區建立新的檔案資料,進而導緻故障的出現,例如:當根分區"/"中的磁盤空間耗盡以後,将可能導緻部分程式乃至整個系統無法正常啟動或進行,因為一些臨時的運作檔案将無法建立。

當根分區磁盤空間不足無法啟動進入Linux系統時,可以通過RHEL6的CD光牒進入急救模式,轉移或清除掉根分區占用大量空間的檔案。過程不再描述。

除此以外,當ext4檔案系統中,i節點作為檔案的索引節點,決定了該磁盤中檔案資料的存儲位置。當一個檔案系統被建立以後,其i節點數就已經固定下來了,進而在該檔案系統中能夠使用的檔案數量也就固定下來了。如果使用者在該分區中建立了巨量的細小檔案(耗盡i節點),将可能出現這種情況;雖然該分區中仍然有大量的剩餘磁盤空間,但是使用者卻無法再 建立新的檔案。

1.模拟i節點耗盡故障

(1)以一個20M的ext4檔案系統為例(“/dev/sdb2”),将其挂載到"/data"目錄下。并使用帶“-i”選項的df指令确認該分區的i節點的使用情況。

(2)編寫一個循環建立空檔案的腳本程式,運作該腳本直至耗盡sdb2分區中的i節點。

(3)i節點耗盡以後,再次建立新的檔案時,将會出現"裝置上沒有空間"的錯誤資訊,但是使用df指令可以檢視到該分區中還有可用的剩餘空間,隻是i節點數已經用完。

(4)修複i節點耗盡故障

   了解i節點耗盡故障的根結以後,問題就好了點了,隻要找出該分區中占用大量i節點的細小檔案,并進行轉移或者删除即可。

<code> </code><code># rm -rf /data/file*</code>

三、檢測硬碟壞道

   磁盤壞道分為邏輯壞道和實體壞道兩種,前者主要由于軟體操作不當造成,可以使用軟體修複;而後者是實體性損壞,隻能通過更改磁盤分區或扇區占用位置來進行改善,排除掉包含壞塊的磁盤空間。當磁盤出現一下現象時,有可能是磁盤出現壞道,需要進行檢測和修複。

(1)讀取磁盤中的資料時,磁盤裝置發出異常聲響。

(2)通路磁盤中的某個檔案時,反複讀取且出錯,提示檔案損壞。

(3)對于建立立的分區無法完成格式化。

(4)系統使用該磁盤時頻繁當機。

   硬碟出現壞道後,如果不及時更換或進行技術出來,壞道就會越來越多,并可能造成頻繁當機和資料丢失的後果。所有必要時應該對磁盤進行定期檢測,檢測是否存在壞道。

   在Linux系統中,檢測磁盤的壞道情況可以使用badblocks指令進行,在建立檔案系統的過程中也可以結合mkfs指令的選項進行檢測。使用badblocks指令時,“-s”選項使用者顯示進度資訊,“-v”選項用于顯示詳情。 

<code> </code><code># badblocks  -sv  /dev/sdb</code>

   在長期使用計算機過程中,檔案系統和磁盤類故障很難避免,對于此類故障的修複,一定要慎重處理,稍有不慎可能加重資料破壞的程度,當磁盤出現壞道時,盡快停止系統中的應用服務、備份相關資料,必要時關閉系統防止更大的損失。對于存在壞道的硬碟裝置,應使用其他完好的硬碟進行替換。

本文轉自 楊書凡 51CTO部落格,原文連結:http://blog.51cto.com/yangshufan/1951829,如需轉載請自行聯系原作者

繼續閱讀