手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

GRUB应用详解

[日期:2017-03-20] 来源:Linux社区  作者:xuweitao [字体: ]

bootloader及grub概述

    启动引导装载程序(bootloader),就是系统启动时在执行POST加电自检功能的BIOS程序之后、操作系统内核运行之前这中间所运行的一段程序,bootloader的主要作用是加载内核,并将整个系统的控制权移交给内核。常见的bootloader有Windows的ntloader、Linux的lilo、grub及grub2等。其中,在CentOS 5/6系列上使用的是grub,而在CentOS 7开始则使用grub;lilo则常见于手机,因此lilo是使用者最多的一种bootloader。

Windows:

    ntloader

Linux:

    LILO:LInux LOader

    GRUB:Grand Unified Bootloader

        GRUB 0.X:Grub Legacy

        GRUB 1.X:Grub2

    就MBR分区方法而言,大多数Bootloader都分为多个阶段来引导,其中第一阶段存放于MBR中,用于引导装载第二阶段。而grub作为Bootloader的一种也不例外,它是分为stage1,stage2,stage1.5这三个阶段来引导的:stage1的主要工作是加载stage1.5,stage1.5的主要工作是加载文件系统驱动,让stage1中的bootloader能够识别stage2所在分区的上的文件系统,stage1.5会提供多种文件系统的驱动,如下:

[root@localhost grub]# ls -1F
device.map
e2fs_stage1_5
fat_stage1_5
ffs_stage1_5
grub.conf
iso9660_stage1_5
jfs_stage1_5
menu.lst@
minix_stage1_5
reiserfs_stage1_5
splash.xpm.gz
stage1
stage2
ufs2_stage1_5
vstafs_stage1_5
xfs_stage1_5
[root@localhost grub]#

    可以看见,每个stage1.5文件对应一种文件系统,而借助于stage1.5阶段所提供的文件系统驱动,stage1就可以通过加载其中某一种文件系统驱动来识别stage2所在分区的文件系统了。举个例子,如果stage2所在分区上的文件系统是ext4,那么stage1就会通过stage1.5提供的e2fs_stage1_5来识别stage2。完成对stage2的识别和加载之后,stage2就能够加载stage2所在分区上(即/boot所在分区)的内核文件和ramdis文件(注意:ramdisk文件并非必须)至内存中了。此外,grub的功能主要是通过stage2来实现的,在系统启动时,stage2可以向用户提供菜单,并提供交互式接口,允许用户通过菜单选择要加载的内核或操作系统,另外,如果用户有需要,stage2还可以为菜单提供保护机制,而保护机制有两种,一种是为编辑菜单提供认证,另外一种是为启动的内核或操作系统提供认证。以下总结grub(stage2)的主要功能:

grub(stage2)的功用:

(1)向用户提供菜单,并提供交互式接口。例如,在启动时可进入菜单,通过键入e键进入编辑模式,可以编辑菜单,此时会读取配置文件;也可以通过键入c键可以进入命令行模式,即进入交互式接口,可以自己手动指定要启动的内核而不读取grub配置文件;

(2)加载用户选择的内核或操作系统。在选择时允许用户传递参数给内核,也可以隐藏菜单的具体内容;

(3)为菜单提供保护机制。可以为编辑菜单提供认证,用户需要通过认证方可编辑指定菜单;也可以为内核或操作系统提供认证,用户需要通过认证方可启动指定的内核或操作系统;

演示:

启动时进入编辑菜单:

wKioL1izdmCj6-ypAAAvhQUYt4M663.png

键入e键可以编辑菜单,如下所示,再此时再键入一次e键就可以编辑选定的参数了。

wKiom1izduHxyaqWAAA7UN7KhW8150.png

按下Esc键可以返回第一个菜单界面,再键入c键可以直接进入命令行模式(交互式接口):

wKioL1izd-zAmZ_fAAAfIVMnF3g994.png

通过'help'可查看帮助,而'help KEYWORD'则可以查看指定项的详细帮助:

wKiom1izeIPRcyQ9AABeqd5rBRc140.png

wKiom1izeNCwFvfaAABY-1o1S0M072.png

可以通过find命令查找文件,例如查找/boot分区下的内核文件:

wKiom1izjSCzdo2PAAAsNPoZRjw226.png

用户可以通过这个交互式接口指定要加载的内核及ramdisk文件,但在此之前要先指定grub的根分区(注意:stage2所在分区即为grub的根分区,这里grub的根不一定是文件系统的根),而要指定grub的根分区则必须采用grub识别设备的方式来指定,grub识别设备是通过命令'root (hd#,#)'来指定的,各部分解释如下:

root:用于切换grub所在分区;
hd#:磁盘编号,用数字表示;从0开始编号;
#:分区编号,用数字表示;从0开始编号;

需要注意的是,用户在指定要加载的内核或操作系统时,通常需要指定grub的根(root (hd#,#)),并且指定Kernel及initrd所在路径,必要时传递一些参数给Kernel。但是,Kernel及initrd是以grub的“根”作为起始目录的,也就是说如果/boot作为基本磁盘分区独立出来时,那么Kernel及initrd在指定路径时的起始目录为'/';如果/boot不作为基本磁盘分区,而是根分区('/')之下的一个目录时,那么此时grub的“根”即为文件系统的根,Kernel及initrd的起始目录为/boot/。

用户可在交互式接口下手动指定要加载的Kernel及initrd。在进入菜单时和刚才一样,键入c键进入grub命令行模式(交互式接口),而当/boot为独立分区时,分别指定kernel及initrd的在grub的“根”下的文件路径,如下所示:

wKioL1iziBiQ4nkTAAAxOEwscoc810.png

这里在Kernel指定路径之后至少还要传递两个参数,一个是'ro',指明是以只读方式挂载根文件系统,'root=xxx'这一样则指明根文件系统所在分区,这里实验环境的根文件系统所在分区是一个LVM逻辑卷。最后键入'boot'即可加载指定的内核或操作系统并完成启动。

更多详情见请继续阅读下一页的精彩内容http://www.linuxidc.com/Linux/2017-03/141971p2.htm

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款