排除系統啟動類故障
在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>“的提示符,無法完成進一步的系統啟動過程。
如果在該提示符,可以進行編輯,通過輸入對應的引導指令(可以參考”/boot/grub/grub.conf"檔案中的配置),再執行"boot'指令也可以進行引導Linux系統。
通過在"grub>"環境中手動輸入引導指令啟動Linux系統。
<code> </code><code>grub>root (hd0,0) </code>
<code> </code><code>grub>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>inited </code><code>/initrd-2</code><code>.6.32-431.e16.img </code>
<code> </code><code>grub>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>"環境中使用的指令較為複雜,而且一般難以記得相關的指令選項,核心加載參數等。是以使用者可以采用另一種修複辦法,同樣使用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,如需轉載請自行聯系原作者