设为首页 收藏本站
查看: 1343|回复: 0

[经验分享] Centos 6 –grub legacy及grub修复

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-9-22 09:01:49 | 显示全部楼层 |阅读模式
一、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 各阶段备份文件:——–》可以用于修复
             1474438949130441.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
            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
        ——————————————————————————————–
        启动效果:
                     1474439290838747.jpg    

        ——————————————————————————————-
        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  
                     1474439564538449.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/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 破坏:
                1474440262839877.jpg
        修复:
        1 ) 救援模式下:
            chroot /mnt/sysimage
            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/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
                      1474440262213906.jpg

            1474440262773514.jpg
            修复grub:
            chroot /mnt/sysimage
            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 修复方法继续修复即可
——————————————————————————

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-275728-1-1.html 上篇帖子: CentOS 5,6 系统启动流程详解 下篇帖子: linux 路由转发实验(软路由) 修复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表