Centos 6 –grub legacy及grub修復

一、CentOS 6 grub legacy:

    1.啓動流程:

            POST –> Boot Sequence(BIOS) –> Boot Loader –>Kernel(ramdisk) –> rootfs –> switchroot –>             /sbin/init –>(/etc/inittab, /etc/init/*.conf) –> 設定默認運行級別 –>

            系統初始化腳本rc.sysinit –> 關閉或啓動對應級別的服務 –> 啓動終端

    2.grub legacy

             grub: GRand Unified Bootloader

            grub 0.x: grub legacy

            grub 1.x: grub2

            grub legacy:

            stage1: mbr

            stage1_5: mbr之後的扇區,讓stage1中的bootloader

            能識別stage2(/boot)所在的分區上的文件系統

            vmlinuz

            stage2:磁盤分區(/boot/grub/)

            initramfs—->讀取/grub.conf 文件

            grub 各階段備份文件:——–》可以用於修復

ed6301371ac642549a8631bc63cfccc8.jpg            1.jpg

    3. grub 功用

             stage2及內核等通常放置於一個基本磁盤分區

             功用:

            (1) 提供啓動菜單、並提供交互式接口

                a:內核參數

                e: 編輯模式,用於編輯菜單

                c: 命令模式,交互式接口

            (2) 加載用戶選擇的內核或操作系統

                允許傳遞參數給內核

                可隱藏啓動菜單

            (3) 爲菜單提供了保護機制

                爲編輯啓動菜單進行認證

                爲啓用內核或操作系統進行認證

    4. grub的命令行接口

            help: 獲取幫助列表

            help KEYWORD: 詳細幫助信息

            find (hd#,#)/PATH/TO/SOMEFILE:

            root (hd#,#)        #指定根目錄

            kernel /PATH/TO/KERNEL_FILE: 設定本次啓動時用到的內核文件;

                額外還可添加許多內核支持使用的cmdline參數

                例如: max_loop=100 selinux=0 init=/path/to/init

            initrd /PATH/TO/INITRAMFS_FILE: 設定爲選定的內核提供額外文件的ramdisk;

            boot: 引導啓動選定的內核

           

             cat /proc/cmdline 內核參數

             內核參數文檔:/usr/share/doc/kernel-doc-

                2.6.32/Documentation/kernel-parameters.txt

             識別硬盤設備:

                (hd#,#)

                hd#: 磁盤編號,用數字表示;從0開始編號

                #: 分區編號,用數字表示; 從0開始編號

                (hd0,0) 第一塊硬盤,第一個分區

                

        

    5. 手動在grub命令行接口啓動系統:(啓動選擇菜單,選擇"e")

            grub> root (hd#,#)                  #指定根目錄分區位置

            一般爲 root (hd0,0)

            grub> kernel /vmlinuz-VERSION-RELEASE ro

            root=/dev/DEVICE

            # 指定內核vmlinuz以及根目錄

            grub> initrd /initramfs-VERSION-RELEASE.img

            #指定initramfs

            grub> boot            #引導

    6.grub legacy配置文件

        grub 配置文件: /boot/grub/grub.conf <– /etc/grub.conf(軟鏈接)

      

        文件內容示例:

        —————————————————————————————-

            # grub.conf generated by anaconda

            #

            # Note that you do not have to rerun grub after making changes to this file

            # NOTICE:  You have a /boot partition.  This means that

            #          all kernel and initrd paths are relative to /boot/, eg.

            #          root (hd0,0)

            #          kernel /vmlinuz-version ro root=/dev/mapper/vg0-root

            #          initrd /initrd-[generic-]version.img

            #boot=/dev/sda

            default=0

            timeout=2

            splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz   #開機啓動畫面背景圖

            hiddenmenu

            title CentOS 6 (2.6.32-642.el6.x86_64)     第0啓動項        

            root (hd0,0)        

            kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/mapper/vg0-root rd_NO_LUKS rd_NO_DM.UTF-8                 rd_LVM_LV=vg0/swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto                         rd_LVM_LV=vg0/root  KEYBOARDTYPE=pc KEYTABLE=us  crashkernel=auto 

            initrd /initramfs-2.6.32-642.el6.x86_64.img

            

            title MaMaDan    第1 啓動項目       

             root (hd0,0)       

             kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/mapper/vg0-root rd_NO_LUKS rd_NO_DM.UTF-8                 rd_LVM_LV=vg0/swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto                         rd_LVM_LV=vg0/root  KEYBOARDTYPE=pc KEYTABLE=us quiet rhgb crashkernel=auto        

             initrd /initramfs-2.6.32-642.el6.x86_64.img

        ——————————————————————————————–

        啓動效果:

                    2.jpg    

    

        ——————————————————————————————-

        quiet rhgb 可以刪去,用於美化啓動界面,但是會隱藏錯誤信息,刪除後可以看到詳細錯誤信息,以字符界面顯示

                基本必須項目:

                default=#

                timeout=#

                       title #############

                root ( )

                kernel /############

                initrd /########

        ————————————————————————————

    7.配置文件內容解析:

            default=#: 設定默認啓動的菜單項;落單項(title)編號從0開始

            timeout=#:指定菜單項等待選項選擇的時長

            splashp_w_picpath=(hd#,#)/PATH/TO/XPM_FILE:菜單背景圖片文件路徑

            hiddenmenu:隱藏菜單

            password [–md5] STRING: 啓動菜單編輯認證

            添加在第一個title 之前時,用於設定全局單用戶模式密碼

            添加在指定title 之內,則用於設定指定title 密碼

            建議使用加密口令

            grub-md5-crypt 生成加密口令

            或  openssl passwd -1  

                    3.jpg

            title TITLE:定義菜單項“標題” , 可出現多次

            root (hd#,#): grub查找stage2及kernel文件所在設備分區;爲grub“根”

            kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:啓動的內核

            initrd /PATH/TO/INITRAMFS_FILE: 內核匹配的ramfs文件

            password [–md5] STRING: 啓動選定的內核或操作系統時進行認證


    8. grub加密

             加密密碼生成工具: grub-md5-crypt

            eg:  生成密碼爲“123456”的加密字符

                     1474439683839522.jpg





            在第一個title前添加password string

                    1474439683708195.jpg

    9. 破解root口令:

            啓動系統時,設置其運行級別1,進入單用戶模式,即可修改密碼

    10. 進入單用戶模式:

            (1) 編輯grub菜單(選定要編輯的title,而後使用e命令);

                    1474439683840261.jpg

                     1474439684951826.jpg

            (2) 在選定的kernel後附加

            1, s, S或single都可以;

                  1474439683462363.jpg

            

            按“回車”確認,並退回到前一界面

            (3) 在kernel所在行,鍵入“ b”命令

                  1474439683749454.jpg

    

二、grub安裝(修復)

         安裝grub:(救援模式下)

        (1) grub-install   可以修復第一(MBR被破壞)、第二階段

            安裝grub stage1和stage1_5到/dev/DISK磁盤上,並

            複製GRUB相關文件到 DIR/boot目錄下

            grub-install –root-directory=DIR /dev/DISK

            (/boot/grub 整個文件夾丟失,可用此方法修復)

                    1474440262159240.jpg

        修復前,需要先chroot /mnt/sysp_w_picpath

        grub-install /dev/sda

        注意:修復第一階段時,不可指定分區,指定設備即可

        (2) 手動設定grub配置(注:此步驟不會生成grub.conf配置文件,需後續手動創建)

            grub> root (hd#,#)                     #指定root分區

            grub> setup (hd#)   #修復  1.5 及 2階段

            檢查並修復1.5,2 階段

            注意: /boot/grub 下的stage* 文件,是各階段備份文件,用於修復grub的,若文件,grub setup 依賴於這些文件,

                但是grub install 不依賴這些文件

         

三、grub 模擬損壞與修復

——————————————————————————————————–

        1. 損壞第一階段 stage1: (破壞mbr  (446字節))

        stage1 破壞:

               1474440262839877.jpg

        修復:

        1 ) 救援模式下:

            chroot /mnt/sysp_w_picpath

            grub-install /dev/sda

        2) 若/boot/grub 中的各階段備份文件存在,可直接在grub命令行下setup修復

            grub

            grub>root (hd0,0)    # 指定根

            grub>setup (hd0)

               1474440262509456.jpg

               1474440262513884.jpg

——————————————————————————————————

           

        2. 損壞 1.5階段 stage 1.5 :

            dd if=/dev/zero of=/dev/sda bs=512 count=2 seek=1

        修復:

            1)救援模式下:

            chroot /mnt/sysp_w_picpath

            grub-install /dev/sda

            2) 若/boot/grub 中的各階段備份文件存在,可直接在grub命令行下setup修復

            grub

            grub>root (hd0,0)    # 指定根

            grub>setup (hd0)

——————————————————————————————————–

        3. 破壞(刪除)/boot/vmlinux  , initramfs

            修復:

            1)救援模式下,掛載iso系統文件

            chroot

            mkinitrd /boot/initramfs-`uname -r`.img `uname -r`

            #修復 initramfs

            從光盤中複製mvlinuz*文件至/boot

            完成後再手動建立grub.conf即可完成

            2)救援模式下,使用網絡獲取vmlinuz文件

            (從其他 主機處獲取缺失文件)

            chroot

            mkinitrd /boot/initramfs-`uname -r`.img `uname -r`

            scp host_ip:/boot/vmlinuz* /boot/

            (從遠程主機中拷貝vmlinuz文件)

            完成後再手動建立grub.conf即可完成

——————————————————————————————————–

       4. 刪除 /boot :(刪除了/boot整個目錄)

           修復:

            救援模式下:

            掛載光盤 mount /dev/cdrom /dir

            重建/boot:

               rpm -ivh /##/cdrom/Packages/kernel-###  –force

            |replacepkgs

            #重建/boot中的各文件,但不包括grub.conf

                     1474440262213906.jpg

                                                                                  

           1474440262773514.jpg

            修復grub:

            chroot /mnt/sysp_w_picpath

            grub-install /dev/sda

                   1474440262319493.jpg

            重建grub.conf文件:

            vi  /boot/grub/grub.conf:

            default=0

            timeout=2

            title mamadan

            root (hd0,0)

            kernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/vg0/root

            initrd /initramfs-2.6.32-642.el6.x86_64.img

——————————————————————————————————–

        5. 刪除/etc/fstab 以及/boot:

        修復:

        救援模式下:

            此時由於fstab丟失,無法掛載根:

                       1474440262303983.jpg

            救援模式shell下,使用 blkid  可以查看磁盤情況:

                   1474440262528912.jpg

            (無法區分哪個是根,需要將每個分區都掛載,以確定哪個是根)

        1) 系統內存在使用lvm時,需要先激活lvm:

            vgchange -ay

                   1474440262869440.jpg

                      1474440262600351.jpg

            掛載各分區,嘗試確定根位置:

            mkdir /mnt/sda1

            mkdir /mnt/sda2

            mkdir /mnt/sdb1

            mkdir /mnt/sdb2

            mount ………………..

            略

        2) 系統內僅使用普通分區時,直接掛載各分區來確認根位置

            mkdir /mnt/sda1

            mkdir /mnt/sda2

            mkdir /mnt/sdb1

            mkdir /mnt/sdb2

            …………..

            進入根對應分區,建立fstab文件,並重啓系統,重新進入救援模式,讓救援系統掛載根目錄

            注意: 需要掛載 root ,usr ,var 三個分區,否則修復/boot目錄文件時,可能會

                 因無依賴文件而已報錯

            掛載分區:

            mkdir /mnt/sysroot

            mount /dev/vg0/root /mnt/sysroot

            修復fstab:

            #     vi /mnt/sysroot/etc/fstab

            /dev/sda1 /boot ext4 defaults 1 1

            /dev/vg0/root / ext4 defaults 1 2

            /dev/vg0/usr /usr ext4 defaults 1 2

            /dev/vg0/var /var ext4 defaults 1 2

            重啓,再次讓救援系統嘗試掛載根目錄:

                        1474440262255420.jpg

            根成功被識別並掛載後,按照/boot 修復方法繼續修復即可

——————————————————————————————————–


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章