Centos 6 –grub legacy及grub修复

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 各阶段备份文件:——–》可以用于修复

技术分享            技术分享

    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

            splashimage=(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

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

        启动效果:

                    技术分享    

    

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

        quiet rhgb 可以删去,用于美化启动界面,但是会隐藏错误信息,删除后可以看到详细错误信息,以字符界面显示

                基本必须项目:

                default=#

                timeout=#

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

                root ( )

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

                initrd /########

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

    7.配置文件内容解析:

            default=#: 设定默认启动的菜单项;落单项(title)编号从0开始

            timeout=#:指定菜单项等待选项选择的时长

            splashimage=(hd#,#)/PATH/TO/XPM_FILE:菜单背景图片文件路径

            hiddenmenu:隐藏菜单

            password [–md5] STRING: 启动菜单编辑认证

            添加在第一个title 之前时,用于设定全局单用户模式密码

            添加在指定title 之内,则用于设定指定title 密码

            建议使用加密口令

            grub-md5-crypt 生成加密口令

            或  openssl passwd -1  

                    技术分享

            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”的加密字符

                     技术分享





            在第一个title前添加password string

                    技术分享

    9. 破解root口令:

            启动系统时,设置其运行级别1,进入单用户模式,即可修改密码

    10. 进入单用户模式:

            (1) 编辑grub菜单(选定要编辑的title,而后使用e命令);

                    技术分享

                     技术分享

            (2) 在选定的kernel后附加

            1, s, S或single都可以;

                  技术分享

            

            按“回车”确认,并退回到前一界面

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

                  技术分享

    

二、grub安装(修复)

         安装grub:(救援模式下)

        (1) grub-install   可以修复第一(MBR被破坏)、第二阶段

            安装grub stage1和stage1_5到/dev/DISK磁盘上,并

            复制GRUB相关文件到 DIR/boot目录下

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

            (/boot/grub 整个文件夹丢失,可用此方法修复)

                    技术分享

        修复前,需要先chroot /mnt/sysimage

        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 破坏:

               技术分享

        修复:

        1 ) 救援模式下:

            chroot /mnt/sysimage

            grub-install /dev/sda

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

            grub

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

            grub>setup (hd0)

               技术分享

               技术分享

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

           

        2. 损坏 1.5阶段 stage 1.5 :

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

        修复:

            1)救援模式下:

            chroot /mnt/sysimage

            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

                     技术分享

                                                                                  

           技术分享

            修复grub:

            chroot /mnt/sysimage

            grub-install /dev/sda

                   技术分享

            重建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丢失,无法挂载根:

                       技术分享

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

                   技术分享

            (无法区分哪个是根,需要将每个分区都挂载,以确定哪个是根)

        1) 系统内存在使用lvm时,需要先激活lvm:

            vgchange -ay

                   技术分享

                      技术分享

            挂载各分区,尝试确定根位置:

            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

            重启,再次让救援系统尝试挂载根目录:

                        技术分享

            根成功被识别并挂载后,按照/boot 修复方法继续修复即可

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


以上是关于Centos 6 –grub legacy及grub修复的主要内容,如果未能解决你的问题,请参考以下文章

Linux CentOS6安装grub

Linux GRUB legacy

Linux GRUB legacy

Linux GRUB legacy

grub legacy练习之 制作小linux

CentOS 7中修复GRUB菜单故障实验