您的位置:时时app平台注册网站 > 时时app平台注册网站 > grub2详解(翻译和整理官方手册)

grub2详解(翻译和整理官方手册)

2019-11-08 02:09

1.2 安装grub2

法定手册最先的作品:https://www.gnu.org/software/grub/manual/html_node/Installing-GRUB-using-grub_002dinstall.html#Installing-GRUB-using-grub_002dinstall

此地的设置指的不是设置grub程序,而是安说大话oot loader,但貌似都称呼安装grub,且后文都以其一意思。

1.2.2.1 grub2中的img文件

grub2生成了少数个img文件,有个别遍及在/usr/lib/grub/i386-pc目录下,某些分布在/boot/grub2/i386-pc目录下,它们中间的涉及,相信看了下文之后就能领会了。

图片 1

图片 2

下图描述了各种img文件之间的关系。个中core.img是动态变化的,路径为/boot/grub2/i386-pc/core.img,而别的的img则存在于/usr/lib/grub/i386-pc目录下。当然,在设置grub时,boot.img会被拷贝到/boot/grub2/i386-pc目录下。

图片 3

(1)boot.img

在BIOS平台下,boot.img是grub运营的第叁个img文件,它被写入到MBWrangler中或分区的boot sector中,因为boot sector的尺寸是512字节,所以该img文件的深浅也是512字节。

boot.img唯风流倜傥的功力是读取归属core.img的第一个扇区并跳转到它身上,将调控权交给该扇区的img。由于体量大小的限量,boot.img不可能精晓文件系统的协会,因而grub2-install将会把core.img的职分硬编码到boot.img中,那样就必定将能找到core.img之处。

(2)core.img

core.img依据diskboot.img、kernel.img和一精彩纷呈的模块被grub2-mkimage程序动态创制。core.img中贮存了足够多的功用模块以确定保证grub能访谈/boot/grub,并且能够加载相关的模块完结相关的功力,举个例子加载运转菜单、加载指标操作系统的新闻等,由于grub2大气施用了动态作用模块,使得core.img体积变得丰盛小。

core.img中包含了三个img文件的剧情,包括diskboot.img/kernel.img等。

core.img的装置地方随MB安德拉磁盘和GPT磁盘而各异,那在上文中已经注明过了。

(3)diskboot.img

万风流罗曼蒂克开发银行设备是硬盘,即从硬盘运行时,core.img中的首个扇区的内容正是diskboot.img。diskboo.img的效应是读取core.img中多余的局地到内部存储器中,并将调控权交给kernel.img,由于那时候还不识别文件系统,所以将core.img的全方位地方以block列表的不二等秘书籍编码,使得diskboot.img能够找到剩余的源委。

该img文件因为占用一个扇区,所以体积为512字节。

(4)cdboot.img

固然开行设备是光驱(cd-rom),即从光驱运转时,core.img中的第一个扇区的的内容正是cdboo.img。它的效果和diskboot.img是如出生机勃勃辙的。

(5)pexboot.img

只如若从互连网的PXE景况运行,core.img中的第一个扇区的开始和结果正是pxeboot.img。

(6)kernel.img

kernel.img文件满含了grub的主导运作时情状:设备框架、文件句柄、遭逢变量、救援格局下的下令行深入剖判器等等。超级少间接运用它,因为它们已经整整嵌入到了core.img中了。注意,kernel.img是grub的kernel,和操作系统的内核毫无干系。

豆蔻梢头经留心的话,会开掘kernel.img自个儿就占用28KB空间,但松手到了core.img中后,core.img文件才独有26KB大小。那是因为core.img中的kernel.img是被减少过的。

(7)lnxboot.img

该img文件放在core.img的最前部位,使得grub疑似linux的木本同样,那样core.img就能够被LILO的"image="识别。当然,那是相配LILO来使用的,但未来哪个人还适用LILO呢?

(8)*.mod

各样成效模块,部分模块已经嵌入到core.img中,大概会被grub自动加载,但有的时候也要求运用insmod命令手动加载。

1.4.8 true和false命令

直接回到true或false布尔值。

1.3 grub2配置文件

1.4.12 configfile命令

当下装载二个点名的文本作为grub的安顿文件。但只顾,导入的公文中的意况变量不在当前收效。

在grub.cfg错过时,该命令将排上用途。

1.4.16 ls命令

ls [args]

大器晚成旦不给定任何参数,则列出grub可以预知的配备。

假设给定的参数是五个分区,则展现该分区的文件系统音讯。

借使给定的参数是贰个相对路线表示的目录,则显得该目录下的装有文件。

例如:

图片 4

1.2.1 grub安装命令

设置方式非常轻易,只需调用grub2-install,然后给虞升卿装到的装置名就可以。

shell> grub2-install /dev/sda

如此那般的安装情势,暗中认可会将img文件归入到/boot目录下,就算想自定义放置地点,则使用--boot-directory选项钦赐,可用以测量检验演练grub的时候使用,但在实际的grub境况下不提议做别的改换。

shell> grub2-install --boot-director=/mnt/boot /dev/fd0

假定是EFI固件平台,则必得挂载好efi系统一分配区,日常会挂在/boot/efi下,这是暗中同意的,这个时候可一向选用grub2-install安装。

shell> grub2-install

后生可畏旦不是挂载在/boot/efi下,则动用--efi-directory钦定efi系统一分配区路径。

shell> grub2-install --efi-directory=/mnt/efi

grub2-install实际上是叁个shell脚本,用于调用其余工具,真正的功用都以其余工具去做到的,所以大器晚成旦那叁个熟知grub内部命令和机制,完全可以不用grub2-install。

对应守旧的grub安装命令为grub-install,用法和grub2-install同样。

1.5.5 fallback变量

当暗中认可菜单项运维退步,则应用该变量钦赐的菜单项运行,钦点格局同default,可接纳数值(从0开头揣测)、title或id钦定。

1.4.20 normal和normal_exit命令

步向和抽离normal形式,normal是相对于救援形式来讲的,只要不是在解救情势下,就是在normal情势下。

吊死问疾格局下,只好动用超少的吩咐,而normal形式下则可以运用极度多的下令。

1.3 grub2配置文件

grub2的默许配置文件为/boot/grub2/grub.cfg,该配置文件的写法弹性十分的大,但许多索要修改该配置文件时,都只需修正个中一小部分内容就可以达到指标。

grub2-mkconfig程序可用来变化相符非常多场合包车型地铁grub.cfg文件,默许它会自动尝试探测有效的操作系统内核,并转移对应的操作系统菜单项。使用办法特别轻巧,只需多个选项"-o"钦点输出文件就能够。

shell> grub2-mkconfig -o /boot/grub2/grub.cfg

1.4.7 search命令

search [--file|--label|--fs-uuid] [--set [var]] [--no-floppy] [--hint args] name

透过文件[--file]、卷标[--label]、文件系统UUID[--fs-uuid]来寻觅设备。

设若选择了"--set"选项,则会将率先个找到的设施安装为景况变量"var"的值,默许的变量"var"为'root'。

探索时可接纳"--no-floppy"选项来制止找寻软盘,因为软盘速度超级慢,已经被淘汰了。

不经常还只怕会钦赐"--hint=XXX",表示优先选项知足提醒条件的装置,若内定了七个hint条件,则先行相称第二个hint,然后相配第二个,依次类推。

例如:

if [ x$feature_platform_search_hint = xy ]; then

  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  367d6a77-033b-4037-bbcb-416705ead095

else

  search --no-floppy --fs-uuid --set=root 367d6a77-033b-4037-bbcb-416705ead095

fi

linux16 /vmlinuz-3.10.0-327.el7.x86_64 root=UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 ro crashkernel=auto quiet LANG=en_US.UTF-8

initrd16 /initramfs-3.10.0-327.el7.x86_64.img

上述if语句中的第二个search中找出uuid为"367d6a77-033b-4037-bbcb-416705ead095"的设备,但运用了两个hint选项,表示先相配bios平台下/boot分区为(hd0,msdos1)的配备,之后还内定了多少个hint,但因为search使用的是uuid寻找情势,所以那几个hint选项是多余的,因为单磁盘上分区的uuid是唯风流倜傥的。

再举个例证,假使某运转设备上有五个boot分区(如多系统共存时),分别是(hd0,msdos1)和(hd0,msdos5),倘若此时不选用uuid寻觅,而是利用label格局搜索:

search --no-floppy --fs-label=boot --set=root --hint=hd0,msdos5

则当时将会中选(hd0,msdos5)那些boot分区,若不利用hint,将当选(hd0,msdos1)那个boot分区。

1.1.7 进入grub命令行

在金钱观的grub上,能够一向在bash下敲入grub命令步入命令交互作用情势,但grub2只可以在系统运营前行入grub人机联作命令行。

按下e见能够编写制定所选菜单对应的grub菜单配置项,按下c键能够进去grub命令行交互作用方式。

图片 5

图片 6

1.4.16 ls命令

ls [args]

假如不给定任何参数,则列出grub可以见到的设备。

譬喻给定的参数是二个分区,则展现该分区的文件系统音信。

若果给定的参数是八个相对路线表示的目录,则显得该目录下的全部文件。

例如:

图片 7

1.4.7 search命令

search [--file|--label|--fs-uuid] [--set [var]] [--no-floppy] [--hint args] name

通过文件[--file]、卷标[--label]、文件系统UUID[--fs-uuid]来探求设备。

假若选取了"--set"选项,则会将首先个找到的道具安装为情况变量"var"的值,暗许的变量"var"为'root'。

探索时可接受"--no-floppy"选项来防止搜索软盘,因为软盘速度比一点也不快,已经被淘汰了。

一时候还恐怕会钦定"--hint=XXX",表示优先选项满意提示条件的设备,若内定了多个hint条件,则优先相配第二个hint,然后相配第一个,依次类推。

例如:

if [ x$feature_platform_search_hint = xy ]; then

  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  367d6a77-033b-4037-bbcb-416705ead095

else

  search --no-floppy --fs-uuid --set=root 367d6a77-033b-4037-bbcb-416705ead095

fi

linux16 /vmlinuz-3.10.0-327.el7.x86_64 root=UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 ro crashkernel=auto quiet LANG=en_US.UTF-8

initrd16 /initramfs-3.10.0-327.el7.x86_64.img

上述if语句中的第叁个search中找出uuid为"367d6a77-033b-4037-bbcb-416705ead095"的器具,但利用了多少个hint选项,表示先相配bios平台下/boot分区为(hd0,msdos1)的装置,之后还钦命了多少个hint,但因为search使用的是uuid寻觅格局,所以这几个hint选项是多余的,因为单磁盘上分区的uuid是唯风度翩翩的。

再举个例证,假如某运行设备上有八个boot分区(如多系统共存时),分别是(hd0,msdos1)和(hd0,msdos5),若是当时不利用uuid寻觅,而是采用label格局寻觅:

search --no-floppy --fs-label=boot --set=root --hint=hd0,msdos5

则那时将会当选(hd0,msdos5)这么些boot分区,若不使用hint,将当选(hd0,msdos1)那个boot分区。

1.5.5 fallback变量

当暗中同意菜单项运维战败,则动用该变量内定的菜单项运维,钦赐格局同default,可应用数值(从0起头揣摸)、title或id钦命。


1.5.3 default变量

点名暗中认可的菜单项,日常其后都会跟随timeout变量。

default内定默许菜单时,可使用菜单的title,也得以行使菜单的id,或许数值顺序,当使用数值顺序点名default时,从0起始思谋。

假诺单独是想通晓grub第22中学的boot.img/core.img/diskboot.img/kernel.img或然守旧grub中stage1/stage1_5/stage2文件的效果与利益,请直接跳至相关内容处阅读。

1.4.21 password和password_pbkdf2命令

password user clear-password
password_pbkdf2 user hashed-password

前端接收公开密码定义叁个名称为user的客商。不提出选拔此命令。

后任使用哈希加密后的密码定义四个名称为user的客户,加密的密码通过"grub-mkpasswd-pbkdf2"工具生成。提出利用该命令。

1.5.3 default变量

点名私下认可的菜单项,日常其后都会跟随timeout变量。

default内定私下认可菜单时,可采用菜单的title,也足以动用菜单的id,也许数值顺序,当使用数值顺序点名default时,从0初阶总结。

1.1.6 grub2的装置地点

法定手册原来的作品:https://www.gnu.org/software/grub/manual/html_node/BIOS-installation.html#BIOS-installation

严加地正是core.img的装置地方,因为boot.img的职位是长久在MB君越或VB奇骏或EB科雷傲上的。

(1).MBR

MB福睿斯格式的分区表用于PC BIOS平台,这种格式允好些个个主分区和附加的逻辑分区。使用这种格式的分区表,有三种情势安装GURB:

  1. 置于到MBOdyssey和第一个分区中间的长空,那部分便是大众所称的"boot track","MB中华V gap"或"embedding area",它们大要需求31kB的上空;
  2. 将core.img安装到有个别文件系统中,然后使用分区的率先个扇区(严俊地说不是第八个扇区,而是首先个block)存款和储蓄运转它的代码。

这两种方法有两样的标题。

使用嵌入的方式安装grub,就从未保存的闲暇空间来承保卫安全全性,比如有个别特别的软件便是利用这段空间来得以完毕许可限定的;别的分区的时候,尽管会在MB奥德赛和率先个分区中间预先流出空闲空间,但大概留下的上空会比那越来越小。

措施二装置grub到文件系统,但这么的grub是软弱的。比如,文件系统的一些特征要求做尾部包装,以致一些fsck检测,它们大概会活动这一个block。

GRUB开荒公司建议将GRUB嵌入到MB安德拉和率先个分区之间,除非有特有必要,但仍必定要保障第一个分区起码是从第31kB(第陆十个扇区)之后才起来成立的。

现今的磁盘设备,平日都会有分区边界对齐的性能优化提示,所以率先个分区或然会活动从第1MB处初阶创建。

(2).GPT

生龙活虎部分新的种类接收GUID分区表(GPT)格式,这种格式是EFI固件所钦命的生龙活虎有些。但假若操作系统帮衬的话,GPT也能够用来BIOS平台(即MB本田CR-V风格结合GPT格式的磁盘),使用这种格式,必要使用独立的BIOS boot分区来保存GRUB,GRUB被置于到此分区,不会有此外风险。

当在gpt磁盘上创办三个BIOS boot分区时,供给保障两件事:(1)它最小是31kB大小,但貌似都会为此分区划分1MB的上空用于可扩大性;(2)必必要有合理性的分区类型标记(flag type)。

诸如利用gun parted工具时,可以安装为bios_grub标识:

# parted /dev/sda toggle partition_num bios_grub
# parted /dev/sda set partiton_num bios_grub on

设若使用gdisk分区工具时,则分类项目设置为"EF02"。

假定运用任何的分区工具,只怕必要钦定guid,则能够内定其guid为"21686148-6449-6e6f-744e656564454649"。

下图是有个别bios/gpt格式的bios boot分区音信,从当中可以知道,它大小为1M,未有文件系统,分区表示为bios_grub。

图片 8

下图为gpt磁盘在图形分界面下安装操作系统时创制的Bios boot分区。

图片 9

1.4.1 help命令

help [pattern]

来得能同盟到pattern的保有命令的验证音讯和usage音讯,如若不点名patttern,将突显全体命令的简约消息。

例如"help cmos"。

图片 10

1.4 命令行和菜单项中的命令

官方手册原来的文章:https://www.gnu.org/software/grub/manual/html_node/Commands.html#Commands

grub2帮衬广大下令,有个别命令只可以在人机联作式命令行下使用,有些命令可用在布局文件中。在挽留方式下,唯有insmod、ls、set和unset命令可用。

无须通晓全数的指令,明白用的上的多少个指令就能够。

转发请评释出处:http://www.cnblogs.com/f-ck-need-u/p/7094693.html

   

1.5.8 root变量

该变量钦赐根设备的名号,使得后续使用从"/"初步的相对路线援引文件时将从该root变量钦命的门道始于。日常该变量是grub运转的时候由grub依照prefix变量设置而来的。

诸如prefix=(hd0,gpt1)/boot/grub2,则root=(hd0,gpt1),后续就足以选择相对路线/vmlinuz-XXX表示(hd0,gpt1)/vmlinuz-XXX文件。

注意:在Linux中,从根"/"领头的路径表示相对路线,如/etc/fstab。但grub中,从"/"初步的代表相对路线,其绝没有错标准是root变量安装的值,而使用"(dev_name)/"开端的不二等秘书诀才表示相对路线。

平时root变量都代表/boot所在的分区,但那不是绝对的,假使设置为根文件系统所在分区,如root=(hd0,gpt2),则持续能够使用/etc/fstab来援引"(hd0,gpt2)/etc/fstab"文件。

该变量在grub第22中学日常不要修正,但若改善则必需内定准确。

此外,root变量还相应于linux或linux16下令所钦点的基业运维参数"root="区分开来,内核运维参数中的"root="的意义是原则性的,其钦赐的是根文件系统所在分区。比方:

set root='hd0,msdos1'

linux16 /vmlinuz-3.10.0-327.el7.x86_64 style="color: #ff0000;">root=UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 ro crashkernel=auto quiet LANG=en_US.UTF-8

initrd16 /initramfs-3.10.0-327.el7.x86_64.img

平日情状下,/boot都会单独分区,所以root变量钦赐的根设备和root运营参数所钦赐的根分区不是同叁个分区,除非/boot不是独立的分区,而是在根分区下的八个索引。

1.4.4 lsmod命令和insmod命令

分别用于列出已加载的模块和调用内定的模块。

专一,若要导入支持ext文件系统的模块时,只需导入ext2.mod就可以,实际上也一向不ext3和ext4对应的模块。

1.4.2 boot命令

用于运营已加载的操作系统。

只在人机联作式命令行下可用。其实在menuentry命令的最后就含有了boot命令。

1.1.2 命名习贯和文书路线表示方法

合法手册原著:https://www.gnu.org/software/grub/manual/html_node/Naming-convention.html#Naming-convention

(fd0)           :表示第一块软盘
(hd0,msdos2)    :表示第一块硬盘的第二个mbr分区。grub2中分区从1开始编号,传统的grub是从0开始编号的
(hd0,msdos5)    :表示第一块硬盘的第一个逻辑分区
(hd0,gpt1)      :表示第一块硬盘的第一个gpt分区
/boot/vmlinuz   :相对路径,基于根目录,表示根目录下的boot目录下的vmlinuz,
                :如果设置了根目录变量root为(hd0,msdos1),则表示(hd0,msdos1)/boot/vmlinuz
(hd0,msdos1)/boot/vmlinuz:绝对路径,表示第一硬盘第一分区的boot目录下的vmlinuz文件

假使单独是想知道grub第22中学的boot.img/core.img/diskboot.img/kernel.img或然古板grub中stage1/stage1_5/stage2文件的效应,请直接跳至有关内容处阅读。

1.1 根基内容

1.5.2 cmdpath变量

grub2加载的core.img的目录路线,是相对路线,即富含了配备名的路径,如(hd0,gpt1)/boot/grub2/。该变量值不该改过。

1.4.2 boot命令

用来运转已加载的操作系统。

只在人机联作式命令行下可用。其实在menuentry命令的最终就隐含了boot命令。

1.2.2.2 传统grub中的stage文件

grub2的布署性方法和金钱观grub大不近似,因而和stage之间的比较关系实在没那么标准,可是将它们拿来对比也可以有扶持明白img和stage文件的职能。

stage文件也遍及在四个地点:/usr/share/grub/RELEASE目录下和/boot/grub目录下,/boot/grub目录下的stage文件是安装grub时从/usr/share/grub/RELEASE目录下拷贝过来的。

图片 11

图片 12

(1)stage1

stage1文件在职能上等价于boot.img文件。指标是跳转到stage1_5或stage2的第二个扇区上。

(2)*_stage1_5

*stage1_5文书包括了各个识别文件系统的代码,使得grub能够从文件系统中读取容量更加大成效更眼花缭乱的stage2文件。从这一面构思,它相近于core.img中加载对应文件系统模块的代码部分,可是core.img的效应远比stage1_5多。

stage1_5相同安装在MBLacrosse后、第二个分区前的这段空闲空间中,也正是MB如虎 CTR 3gap空间,它的作用是跳转到stage2的首先个扇区。

实质上守旧的grub在好几情形下是能够不要stage1_5文书就会健康运维的,可是grub2则一定要够core.img。

(3)stage2

stage2的意义是加载种种处境和加载内核,在grub第22中学尚无完全与之相呼应的img文件,可是core.img中含有了stage2的装有机能。

当跳转到stage2的率先个扇区后,该扇区的代码担任加载stage2剩余的内容。

瞩目,stage2是寄存在磁盘上的,并不曾像core.img相符嵌入到磁盘上。

(4)stage2_eltorito

效用上等价于grub第22中学的core.img中的cdboot.img部分。日常在创设救援方式的grub时才会接受到cd-rom相关文书。

(5)pxegrub

成效上等价于grub第22中学的core.img中的pxeboot.img部分。

1.2.2.2 传统grub中的stage文件

grub2的宏图方法和思想grub大不相近,因而和stage之间的对照关系实在没那么标准,可是将它们拿来比较也可能有利于理解img和stage文件的机能。

stage文件也布满在多个地点:/usr/share/grub/RELEASE目录下和/boot/grub目录下,/boot/grub目录下的stage文件是安装grub时从/usr/share/grub/RELEASE目录下拷贝过来的。

图片 13

图片 14

(1)stage1

stage1文件在效果与利益上等价于boot.img文件。指标是跳转到stage1_5或stage2的首先个扇区上。

(2)*_stage1_5

*stage1_5文书满含了各个识别文件系统的代码,使得grub能够从文件系统中读取容积越来越大成效更扑朔迷离的stage2文件。从那三只构思,它相同于core.img中加载对应文件系统模块的代码部分,不过core.img的职能远比stage1_5多。

stage1_5相同安装在MB中华V后、第一个分区前的这段空闲空间中,相当于MB奔驰G级gap空间,它的功用是跳转到stage2的率先个扇区。

骨子里古板的grub在有些条件下是能够绝不stage1_5文书就能够平日运营的,可是grub2则必须要够core.img。

(3)stage2

stage2的遵守是加载各样条件和加载内核,在grub第22中学从不完全与之相呼应的img文件,但是core.img中蕴藏了stage2的兼具机能。

当跳转到stage2的首先个扇区后,该扇区的代码担当加载stage2剩余的剧情。

小心,stage2是寄存在在磁盘上的,并从未像core.img同样嵌入到磁盘上。

(4)stage2_eltorito

成效上等价于grub第22中学的core.img中的cdboot.img部分。平常在制作救援形式的grub时才会接受到cd-rom相关文件。

(5)pxegrub

作用上等价于grub第22中学的core.img中的pxeboot.img部分。

1.7.1 grub安装

比如设置到/dev/sda上。

shell> grub-install /dev/sda

1.3.1 通过/etc/default/grub文件生成grub.cfg

合法手册最早的小说:https://www.gnu.org/software/grub/manual/html_node/Simple-configuration.html#Simple-configuration

grub2-mkconfig是依照/etc/default/grub文件来创制布局文件的。该文件中定义的是grub的大局宏,改进内置的宏能够迅快速生成成grub配置文件。实际上在/etc/grub.d/目录下还应该有部分grub配置脚本,这个shell脚本读取一些剧本配置文件(如/etc/default/grub),依据内定的逻辑生成grub配置文件。若风野趣,不放读意气风发读/etc/grub.d/10_linux文件,它指引了创制grub.cfg的内幕,举例怎么样转移运行菜单。

[root@xuexi ~]# ls /etc/grub.d/
00_header  00_tuned  01_users  10_linux  20_linux_xen  20_ppc_terminfo  30_os-prober  40_custom  41_custom  README

在/etc/default/grub中,使用"key=vaule"的格式,key全体为大小字母,假若vaule部分含有了空格或别的特殊字符,则须求利用引号包围。

举个例子说,上面是叁个/etc/default/grub文件的亲自去做:

[root@xuexi ~]# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto biosdevname=0 net.ifnames=0 rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

固然可用的宏比较多,但可能用的上的就多少个:GRUB_DEFAULT、GRUB_TIMEOUT、GRUB_CMDLINE_LINUX和GRUB_CMDLINE_LINUX_DEFAULT。

以下列出了一些key。

(1).GRUB_DEFAULT

暗中同意的菜单项,暗中认可值为0。其值可为数值N,表示从0开头测度的第N项是暗中同意菜单,也足以内定相应的title表示该项为暗中认可的菜单项。使用数值比较好,因为运用的title大概带有了轻松改造的器具名。举例犹如下菜单项:

menuentry 'Example GNU/Linux distribution' --class gnu-linux --id example-gnu-linux {
    ...
}

假使想将此菜单设为暗中同意菜单,则可设置"GRUB_DEFAULT=example-gnu-linux"。

如果GRUB_DEFAULT的值设置为"saved",则表示私下认可的菜单项是"GRUB_SAVEDEFAULT"或"grub-set-default"所钦定的菜单项。

(2).GRUB_SAVEDEFAULT

暗中同意该key的值未设置。即使该key的值设置为true时,要是选定了某菜单项,则该菜单项将被以为是新的默许菜单项。该key独有在设置了"GRUB_DEFAULT=saved"时才有效。

不建议接纳该key,因为GRUB_DEFAULT配合grub-set-default更方便。

(3).GRUB_TIMEOUT

在开机选拔菜单项的过期时间,超过该时间将选用暗许的菜单项来指导迷津对应的操作系统。暗中同意值为5秒。等待进度中,按下自便按钮都能够中断等待。

设置为0时,将不列出美食做法直接接纳暗许的菜单项引导与之相应的操作系统,设置为"-1"时将恒久等待接收。

是或不是出示菜单,和"GRUB_TIMEOUT_STYLE"的安装有关。

(4).GRUB_TIMEOUT_STYLE

万黄金年代该key未设置值或然安装的值为"menu",则列出运营菜单项,并等候"GRUB_TIMEOUT"钦命的晚点时间。

即使设置为"countdown"和"hidden",则不显得运营菜单项,而是一向等待"GRUB_TIMEOUT"钦定的超时时间,假诺超时了则运维暗中同意菜单项并带领对应的操作系统。在伺机历程中,按下"ESC"键能够列出运转菜单。设置为countdown和hidden的分别是countdown会显示超时时间的剩余时间,而hidden则一心隐形超时时间。

(5).GRUB_DISTRIBUTOR

安装发行版的标志名称,日常该名称用来作为菜单的生机勃勃有的,以便区分分裂的操作系统。

(6).GRUB_CMDLINE_LINUX

拉长到菜单中的内核运维参数。举例:

GRUB_CMDLINE_LINUX="crashkernel=ro root=/dev/sda3 biosdevname=0 net.ifnames=0 rhgb quiet"

(7).GRUB_CMDLINE_LINUX_DEFAULT

除非"GRUB_DISABLE_RECOVE安德拉Y"设置为"true",不然该key钦定的私下认可内核运行参数将生成两份,后生可畏份是用于暗中同意运维参数,大器晚成份用于恢复生机情势(recovery mode)的开发银行参数。

该key生成的暗中同意内核运维参数将加多在"GRUB_CMDLINE_LINUX"所钦定的启航参数之后。

(8).GRUB_DISABLE_RECOVERY

该项设置为true时,将不会变卦恢复格局的菜单项。

(9).GRUB_DISABLE_LINUX_UUID

暗许景况下,grub2-mkconfig在生产菜单项的时候将动用uuid来标记Linux 内核的根文件系统,即"root=UUID=..."。

诸如,下边是/boot/grub2/grub.cfg中某菜单项的局地剧情。

menuentry 'CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-327.el7.x86_64-advanced-b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8' {

        ......

        linux16 /vmlinuz-3.10.0-327.el7.x86_64 style="color: #ff0000;"> root=UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 ro crashkernel=auto biosdevname=0 net.ifnames=0 quiet LANG=en_US.UTF-8

        initrd16 /initramfs-3.10.0-327.el7.x86_64.img

}

虽说接收UUID的主意更有限扶植,但神迹不太有利,所以能够设置该key为true来禁止使用。

(10).GRUB_BACKGROUND

安装背景图片,背景图片必须是grub可读的,图片文件名后缀必需是".png"、".tga"、".jpg"、".jpeg",在急需的时候,grub会按百分比裁减图片的分寸以适配显示屏尺寸。

(11).GRUB_THEME

安装grub菜单的核心。

(12).GRUB_GFXPAYLOAD_LINUX

设置为"text"时,将强制行使文本方式运行Linux。在有个别意况下,大概不帮助图形形式。

(13).GRUB_DISABLE_OS_PROBER

暗中认可意况下,grub2-mkconfig会尝试运用os-prober程序(借使已经设置的话,暗中同意应该都装了)探测别的可用的操作系统内核,并为其生成对应的启航菜单项。设置为"true"将禁止使用自动探测功用。

(14).GRUB_DISABLE_SUBMENU

默许情况下,grub2-mkconfig如若发掘成多个同版本的或低版本的水源时,将只为最高版本的内核生成世界级菜单,其余兼具的低版本内核菜单都放入子菜单中,设置为"y"将全方位生成为一流菜单。

(15).GRUB_HIDDEN_TIMEOUT(已抛弃,但为了向后格外,仍然有效)

使用"GRUB_TIMEOUT_STYLE={countdown|hidden}"取代该项

(16).GRUB_HIDDEN_TIMEOUT_QUIET(已废弃,但为了向后非凡,仍然有效)

配合GRUB_HIDDEN_TIMEOUT使用,能够动用GRUB_TIMEOUT_STYLE=countdown来替代这两项。

1.6 grub配置和装置示例

率先写三个grub.cfg。举例此处,在msdos磁盘上安装了多少个操作系统,CentOS 7和CentOS 6。

# 设置一些全局环境变量
set default=0
set fallback=1
set timeout=3

# 将可能使用到的模块一次性装载完
# 支持msdos的模块
insmod part_msdos
# 支持各种文件系统的模块
insmod exfat
insmod ext2
insmod xfs
insmod fat
insmod iso9660

# 定义菜单
menuentry 'CentOS 7' --unrestricted {
        search --no-floppy --fs-uuid --set=root 367d6a77-033b-4037-bbcb-416705ead095
        linux16 /vmlinuz-3.10.0-327.el7.x86_64 root=UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 ro biosdevname=0 net.ifnames=0 quiet
        initrd16 /initramfs-3.10.0-327.el7.x86_64.img
}
menuentry 'CentOS 6' --unrestricted {
        search --no-floppy --fs-uuid --set=root f5d8939c-4a04-4f47-a1bc-1b8cbabc4d32
        linux16 /vmlinuz-2.6.32-504.el6.x86_64 root=UUID=edb1bf15-9590-4195-aa11-6dac45c7f6f3 ro quiet
        initrd16 /initramfs-2.6.32-504.el6.x86_64.img
}

接下来实施grub安装操作。

shell> grub2-install /dev/sda

1.5.6 grub_platform变量

点名该平台是"pc"依旧"efi",pc表示的就是古板的bios平台。

该变量不应有被修改,而应该被引述,举例用于if决断语句中。

1.1.2 命名习贯和文书路线表示方法

合法手册原来的作品:https://www.gnu.org/software/grub/manual/html_node/Naming-convention.html#Naming-convention

(fd0)           :表示第一块软盘
(hd0,msdos2)    :表示第一块硬盘的第二个mbr分区。grub2中分区从1开始编号,传统的grub是从0开始编号的
(hd0,msdos5)    :表示第一块硬盘的第一个逻辑分区
(hd0,gpt1)      :表示第一块硬盘的第一个gpt分区
/boot/vmlinuz   :相对路径,基于根目录,表示根目录下的boot目录下的vmlinuz,
                :如果设置了根目录变量root为(hd0,msdos1),则表示(hd0,msdos1)/boot/vmlinuz
(hd0,msdos1)/boot/vmlinuz:绝对路径,表示第一硬盘第一分区的boot目录下的vmlinuz文件

本文首要介绍的是grub2,在文末对古板grub实行了简述,但在grub2的开始和结果部分中满含了不胜枚举grub2和金钱观grub的比较。

1.3 grub2配置文件

grub2的暗中认可配置文件为/boot/grub2/grub.cfg,该配置文件的写法弹性超级大,但大好多内需改良该配置文件时,都只需改善此中一小部分剧情就足以直达指标。

grub2-mkconfig程序可用来变化切合超越百分之五十意况的grub.cfg文件,暗中认可它会活动尝试探测有效的操作系统内核,并生成对应的操作系统菜单项。使用方法特别轻巧,只需一个筛选"-o"钦赐输出文件就能够。

shell> grub2-mkconfig -o /boot/grub2/grub.cfg

正文目录:

1.3.2 脚本办法直接编写grub.cfg文件

合法手册原来的文章:https://www.gnu.org/software/grub/manual/html_node/Shell_002dlike-scripting.html#Shell_002dlike-scripting

  • 注释符:从#始发的字符都被以为是注释,所以grub扶持行中注释
  • 接连操作符:{ } | & $ ; < >
  • 保留首要字和符号:! [[ ]] { } case do done elif else esac fi for function if in menuentry select then time until while。并不是全部的主要字都有用,只是为了未来的意义扩充而提前提供的。
  • 引号和转义符

对于特种的字符要求转义。有三种方法转义:使用反斜线、使用单引号、使用双引号。

反斜线转义格局和shell同样。

单引号中的全体字符串都以字面意思,未有其余特殊意义,即便单引号中的转义符也被以为是从头到尾的字符。所以'''是力不能支保留单引号的。单引号要求运用双引号来调换,所以应该写"'"。

双引号和单引号效能同样,但它无法转义某多少个特殊字符,包涵"$"和""。对于双引号中的"$"符号,它任哪一天候都保存本意。对于"",独有反斜线后的字符是'$'、'"'、''时才代表转义的情趣,别的,某行若以反斜线结尾,则表示续行,但官方不建议在grub.cfg中接纳续行符。

  • 变量扩张

使用$符号援用变量,也能够应用${var}的办法引用var变量。

帮忙地点变量,比如$1援用的是率先个参数。

还协助极度的变量,如$?表示上叁回命令的退出状态码。假使接收了地点变量,则还支持$*、$@和$#,$@代表的装有参数全部,各参数之间是不可分割的,$@也象征享有变量,但$@的各参数是能够被细分的,$#表示参数的个数。

  • 粗略的下令

能够在grub.cfg中使用简便的通令。各命令之间接选举拔换行符或分集团表示该命令停止。

要是在命令前使用了"!",则代表逻辑取反。

  • 巡回结构:for name in word …; do list; done
  • 巡回结构:while cond; do list; done
  • 循环结构:until cond; do list; done
  • 规范推断结构:if list; then list; [elif list; then list;] … [else list;] fi
  • 函数结构:function name { command; … }
  • 菜单项命令:menuentry title [--class=class …] [--users=users] [--unrestricted] [--hotkey=key] [--id=id] { command; … }

那是grub.cfg中最首要的项,官方原著:

该命令定义了叁个名字为title的grub菜单项。当开机时相中该菜单项时,grub会将chosen意况变量的值赋给"--id"(假如给定了"--id"的话),实行大括号中的命令列表,如若直到最终一个限令都全体实行成功,且成功加载了相应的基业后,将实践boot命令。随后grub就将调控权交给了操作系统内核。

--class:该选项用于将菜单分组,进而使得grub能够透过焦点样式为区别组的菜系展现分裂的样式风格。一个menuentry中,能够行使频仍class表示将该菜单分到多少个组中去。

--users:该选项限定独有这里列出的顾客才具访谈该菜单项,不钦点该采纳时将意味具备客商都能访谈该菜单。

--unrestricted:该选项表示具有客商都有权访谈该菜单项。

--hotkey:该选取为该菜单项关联多少个热键,也便是快速键,关联热键后生龙活虎旦按下该键就能够当选该菜单。热键只好是字母键、backspace键、tab键或del键。

--id:该选取为该菜单关联三个唯后生可畏的数值。id的值能够由ASCII字母、数字//下划线组成,且不得以数字初步。

负有别的的参数包蕴title都被作为地方参数字传送递给大括号中的命令,但title总是$1,除title外的任何参数,地点值在此以前向后类推。

  • break [n]:强制退出for/while/until循环
  • continue [n]:跳到下三次迭代,即步向下贰次巡回
  • return [n]:钦点重回状态码
  • setparams [arg] …:从$1领头轮流个方式置参数
  • shift [n]:踢掉前n个参数,使得第n 1个参数变为$1,但和shell中不黄金时代致的是,踢掉了前n个参数后,从$#-n 1到$#这几个参数的岗位不改变

具体如何编写grub.cfg文件,继续看下文的通令和变量。

1.4.17 probe命令

probe [--set var] --partmap|--fs|--fs-uuid|--label device

探测分区或磁盘的属性新闻。要是未钦定--set,则展现钦赐设备对应的信息。假诺钦定了--set,则将对应消息的值赋给变量var。

--partmap:展现是gpt依然mbr格式的磁盘。

--fs:显示分区的文件系统。

--fs-uuid:显示分区的uuid值。

--label:呈现分区的label值。

1.2.2 各个img和stage文件的求证

官方手册原来的文章:https://www.gnu.org/software/grub/manual/html_node/Images.html#Images

img文件是grub2生成的,stage文件是思想grub生成的。上面是种种文件的辨证。

1.2 安装grub2

1.4.5 linux和linux16命令

linux file [kernel_args]
linux16 file [kernel_args]

都表示装载钦命的基本文件,并传递内核运转参数。linux16表示以守旧的13位运营商业事务运转水源,linux表示以30个人运维商业事务运营水源,但linux命令比linux16有点限定。但大多时候,它们是能够通用的。

在linux或linux16限令之后,必需紧跟着使用init或init16下令装载init ramdisk文件。

貌似为/boot分区下的vmlinuz-RELEASE_NUM文件。

图片 15

但在grub碰着下,boot分区被当做root分区,即根分区,借使boot分区为率先块磁盘的率先个分区,则应当写成:

linux (hd0,msdos1)/vmlinuz-XXX

抑或相对路线的:

set root='hd0,msdos1'

linux /vmlinuz-XXX

在grub阶段能够传递内核的起步参数(内核的参数满含3类:编写翻译内核时参数,运营时参数和平运动作时参数),能够传递的启航参数特别超级多,完整的开发银行参数列表见:http://redsymbol.net/linux-kernel-boot-parameters。这里只列出多少个常用的:

init=   :指定Linux启动的第一个进程init的替代程序。
root=   :指定根文件系统所在分区,在grub中,该选项必须给定。
ro,rw   :启动时,根分区以只读还是可读写方式挂载。不指定时默认为ro。
initrd  :指定init ramdisk的路径。在grub中因为使用了initrd或initrd16命令,所以不需要指定该启动参数。
rhgb    :以图形界面方式启动系统。
quiet   :以文本方式启动系统,且禁止输出大多数的log message。
net.ifnames=0:用于CentOS 7,禁止网络设备使用一致性命名方式。
biosdevname=0:用于CentOS 7,也是禁止网络设备采用一致性命名方式。
             :只有net.ifnames和biosdevname同时设置为0时,才能完全禁止一致性命名,得到eth0-N的设备名。

例如:

linux16 /vmlinuz-3.10.0-327.el7.x86_64 root=UUID=edb1bf15-9590-4195-aa11-6dac45c7f6f3 ro rhgb quiet LANG=en_US.UTF-8

别的,root运营参数有多样定义格局,能够运用UUID的办法钦定,也足以平昔钦定根文件系统所在分区,如"root=/dev/sda2",

1.4.21 password和password_pbkdf2命令

password user clear-password
password_pbkdf2 user hashed-password

前面三个采取公开密码定义四个名字为user的客商。不建议选取此命令。

后任使用哈希加密后的密码定义三个名称叫user的客商,加密的密码通过"grub-mkpasswd-pbkdf2"工具生成。提出利用该命令。


1.1.6 grub2的装置地点

合法手册原来的作品:https://www.gnu.org/software/grub/manual/html_node/BIOS-installation.html#BIOS-installation

严苛地便是core.img的装置地点,因为boot.img之处是永久在MBWrangler或VB本田CR-V或EBEscort上的。

(1).MBR

MB奥迪Q3格式的分区表用于PC BIOS平台,这种格式允许多少个主分区和附加的逻辑分区。使用这种格式的分区表,有两种办法安装GURB:

  1. 松开到MB奥德赛和率先个分区中间的半空中,那有的就是公众所称的"boot track","MB福特Explorer gap"或"embedding area",它们大要要求31kB的空间;
  2. 将core.img安装到某些文件系统中,然后使用分区的首先个扇区(严峻地说不是率先个扇区,而是首先个block)存储运维它的代码。

那三种艺术有例外的难点。

接纳嵌入的不二等秘书诀安装grub,就不曾保存的空闲空间来保管安全性,例如某个极其的软件正是选择这段空间来促成许可限定的;其它分区的时候,纵然会在MBRAV4和第一个分区中间留下空闲空间,但只怕留下的上空会比那更加小。

方法二安装grub到文件系统,但与此相类似的grub是软弱的。举例,文件系统的少数特征要求做尾巴部分包装,以致一些fsck检查评定,它们恐怕会活动那个block。

GRUB开辟公司提出将GRUB嵌入到MBTucson和率先个分区之间,除非有卓绝须求,但仍必定要保管第一个分区至少是从第31kB(第六十多个扇区)之后才起来创造的。

未来的磁盘设备,平常都会有分区边界对齐的属性优化提示,所以率先个分区大概会自行从第1MB处伊始创办。

(2).GPT

后生可畏对新的种类运用GUID分区表(GPT)格式,这种格式是EFI固件所钦定的朝气蓬勃部分。但纵然操作系统辅助的话,GPT也能够用于BIOS平台(即MBWrangler风格结合GPT格式的磁盘),使用这种格式,须要接纳独立的BIOS boot分区来保存GRUB,GRUB被置于到此分区,不会有其余风险。

当在gpt磁盘上创办多少个BIOS boot分区时,须要确定保障两件事:(1)它最小是31kB大小,但貌似都会为此分区划分1MB的长空用于可增添性;(2)一定要有合理的分区类型标记(flag type)。

诸如使用gun parted工具时,能够安装为bios_grub标识:

# parted /dev/sda toggle partition_num bios_grub
# parted /dev/sda set partiton_num bios_grub on

设若应用gdisk分区工具时,则分类项目设置为"EF02"。

假定接纳任何的分区工具,大概必要钦点guid,则能够钦命其guid为"21686148-6449-6e6f-744e656564454649"。

下图是有些bios/gpt格式的bios boot分区新闻,从当中可以见到,它大小为1M,未有文件系统,分区表示为bios_grub。

图片 16

下图为gpt磁盘在图形分界面下安装操作系统时创设的Bios boot分区。

图片 17

1.4.13 echo命令

echo [-n] [-e] string

"-n"和"-e"用法同shell中echo。假诺要援用变量,使用${var}的方法。

1.1.1 grub2和grub的区别

法定手册原来的文章:https://www.gnu.org/software/grub/manual/html_node/Changes-from-GRUB-Legacy.html#Changes-from-GRUB-Legacy

只表明多少个根本的:

1.配备文件的称呼改变了。在grub中,配置文件为grub.conf或menu.lst(grub.conf的四个软链接),在grub第22中学改名叫grub.cfg。

2.grub2扩张了重重语法,更近乎于脚本语言了,比方帮衬变量、条件判别、循环。

3.grub第22中学,设备名称从1方始,而在grub中是从0开头的。

4.grub2接收img文件,不再利用grub中的stage1、stage1.5和stage2。

5.扶持图形分界面配置grub,但要安装grub-customizer包,epel源提供该包。

6.在已步向操作系统蒙受下,不再提供grub命令,约等于不可能进入grub人机联作式分界面,独有在开机时才具进来,算是一大缺憾。

7.在grub第22中学尚无了好用的find命令,算是另一大缺憾。

1.1 底工内容

1.1.5 boot loader和grub的关系

当使用grub来治本运营菜单时,那么boot loader都是grub程序安装的。

观念的grub将stage1调换后的剧情安装到MBGranTurismo(VB库罗德或EBCR-V)中的boot loader部分,将stage1_5转变后的源委安装在紧跟在MB福睿斯后的扇区中,将stage2转换后的内容安装在/boot分区中。

grub2将boot.img调换后的从头到尾的经过安装到MBENCORE(VB猎豹CS6或EBENVISION)中的boot loader部分,将diskboot.img和kernel.img结合成为core.img,同有的时候间还有也许会停放一些模块或加载模块的代码到core.img中,然后将core.img转变后的内容安装到磁盘的钦命地点处。

它们之间更现实的涉嫌见下文。

1.7.2 grub.conf配置

default=0  # 默认启动第一个系统
timeout=5  # 等待超时时间5秒
splashimage=(hd0,0)/grub/splash.xpm.gz  # 背景图片
hiddenmenu  # 隐藏菜单,若要显式,在启动时按下ESC
title Red Hat Enterprise Linux AS (2.6.18-92.el5)  # 定义操作系统的说明信息
    root (hd0,0) 
    kernel /vmlinuz-2.6.18-92.el5 ro root=/dev/sda2 rhgb quiet
    initrd /initrd-2.6.18-92.el5.img

在表明配置格局在此之前,供给说美素佳儿(Karicare卡塔尔个关键点,boot是或不是是一个独自的分区,它影响前边路线的布局。

在多个正规的操作系统中查看/boot/grub/grub.conf文件,能够在NOTICE段见到提醒,说你是或不是持有贰个独门的boot分区?借使有则意味kernel和initrd的门路是从/从前的实际不是/boot早先的,如/vmlinuz-xxx,若无独自的boot分区,则kernel和initrd的门路中要求指明boot路线,举个例子Boot没有分区而是在/文件系统下的二个目录,则/boot/vmlinuz-xxx。

root (hd0,0)定义grub识别的根。日常定义的都是boot所在的分区,grub只好鉴定分别hd,所以那边一定要动用hd,hd0表示在首先块磁盘上,hd0,0的第3个0表示boot在率先个分区上,grub2在分区的构思上是从1方始的,那是观念grub和grub2分化之处。

kernel定义内核文件的门路和运维参数,等价于grub2的linux命令或linux16发令。首先表达参数,ro代表只读,root=/dev/sda[N]或者root=UUID="device_uuid_num"钦赐根文件系统所在的分区,那是必需的参数。rhgb表示在操作系统运行进程中央银行使图形分界面输出一些音信,将其轻巧能够加速运转速度,quiet代表运转操作系统时静默输出消息。再表明路线,借使是boot是独自分区的,则kernel的路线定义情势为/vmlinuz-xxx,若无独立分区,则指明其相对路径,日常都是在根文件系统下的目录,所以经常为/boot/vmlinuz-xxx。

initrd定义init ramdisk的路线,路线的概念格局同kernel。除了路线之外未有任何参数。

图片 18

或许利用下图的UUID的章程。

图片 19

只要未有一些名root=的选项,将报错“no or empty root …… dracut…kernel panic”的失实。如下图。

图片 20

1.2.1 grub安装命令

安装格局非常简单,只需调用grub2-install,然后给定安装到的配备名就可以。

shell> grub2-install /dev/sda

那般的安装格局,默许会将img文件放入到/boot目录下,倘使想自定义放置位置,则使用--boot-directory选项钦命,可用以测量试验演习grub的时候利用,但在小心翼翼的grub意况下不提议做别的修正。

shell> grub2-install --boot-director=/mnt/boot /dev/fd0

假若是EFI固件平台,则必得挂载好efi系统一分配区,一般会挂在/boot/efi下,那是暗许的,那个时候可径直行使grub2-install安装。

shell> grub2-install

假定不是挂载在/boot/efi下,则动用--efi-directory钦点efi系统一分配区路线。

shell> grub2-install --efi-directory=/mnt/efi

grub2-install实际上是二个shell脚本,用于调用别的工具,真正的功力都是其余工具去达成的,所以要是那一个熟稔grub内部命令和编写制定,完全能够不用grub2-install。

对应古板的grub安装命令为grub-install,用法和grub2-install同样。

1.4.4 lsmod命令和insmod命令

独家用于列出已加载的模块和调用钦定的模块。

只顾,若要导入支持ext文件系统的模块时,只需导入ext2.mod就能够,实际上也未尝ext3和ext4对应的模块。

1.7.2 grub.conf配置

default=0  # 默认启动第一个系统
timeout=5  # 等待超时时间5秒
splashimage=(hd0,0)/grub/splash.xpm.gz  # 背景图片
hiddenmenu  # 隐藏菜单,若要显式,在启动时按下ESC
title Red Hat Enterprise Linux AS (2.6.18-92.el5)  # 定义操作系统的说明信息
    root (hd0,0) 
    kernel /vmlinuz-2.6.18-92.el5 ro root=/dev/sda2 rhgb quiet
    initrd /initrd-2.6.18-92.el5.img

在表明配置方式在此以前,必要证实叁个关键点,boot是不是是贰个独门的分区,它影响前面路线的布局。

在八个好端端的操作系统中查看/boot/grub/grub.conf文件,能够在NOTICE段见到提醒,说你是否有所三个单身的boot分区?假设有则代表kernel和initrd的门路是从/初始的实际不是/boot开头的,如/vmlinuz-xxx,若无单独的boot分区,则kernel和initrd的门径中供给指明boot路线,比方Boot未有分区而是在/文件系统下的贰个目录,则/boot/vmlinuz-xxx。

root (hd0,0)定义grub识别的根。平日定义的都以boot所在的分区,grub只可以识别hd,所以那边不能不采纳hd,hd0表示在首先块磁盘上,hd0,0的第一个0表示boot在率先个分区上,grub2在分区的计量上是从1最初的,那是思想grub和grub2分裂的地点。

kernel定义内核文件的路径和运转参数,等价于grub2的linux命令或linux16指令。首先表明参数,ro代表只读,root=/dev/sda[N]或者root=UUID="device_uuid_num"钦命根文件系统所在的分区,这是必须的参数。rhgb代表在操作系统运行进度中选取图形分界面输出一些音信,将其轻易能够加快运行速度,quiet代表运维操作系统时静默输出消息。再表明路线,假如是boot是独立分区的,则kernel的门路定义方式为/vmlinuz-xxx,若无独自分区,则指明其相对路线,常常都以在根文件系统下的目录,所以日常为/boot/vmlinuz-xxx。

initrd定义init ramdisk的门径,路线的概念方式同kernel。除了路线之外未有其余参数。

图片 21

依旧使用下图的UUID的情势。

图片 22

假使未有一点点名root=的选项,将报错“no or empty root …… dracut…kernel panic”的荒谬。如下图。

图片 23

 

 回到连串作品大纲:http://www.cnblogs.com/f-ck-need-u/p/7048359.html

1.1.1 grub2和grub的区别

合法手册原作:https://www.gnu.org/software/grub/manual/html_node/Changes-from-GRUB-Legacy.html#Changes-from-GRUB-Legacy

只表达多少个第黄金时代的:

1.铺排文件的名目改换了。在grub中,配置文件为grub.conf或menu.lst(grub.conf的多个软链接),在grub第22中学改名称为grub.cfg。

2.grub2扩大了数不胜数语法,更临近于脚本语言了,比方协理变量、条件剖断、循环。

3.grub第22中学,设备分区名称从1起来,而在grub中是从0伊始的。

4.grub2应用img文件,不再动用grub中的stage1、stage1.5和stage2。

5.支撑图形分界面配置grub,但要安装grub-customizer包,epel源提供该包。

6.在已跻身操作系统意况下,不再提供grub命令,相当于不可能进来grub交互作用式分界面,唯有在开机时能力跻身,算是一大可惜。

7.在grub2中从不了好用的find命令,算是另一大缺憾。

 

1.5.7 prefix变量

在grub运转的时候,grub自动将/boot/grub2索引的相对路线赋值给该变量,使得未来能够直接从该变量所代表的目录下加载各文件或模块。

举个例子说,大概自动安装为:

set prefix = (hd0,gpt1)/boot/grub2/

因而能够应用"$prefix/grubN.cfg"来援用/boot/grub2/grubN.cfg文件。

该变量不应有矫正,且若手动设置,则必得安装科学,否则一着不慎满盘皆输。

1.4.8 true和false命令

间接回到true或false布尔值。

1.3.1 通过/etc/default/grub文件生成grub.cfg

法定手册原来的作品:https://www.gnu.org/software/grub/manual/html_node/Simple-configuration.html#Simple-configuration

grub2-mkconfig是依靠/etc/default/grub文件来创设布局文件的。该公文中定义的是grub的全局宏,更改内置的宏能够高快速生成成grub配置文件。实际上在/etc/grub.d/目录下还会有黄金时代部分grub配置脚本,这几个shell脚本读取一些本子配置文件(如/etc/default/grub),依据钦点的逻辑生成grub配置文件。若风乐趣,不放读意气风发读/etc/grub.d/10_linux文件,它指引了成立grub.cfg的细节,举个例子如何调换运行菜单。

[root@xuexi ~]# ls /etc/grub.d/
00_header  00_tuned  01_users  10_linux  20_linux_xen  20_ppc_terminfo  30_os-prober  40_custom  41_custom  README

在/etc/default/grub中,使用"key=vaule"的格式,key全体为大小字母,要是vaule部分含有了空格或其余特殊字符,则必要选择引号包围。

比如,下边是一个/etc/default/grub文件的演示:

[root@xuexi ~]# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto biosdevname=0 net.ifnames=0 rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

固然如此可用的宏相当多,但只怕用的上的就几个:GRUB_DEFAULT、GRUB_TIMEOUT、GRUB_CMDLINE_LINUX和GRUB_CMDLINE_LINUX_DEFAULT。

以下列出了部分key。

(1).GRUB_DEFAULT

默许的菜单项,暗许值为0。其值可为数值N,表示从0以前思量的第N项是私下认可菜单,也能够钦定相应的title表示该项为暗中同意的菜单项。使用数值相比较好,因为运用的title大概带有了便于改造的设备名。比如宛如下菜单项:

menuentry 'Example GNU/Linux distribution' --class gnu-linux --id example-gnu-linux {
    ...
}

生龙活虎旦想将此菜单设为默认菜单,则可设置"GRUB_DEFAULT=example-gnu-linux"。

如果GRUB_DEFAULT的值设置为"saved",则意味着暗许的菜单项是"GRUB_SAVEDEFAULT"或"grub-set-default"所钦赐的菜单项。

(2).GRUB_SAVEDEFAULT

暗中认可该key的值未安装。假若该key的值设置为true时,若是选定了某菜单项,则该菜单项将被感到是新的暗中认可菜单项。该key唯有在装置了"GRUB_DEFAULT=saved"时才使得。

不提议使用该key,因为GRUB_DEFAULT配合grub-set-default更方便。

(3).GRUB_TIMEOUT

在开机选拔菜单项的过期时间,超过该时间将应用私下认可的菜单项来辅导迷津对应的操作系统。暗许值为5秒。等待进程中,按下自便开关都得以中断等待。

设置为0时,将不列出美食做法直接使用私下认可的菜单项携带与之相应的操作系统,设置为"-1"时将永世等待采用。

是否出示菜单,和"GRUB_TIMEOUT_STYLE"的装置有关。

(4).GRUB_TIMEOUT_STYLE

假定该key未设置值可能安装的值为"menu",则列出运转菜单项,并等待"GRUB_TIMEOUT"内定的晚点时间。

黄金年代经设置为"countdown"和"hidden",则不出示运行菜单项,而是直接等待"GRUB_TIMEOUT"钦命的超时时间,如若超时了则运维私下认可菜单项并引导对应的操作系统。在等候历程中,按下"ESC"键能够列出运维菜单。设置为countdown和hidden的分别是countdown会展现超时时间的剩余时间,而hidden则统统隐形超时时间。

(5).GRUB_DISTRIBUTOR

安装发行版的标志名称,平日该名称用来作为菜单的生龙活虎有个别,以便区分区别的操作系统。

(6).GRUB_CMDLINE_LINUX

增多到菜单中的内核运维参数。举个例子:

GRUB_CMDLINE_LINUX="crashkernel=ro root=/dev/sda3 biosdevname=0 net.ifnames=0 rhgb quiet"

(7).GRUB_CMDLINE_LINUX_DEFAULT

除非"GRUB_DISABLE_RECOVE奥德赛Y"设置为"true",不然该key钦赐的默许内核运行参数将生成两份,意气风发份是用来暗许运维参数,后生可畏份用于复苏形式(recovery mode)的开发银行参数。

该key生成的暗许内核运转参数将增多在"GRUB_CMDLINE_LINUX"所钦赐的启航参数之后。

(8).GRUB_DISABLE_RECOVERY

该项设置为true时,将不会调换苏醒情势的菜单项。

(9).GRUB_DISABLE_LINUX_UUID

暗中认可情况下,grub2-mkconfig在生产菜单项的时候将选拔uuid来标记Linux 内核的根文件系统,即"root=UUID=..."。

举例,下边是/boot/grub2/grub.cfg中某菜单项的一些剧情。

menuentry 'CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-327.el7.x86_64-advanced-b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8' {

        ......

        linux16 /vmlinuz-3.10.0-327.el7.x86_64 style="color: #ff0000;"> root=UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 ro crashkernel=auto biosdevname=0 net.ifnames=0 quiet LANG=en_US.UTF-8

        initrd16 /initramfs-3.10.0-327.el7.x86_64.img

}

就算选用UUID的方法更可信,但一时候不太方便,所以能够安装该key为true来禁止使用。

(10).GRUB_BACKGROUND

安装背景图片,背景图片必得是grub可读的,图片文件名后缀必须是".png"、".tga"、".jpg"、".jpeg",在急需的时候,grub会按百分比缩短图片的高低以适配显示屏尺寸。

(11).GRUB_THEME

设置grub菜单的宗旨。

(12).GRUB_GFXPAYLOAD_LINUX

安装为"text"时,将挟持行使文本情势运营Linux。在少数意况下,或者不扶助图形形式。

(13).GRUB_DISABLE_OS_PROBER

暗中同意情况下,grub2-mkconfig会尝试接纳os-prober程序(假设已经安装的话,暗许应该都装了)探测任何可用的操作系统内核,并为其生成对应的开发银行菜单项。设置为"true"将禁止使用自动探测作用。

(14).GRUB_DISABLE_SUBMENU

暗中认可意况下,grub2-mkconfig若是开掘存多个同版本的或低版本的基业时,将只为最高版本的内核生成顶尖菜单,别的全体的低版本内核菜单都放入子菜单中,设置为"y"将总体生成为超级菜单。

(15).GRUB_HIDDEN_TIMEOUT(已放弃,但为了向后卓殊,依然有效)

使用"GRUB_TIMEOUT_STYLE={countdown|hidden}"代替该项

(16).GRUB_HIDDEN_TIMEOUT_QUIET(已扬弃,但为了向后非常,仍然有效)

配合GRUB_HIDDEN_TIMEOUT使用,基本上能用GRUB_TIMEOUT_STYLE=countdown来代替这两项。

1.4.20 normal和normal_exit命令

进去和分离normal形式,normal是对峙于救援格局来讲的,只要不是在挽留方式下,正是在normal情势下。

营救模式下,只好使用非常少的指令,而normal方式下则能够使用相当的多的通令。

1.1.3 grub2教导操作系统的方式

法定手册原作:https://www.gnu.org/software/grub/manual/html_node/General-boot-methods.html#General-boot-methods

grub2援助三种方法指引操作系统:

  • 直接辅导:(direct-load)直接通过私下认可的grub2 boot loader来指点写在私下认可配置文件中的操作系统
  • 链式指引:(chain-load)使用暗许grub2 boot loader链式指点另三个boot loader,该boot loader将教导对应的操作系统

相符只利用第后生可畏种方法,唯有想引导grub暗许不扶持的操作系统时才会动用第三种艺术。

1.6 grub配置和安装示例

1.4.17 probe命令

probe [--set var] --partmap|--fs|--fs-uuid|--label device

探测分区或磁盘的品质音信。假设未钦定--set,则显得钦赐设备对应的新闻。假设钦赐了--set,则将对应音信的值赋给变量var。

--partmap:展现是gpt照旧mbr格式的磁盘。

--fs:显示分区的文件系统。

--fs-uuid:呈现分区的uuid值。

--label:显示分区的label值。

1.4.12 configfile命令

当服装载三个点名的文件作为grub的安顿文件。但只顾,导入的文本中的情况变量不在当前生效。

在grub.cfg遗失时,该命令将排上用处。

1.4.14 export命令

导出境遇变量,若在configfile的file中程导弹出意况变量,将会在时下条件也卓有效率。

1.1 功底内容

自己译作集结:http://www.cnblogs.com/f-ck-need-u/p/7048359.html

1.5 多少个周围的放置变量

1.4.9 test expression和[ expression ]

算算"expression"的结果是还是不是为真,为真时再次回到0,否则重临非0,首要用来if、while或until结构中。

string1 == string2

string1与string2相同

string1 != string2

string1与string2不相同

string1 < string2

string1在字母顺序上小于string2

string1 <= string2

string1在字母顺序上小于等于string2

string1 > string2

string1在字母顺序上大于string2

string1 >= string2

string1在字母顺序上大于等于string2

integer1 -eq integer2

integer1等于integer2

integer1 -ge integer2

integer1大于或等于integer2

integer1 -gt integer2

integer1大于integer2

integer1 -le integer2

integer1小于或等于integer2

integer1 -lt integer2

integer1小于integer2

integer1 -ne integer2

integer1不等于integer2

prefixinteger1 -pgt prefixinteger2

剔除非数字字符串prefix部分之后,integer1大于integer2

prefixinteger1 -plt prefixinteger2

剔除非数字字符串prefix部分之后,integer1小于integer2

file1 -nt file2

file1的修改时间比file2新

file1 -ot file2

file1的修改时间比file2旧

-d file

file存在且是目录

-e file

file存在

-f file

file存在并且不是一个目录

-s file

file存在并且文件占用空间大于零

-n string

string的长度大于零

string   

string的长度大于零,等价于-n string

-z string

string的长度等于零

( expression )

将expression作为一个整体

! expression  

非(NOT)

expression1 -a expression2

与(AND),也可以使用expression1 expression2,但不推荐

expression1 -o expression2

或(OR)

1.4.6 initrd和initrd16命令

initrd file

唯其如此紧跟在linux或linux16下令之后选择,用于为将要开发银行的水源传递init ramdisk路线。

同样,基于根分区,可以利用相对路线,也得以利用相对路径。路线的代表方法和linux或linux16指令相仿。比如:

linux16 /vmlinuz-0-rescue-d13bce5e247540a5b5886f2bf8aabb35 root=UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 ro crashkernel=auto quiet

initrd16 /initramfs-0-rescue-d13bce5e247540a5b5886f2bf8aabb35.img

1.4.6 initrd和initrd16命令

initrd file

只得紧跟在linux或linux16命令之后选取,用于为将在运维的基本传递init ramdisk路线。

同样,基于根分区,能够行使相对路线,也能够行使相对路线。路线的象征方法和linux或linux16指令相似。比如:

linux16 /vmlinuz-0-rescue-d13bce5e247540a5b5886f2bf8aabb35 root=UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 ro crashkernel=auto quiet

initrd16 /initramfs-0-rescue-d13bce5e247540a5b5886f2bf8aabb35.img

1.2.2 各类img和stage文件的验证

法定手册原版的书文:https://www.gnu.org/software/grub/manual/html_node/Images.html#Images

img文件是grub2生成的,stage文件是人生观grub生成的。下边是各类文件的评释。

1.2.2.1 grub2中的img文件

grub2生成了少数个img文件,有些分布在/usr/lib/grub/i386-pc目录下,有个别遍布在/boot/grub2/i386-pc目录下,它们中间的涉嫌,相信看了下文之后就能够精晓了。

图片 24

图片 25

下图描述了豆蔻年华生机勃勃img文件之间的关联。个中core.img是动态变化的,路线为/boot/grub2/i386-pc/core.img,而其它的img则设有于/usr/lib/grub/i386-pc目录下。当然,在安装grub时,boot.img会被拷贝到/boot/grub2/i386-pc目录下。

图片 26

(1)boot.img

在BIOS平台下,boot.img是grub运行的首先个img文件,它被写入到MB景逸SUV中或分区的boot sector中,因为boot sector的分寸是512字节,所以该img文件的尺寸也是512字节。

boot.img唯生龙活虎的效用是读取归属core.img的第一个扇区并跳转到它身上,将调控权交给该扇区的img。由于容积大小的界定,boot.img不只怕知晓文件系统的构造,由此grub2-install将会把core.img的岗位硬编码到boot.img中,那样就势必能找到core.img的职责。

(2)core.img

core.img遵照diskboot.img、kernel.img和一文山会海的模块被grub2-mkimage程序动态创造。core.img中寄放了丰硕多的功能模块以管教grub能访问/boot/grub,何况能够加载相关的模块达成相关的效率,举例加载运维菜单、加载目的操作系统的新闻等,由于grub2雄伟壮观施用了动态成效模块,使得core.img体量变得丰富小。

core.img中蕴涵了多个img文件的剧情,包含diskboot.img/kernel.img等。

core.img的装置地方随MB揽胜极光磁盘和GPT磁盘而各异,那在上文中已经表达过了。

(3)diskboot.img

万生龙活虎开行设备是硬盘,即从硬盘运行时,core.img中的第3个扇区的内容正是diskboot.img。diskboo.img的效果是读取core.img中多余的有个别到内部存款和储蓄器中,并将调整权交给kernel.img,由于那时候还不识别文件系统,所以将core.img的方方面面职分以block列表的章程编码,使得diskboot.img能够找到剩余的源委。

该img文件因为占用二个扇区,所以体积为512字节。

(4)cdboot.img

要是开发银行设备是光驱(cd-rom),即从光驱运行时,core.img中的第三个扇区的的从头到尾的经过正是cdboo.img。它的功力和diskboot.img是相通的。

(5)pexboot.img

若果是从网络的PXE情况运行,core.img中的第4个扇区的颠末就是pxeboot.img。

(6)kernel.img

kernel.img文件包涵了grub的主导运作时碰着:设备框架、文件句柄、情形变量、救援情势下的下令行深入分析器等等。比非常少直接运用它,因为它们曾经整整嵌入到了core.img中了。注意,kernel.img是grub的kernel,和操作系统的木本毫不相关。

生机勃勃旦仔细的话,会开掘kernel.img本身就占用28KB空间,但放手到了core.img中后,core.img文件才唯有26KB大小。那是因为core.img中的kernel.img是被压缩过的。

(7)lnxboot.img

该img文件放在core.img的最前部位,使得grub疑似linux的根本同样,那样core.img就足以被LILO的"image="识别。当然,那是相称LILO来使用的,但未来何人还适用LILO呢?

(8)*.mod

各样作用模块,部分模块已经嵌入到core.img中,或许会被grub自动加载,但临时也亟需动用insmod命令手动加载。


1.4.3 set和unset命令

set [envvar=value]
unset envvar

前面一个设置条件变量envvar的值,假设不给定参数,则列出当前意况变量。

膝下释放景况变量envvar。

1.7 传统grub简述

1.4.11 clear命令

清屏。

1.4.13 echo命令

echo [-n] [-e] string

"-n"和"-e"用法同shell中echo。假使要援引变量,使用${var}的秘籍。

1.1.5 boot loader和grub的关系

当使用grub来保管运营菜单时,那么boot loader都以grub程序安装的。

思想的grub将stage1调换后的原委安装到MBQashqai(VB卡宴或EB昂科威)中的boot loader部分,将stage1_5转变后的内容安装在紧跟在MB奇骏后的扇区中,将stage2转变后的剧情安装在/boot分区中。

grub2将boot.img转变后的内容安装到MB凯雷德(VBLacrosse或EBLX570)中的boot loader部分,将diskboot.img和kernel.img结合成为core.img,同一时候还恐怕会放到一些模块或加载模块的代码到core.img中,然后将core.img调换后的剧情安装到磁盘的钦点地方处。

它们之间更具象的涉嫌见下文。

1.4.15 halt和reboot命令

关机或重启

1.1.7 进入grub命令行

在金钱观的grub上,能够一向在bash下敲入grub命令步向命令人机联作形式,但grub2只好在系统运行前行入grub人机联作命令行。

按下e见能够编写所选菜单对应的grub菜单配置项,按下c键能够进去grub命令行人机联作情势。

图片 27

图片 28

1.1.4 grub2程序和历史观grub程序安装后的公文布满

在思想grub软件安装完后,在/usr/share/grub/RELEASE/目录下会变动一些stage文件。

[root@xuexi ~]# ls /usr/share/grub/x86_64-redhat/
e2fs_stage1_5      ffs_stage1_5       jfs_stage1_5       reiserfs_stage1_5  stage2             ufs2_stage1_5      xfs_stage1_5
fat_stage1_5       iso9660_stage1_5   minix_stage1_5     stage1             stage2_eltorito    vstafs_stage1_5

在grub2软件设置完后,会在/usr/lib/grub/i386-pc/目录下生成超级多模块文件和img文件,还满含一些lst列表文件。

[root@server7 ~]# ls /usr/lib/grub/i386-pc/*.mod | wc -l
257

[root@server7 ~]# ls -lh /usr/lib/grub/i386-pc/*.lst   
-rw-r--r--. 1 root root 3.7K Nov 24  2015 /usr/lib/grub/i386-pc/command.lst
-rw-r--r--. 1 root root  936 Nov 24  2015 /usr/lib/grub/i386-pc/crypto.lst
-rw-r--r--. 1 root root  214 Nov 24  2015 /usr/lib/grub/i386-pc/fs.lst
-rw-r--r--. 1 root root 5.1K Nov 24  2015 /usr/lib/grub/i386-pc/moddep.lst
-rw-r--r--. 1 root root  111 Nov 24  2015 /usr/lib/grub/i386-pc/partmap.lst
-rw-r--r--. 1 root root   17 Nov 24  2015 /usr/lib/grub/i386-pc/parttool.lst
-rw-r--r--. 1 root root  202 Nov 24  2015 /usr/lib/grub/i386-pc/terminal.lst
-rw-r--r--. 1 root root   33 Nov 24  2015 /usr/lib/grub/i386-pc/video.lst

[root@server7 ~]# ls -lh /usr/lib/grub/i386-pc/*.img
-rw-r--r--. 1 root root  512 Nov 24  2015 /usr/lib/grub/i386-pc/boot_hybrid.img
-rw-r--r--. 1 root root  512 Nov 24  2015 /usr/lib/grub/i386-pc/boot.img
-rw-r--r--. 1 root root 2.0K Nov 24  2015 /usr/lib/grub/i386-pc/cdboot.img
-rw-r--r--. 1 root root  512 Nov 24  2015 /usr/lib/grub/i386-pc/diskboot.img
-rw-r--r--. 1 root root  28K Nov 24  2015 /usr/lib/grub/i386-pc/kernel.img
-rw-r--r--. 1 root root 1.0K Nov 24  2015 /usr/lib/grub/i386-pc/lnxboot.img
-rw-r--r--. 1 root root 2.9K Nov 24  2015 /usr/lib/grub/i386-pc/lzma_decompress.img
-rw-r--r--. 1 root root 1.0K Nov 24  2015 /usr/lib/grub/i386-pc/pxeboot.img

1.7 传统grub简述

因为本文重要介绍grub2,所以守旧的grub只简要介绍下,其实前边早就说到了重重金钱观grub和grub2的相比了。别的,古板grub已丰裕刚劲,丰硕应付经常的供给。

1.7 传统grub简述

因为本文首要介绍grub2,所以守旧的grub只简简单单介绍下,其实前边早就聊到了广大金钱观grub和grub2的比较了。别的,古板grub已丰裕刚劲,充足应付平时的供给。

1.1.4 grub2程序和金钱观grub程序安装后的文本分布

在价值观grub软件设置完后,在/usr/share/grub/RELEASE/目录下会变卦一些stage文件。

[root@xuexi ~]# ls /usr/share/grub/x86_64-redhat/
e2fs_stage1_5      ffs_stage1_5       jfs_stage1_5       reiserfs_stage1_5  stage2             ufs2_stage1_5      xfs_stage1_5
fat_stage1_5       iso9660_stage1_5   minix_stage1_5     stage1             stage2_eltorito    vstafs_stage1_5

在grub2软件设置完后,会在/usr/lib/grub/i386-pc/目录下生成相当多模块文件和img文件,还包蕴一些lst列表文件。

[root@server7 ~]# ls /usr/lib/grub/i386-pc/*.mod | wc -l
257

[root@server7 ~]# ls -lh /usr/lib/grub/i386-pc/*.lst   
-rw-r--r--. 1 root root 3.7K Nov 24  2015 /usr/lib/grub/i386-pc/command.lst
-rw-r--r--. 1 root root  936 Nov 24  2015 /usr/lib/grub/i386-pc/crypto.lst
-rw-r--r--. 1 root root  214 Nov 24  2015 /usr/lib/grub/i386-pc/fs.lst
-rw-r--r--. 1 root root 5.1K Nov 24  2015 /usr/lib/grub/i386-pc/moddep.lst
-rw-r--r--. 1 root root  111 Nov 24  2015 /usr/lib/grub/i386-pc/partmap.lst
-rw-r--r--. 1 root root   17 Nov 24  2015 /usr/lib/grub/i386-pc/parttool.lst
-rw-r--r--. 1 root root  202 Nov 24  2015 /usr/lib/grub/i386-pc/terminal.lst
-rw-r--r--. 1 root root   33 Nov 24  2015 /usr/lib/grub/i386-pc/video.lst

[root@server7 ~]# ls -lh /usr/lib/grub/i386-pc/*.img
-rw-r--r--. 1 root root  512 Nov 24  2015 /usr/lib/grub/i386-pc/boot_hybrid.img
-rw-r--r--. 1 root root  512 Nov 24  2015 /usr/lib/grub/i386-pc/boot.img
-rw-r--r--. 1 root root 2.0K Nov 24  2015 /usr/lib/grub/i386-pc/cdboot.img
-rw-r--r--. 1 root root  512 Nov 24  2015 /usr/lib/grub/i386-pc/diskboot.img
-rw-r--r--. 1 root root  28K Nov 24  2015 /usr/lib/grub/i386-pc/kernel.img
-rw-r--r--. 1 root root 1.0K Nov 24  2015 /usr/lib/grub/i386-pc/lnxboot.img
-rw-r--r--. 1 root root 2.9K Nov 24  2015 /usr/lib/grub/i386-pc/lzma_decompress.img
-rw-r--r--. 1 root root 1.0K Nov 24  2015 /usr/lib/grub/i386-pc/pxeboot.img

翻译了grub2法定手册的多方面剧情,然后自个儿收拾了眨眼之间间。因为内容有一点点杂,所以章节布置上恐怕不是太合理,敬请谅解。

1.5.6 grub_platform变量

钦命该平台是"pc"依旧"efi",pc表示的就是古板的bios平台。

该变量不应有被纠正,而应该被引用,举例用于if剖断语句中。

1.4.9 test expression和[ expression ]

总结"expression"的结果是不是为真,为真时再次来到0,否则重回非0,主要用于if、while或until结构中。

string1 == string2

string1与string2相同

string1 != string2

string1与string2不相同

string1 < string2

string1在字母顺序上小于string2

string1 <= string2

string1在字母顺序上小于等于string2

string1 > string2

string1在字母顺序上大于string2

string1 >= string2

string1在字母顺序上大于等于string2

integer1 -eq integer2

integer1等于integer2

integer1 -ge integer2

integer1大于或等于integer2

integer1 -gt integer2

integer1大于integer2

integer1 -le integer2

integer1小于或等于integer2

integer1 -lt integer2

integer1小于integer2

integer1 -ne integer2

integer1不等于integer2

prefixinteger1 -pgt prefixinteger2

剔除非数字字符串prefix部分之后,integer1大于integer2

prefixinteger1 -plt prefixinteger2

剔除非数字字符串prefix部分之后,integer1小于integer2

file1 -nt file2

file1的修改时间比file2新

file1 -ot file2

file1的修改时间比file2旧

-d file

file存在且是目录

-e file

file存在

-f file

file存在并且不是一个目录

-s file

file存在并且文件占用空间大于零

-n string

string的长度大于零

string   

string的长度大于零,等价于-n string

-z string

string的长度等于零

( expression )

将expression作为一个整体

! expression  

非(NOT)

expression1 -a expression2

与(AND),也可以使用expression1 expression2,但不推荐

expression1 -o expression2

或(OR)

1.4.1 help命令

help [pattern]

显示能相配到pattern的装有命令的验证消息和usage消息,假若不内定patttern,将展现全部命令的简要消息。

例如"help cmos"。

图片 29

1.5.7 prefix变量

在grub运营的时候,grub自动将/boot/grub2索引的相对路线赋值给该变量,使得今后可以直接从该变量所代表的目录下加载各文件或模块。

例如说,大概自行安装为:

set prefix = (hd0,gpt1)/boot/grub2/

为此能够利用"$prefix/grubN.cfg"来引用/boot/grub2/grubN.cfg文件。

该变量不本校勘,且若手动设置,则必得安装科学,否则一着不慎满盘皆输。

本文首要介绍的是grub2,在文末对守旧grub进行了简述,但在grub2的从头到尾的经过部分中包蕴了不胜枚举grub2和历史观grub的比较。

1.4.18 save_env和list_env命令

将景况变量保存四情状变量块中,以至列出当前的景况变量块中的变量。

图片 30

图片 31

1.2.3 安装grub涉及的进程

安装grub2的长河差非常少分两步:一是依据/usr/lib/grub/i386-pc/目录下的文件生成core.img,并拷贝boot.img和core.img涉及的一点模块文件到/boot/grub2/i386-pc/目录下;二是依据/boot/grub2/i386-pc目录下的公文向磁盘上写boot loader。

当然,到底是先拷贝,依旧先写boot loader,没必要去搞通晓,只要/boot/grub2/i386-pc下的img文件一定能由此grub2相关程序再一次生成boot loader。所以,不只能以为/boot/grub2/i386-pc目录下的img文件是boot loader的超过常规规备份文件,也能够以为是boot loader的源文件。

不过,img文件和boot loader的原委是不均等的,因为img文件还要通过grub2相关程序来转换才是确实的boot loader。

对于人生观的grub来讲,拷贝的不是img文件,而是stage文件。

以下是安装古板grub时,grub做的办事。非常不幸,grub2上从不应当命令,也未有与之等价的命令。

grub> setup (hd0)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/e2fs_stage1_5" exists... yes
 Running "embed /boot/grub/e2fs_stage1_5 (hd0)"...  15 sectors are embedded.
succeeded
 Running "install /boot/grub/stage1 (hd0) (hd0)1 15 p (hd0,0)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done.

第生龙活虎检查实验各stage文件是不是存在于/boot/grub目录下,随后嵌入stage1_5到磁盘上,该文件系统类型的stage1_5占领了拾几个扇区,最终安装stage1,并告诉stage1 stage1_5的职位是第1到第十四个扇区,之所以先嵌入stage1_5再松手stage1就是为了让stage1知道stage1_5的岗位,末了还告诉了stage1 stage2和布局文件menu.lst的门路。

1.4.10 cat命令

读取文件内容,借此能够帮忙剖断哪些是boot分区,哪个是根分区。

交互作用式命令行下使用。

1.5.4 timeout变量

安装菜单等待超时时间,设置为0时将一贯开发银行暗中同意菜单项而不出示菜单,设置为"-1"时将恒久等待手动选项。

1.4.14 export命令

导出情状变量,若在configfile的file中程导弹出情形变量,将会在当前情况也立见成效。

1.4.18 save_env和list_env命令

将景况变量保存到情状变量块中,以致列出当前的情状变量块中的变量。

图片 32

图片 33

1.2.3 安装grub涉及的历程

安装grub2的经过大致分两步:一是依赖/usr/lib/grub/i386-pc/目录下的文本生成core.img,并拷贝boot.img和core.img涉及的有些模块文件到/boot/grub2/i386-pc/目录下;二是凭仗/boot/grub2/i386-pc目录下的文书向磁盘上写boot loader。

本来,到底是先拷贝,依然先写boot loader,没要求去搞理解,只要/boot/grub2/i386-pc下的img文件一定能经过grub2相关程序再次生成boot loader。所以,不仅可以够认为/boot/grub2/i386-pc目录下的img文件是boot loader的异样备份文件,也得以认为是boot loader的源文件。

然而,img文件和boot loader的内容是不相通的,因为img文件还要通过grub2相关程序来调换才是真的的boot loader。

对于价值观的grub来说,拷贝的不是img文件,而是stage文件。

以下是安装守旧grub时,grub做的做事。非常不幸,grub2上尚未该命令,也不曾与之等价的一声令下。

grub> setup (hd0)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/e2fs_stage1_5" exists... yes
 Running "embed /boot/grub/e2fs_stage1_5 (hd0)"...  15 sectors are embedded.
succeeded
 Running "install /boot/grub/stage1 (hd0) (hd0)1 15 p (hd0,0)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done.

首先检查评定各stage文件是不是存在于/boot/grub目录下,随后嵌入stage1_5到磁盘上,该文件系统类型的stage1_5占用了十五个扇区,最终安装stage1,并告知stage1 stage1_5的岗位是第1到第拾六个扇区,之所以先嵌入stage1_5再停放stage1就是为了让stage1知道stage1_5的职位,最终还告诉了stage1 stage2和布置文件menu.lst的路线。

1.4.19 loopback命令

loopback [-d] device file

将file映射为回环设备。使用-d选项则是去除映射。

例如:

loopback loop0 /path/to/image
ls (loop0)/

1.4.19 loopback命令

loopback [-d] device file

将file映射为回环设备。使用-d选项则是删除映射。

例如:

loopback loop0 /path/to/image
ls (loop0)/

翻译了grub2官方手册的大举剧情,然后本人整理了须臾间。因为内容有一点点杂,所以章节配备上或然不是太合理,敬请谅解。

1.5.2 cmdpath变量

grub2加载的core.img的目录路线,是相对路线,即满含了配备名的路径,如(hd0,gpt1)/boot/grub2/。该变量值不应有修正。

1.4.15 halt和reboot命令

关机或重启

1.4 命令行和菜单项中的命令

1.5 几个常设置的放松权利变量

1.6 grub配置和安装示例

第生龙活虎写贰个grub.cfg。举例此处,在msdos磁盘上设置了八个操作系统,CentOS 7和CentOS 6。

# 设置一些全局环境变量
set default=0
set fallback=1
set timeout=3

# 将可能使用到的模块一次性装载完
# 支持msdos的模块
insmod part_msdos
# 支持各种文件系统的模块
insmod exfat
insmod ext2
insmod xfs
insmod fat
insmod iso9660

# 定义菜单
menuentry 'CentOS 7' --unrestricted {
        search --no-floppy --fs-uuid --set=root 367d6a77-033b-4037-bbcb-416705ead095
        linux16 /vmlinuz-3.10.0-327.el7.x86_64 root=UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 ro biosdevname=0 net.ifnames=0 quiet
        initrd16 /initramfs-3.10.0-327.el7.x86_64.img
}
menuentry 'CentOS 6' --unrestricted {
        search --no-floppy --fs-uuid --set=root f5d8939c-4a04-4f47-a1bc-1b8cbabc4d32
        linux16 /vmlinuz-2.6.32-504.el6.x86_64 root=UUID=edb1bf15-9590-4195-aa11-6dac45c7f6f3 ro quiet
        initrd16 /initramfs-2.6.32-504.el6.x86_64.img
}

下一场试行grub安装操作。

shell> grub2-install /dev/sda

1.5.1 chosen变量

当开机时相中有个别菜单项运营时,该菜单的title将被赋值给chosen变量。该变量经常只用于引用,而不用于改正。

1.7.1 grub安装

比方设置到/dev/sda上。

shell> grub-install /dev/sda

1.4.10 cat命令

读取文件内容,借此能够扶持推断哪些是boot分区,哪个是根分区。

交互作用式命令行下使用。

1.4.5 linux和linux16命令

linux file [kernel_args]
linux16 file [kernel_args]

都表示装载钦定的基本文件,并传递内核运维参数。linux16表示以古板的拾肆位运维商业事务运营水源,linux表示以叁九位运维商业事务运维水源,但linux命令比linux16有点范围。但大好多时候,它们是能够通用的。

在linux或linux16限令之后,必需紧跟着使用init或init16下令装载init ramdisk文件。

貌似为/boot分区下的vmlinuz-RELEASE_NUM文件。

图片 34

但在grub情形下,boot分区被当做root分区,即根分区,即使boot分区为率先块磁盘的首先个分区,则应当写成:

linux (hd0,msdos1)/vmlinuz-XXX

抑或相对路线的:

set root='hd0,msdos1'

linux /vmlinuz-XXX

在grub阶段可以传递内核的起步参数(内核的参数富含3类:编写翻译内核时参数,运行时参数和平运动作时参数),能够传递的启航参数极其超多,完整的开发银行参数列表见:http://redsymbol.net/linux-kernel-boot-parameters。这里只列出几个常用的:

init=   :指定Linux启动的第一个进程init的替代程序。
root=   :指定根文件系统所在分区,在grub中,该选项必须给定。
ro,rw   :启动时,根分区以只读还是可读写方式挂载。不指定时默认为ro。
initrd  :指定init ramdisk的路径。在grub中因为使用了initrd或initrd16命令,所以不需要指定该启动参数。
rhgb    :以图形界面方式启动系统。
quiet   :以文本方式启动系统,且禁止输出大多数的log message。
net.ifnames=0:用于CentOS 7,禁止网络设备使用一致性命名方式。
biosdevname=0:用于CentOS 7,也是禁止网络设备采用一致性命名方式。
             :只有net.ifnames和biosdevname同时设置为0时,才能完全禁止一致性命名,得到eth0-N的设备名。

例如:

linux16 /vmlinuz-3.10.0-327.el7.x86_64 root=UUID=edb1bf15-9590-4195-aa11-6dac45c7f6f3 ro rhgb quiet LANG=en_US.UTF-8

除此以外,root运营参数有各个定义格局,能够运用UUID的章程指定,也得以一直钦命根文件系统所在分区,如"root=/dev/sda2",

1.3.2 脚本办法一贯编写grub.cfg文件

法定手册原来的小说:https://www.gnu.org/software/grub/manual/html_node/Shell_002dlike-scripting.html#Shell_002dlike-scripting

  • 注释符:从#千帆竞发的字符都被感到是注释,所以grub帮衬行中注释
  • 三番五次操作符:{ } | & $ ; < >
  • 封存首要字和标识:! [[ ]] { } case do done elif else esac fi for function if in menuentry select then time until while。并不是全部的主要字都有用,只是为着以后的效果扩充而提早提供的。
  • 引号和转义符

对于极其规的字符必要转义。有二种格局转义:使用反斜线、使用单引号、使用双引号。

反斜线转义格局和shell同样。

单引号中的全体字符串都以字面意思,没有其余格外含义,纵然单引号中的转义符也被以为是纯粹的字符。所以'''是不能够保留单引号的。单引号必要动用双引号来调换,所以理应写"'"。

双引号和单引号功能雷同,但它不可能转义某多少个特殊字符,包蕴"$"和""。对于双引号中的"$"符号,它任曾几何时候都保留本意。对于"",独有反斜线后的字符是'$'、'"'、''时才表示转义的意趣,其余,某行若以反斜线结尾,则代表续行,但法定不提出在grub.cfg中选取续行符。

  • 变量扩充

运用$符号援引变量,也足以行使${var}的诀窍援引var变量。

支持地方变量,举例$1引用的是首先个参数。

还援救非常的变量,如$?表示上一回命令的退出状态码。若是应用了职责变量,则还扶持$*、$@和$#,$@代表的拥有参数全体,各参数之间是不可分割的,$@也意味着享有变量,但$@的各参数是能够被分开的,$#代表参数的个数。

  • 归纳的一声令下

能够在grub.cfg中接纳简易的指令。各命令之间利用换行符或事务厅表示该命令甘休。

如若在命令前使用了"!",则意味着逻辑取反。

  • 循环结构:for name in word …; do list; done
  • 巡回结构:while cond; do list; done
  • 巡回结构:until cond; do list; done
  • 条件剖断结构:if list; then list; [elif list; then list;] … [else list;] fi
  • 函数结构:function name { command; … }
  • 菜单项命令:menuentry title [--class=class …] [--users=users] [--unrestricted] [--hotkey=key] [--id=id] { command; … }

那是grub.cfg中最重视的项,官方原来的文章:

该命令定义了五个名叫title的grub菜单项。当开机时相中该菜单项时,grub会将chosen景况变量的值赋给"--id"(假若给定了"--id"的话),实施大括号中的命令列表,假设直到最终二个指令都整体实践成功,且成功加载了对应的内核后,将奉行boot命令。随后grub就将调节权交给了操作系统内核。

--class:该选项用于将菜单分组,进而使得grub能够因此主旨样式为分化组的美食做法展现分裂的样式风格。贰个menuentry中,能够利用频仍class表示将该菜单分到多少个组中去。

--users:该选项节制独有这里列出的客商才干访问该菜单项,不内定该选取时将象征具有用户都能访谈该菜单。

--unrestricted:该选项表示全体客商都有权访问该菜单项。

--hotkey:该选拔为该菜单项关联三个热键,也正是火速键,关联热键后只要按下该键就能入选该菜单。热键只可以是字母键、backspace键、tab键或del键。

--id:该选拔为该菜单关联一个唯风流浪漫的数值。id的值能够由ASCII字母、数字//下划线组成,且不得以数字初始。

负有别的的参数蕴含title都被当做地方参数字传送递给大括号中的命令,但title总是$1,除title外的别样参数,地方值早先向后类推。

  • break [n]:强制退出for/while/until循环
  • continue [n]:跳到下贰次迭代,即步入下贰次巡回
  • return [n]:钦点再次来到状态码
  • setparams [arg] …:从$1开首轮番个地点置参数
  • shift [n]:踢掉前n个参数,使得第n 1个参数变为$1,但和shell中不雷同的是,踢掉了前n个参数后,从$#-n 1到$#那一个参数的岗位不改变

实际如何编写grub.cfg文件,继续看下文的命令和变量。

1.4.11 clear命令

清屏。

1.4.3 set和unset命令

set [envvar=value]
unset envvar

前面一个设置条件变量envvar的值,假设不给定参数,则列出当前碰到变量。

后人释放蒙受变量envvar。

1.5 多少个常设置的内置变量

1.4 命令行和菜单项中的命令

合法手册原著:https://www.gnu.org/software/grub/manual/html_node/Commands.html#Commands

grub2辅助广大指令,某个命令只好在交互作用式命令行下使用,某些命令可用在配置文件中。在拯救格局下,唯有insmod、ls、set和unset命令可用。

没有必要精晓全数的命令,通晓用的上的多少个指令就可以。

1.1.3 grub2辅导操作系统的主意

合法手册原作:https://www.gnu.org/software/grub/manual/html_node/General-boot-methods.html#General-boot-methods

grub2支持三种格局指引操作系统:

  • 直接指引:(direct-load)直接通过暗许的grub2 boot loader来辅导写在私下认可配置文件中的操作系统
  • 链式引导:(chain-load)使用暗许grub2 boot loader链式指引另二个boot loader,该boot loader将辅导对应的操作系统

相仿只利用第生机勃勃种办法,唯有想引导grub暗许不扶植的操作系统时才会利用第三种方法。

1.2 安装grub2

合法手册原版的书文:https://www.gnu.org/software/grub/manual/html_node/Installing-GRUB-using-grub_002dinstall.html#Installing-GRUB-using-grub_002dinstall

这边的设置指的不是安装grub程序,而是安装Xoot loader,但日常都称之为安装grub,且后文都以那么些意思。

自家译作集结:http://www.cnblogs.com/f-ck-need-u/p/7048359.html

1.5.1 chosen变量

当开机时相中有个别菜单项运营时,该菜单的title将被赋值给chosen变量。该变量日常只用于援用,而不用于改良。

1.5.8 root变量

该变量钦点根设备的名号,使得后续使用从"/"开头的相对路径引用文件时将从该root变量钦点的路子始于。常常该变量是grub运转的时候由grub依照prefix变量设置而来的。

比方prefix=(hd0,gpt1)/boot/grub2,则root=(hd0,gpt1),后续就足以采用相对路线/vmlinuz-XXX表示(hd0,gpt1)/vmlinuz-XXX文件。

只顾:在Linux中,从根"/"初叶的路线表示绝对路线,如/etc/fstab。但grub中,从"/"先导的代表相对路线,其绝没错规范化是root变量设置的值,而接纳"(dev_name)/"开端的路子才表示相对路线。

肖似root变量都意味/boot所在的分区,但那不是纯属的,假如设置为根文件系统所在分区,如root=(hd0,gpt2),则继续能够利用/etc/fstab来引用"(hd0,gpt2)/etc/fstab"文件。

该变量在grub第22中学日常不要改革,但若更改则必得钦赐精确。

除此以外,root变量还相应于linux或linux16下令所钦赐的基石运维参数"root="区分开来,内核运营参数中的"root="的意思是定位的,其内定的是根文件系统所在分区。比如:

set root='hd0,msdos1'

linux16 /vmlinuz-3.10.0-327.el7.x86_64 style="color: #ff0000;">root=UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 ro crashkernel=auto quiet LANG=en_US.UTF-8

initrd16 /initramfs-3.10.0-327.el7.x86_64.img

雷同情状下,/boot都会单独分区,所以root变量钦点的根设备和root运维参数所内定的根分区不是同二个分区,除非/boot不是单独的分区,而是在根分区下的贰个索引。

1.5.4 timeout变量

设置菜单等待超时时间,设置为0时将一向开发银行暗中同意菜单项而不出示菜单,设置为"-1"时将永世等待手动选拔。

本文由时时app平台注册网站发布于时时app平台注册网站,转载请注明出处:grub2详解(翻译和整理官方手册)

关键词: