GRUB(Boot Loader):

grub:GRand Unified Bootloaderlinux


在早期的Linux发行版中,Bootloader一直采用LILO,LILO曾经是Linux发行版中主流的Bootloader,可是它不能引导1024柱面之后的分区,大大限制了操做空间,因此现现在的Linux发行版中的Bootloader都使用了GRUB,它有更好的接口和界面,并且能为用户提供交互式接口,使用配置更加灵活方便。算法

grub版本:grub 0.x :  grub legacy(传统grub)bash

               grub 1.x: grub2ide

grub的启动阶段(grub legacy):加密

        stage1:位于mbr中;操作系统

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

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

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

       stage2及内核等一般放置于一个基本磁盘分区中;接口

  

grub的访问路径:/grub,grub刚启动时内核并无被启动起来,因此根文件系统也没有被挂载,因此grub的第二阶段就把本身的访问路径设为了临时根目录,但并非启动后的根文件系统,因此在内核启动以前grub的路径就是/grub,内核的访问路径就是/vmlinuz.

              功用:(1)提供菜单、并提供交互式接口

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

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

                        (2)加载用户选择的内核或操做系统

                                容许传递参数给内核

                                 默认隐藏此菜单

                         (3)为菜单提供了保护机制

                                 为编辑菜单进行认证

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

注:在启动系统的界面键入ESC键可进入grub

1

能够键入e键进入编辑模式,用于编辑菜单:

1

键入c键进入命令行编辑模式

1

grub如何识别:

        (hd#,# ):表示第#块磁盘的第#号分区

                    (hd0,0):表示第一块磁盘的第一个分区。

grub的命令行接口:

      help:获取帮助列表

      help KEYWORD:详细帮助列表。

1

2

        find(hd#,#)/PATH/TO/SOMEFILE:查找指定文件(设定根文件系统以后就不用再指定磁盘进行查找了)

3

        root (hd0,0) :设置相应磁盘为根文件系统

1

        kernel /PATH/TO/KERNEL_FILE: 设定本次启动时用到的内核文件;额外还能够添加许多内核支持使用的cmdline参数;
          例如:init=/path/to/init, selinux=0
        initrd /PATH/TO/INITRAMFS_FILE: 设定为选定的内核提供额外文件的ramdisk;
         boot: 引导启动选定的内核;

        手动在grub命令行接口启动系统:

                grub> root (hd#,#)
                grub> kernel /vmlinuz-VERSION-RELEASE  ro   root=/dev/DEVICE
                grub> initrd /initramfs-VERSION-RELEASE.img
                grub> boot

1

       但每次开机都要手动启动太麻烦,grub能够自动读取配置文件生成菜单模式来启动内核。

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

1

配置项:
                 default=#: 设定默认启动的菜单项;落单项(title)编号从0开始;
                 timeout=#:指定菜单项等待选项选择的时长;
                 splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径;
                 hiddenmenu:隐藏菜单;
                 password [--md5] STRING: 菜单编辑认证(可省略);
                 title TITLE:定义菜单项“标题”, 可出现屡次;
                      root (hd#,#):grub查找stage2及kernel文件所在设备分区;为grub的“根”;
                      kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核
                      initrd /PATH/TO/INITRAMFS_FILE: 内核匹配的ramfs文件;
                      password [--md5] STRING: 启动选定的内核或操做系统时进行认证(可省略);

             grup-md5-crypt命令可生成加密算法为md5的密码

咱们用命令行接口手动启动时候输入的命令都能经过该配置文件设置,配置完该文件后就会生成菜单页面自动执行操做

1

进入单用户模式:

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

          (2)在选定的kernel后附加 1,s,S或single均可以;

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

安装grub(能够为新的磁盘建立新的grub,也能够在Bootloader损坏时安装新的grub):

           (1)grub-install

              grub-install --root-directory=ROOT  /dev/DISK

           (2)grub(此种方法须要保证在该磁盘中必需要有grub目录以及各类文件的存在)

               grub> root(hd#,#)

               grub>setup (hd#)

 

咱们能够在操做系统中新增长硬盘并装入grub并在新的操做系统中使用它:

以CentOS6(虚拟机)为例新增磁盘:

1

启动以后为新增的俄磁盘分区,grub会默认安装在boot目录中,因此咱们要为新的磁盘至少建立三个分区,一个用来看成boot分区安装grub,一个为swap分区,另外一个为根文件系统,这三个分区只能建立为基本分区。

如图:咱们已经建立增长了新的磁盘:

1

以后咱们须要进行分区,安装文件系统并挂载新的磁盘分区。

1

磁盘分区安装完文件系统后,咱们须要建立新的boot目录让grub识别,咱们暂且建立在/mnt中,并将它挂载至/dev/sdb1上:

1

在/mnt/boot中安装grub,并指明grub的根文件目录:

1

1

然后建立新的根挂载至sdb3,并建立根文件系统所须要的目录:

1

1

并为新的根系统复制一个bash程序

咱们还须要为grub提供内核以及initrd:

1

为grub编写配置文件,由于咱们要在新的系统上使用该grub,因此咱们指定的磁盘分区为第一个。

1

copy一个bash程序到新的根文件系统中,

1

建立新的CentOS6并使用该新建的磁盘,并在内核选项中设置selinux=0:

1

成功运行了此系统中的grub并启动了设定的第一个程序bash

如何修复grub:

如图所示:咱们破坏了grub的stage1

1

咱们重装grub就能修复

1

也能够进入grub命令提示符进行修复,前提是grub目录中的stage1和stage1.5目录必须存在

1

若是grub被破坏后重启。就须要经过载入光盘进入救援模式进行安装grub的修复。

相关文章
相关标签/搜索