CentOS 6 啓動故障與恢復

POST加電自檢,而後找到啓動設備即磁盤,從磁盤加載MBR第一扇區二進制代碼,接着是grub的stage一、stage1.五、stage2階段,到這裏有個問題,在stage2階段會加載linux內核文件即/boot/vmlinuz-2.6.32-696.el6.x86_64 ,而後加載根/,可是加載根的話須要文件系統ext4的驅動,而ext4文件系統的驅動模塊在/lib/modules/2.6.32-696.el6.x86_64/kernel/fs/ext4/ext4.ko下且必須先加載根,如此一來就造成了死循環。linux

解決方法是使用僞文件系統--虛擬磁盤,即/boot/initramfs-2.6.32-696.el6.x86_64.img,此文件包含系統啓動所需的基本驅動,如ext4.ko,而此文件的做用就是掛載根bash

查看此文件包含的驅動模塊的方法以下:app

cp /boot/initramfs-2.6.32-696.el6.x86_64.img  /app/ 
cd /app
mv initramfs-2.6.32-696.el6.x86_64.img initramfs-2.6.32-696.el6.x86_64.img.gz
gunzip initramfs-2.6.32-696.el6.x86_64.img.gz  
file initramfs-2.6.32-696.el6.x86_64.img  
cpio -id < initramfs-2.6.32-696.el6.x86_64.img
tree | grep ext4.ko

若是不當心將initramfs文件刪=刪除,可使用下述方法恢復ide

mkinitrd  /boot/initramfs-`uname -r`.img `uname -r`
名稱要與/boot/grub/grub.conf定義的僞根保持一致

只要根掛載成功,那後續的init進程就可以順利啓動spa


grub的三個階段htm

    stage1 進程

        即MBR的前446字節的bootloader,因爲空間過小因此可以執行的功能有限,其主要做用就是引導至stage1.5階段ip

    stage1.5
get

        主要做用是進入/boot下,/boot也是ext4文件系統,要進入其中也須要先加載文件系統驅動,可是本階段不屬於任何分區,即本階段直接同步

        使用MBR第一扇區512字節後的二進制代碼完成,是直接與磁盤打交道而不通過文件系統;

        注意/boot分區與/分區的文件系統能夠不同,前者使用grub引導,後者使用僞文件系統引導

    stage2

        完成1.5階段就能夠進入/boot分區下,剩下的就是2階段要完成的加載內核文件和僞文件系統,其工做目錄爲/boot/grub/ 


下面來具體說下grub的三個階段啓動故障即恢復方法:


stage1

因爲某種緣由MBR的前446字節無效,即stage1階段故障

dd if=/dev/zero of=/dev/sda bs=1 count=446
#模擬故障
hexdump  -C -n 512 /dev/sda 
#檢查

此時磁盤將不可用,直接跳到光盤界面(若是有的話),接着經過光盤進入救援模式

chroot /mnt/sysimage  
#切根,不然grub-install不生效

grub-install /dev/sda  
#安裝grub,自動修復stage1,也會修復stage1.5
hexdump -C -n 512 /dev/sda  
#檢查是否修復
sync  
#同步磁盤
exit 退出並重啓,此時系統就能夠正常啓動

同理stage1.5出現故障也可使用此方法恢復

下面說一下stage1.5故障的另外一種恢復方法

模擬故障,破壞磁盤MBR後的20個扇區(只要破壞stage1.5便可)

dd if=/dev/zero  of=/dev/sda bs=1 count=10240 seek=512
hexdump -C -n 10552 /dev/sda


重啓系統,進救援模式,按esc鍵

切根

chroot /mnt/sysimage  
#切根,不然grub-install不生效

安裝grub,此處使用交互方式

grub  
#進入grub模式
root (hd0,0)  
#指定根在第1個磁盤的第1個分區
setup (hd0)  
#grub安裝在第1塊磁盤

退出、重啓


參考博客:

http://www.linuxidc.com/Linux/2017-03/141966.htm 

相關文章
相關標籤/搜索