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塊磁盤
退出、重啓
參考博客: