Linux故障處理(一)系統啟動類故障
在Linux系統的啟動過程中,涉及MBR主引導記錄、GRUB啟動菜單、系統初始化配置文件等各方面,其中任何一個環節出現故障都可能會導致系統啟動的失常,因此一定要註意做好相關文件的備份工作。(本實驗環境為RHEL6)
一、MBR扇區故障
MBR引導記錄位於物理硬盤的第一個扇區(512B),該扇區又稱為主引導扇區(MBR扇區),除了包含系統引導程序的部分數據以外,還包含了整個硬盤的分區表記錄。當主引導扇區發生故障時,將可能無法進入引導菜單,或者因無法找到正確的分區位置而無法加載系統,通過該硬盤引導主機很可能進入黑屏狀態。
1、備份MBR扇區數據
由於MBR扇區中包含了整個硬盤的分區表記錄,因此該扇區的備份文件必須存放到其他的存儲設備中,否則在恢復時將無法讀取到備份文件。
[root@localhost ~]# mkdir /hlj [root@localhost ~]# mount /dev/sdb1 /hlj [root@localhost ~]# dd if=/dev/sda of=/hlj/sda.mbr.bak bs=512 count=1 記錄了1+0 的讀入 記錄了1+0 的寫出 512字節(512 B)已復制,0.000180294 秒,2.8 MB/秒
2、模擬MBR扇區故障
這裏使用dd命令,人為地將MBR扇區的記錄覆蓋,以便模擬MBR扇區被破壞的故障情況(切記要做好備份,而且將備份文件存放到其他硬盤)。例如,執行以下操作可以從設備文件
[root@localhost ~]# dd if=/dev/zero of=/dev/sda bs=512 count=1
完成上述命令之後重啟系統,這是將會出現“Operating system not found”的提示信息,表示無法找到可用的操作系統,因此無法啟動主機。
3、從備份文件中恢復MBR扇區數據
由於MBR扇區被破壞以後,已經無法再從該硬盤啟動系統,所以需要使用其它硬盤中的操作系統進行引導,或者直接使用RHLH6系統中的安裝光盤進行引導。不管使用哪種方法,目的都是相同的,獲得一個可以執行命令的
接下來以用RHEL6安裝光盤引導為例,當出現安裝向導界面,選擇“Rescue installed system”,將以“急救模式”引導光盤中的Linux系統。
之後依次按Enter鍵接受默認的語言、鍵盤格式,提示是否配置網卡時一般選擇“NO”,然後系統會自動查找硬盤中的Linux分區並嘗試將其掛載到“/mnt/sysimage”目錄(選擇“Continue”確認並繼續)。接下來會出現rescue窗口,單擊“ok”按鈕。
最後,進入到帶“bash-4.1#”提示符的Bash Shell環境,只要執行相應的命令掛載保存有備份的硬盤分區(sdb1),並將數據恢復到硬盤“/dev/sda”中即可。當前使用的系統環境是光盤中的Linux目錄結構。
因為MBR損壞,已經無法獲得有效的分區列表,所以新建一個目錄hou,將“sdb1”掛載到目錄“/hou”下。
bash-4.1# mkdir /hou bash-4.1# mount /dev/sdb1 /hou
使用dd命令再把sdb1中的MBR備份文件寫入到被破壞的sda中。
bash-4.1# dd if=/dev/hou/sda.mbr.bak of=/sda
完成後,執行“reboot”重新啟動系統。
二、GRUB引導故障
1.修復grub.conf文件丟失或損壞
GRUB是大多數Linux系統默認使用的引導程序,可以通過啟動菜單的方式選擇進入不同的操作系統。當配置文件/boot/grub/grub.conf丟失,或者關鍵配置出現錯誤,或者MBR記錄中的引導程序遭到破壞時,Linux主機啟動後只能出現“grub>”的提示符,無法完成進一步的系統啟動過程。
這裏需要把grub.conf文件提前備份好,如果沒有備份則只能重寫一份grub.conf文件
[root@localhost ~]#mkdir /hlj
[root@localhost ~]#mount /dev/sdb1 /hlj
[root@localhost ~]# cp /boot/grub/grub.conf /hlj/grub.conf
[root@localhost ~]# rm -rf /boot/grub/grub.conf
[root@localhost ~]# reboot
若在該提示符後可以進行編輯,則通過輸入對應的引導命令(可參考其他相同版本RHEL系統中/boot/grub/grub.conf文件的引導語句),然後在執行“boot”命令即可正常引導Linux系統。
grub>root (hd0,0) grub>kernel /vmlinuz-2.6.32-71.el6.i686 ro root=/dev/mapper/VolGroup-lv_root rd_LVM_LV=VolGroup/lv_root rd_LVM_LV=VolGroup/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM.UTF-8 KEYBOARDTYPE=pc KEYTABLE=us crashke rnel=auto rhgb quiet grub>initrd /initramfs-2.6.32-71.el6.i686.img grub>boot
之後的啟動過程與正常啟動RHEL6系統的過程是一樣的。登錄進入系統以後,需要找到配置文件/boot/grub/grub.conf,並修復其中的錯誤,或者直接重建該文件。具體內容可以參考其他正常主機中的同名文件。
在RHEL6中,執行以下命令可以查看GRUB配置文件的grub.conf的默認內容。
[root@localhost ~]# grep -v "^#" /boot/grub/grub.conf default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Red Hat Enterprise Linux (2.6.32-71.el6.i686) root (hd0,0) kernel /vmlinuz-2.6.32-71.el6.i686 ro root=/dev/mapper/VolGroup-lv_root rd_LVM_LV=VolGroup/lv_root rd_LVM_LV=VolGroup/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM.UTF-8 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet initrd /initramfs-2.6.32-71.el6.i686.img
其中,各主要配置項含義如下。
■ title:指定在啟動菜單中顯示的操作系統名稱。
■ root: 指定包含內核等引導文件的/boot分區所在的位置。
■ kernel:指定內核文件所在的位置,內核加載時權限只讀“ro”,並通過“root=”指定根分區的設備文件位置。
■ initrd: 指定啟動內核所使用的臨時系統鏡像文件所在的位置。
由於在“grub>”環境中使用的命令較為復雜,而且一般也難以記住相關的命令選項、內核加載參數等,因此用戶可以采用另一種修復辦法,同樣使用RHEL6的安裝光盤引導進入急救模式(參考上面修復MBR),若分區表未被破壞,則急救模式將會找到硬盤中的Linux根分區,並將其掛載到光盤目錄結構中的/mnt/sysimage/文件夾中。
進入“bash-4.1#”的Shell環境以後,執行“chroot /mnt/sysimage”命令可以將目錄結構切換到待修復的Linux系統中,然後重寫(或通過之前備份的文件恢復)grub.conf配置文件即可。
2.MBR中的grub引導程序損壞
如果是MBR扇區中的引導程序出現損壞,可能在重建grub.conf配置文件後仍然無法成功啟動系統,這時候可以通過RHEL6救援模式的Shell環境重新安裝grub引導程序。切換到待修復的Linux系統根環境,執行“grub-install /dev/sda”命令可以重新將grub引導程序安裝到第一塊硬盤(sda)的MBR扇區。(grub.conf文件丟失或損壞此方式不可用)
上述方法同樣適用於在Linux主機中重裝windows系統(不覆蓋Linux系統)後導致Linux系統無法啟動的情況。因為對於適用雙操作系統的主機後,安裝的Windows系統將適用自己的引導數據覆蓋MBR扇區中的記錄,導致開機後不再出現GRUB菜單從而無法進入Linux系統。如果是後安裝的Linux系統,GRUB程序將會自動識別硬盤中的Windows系統並將其加載到GRUB菜單配置中。
Linux故障處理(一)系統啟動類故障