GRUB legacy 的记录。

一,简介:linux

        GRUB legacy存在于MBR(主引导记录)的446字节中,是一个本来由 GNU Project 维护的 多启动 引导器(官方已经中止对其的维护,以升级到GRUB version 2.x),其前身为 GRUB (GRand Unified Bootloader), 最初由 Erich Stefan Boleyn 设计和实现。shell

        简单的说,启动引导程序是计算机启动时运行的第一个程序。它可用于选择操做系统分区上的不一样内核,也可用于向这些内核传递启动参数。而后内核逐个初始化操做系统的其他部分。
vim


二,功用:bash

    1,GRUB的启动阶段:
网络

        stage1:加载mbr;
ide

        stage1_5:加载mbr以后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统;
ui

        stage2:磁盘分区(/boot/grub/);this

  

    stage2及内核等一般放置于一个基本磁盘分区:
加密

        功用:
spa

            ⑴提供菜单,并提供交互式借口;

                e:编辑模式,用于编辑菜单;

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

            ⑵加载用户选择的内核式操做系统;

               容许传递参数给内核;

               可影藏此菜单;

            ⑶为菜单提供了保护机制;

               为编辑菜单进行认证 ;

               为启用内核或操做系统进行认证;

GRUB菜单:

wKiom1jPUKyRD8HyAAAjobz4fkk461.png-wh_50


按c进入命令行借口:

wKioL1jPUmfjp1aWAABab9H_nU0257.png-wh_50

经常使用命令:

    help:获取帮助列表;

    help KEYWORD:详细帮助信息;

    find (hd#,#) /PATH/TO/SOMEFILE:查找;

    root (hd#,#):把哪一个磁盘设定为根设备;

    kernel /PATH/TO/KERNEL_FILE:设定本次启动时用到的内核文件,额外还能够添加许多内核支持使用的cmdline参数;

    initrd /PATH/TO/INITRAMFS_FILE:设定为选定的内核提供额外文件的ramdisk;

    boot:引导启动选定的内核;


grub如何识别设备:

    (hd#,#)

        hd#:磁盘编号,用数字表示,从0开始编号

        #:分区编号,用数字表示,从0开始编号


例:手动选定内核启动

wKioL1jPr0LxSiWjAAAthcux6iE152.png-wh_50



2,grub配置文件:/boot/grub/grub.conf        <----        /etc/grub.conf

[root@localhost ~]# ll /etc/grub.conf 
lrwxrwxrwx. 1 root root 22 Dec  3  2015 /etc/grub.conf -> ../boot/grub/grub.conf
[root@localhost ~]# vim /etc/grub.conf

wKiom1jPtYjBEFkvAABfpF0FXTQ216.png-wh_50

    配置项:

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

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

        splashp_w_picpath=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径;

        hiddenmenu:隐藏菜单;

        password [--md5] STRING:菜单编辑认证;

        title TITLE:定义菜单项“标题”,可出现屡次;

            root (hd#,#):grub查找stage2及kernel文件所在设备分区,为grub的“根”;   

            kernel /PATH/RO/VMLIUNZ_FILE [PARAMETERS]:启动的内核;

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

            password [--md5] STRING:启动选定的内核或操做系统是,进行认证;

                    可用命令:greb-md5-crypt    命令生成加密密码;


例:

1,咱们给grub菜单编辑加密,只有输入密码认证才能编辑

1,首先用grub-md5-crypt命令生存密文密码:
[root@localhost ~]# grub-md5-crypt
Password:
Retype password:
$1$4O3AC/$K5PIzVEaUIC10k5IfhYT31
2,而后打开配置文件:/boot/grub/grub.conf
[root@localhost ~]# vim /boot/grub.grub.conf
default=0
timeout=5
splashp_w_picpath=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
password --md5 $1$4O3AC/$K5PIzVEaUIC10k5IfhYT31     <---添加这一行
title CentOS (2.6.32-431.el6.i686)
       root (hd0,0)
       kernel /boot/vmlinuz-2.6.32-431.el6.i686 ro root=UUID=06492fe8-720d-4f10-b140-6943db271086 rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
       initrd /boot/initramfs-2.6.32-431.el6.i686.img  
       
[root@localhost ~]#reboot

重启以后看到grub菜单,须要按p输入密才能编辑:

wKioL1jPuW-hi9RjAAAhfdfSy-o411.png-wh_50


2,若是咱们忘记了root密码,也能够利用grub进入单用户模式找回密码:

    步骤:

        ⑴,编辑grub菜单(选定要编辑的title,然后使用e命令)

        ⑵,在选定的kernel后附加:1,s,S或single均可以;

        ⑶,在kernel所在行键入“b”命令;

        ⑷,进去单用户模式后,直接修改密码就能够了;

wKiom1jPu9CwB0eNAAAUt6lf1e4021.png-wh_50


三,安装grub:

    grub-install 命令安装:

[root@localhost ~]# mount /dev/sdc2 /mnt/
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# ls
bin  etc   lib         media  mogdata  opt   root  selinux  testing  users
dev  home  lost+found  mnt    oot      proc  sbin  sys      tmp      var
[root@localhost mnt]# mkdir ./boot
[root@localhost mnt]# ls
bin   dev  home  lost+found  mnt      oot  proc  sbin     sys      tmp    var
boot  etc  lib   media       mogdata  opt  root  selinux  testing  users
[root@localhost mnt]# cd
[root@localhost ~]# grub-install --root-directory=/mnt /dev/sdc    (--root-directory=指定的目录为boot目录的上级目录)
sdc   sdc1  sdc2  
[root@localhost ~]# grub-install --root-directory=/mnt /dev/sdc2
Probing devices to guess BIOS drives. This may take a long time.
Installation finished. No error reported.
This is the contents of the device map /mnt/boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(fd0) /dev/fd0
(hd0) /dev/sda
(hd1) /dev/sdb
(hd2) /dev/sdc
[root@localhost ~]# ls /mnt/boot/grub/
device.map     ffs_stage1_5      minix_stage1_5     stage2           xfs_stage1_5
e2fs_stage1_5  iso9660_stage1_5  reiserfs_stage1_5  ufs2_stage1_5
fat_stage1_5   jfs_stage1_5      stage1             vstafs_stage1_5

安装完成。


另外,grub-install命令也能够用了修复grub:

    例:

        先破坏grub:

[root@localhost ~]# dd if=/dev/zero of=/dev/sda bs=446 count=1
1+0 records in
1+0 records out
446 bytes (446 B) copied, 0.000748108 s, 596 kB/s
[root@localhost ~]# reboot

        重启以后在BIOS中调整从光盘引导系统;

        而后选择进入救援模式:

                wKioL1jPwzHBHtz7AAaiYS2qnwg818.png-wh_50

        而后会让你选择语言,需不须要网络,而后提示你把当前系统挂载至那个目录,最后会进入shell命令行

                wKiom1jPxLGAWnRiAAAk1FRtsII291.png-wh_50

            有两种方法修复:

                第一种:

                    chroot /mnt/sysp_w_picpath

                    grub-install --root-directory=/ /dev/sda

                wKioL1jPxlbyZSf-AAA191mRKeU327.png-wh_50

                

                第二种:

                    grub

                    grub> root (hd#,#)

                    grub> setup (hd#)

                wKioL1jPxvOCK23RAABAJ_Cfakk748.png-wh_50

            reboot重启

        修复完成后,启动前记得拆除磁盘。

相关文章
相关标签/搜索