GRUB2是借鉴GRUB改写到更加安全强大到多系统引导程序,现在大部分较新的Linux发行版都是使用GRUB2作为引导程序的。
GRUB2采用了模块化设计,使得GRUB2核心更加精炼,使用更加灵活,同时也就不需要像 GRUB那样分为stage1,stage1_5,stage2这样三个阶段了。

GRUB2和GRUB相比具有如下一些新特征:

  1. 无 stage1 stage1.5 stage2
  2. 配置文件采用新语法,支持脚本,假如新的命令,配置文件名为 grub.cfg
  3. 配置文件 grub.cfg不可写,由 grub2-mkconfig 自动产生,由 update2-grub 维护。
  4. 分区号不再从 0开始,而是从 1开始
  5. 支持更多到文件系统,如:ext4、hfs、ntfs,并可以直接从 lvm和raid中读取文件/li>
  6. grub2有更可靠的方法在磁盘上有多系统时发现文件和目标内核,可以用命令发现系统设备号或者UUID。
  7. 引入了设备模块,使得 core 镜像保持更小到尺寸
  8. 在启动时没有选择菜单的话,按住shift即可强制显示菜单

GRUB2主要镜像文件:
boot.img
boot.img 相当与 GRUB 的 stage1 它被写入 MBR或 boot分区,它不能识别任何文件系统,在GRUB2安装时GRUB2内核镜像在磁盘中到位置写入到 boot.img 中,这就使得 boot.img 能够在不能识别文件系统的情况下加载内核镜像。

cdboot.img
当从CD引导情况下被写入内核镜像第一个扇区到内容,它负责加载其余的内核镜像到内存。
diskboot.img
当从磁盘引导情况下被写入内核镜像第一个扇区到内容,它负责加载其余的内核镜像到内存。
pxeboot.img
当从网络启动时使用到的。

kernel.img
此镜像包含GRUB2运行时包含的基本工具,框架驱动、文件句柄、环境变量、安全模式命令行解析器等,他可以直接使用但是通常它会被编译进所有的内核镜像中使用。

core.img
这是GRUB2的内核镜像,它由grub-mkimage程序将kernel.img和一些模块动态编译而成,一般情况下他已经包含足够的模块去访问/boot/grub,模块机制使得内核镜像能保持很小的尺寸。在某种程度上,它可以被视为 GRUB 中的 stage2。

*.mod
这是一些可以动态加载的一些模块,当我们需要时,可以将它们可以被动态加载编译进内核镜像,也可以使用insmod手动加载。他们就代替 GRUB 中的 stage1_5 之类到镜像。

安装 GRUB2
一、grub2-install 脚本
1.安装 GRUB 文件到 /boot/grub2
2.复制/usr/lib/grub/i386-pc/ 目录下的*.mod、*.lst、*.img到/boot/grub目录下
3.调用grub2-probe扫描计算机并收集磁盘和分区信息
4.调用grub2-mkimage构建一个新的new.img
5.grub2-setup把grub的boot.img写入MBR中,把core.img写进设备的第一个扇区
二、grub2-install 不会调用 grub2-mkconfig生成grub.cfg 我们需要手动调用。
1.grub2-mkconfig脚本调用grub2-mkdevicemap和grub2-probe生成grub.cfg
2.调用 grub2-set-default设置进入系统的默认内核
3.调用 grub2-mkdevicemap生成新的device.map,grub-mkdevicemap程序可以创建
device.map文件,在执行grub-install时会自动执行他以创建映像关系,如果文件不存在,
则会读取/boot/grub2/devicd.map这个文件,如果映像文件存在,
则grub读取他创建BIOS drives to OS drives

GRUB2配置
GRUB2不再使用 menu.list,而是使用全新的配置文件 /boot/grub2/grub.cfg,文件权限为 444,其目的就是为避免手动更新,我们可以借助 grub2-mkconfig -o /boot/grub2/grub.cfg 命令来更新。/boot/grub2 下到模块可以按需自动加载,模块可以在配置文件中配置,每个模块以 ### BEGIN /etc/grub.d/module_config_name ###开始,以### END /etc/grub.d/module_config_name ### 结束,这些对应的模块文件位于 /etc/grub.d目录之下,次目录下的文件名前面到数字决定了文件的执行顺序,数字越小越先执行,自定义选项在40_custom中定义,这些文件必须有执行权限才会被update-grub读取,并把配置合并到grub.cfg中。

/etc/grub.d/00_header
配置初始的显示项目,如默认选项,时间限制等,一般由/etc/default/grub导入,一般不需要配置

/etc/grub.d/05_debian_theme
配置引导画面,文字颜色等主题

/etc/grub.d/10_linux
定位当前操作系统使用中的root设备内核的位置

30_os-prober
用来搜索linux和其他系统,此脚本中的变量用来指定在/boot/grub/grub.cfg 和 grub2菜单中的名称显示方式,可以修改/etc/default/grub光比这个脚本

40_custom
用来加入用户自定义的菜单样板,将会在执行update-grub时更新至grub.cfg中

41_custom
判断custom.cfg此配置文件是否存在,如果存在就加载它

GRUB2在每次生成grub.cfg的时候,都会检查并设置 /etc/default/grub 配置选项,我们可以通过修改/etc/default/grub来改变 GRUB2到行为。
常用配置选项有以下这些:
GRUB_DEFAULT
制定默认菜单选择项,可以是从0开始数字,也可以是 title 后面的字符串,
当值是‘saved’时有特殊含义:默认的菜单选则项会被保存在GRUB_SAVEDEFAULT中,
下次启动时会从这个值启动。当值为saved时可以用grub2-set-default和grub2-reboot来设置默认启动项,
grub2-set-default到下次修改前都有效,grub2-reboot下次启动时生效

GRUB_SAVEDEFAULT
只有这个值是true,GRUB_DEFAULT是saved时才会生效

GRUB_TIMEOUT
选择菜单的显示时间,默认是5,值是0表示不显示菜单选项,值是-1表示无限等待用户选择

GRUB_HIDDEN_TIMEOUT
GRUB2第一次执行时会寻找其他操作系统,如果没有检测到则会将菜单隐藏,
如果有其他操作系统才会显示菜单,如果参数大于0,则会等待响应的秒数,
但是不会显示菜单,可以按住shift显示菜单。

GRUB_DISTRIBUTOR
菜单中的描述名称,采用命令lsb_release判断,应该是红帽系列的,如果不是就归为Debian

GRUB_CMDLINE_LINUX
此行将追加到所有的linux 定义内核行的后面,不论是救援模式还是一般模式

GRUB_CMDLINE_LINUX_DEFAULT
次选项只会追加在一般模式后面,同上

GRUB_TERMINAL=console
启用console,默认不启用

GRUB_DISABLE_LINUX_UUID=true
在GRUB2中指定root时可以使用UUID,默认不启用

GRUB_GFXMODE=640×480
图形化菜单的分辨率,默认不启用

GRUB_DISABLE_LINUX_RECOVERY=true
禁止显示救援模式

This entry was written by zpz, posted on 2012 年 11 月 13 日 at 下午 12:01, filed under linuxlinux系统管理shell and tagged grubGRUB2grub配置. Bookmark the permalink. Follow any comments here with the RSS feed for this postPost a comment or leave a trackback: Trackback URL.
 

理解GRUB2工作原理及配置选项与方法的更多相关文章

  1. [转帖]keepalived工作原理和配置、使用

    keepalived工作原理和配置.使用 https://www.iteye.com/blog/aoyouzi-2288124 keepalived是什么 keepalived是集群管理中保证集群高可 ...

  2. Linux内核设计(第一周)——从汇编语言出发理解计算机工作原理

    Linux内核设计(第一周)——从汇编语言出发理解计算机工作原理 计算机工作原理 汇编指令 C语言代码汇编分析 by苏正生 原创作品转载请注明出处 <Linux内核分析>MOOC课程htt ...

  3. Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理

    Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理 作者:宋宸宁(20135315) 一.实验过程 图1 编写songchenning5315.c文件 图2 将c文件汇编成32位机器语言 ...

  4. yum服务器搭建(深入理解yum工作原理)

    作者:firefoxbug 时间:July 27, 2014 分类:Linux 前言 在前面一篇rpm包制作描述了rpm的打包过程,这篇文章主要讲述yum的工作原理. yum 运行原理 yum的工作需 ...

  5. 深入理解yum工作原理

    前言 在前面一篇rpm包制作描述了rpm的打包过程,这篇文章主要讲述yum的工作原理. yum 运行原理 yum的工作需要两部分来合作,一部分是yum服务器,还有就是client的yum工具.下面分别 ...

  6. java复习要点(一)------- java语言的特点、java的工作原理、配置环境变量、java命令的使用

    一.java语言的特点: (1)简单并面向对象 (2)鲁棒并安全: java语言在编译及运行程序时,都要进行严格的检查,防止不匹配问题的发生.如果引用一个非法类型,或执行一个非法类型操作,java减肥 ...

  7. 通过一个小故事,理解 HTTPS 工作原理

    本文摘录参考: 细说 CA 和证书(主要讲解 CA 的使用) 数字签名是什么?(简单理解原理) 深入浅出 HTTPS 工作原理(深入理解原理) HTTP 协议由于是明文传送,所以存在三大风险: 1.被 ...

  8. keeplived工作原理及配置

    一.keepalived简介及作用 Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能 keepal ...

  9. Oracle NET工作原理、配置及连接问题排查

    一.Oracle NET配置文件 Oracle NET是一个软件层,支持不同网络协议之间的转换.不同的物理机器可以借助这个软件层实现相互间的通信,具体而言就是实现对oracle的远程访问. oracl ...

随机推荐

  1. classmethod一个用处是创建可选类构造器

    Definition and Introduction通常来说, descriptor 是一种绑定着特殊行为属性的对象, 在访问它时行为被descriptor协议定义的方法所重载.这些方法是__get ...

  2. gcc和g++

    一.GCC GNU编译器套件(GNU Compiler Collection)包括C.C++.Objective-C.Fortran.Java.Ada和Go语言的前端,也包括了这些语言的库(如libs ...

  3. linux 解压xz包

    1.下载xz包 http://tukaani.org/xz/xz-4.999.9beta.tar.bz2   2.解压安装包 $tar -jxvf xz-4.999.9beta.tar.bz2   3 ...

  4. centos 6.7下 elasticsearch的安装

    1.下载elasticsearch的安装包,用ftp上传到linux系统下目录中,如在当前用户root的目录下新建目录elasticsearch,放入安装包 不要忘了添加执行权限 chmod +x * ...

  5. Java学习-048-插件应用之 Find Bugs

    FindBugs 是一个静态分析工具,它可以检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题,使用 FindBugs 可以在不实际运行程序的情况对软件进行分析.使用时最好将字节 ...

  6. angularJS支持的事件

    AngularJS提供可与HTML控件相关联的多个事件.例如ng-click通常与按钮相关联.以下是AngularJS支持的事件. ng-click ng-dbl-click ng-mousedown ...

  7. TCP三次握手四次挥手详解

    转载 http://www.cnblogs.com/zmlctt/p/3690998.html 相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需 ...

  8. iOS中文API之NSLayoutconstraint

    AutoLayout为开发者提供了一种不同于传统对于UI元素位置指定的布局方法.以前,不论是在IB里拖放,还是在代码中写,每个UIView都会有自己的frame属性,来定义其在当前视图中的位置和尺寸. ...

  9. 压缩文本、字节或者文件的压缩辅助类-GZipHelper 欢迎收藏

    压缩文本.字节或者文件的压缩辅助类-GZipHelper 欢迎收藏 下面为大家介绍一.NET下辅助公共类GZipHelper,该工具类主要作用是对文本.字符.文件等进行压缩与解压.该类主要使用命名空间 ...

  10. Boost源码剖析之:泛型指针类any

    C++是强类型语言,所有强类型语言对型别的要求都是苛刻的,型别一有不合编译器就会抱怨说不能将某某型别转换为某某型别,当然如果在型别之间提供了转换操作符或是标准所允许的一定程度的隐式转换(如经过非exp ...