翻译了grub2合法手册的多方面内容,然后自身收十了弹指间。因为内容有点杂,所以章节布局上大概不是太合理,敬请谅解。

翻译了grub2合法手册的三头剧情,然后本人收拾了须臾间。因为内容有点杂,所以章节计划上大概不是太合理,敬请谅解。

grub贰详解(翻译和整治官方手册),grub2详解

翻译了grub二官方手册的多方内容,然后自身收十了须臾间。因为内容有点杂,所以章节布局上恐怕不是太合理,敬请谅解。


本文目录:

一.一 基础内容

1.2 安装grub2

壹.三 grub贰配置文件

一.四 命令行和菜单项中的命令

一.伍 多少个科学普及的停放变量

1.陆 grub配置和安装示例

1.7 传统grub简述


 

正文主要介绍的是grub二,在文末对价值观grub实行了简述,但在grub二的始末部分中富含了好多grub2和历史观grub的对照。

假如①味是想通晓grub2中的boot.img/core.img/diskboot.img/kernel.img只怕守旧grub中stage1/stage一_5/stage二文件的功用,请直接跳至相关内容处阅读。

grub学习笔记
一 首先要了然的多少个概念 

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

小编译作集合:http://www.cnblogs.com/f-ck-need-u/p/7048359.html

壹.1 基础内容

一.一 运行管制器 
运行管理器是储存在磁盘初阶扇区中的壹段程序,例如,硬盘的MBPAJERO(Master Boot
Record),在系统形成运维测试后,假若系统是从MB猎豹CS六运转,则BIOS(Basic
Input/Output
System)将控制传送给MB奥迪Q5。然后存款和储蓄在MB凯雷德中的那段程序将运营。那段程序被称为运营管理器。它的任务就是将控制传送给操作系统,完毕运维进程》有过多可用的开发银行政管理理器,包罗GNU
GRUB (Grand Unified Boot Loader),Bootmanager, LILO (LInux LOader), NTLD奇骏(boot loader for Windows NT systems),等等等. 
1.2 什么是GRUB? 
grub 是3个多重运转管理器。grub是GRand Unified
Bootloader的缩写,它能够在多少个操作系统共存时选拔引导哪个系统。它能够指引的操作系统包涵: 
Linux,FreeBSD,Solaris,NetBSD,BeOSi,OS/二,Windows95/98,Windows
NT,Windows2000,WinXP。它能够载入操作系统的基本和初阶化操作系统(如Linux,FreeBSD),或然把指导权交给操作系统(如Windows
玖8)来形成引导。 
1.3 GRUB的特点 
专程适用于linux与其余操作系统共存情形。 
支撑大硬盘未来半数以上Linux发行版本的lilo都有同等的3个难点:根分区(/boot分区)不可能分在超越10二肆柱面包车型客车地点,壹般是在八.四G左右的地点,不然lilo无法设置,大概安装后不能够正确引导系统。而grub就不会现出那种状态,只要安装时你的大硬盘是在LBA情势下,grub就足以引导根分区在8G以外的操作系统。 
支撑开机画面  
grub帮衬在携带开机的还要显示八个开机画面。对于玩家来说,那样能够制作自个儿的本性化开机画面;对于PC厂商,这样能够在开机时显示电脑的有的音信和厂商的注明等。grub帮忙640×480,800×600,十二肆x76八各个形式的开机画面,而且能够自动侦测采取最好格局,与Windows那320×400的开机画面不可同日而语。
两种实施格局grub不但能够因而安顿文件实行例行的指点,还足以在挑选教导前动态改变引导时的参数,还是能够动态加载种种装备。例如你在Linux下编写翻译了1个新的大旨,但不可能鲜明它能或无法工作,你就足以在指点时动态改变grub的参数,尝试装载那么些新的主旨实行利用。Grub的指令行有格外强劲的坚守,而且辅助如bash或doskey壹样的野史意义,你可以用上下键来探寻在此以前的吩咐。 
菜单式选拔  
grub使用三个菜谱来采取差异的种类开始展览教导。你还能团结陈设种种参数,如延迟时间,默许操作系统等。 
分区大小改变后不要重新配置
  grub是经过文件系统直接把核心读取到内部存款和储蓄器,因而一旦操作系统宗旨的门路未有变动,grub就足以引导系统。 
除了,Grub还有无数特出强大的效能。例如接济二种外部设备,动态装载操作系统内核,甚至能够通过网络装载操作系统宗旨。Grub辅助各个文件系统,扶助八种可执行文件格式,扶助电动解压,能够引导不援救多重指导的操作系统,支持网络运行等。 
一.四 MB凯雷德和率先扇区 
您能够省略的知情为MB大切诺基是1体硬盘的大体第二职位,而首先扇区是硬盘的情理第陆人置. 
一.伍 多个GRUB配置文件 
据悉本例的分区如下: 
hda 15G 
hda1 8G / RED HAT LINUX8.0 
hda5 7G /home 
hdc 20G 
hdc1 6.4G WinXP 
hdc5 6.4G 
hdc6 6.4G 
hdc7 6.4G 
#fdisk -l 
# Disk /dev/hdc: 255 heads, 63 sectors, 2434 cylinders 
Units = cylinders of 16065 * 512 bytes 



1.1.1 grub2和grub的区别

官方手册原来的书文:

只表达多少个重大的:

一.安排文件的称谓改成了。在grub中,配置文件为grub.conf或menu.lst(grub.conf的叁个软链接),在grub第22中学改名称叫grub.cfg。

2.grub二扩充了许多语法,更类似于脚本语言了,例如辅助变量、条件判断、循环。

3.grub第22中学,设备名称从壹始发,而在grub中是从0初叶的。

四.grub贰施用img文件,不再动用grub中的stage1、stage一.伍和stage二。

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

陆.在已跻身操作系统环境下,不再提供grub命令,相当于不可能跻身grub交互式界面,唯有在开机时才能进入,算是一大遗憾。

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

Device Boot Start End Blocks Id System 
/dev/hdc1 * 1 894 7181023+ b Win95 FAT32 
/dev/hdc2 895 2434 12370050 f Win95 Ext’d (LBA) 
/dev/hdc5 895 1787 7172991 b Win95 FAT32 
/dev/hdc6 1788 2434 5196996 b Win95 FAT32 

本文首要介绍的是grub贰,在文末对古板grub举行了简述,但在grub二的始末部分中涵盖了触目皆是grub二和历史观grub的自己检查自纠。

正文目录:

一.1.2 命名习惯和文书路径表示方法

合法手册原来的书文:

(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文件

Disk /dev/hda: 255 heads, 63 sectors, 1867 cylinders 
Units = cylinders of 16065 * 512 bytes 

假如只是是想精通grub第22中学的boot.img/core.img/diskboot.img/kernel.img可能古板grub中stage1/stage1_5/stage二文件的功力,请直接跳至有关内容处阅读。

壹.1基础内容

1.壹.叁 grub2指点操作系统的秘诀

合法手册原版的书文:

grub二支持二种艺术指点操作系统:

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

诚如只利用第一种方式,唯有想教导grub私下认可不协理的操作系统时才会采纳第两种办法。

Device Boot Start End Blocks Id System 
/dev/hda1 * 1 1020 8193118+ 83 Linux 
/dev/hda2 1021 1802 6281415 83 Linux 
/dev/hda3 1803 1867 522112+ 82 Linux swap 

一.一 基础内容

1.2
安装grub2

1.一.四 grub二程序和历史观grub程序安装后的文件分布

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

[[email protected] ~]# 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

在grub二软件安装完后,会在/usr/lib/grub/i386-pc/目录下生成很多模块文件和img文件,还蕴含部分lst列表文件。

[[email protected] ~]# ls /usr/lib/grub/i386-pc/*.mod | wc -l
257

[[email protected] ~]# 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

[[email protected] ~]# 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

grub.conf,这么些文件位于;/boot/grub/grub.conf 
# grub.conf generated by anaconda 

# Note that you do not have to rerun grub after making changes to this
file 
# NOTICE: You do not have a /boot partition. This means that 
# all kernel and initrd paths are relative to /, eg. 
# root (hd0,0) 
# kernel /boot/vmlinuz-version ro root=/dev/hda1 
# initrd /boot/initrd-version.img 
#boot=/dev/hda 
default=0 
timeout=3 
splashimage=(hd0,0)/boot/grub/splash.xpm.gz 
title Red Hat Linux (2.4.18-14) 
root (hd0,0) 
kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/ 
initrd /boot/initrd-2.4.18-14.img 
title Microsoft Windows XP 
map (hd0) (hd1) 
map (hd1) (hd0) 
root (hd1,0) 
chainloader (hd1,0)+1 
makeactive 
boot 

1.1.1 grub2和grub的区别

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

只表明多少个重大的:

壹.布局文件的名目变更了。在grub中,配置文件为grub.conf或menu.lst(grub.conf的二个软链接),在grub第22中学改名称叫grub.cfg。

二.grub2扩大了累累语法,更类似于脚本语言了,例如匡助变量、条件判断、循环。

3.grub第22中学,设备分区名称从一方始,而在grub中是从0开端的。

四.grub2施用img文件,不再采纳grub中的stage1、stage一.五和stage二。

五.帮助图形界面配置grub,但要安装grub-customizer包,epel源提供该包。

陆.在已跻身操作系统环境下,不再提供grub命令,也正是不能够跻身grub交互式界面,只有在开机时才能进入,算是一大缺憾。

7.在grub第22中学从未了好用的find命令,算是另一大遗憾。

1.三grub二配置文件

1.1.5 boot loader和grub的关系

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

观念的grub将stage一转换后的始末安装到MB福特Explorer(VB普拉多或EBLacrosse)中的boot
loader部分,将stage一_5更换后的内容安装在紧跟在MB奇骏后的扇区中,将stage二转换后的剧情安装在/boot分区中。

grub二将boot.img转换后的内容安装到MB中华V(VB瑞鹰或EBLacrosse)中的boot
loader部分,将diskboot.img和kernel.img结合成为core.img,同时还会放到一些模块或加载模块的代码到core.img中,然后将core.img转换后的剧情安装到磁盘的钦点地点处。

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

2 解读grub.conf文件 

1.一.二 命名习惯和文件路径表示方法

法定手册最初的文章: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文件

一.肆命令行和菜单项中的命令

一.1.陆 grub2的安装地方

官方手册原著:

严格地正是core.img的设置地方,因为boot.img的职分是定位在MBCR-V或VB本田UR-V或EB奇骏上的。

(1).MBR

MB大切诺基格式的分区表用于PC
BIOS平台,这种格式允许多个主分区和额外的逻辑分区。使用那种格式的分区表,有三种办法安装GURB:

那二种方法有两样的题目。

行使嵌入的艺术安装grub,就未有保存的闲暇空间来担保安全性,例如有个别越发的软件正是使用那段空间来落实许可范围的;其它分区的时候,纵然会在MBPAJERO和率先个分区中间留下空闲空间,但大概留下的空间会比这越来越小。

艺术二装置grub到文件系统,但这么的grub是薄弱的。例如,文件系统的1些特征须求做尾巴部分包装,甚至有个别fsck检查评定,它们可能会移动这个block。

GRUB开发组织建议将GRUB嵌入到MB帕杰罗和第三个分区之间,除非有特异供给,但仍必须求确认保障第壹个分区至少是从第21kB(第伍一个扇区)之后才初叶创办的。

明日的磁盘设备,一般都会有分区边界对齐的属性优化提醒,所以首先个分区可能会活动从第贰MB处开始创设。

(2).GPT

有的新的系统利用GUID分区表(GPT)格式,这种格式是EFI固件所钦赐的一部分。但一旦操作系统帮助的话,GPT也足以用于BIOS平台(即MBOdyssey风格结合GPT格式的磁盘),使用这种格式,须要动用独立的BIOS
boot分区来保存GRUB
,GRUB被安放到此分区,不会有其余危害。

当在gpt磁盘上开创2个BIOS
boot分区时,必要确认保证两件事:(一)它最小是3一kB大小,但壹般都会为此分区划分1MB的上空用于可扩充性;(贰)必供给有创立的分区类型标识(flag
type)。

譬如利用gun parted工具时,能够设置为bios_grub标识:

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

万一使用gdisk分区工具时,则分类项目设置为”EF0二”。

只要运用其它的分区工具,恐怕必要内定guid,则足以钦定其guid为”21686148-644九-陆e6f-744e65656445464九”。

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

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

大家未来看望grub.conf文件内语句,(注:…)内的东西是我们的解读内容. 
# grub.conf generated by anaconda 

# Note that you do not have to rerun grub after making changes to this
file 
# NOTICE: You do not have a /boot partition. This means that 
# all kernel and initrd paths are relative to /, eg. 
# root (hd0,0) 
# kernel /boot/vmlinuz-version ro root=/dev/hda1 
# initrd /boot/initrd-version.img 
#boot=/dev/hda
(注:以上以符号井"#"初步的行代表被诠释掉,未有别的意义) 
default=0
(注:暗中同意的操作系统正是由default控制的。default后加叁个数字n,证明是第
n+3个。供给留意的是,GRUB中,计数是从0起始的,第一个硬盘是hd0,第一个软驱是fd0,等等。所以,default 0 表示默许的操作系统在那时是 Red Hat
Linux (二.四.1捌-1四)若是您改改成一就是WinXP了) 
timeout=三(注:timeout表示私下认可等待的时刻,那儿是3分钟。超越3秒,用户还并未作出选拔的话,系统将自动选取暗中认可的操作系统;当然你能够改成别的你愿意的时光) 
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
(注:钦点开机画面文件splash.xpm.gz的职位) 
title Red Hat Linux (二.4.18-1肆) (注:表示Red Hat Linux的菜单项) 
root (hd0,0) (注:表示第二个硬盘第二个分区,那里的root和系
统内的root不是1律!详细如下表达) 
kernel /boot/vmlinuz-2.四.1八-1四 ro root=LABEL=/
(注:钦命内核的地点,详细表达如下 文) 
initrd /boot/initrd-2.4.18-14.img (注:初始化) 
title Microsoft Windows XP (注:表示Microsoft Windows XP的菜单项) 
map (hd0) (hd一) (注:map是命令,详细如下) 
map (hd1) (hd0) 
root (hd1,0) (注:这是指第三个硬盘(从硬盘)上率先个分区) 
chainloader (hd1,0)+一 (注:链式装入器,装入三个扇区的多少然后把引导权交给它。详细表明如下) 
makeactive 
boot 

1.1.叁 grub②指点操作系统的不2诀要

法定手册最初的小说:https://www.gnu.org/software/grub/manual/html\_node/General-boot-methods.html\#General-boot-methods

grub二匡助三种办法带领操作系统:

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

貌似只使用第3种艺术,唯有想引导grub暗许不协理的操作系统时才会选用第三种格局。

1.5多少个周围的停放变量

1.1.7 进入grub命令行

在古板的grub上,可以直接在bash下敲入grub命令进入命令交互格局,但grub三只幸而系统运维前进入grub交互命令行。

按下e见可以编写制定所选菜单对应的grub菜单配置项,按下c键能够进入grub命令行交互情势。

(注:在 Linux 中,当提起 “root” 文件系统时,常常是指主 Linux
分区。可是,GRUB 有它自个儿的 root 分区定义。GRUB 的 root 分区是保存 Linux
内核的分区。那大概是您的正规 root 文件系统,也大概不是。大家谈论的是
GRUB,须求钦赐 GRUB 的 root 分区。进入 root 分区时,GRUB
将把那一个分区安装成只读型,那样就足以从该分区中装入 Linux 内核。GRUB
的一个很“酷”的遵循是它能够读取本机的 FAT、FFS、minix、ext2 和 雷斯erFS
分区.到近期甘休,您可能会感觉到一点质疑,因为 GRUB
所使用的硬盘/分区命名约定与 Linux 使用的命名约定不一致。在Linux
中,第二个硬盘的第七个分区称作 “hda5″。而 GRUB 把那个分区称作
“(hd0,四)”。GRUB 对硬盘和分区的编号都以从 0
初步总计。其余,硬盘和分区都用逗号分隔,整个表明式用括号括起。以后,可以窥见只要要因势利导
Linux 硬盘 hda5,应输入 “root (hd0,四)”。 
精晓了基石在什么地方,还要切实提议哪个文件是内核文件,那就是kernel的劳作。 
kernel /boot/vmlinuz-二.4.1捌-1四 ro
root=LABEL=/表达/boot/vmlinuz-二.四.1八-14就是要载入的基础。前面包车型大巴都是传递给基础的参数。root=LABEL=/就是linux的硬盘分区表示法,ro是readonly的情致。initrd用来开首的linux
image,并安装相应的参数。 
指令map:当您有两块硬盘,三个不可能从第2块硬盘运转的操作系统,例如Windowsxp,就足以行使map命令.你能够将hd0映射为hd壹,将hd一映射为hd0。换句话说,你能够虚拟的调换多少个硬盘而运营所须要的操作系统
。命令格局如下: 
grub> map (hd0) (hd1) 
grub> map (hd1) (hd0) 
GRUB 使用了“链式装入器”(chainloader)。链式装入器从分区 (hd一,0)

1.一.4 grub二程序和价值观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.陆grub配置和装置示例

1.2 安装grub2

合法手册原作:

此地的安装指的不是安装grub程序,而是安装Boot
loader,但一般都称之为安装grub,且后文都以以此意思。

的指点记录中装入winxp本人的指引装入器,然后教导它。那正是那种技能叫做链式装入的原委

它创设了一个从指点装入器到另1个的链。那种链式装入技术能够用于辅导任何版本的
DOS 或 Windows。 
GRUB的配置文件要简明就那样简单,假设你要更天性化一点,试一试把“color
light-gray/blue
”加在default语句的底下,下1遍开发银行GRUB时,看看有哪些变化,再试一试“color
light-blue/red”,惊喜呢? 有趣吧! ) 

3 如何运用grub? 

3.1 安装 
你能够从 下载GRUB的源代码。 
获取文件grub-0.伍.九陆.壹.tar.gz,所以这么做: 
# tar -xvzf grub-0.5.96.1.tar.gz 
其一命令将解开的文本和目录放在一个名字为grub-0.五.玖陆.壹的目录中。以后运作如 
下命令: 
#cd grub-0.5.96.1 
# ./configure 
倘若您想定制GRUB,使之包蕴流行的文件系统和对网卡的支撑,也许去除你不须求的网卡,能够运维如下命令: 
# ./configure –help 
本条命令将出口全体的下令选项。未来能够运用—enable和—disable选项增加或 
删去对特定网卡的扶助。(注意:GRUB帮助网络运维) 
为了开头编写翻译进度,键入如下命令: 
# make 
# make install 
由来你早已为设置GRUB真正做好了准备。 
将GRUB的相关文件保留在诸如/boot/grub的目录中是三个好主意。为此,按如下步骤: 
一.暗中认可状态下,GRUB全数文件将设置在/usr/share/grub/i386-pc(大概在 
/usr/local/share/grub/i3八陆-pc目录下,那只在于你的shell变量的安装。) 
二.确立贰个叫做/boot/grub的目录,然后拷贝下列文件到那几个目录: 
stage1 stage2 * stage1 5 
稍候将分解这几个文件。同时也要把GRUB(或许在/usr/sbin或然/usr/local/sbin 
目录下)拷贝到/boot/grub目录下。 
安装GRUB可以分成多个单身的手续: 
1.将“stage1”安装到MBR中。 
二.设置“stage二”的地点大概地方。 
3.设置2个食谱或选用,用来支配运营哪3个操作系统。 
选拔下面包车型地铁指令起首安装GRUB。 
#cd /boot/grub 
# ./grub 
本条命令依照BIOS的装置检查测试硬件设施,同时发生1些出口消息。这会花较长的时光。 
end_request: I/O error, dev 02:00 (floppy), sector 0 
GRUB version 0.5.96.1 (640K lower / 3072K upper memory) 
TAB键可列出大概的授命列表。其它景况下TAB会列出设备或文件名。类似上面包车型地铁唤起会油但是生: 
grub> 
先天,若是你将Linux安装在了第三块硬盘的率先个分区中依旧/dev/hda第11中学。记住GRUB的命名规则,将方面包车型地铁名字改为(hd0,0)。键入上面的下令: 
grub> install (hd0,0)/boot/grub/stage1 (hd0)
(hd0,0)/boot/grub/stage2 
p (hd0,0)/boot/grub/menu.conf 
近日分析一下以此命令的底细。 
install 
二个放到的命令,它报告GRUB将(hd0,0)/boot/grub/stage①安装到hd0的主引导纪录中。 
(hd0,0)/boot/grub/stage2 
告知GRUB stage二映象的职位。 
p with the the following options: (hd0,0)/boot/grub/menu.conf 
为菜单的来得设置配置文件。 
上面是对这一个命令用法的下结论: 
1.install 
2.ource_of_stage1 
3.where_to_install 
4.source_of_stage2 
5.p source_of_configuration_file 
现今,你做到了硬盘上的中坚安装工作。 
在软盘上的装置: 
为了在软盘上设置GRUB,你要会用“dd”命令,并且询问它是何等工作的。为了做一张GRUB运维盘,你要将stage1和stage二文件放到软盘的起先扇区中。 
设置stage一到软盘上: 
插入一张已格式化的软盘,键入命令: 
# dd if=stage1 of=/dev/fd0 bs=512 count=1 
指令的详实表达如下: 
if=input file 
i.e., stage1 
of=output file 
i.e., floppy drive (this may be different on your computer) 
bs=bytes to read and write 
Here it is 512 bytes. 
count=how many times to perform this operation 
每一趟拷贝“bs”数指标块到指标地址。 
安装stage2到软盘 
# dd if=stage2 of=/dev/fd0 bs=512 seek=1 
那边的步子同stage1的等同,除了一个seek选项外。Seek选项将调过四个“bs”。例如,在地方的下令中bs的值是51二,这样seek=1意味着将跳过软盘上前5十一个字节
,从5壹三字节伊始。那将使得第3步操作不会覆盖stage1的前51二字节。 
现今您做到了骨干的软盘驱动器安装。 

比方已经设置了grub要把grub重新安装到主教导扇区上,只要求简单打入makebootable命令就足以了。 

3.2 配置grub 
grub运转时会在/boot/grub/中搜寻一个名叫menu.lst的布署文件,假诺找不到此文件则不进入菜单方式而一直进入命令行格局。 
当今,大家来看一下怎么样在开发银行后进入种种操作系统,怎么着建立menu.conf文件。大家就从GRUB援救的启航进程起初。能够有三种方法来完毕运维进度: 
·A.通过调用内核本地运营 
·B.延续开发银行可能将控制转给另一个指点器 
A情势运行进度 
一.安插跟设备可能告诉GRUB你的根文件系统。 
二.告诉GRUB你的根本印象的职位,然后将参数字传送送给基础。 
3.再次起动,试一下。 
为了运转Linux,将内核以bzImage的文本名放在/boot/目录中,跟文件系统是 
/dev/hda一,可能GRUB中的(hd0,0)。运营进度如下: 
1.root (hd0,0) [This sets the root partition] 
2.kernel /boot/bzImage root=/dev/hda1 [This sets the kernel] 
B格局运营进程(那种形式壹旦当前的分区中安装了另二个起步管理器,例如LILO 
或者NTLDR): 
一.安装根分区但决不设置它 
二.激活这么些分区 
三.布局必要运营的分区的率先个扇区 
四.再度起动,看一下功用。 
咱俩在试行运行安装在/dev/hdc一只怕(hd一,0)的widows。运维windows的进度如下: 
1.rootnoverify (hd1,0) 
2.makeactive 
3.chainloader +1 [+1 sets the first sector of the current root 
partition] 
4.boot [transfers the control and quits GRUB] 
menu.conf文件:它用于建立运行多操作系统时的菜谱。建立menu.conf并不难。它应用简便的塞尔维亚(Serbia)语,就象你在这一节看到的那么。 
持有的菜单类别都以没有逗号分隔的“title TITLENAME”开端。你能够Infiniti制安装 
TITLENAME。 
安装Linux运转菜单步骤如下: 
壹.装置标题 
2.设置根分区 
三.装置基本的对应参数 
4.启动 
二个菜单例子: 
title Red Hat Linux (2.4.18-14) 
root (hd0,0) 
kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/ 
initrd /boot/initrd-2.4.18-14.img 
前面有#的行是三个诠释。 
树立运行Windows 也许 DOS的菜系: 
title Windoze 
rootnoverify (hd0,0) 
makeactive 
chainloader +1 
boot 
#—- 
又或者: 
title Microsoft Windows XP 
map (hd0) (hd1) 
map (hd1) (hd0) 
root (hd1,0) 
chainloader (hd1,0)+1 
makeactive 
boot 
—- 
留神:root和rootnoverify都以1律的,把rootnoverify改成root也行。但是经超过实际践来看。有时教导win时,系统安装好后,是rootnoverify
(hdX.Y)那样方式的,那样会冒出windows起不来,出现什么样windows什么文件损坏的动静。那时,大家就要把在grub中,携带windows的那段中的rootnoverify改为root 
root英文的意趣正是根的意趣,在此处是让linux知道自个儿所处的职位,也正是大家所安装linux的/根分区所在的地点。 
—- 
设若你安装了八个版本的Windows—一个是您本人用的,另三个给你的家眷用的—那样第一个就不可能安装,因为有提醒说Windows已经安装了。 
有1种简易的点子能够安装八个版本的Windows,即在运转时隐藏一个分区而采用另两个。你依然足以为你的分区设置密码尊敬,那样可防止止外人错误的加载你的分区。下边介绍怎么样形成五个Windows的设置,hda一和hda2可能 (hd0,0) 和(hd0,一),用到的下令有lock, password, hide 和 unhide。 
建立windows 项目”My Entry”: 
title My Entry 
lock 
unhide (hd0,0) 
hide (hd0,1) 
rootnoverify (hd0,0) 
makeactive 
chainloader +1 
boot 
#—- 
为了越来越好的采用lock命令,你要求在安顿文件开端使用password命令。Password命令的语法如下:password
secret(“secret”就是密码)。任曾几何时候你都足以透过按p键儿输入密码。 
建立Windows 项目”Family Entry” 
title Family Entry 
unhide (hd0,1) 
hide (hd0,0) 
rootnoverify (hd0,1) 
makeactive 
chainloader +1 
boot 

任什么人都足以运转那几个系列,而无须输入密码。 
这有1个应用password命令的诙谐的奥妙。为了在缺省菜单列表或布置文件中躲藏有些种类,你能够行使下边包车型大巴下令加载三个定制的列表: 
password secret 
在那个命令中,“secret”是密码,而/boot/grub/secret-list.conf是密码文件。那样做事先,你要先进入到根目录或许给出全路径名。例如: 
password secret (hd0,4)/boot/grub/secret-list.conf 
还有叁个更重要的一声令下是“map”。当您有两块硬盘,贰个不能够从第二块硬盘运转的操作系统,例如Windows,就足以行使map命令。例如,你能够将hd0映射为hd1,将hd1映射为hd0。换句话说,你能够虚拟的调换四个硬盘而运营所须要的操作系统。命令方式如下: 
grub> map (hd0) (hd1) 
grub> map (hd1) (hd0) 
启动FreeBSD: 
title FreeBSD 4.0 
root (hd0,4,a) 
kernel /boot/loader 
boot 
#—- 
此间我们调用了FreeBSD的运营管理器。Root (hd0,四,a)由多少个参数,是因为 
FreeBSD对1个独门分区举行了虚拟分割。大家称根分区为“a”。倘若FreeBSD占 
据了百分之百第1块硬盘,那里就活该是root
(hd0,a)。这样,就不是调用内核而是调用FreeBSD的运维管理器,它要比调用内核更易使用。 
(注意:推荐在动用OpenBSD和GNU/Hurd在此之前,要先试一下链式加载。) 
近日你早已做到了着力的GRUB编写翻译、安装和安排。你对GRUB领会的越来越多,就越会发觉GRUB是一种控制运转的易用和飞速的办法。 
各种GRUB命令: 
default xx 
表明xx是缺省的开发银行项目 
timeout yy 
标明在yy秒后缺省运转项目将运营 
fallback zz 
在率先个运维项目败北后,过了timeout时间后,就将运营zz项目。 
color 
以此命令将生成绚丽多彩菜单。它的语法是:color normal
current_selection。那八个域都可以有多少个值,形如foreground/background。例如: 
color green/black or light-gray/blue 
您也能够应用有关的数字。 
记住:全部的值都是从0初阶,所以0是率先个 

3.3 GRUB启动盘 
要构建引导盘,需执行1些归纳的步子。首先,在新的软盘上开创 ext二文件系统。然后,将其设置,并将部分 GRUB 文件复制到该文件系统,最终运营”grub” 程序,它将承受安装软盘的教导扇区。 
将一张空盘插入 一.44MB 软驱,输入: 
# mke2fs /dev/fd0 
创办了 ext2 文件系统后,供给设置该文件系统: 
# mount /dev/fd0 /mnt/floppy 
后日,供给创立一些目录,并将某个重要文件(原先安装 GRUB
时已安装了这个文件)复制到软盘: 
# mkdir /mnt/floppy/boot 
# mkdir /mnt/floppy/boot/grub 
# cp /boot/grub/stage1 /mnt/floppy/boot/grub 
# cp /boot/grub/stage2 /mnt/floppy/boot/grub 
再有多个手续,就能博取可用的教导盘。 
在linux bash中,从 root
用户运营“grub”,该程序格外有意思并值得注意,因为它实际是GRUB
辅导装入器的半作用性版本。就算 Linux 已经运营并正在运作,您仍可以够运转GRUB 并实施某个职务,而且其界面与应用 GRUB 引导盘或将 GRUB 安装到硬盘
MB福睿斯 时看到的界面(即GRUB控制台)完全相同。 
在 grub> 提醒符处,输入: 
grub> root (fd0) 
grub> setup (fd0) 
grub> quit 
近日,引导盘完结了。 
万1要把GRUB装到硬盘上,也很不难。这几个历程大致与带领盘安装过程壹样。首先,必要控制哪些硬盘分区将改为
root GRUB 分区。在这一个分区上,创建 /boot/grub 目录,并将 stage1 和
stage2文件复制到该目录中,能够经过重复带领种类并行使教导盘,或然接纳驻留版本的
GRUB 来施行后一步操作。在那二种情景下,运转 GRUB,并用 root 命令钦定root 分区。例如,若是将 stage一 和 stage2 文件复制到 hda伍 的 /boot/grub
目录中,应输入 “root (hd0,4)”。接着,决定在哪儿安装 GRUB — 在硬盘的
MBRubicon,只怕1旦与 GRUB
一起利用另2个“主”指引装入器,则设置在一定分区的引导记录中。假诺设置到
MB牧马人,则足以内定整个磁盘而不用钦命分区,如下(对于 hda): 
grub> setup (hd0) 
假如要将 GRUB 安装到 /dev/hda5 的指点记录中,应输入: 
grub> setup (hd0,4) 
方今,已设置 GRUB。指点系统时,应该及时以 GRUB
的控制台格局结束(借使设置到
MBQashqai)。以往,应创建携带菜单,那样就不用在每一趟指导体系时都输入那么些命令。 

从软盘运转grub 
构建运行盘后得以用软盘运营教导硬盘上的操作系统,
插入制作好的启航软盘,进入BIOS设定软盘运行。软盘运转成功后就会进入grub的命令行方式 
grub> 
要开动2个操作系统,首先钦点指引哪个分区上的体系,例如要指引指首个硬盘上的第伍个分区的操作系统,先键入 
grub>root (hd0,0) 
接着假使要开动的是Windows系统,键入 
grub>chainloader (hd0,0)+1 
瞩目(hd0,0)要一挥而就硬盘和分区的两样而变更数字。 
要是要因势利导Linux或其余系统,应键入 
grub>kernel (hd0,0)/boot/vmlinuz root=/dev/hda1 
留神hda一参数也要趁早硬盘和分区的不等而更改,如从第壹个硬盘的首先个分区指点则用hdb一。 
末段敲入boot就足以运维系统了。 
在其他时候无法鲜明命令可能命令的参数都能够按Tab得到相关的扶植。用上下键能够取得命令的历史记录。其实那几个命令正是menu.lst的起步描述,您也能够依照这么些讲述来自个儿键入运行命令,最终敲入boot就足以指点系统了。 

四 GRUB的交互性 

GRUB 最棒的优点之一正是其身心健康的设计 —
在时时刻刻利用它时请别忘了这一点。固然更新内核或变更它在磁盘上的岗位,不必重新安装
GRUB。事实上,如有要求,只要更新 menu.lst 文件即可,一切将维持健康。 
唯有少数地方下,才需求将 GRUB
辅导装入注重新安装到带领记录。首先,如若更改 GRUB root
分区的分区类型(例如,从 ext2 改成
雷斯erFS),则必要重新安装。也许,假使更新 /boot/grub 中的 stage壹 和
stage二 文件,由于它们来自立异版本的
GRUB,很有十分的大可能率要重新安装指导装入器。其余景况下,可以不必理睬! 
GRUB的最大的表征正是交互性尤其强。在开机时,按一下“c”,将跻身GRUB
控制台。突显如下: 
GRUB version 0.5.96.1 (640K lower / 3072K upper memory) 
[ Minimal BASH-like line editing is supported. For the first word,
TAB 
lists possible command completions. Anywhere else TAB lists the
possible 
completions of a device/filename. ] 
grub> 
欢迎使用 GRUB 控制台。今后,再研讨命令: 
将透过GRUB 控制台绕过lilo来运转RedHat linux, 
grub> root (h 
近期,按一遍 Tab 键。假如系统中有五个硬盘,GRUB 将展现大概做到的列表,从
“hd0” 初叶。假设唯有二个硬盘,GRUB 将插入
“hd0,”。借使有八个硬盘,继续开始展览,在 (“hd二”)
中输入名称并在名称后跟随输入逗号,但绝不按 Enter 键。部分形成的 root
命令看起来如下: 
grub> root (hd0, 
现行反革命,继续操作,再按一遍 Tab 键。GRUB
将呈现特定硬盘上具备分区的列表,以及它们的文件系统类型。在自家的种类中,按
Tab 键时取得以下列表: 
grub> root (hd0, (tab,按tab一下键) 
Possible partitions are: 
Partition num: 0, Filesystem type is fat, partition type 0x6 
Partition num: 2, Filesystem type is ext2fs, partition type 0x83 
Partition num: 4, Filesystem type unknown, partition type 0x7 
Partition num: 5, Filesystem type is ext2fs, partition type 0x83 
Partition num: 6, Filesystem type is fat, partition type 0xb 
Partition num: 7, Filesystem type is fat, partition type 0xb 
Partition num: 8, Filesystem type is ext2fs, partition type 0x83 
Partition num: 9, Filesystem type unknown, partition type 0x82 
如你所见,GRUB
的交互式硬盘和分区名称实现效益相当有系统。那一个,只须求好好精晓 GRUB
新奇的硬盘和分区命名语法,然后就足以一而再操作了 
grub> root (hd0,8) 
如今已设置了 root 文件系统,到装入内核的时候了 
grub> kernel /boot/vmlinuz-2.4.2 root=/dev/hda5 ro 
[Linux-bzImage, setup=0x1200, size=0xe1a30] 
您曾经安装了 root 文件系统并装入了水源。未来,能够引导了。只要输入
“boot”,Linux
引导进程就将起来。是否很cool啊,GRUB的menu.lst更像三个linux下的本子程序。 

5 常见grub除错方法的思绪 

率先进去Linux的rescue格局! 
用软盘或光盘运营,然后在运营的唤起符输入:linux rescue 
服从提示进入三个Shell状态,你能够到/mnt/上边看到3个sysimage这么目录,进去之后,便是您安装linux的/分区. 
运用命令将根分区变为当前目录的根分区:chroot /mnt/sysimage 
接下来转到/sbin/那么些目录中. 
使用fdisk -l 呈现当前分区处境,然后利用#grub-install
/dev/hdx(x为你利用的是那块硬盘安装的,壹般景观下是hda) 
使用exit推出chroot,再使用exit退出linux
rescue格局,系统将重新开动!取出光盘,应该能够见到grub安装好了. 
在实际的环境中,编辑/boot/grub/grub.conf文件和menu.lst文件.

1.1.5 boot loader和grub的关系

当使用grub来管理运转菜单时,那么boot loader都是grub程序安装的。

历史观的grub将stage一转换后的始末安装到MB卡宴(VBPAJERO或EB宝马X3)中的boot
loader部分,将stage1_五更换后的内容安装在紧跟在MBTiguan后的扇区中,将stage2转换后的剧情安装在/boot分区中。

grub二将boot.img转换后的内容安装到MBXC60(VB卡宴或EB揽胜极光)中的boot
loader部分,将diskboot.img和kernel.img结合成为core.img,同时还会放到壹些模块或加载模块的代码到core.img中,然后将core.img转换后的内容安装到磁盘的内定地方处。

它们之间更切实的关系见下文。

1.7
传统grub简述

一.二.一 grub安装命令

安装方式分外简单,只需调用grub二-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

grub二-install实际上是八个shell脚本,用于调用其余工具,真正的效能都以其余工具去完成的,所以借使不行熟识grub内部命令和编写制定,完全能够不用grub二-install。

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

1.一.陆 grub二的装置地方

法定手册原来的文章:https://www.gnu.org/software/grub/manual/html\_node/BIOS-installation.html\#BIOS-installation

从严地正是core.img的装置地方,因为boot.img的岗位是定点在MBPRADO或VB卡宴或EB陆风X八上的。

(1).MBR

MBQashqai格式的分区表用于PC
BIOS平台,那种格式允许四个主分区和额外的逻辑分区。使用那种格式的分区表,有二种艺术安装GURB:

  1. 放置到MBTiggo和第三个分区中间的上空,那有个别就是公众所称的”boot
    track”,”MB揽胜极光 gap”或”embedding area”,它们大体须求31kB的半空中;
  2. 将core.img安装到某些文件系统中,然后利用分区的率先个扇区(严峻地说不是首先个扇区,而是首先个block)存款和储蓄运行它的代码。

这二种艺术有两样的标题。

采纳嵌入的诀要安装grub,就平素不保留的悠闲空间来确定保证安全性,例如某些尤其的软件就是接纳那段空间来兑现许可范围的;此外分区的时候,即使会在MBCR-V和率先个分区中间留下空闲空间,但或者留下的空间会比那更加小。

情势贰设置grub到文件系统,但那样的grub是脆弱的。例如,文件系统的一点特点供给做尾巴部分包装,甚至有些fsck检查测试,它们或然会移动这一个block。

GRUB开发公司建议将GRUB嵌入到MB中华V和率先个分区之间,除非有特有需要,但仍必供给确认保障第二个分区至少是从第3一kB(第四二个扇区)之后才起来创造的。

未来的磁盘设备,一般都会有分区边界对齐的属性优化提示,所以首先个分区也许会自行从第二MB处伊始创设。

(2).GPT

一对新的系统使用GUID分区表(GPT)格式,那种格式是EFI固件所钦定的1部分。但若是操作系统帮助的话,GPT也足以用于BIOS平台(即MB本田CR-V风格结合GPT格式的磁盘),使用那种格式,需求选取独立的BIOS
boot分区来保存GRUB
,GRUB被安置到此分区,不会有任何危机。

当在gpt磁盘上创办三个BIOS
boot分区时,须要确定保证两件事:(一)它最小是3一kB大小,但1般都会为此分区划分1MB的半空中用于可扩大性;(二)必须求有创建的分区类型标识(flag
type)。

比如说使用gun parted工具时,能够设置为bios_grub标识:

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

若是运用gdisk分区工具时,则分类项目设置为”EF0贰”。

假使选择任何的分区工具,大概必要钦赐guid,则足以钦定其guid为”2168614八-644玖-陆e陆f-744e65656445464九”。

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

澳门金沙国际 1

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

澳门金沙国际 2


一.二.贰 各类img和stage文件的印证

合法手册原来的作品:

img文件是grub2生成的,stage文件是观念grub生成的。上边是各个文件的证实。

1.1.7 进入grub命令行

在价值观的grub上,可以一向在bash下敲入grub命令进入命令交互情势,但grub1只万幸系统运行前进入grub交互命令行。

按下e见能够编写所选菜单对应的grub菜单配置项,按下c键可以进去grub命令行交互形式。

澳门金沙国际 3

澳门金沙国际 4

 

1.2.2.1 grub2中的img文件

grub贰生成了好多少个img文件,有些分布在/usr/lib/grub/i3捌陆-pc目录下,有些分布在/boot/grub2/i3八陆-pc目录下,它们之间的关系,相信看了下文之后就会驾驭了。

下图描述了逐条img文件之间的涉及。在那之中core.img是动态变化的,路径为/boot/grub2/i38六-pc/core.img,而其他的img则设有于/usr/lib/grub/i386-pc目录下。当然,在设置grub时,boot.img会被拷贝到/boot/grub2/i386-pc目录下。

(1)boot.img

在BIOS平台下,boot.img是grub运营的首先个img文件,它被写入到MB安德拉中或分区的boot
sector中,因为boot
sector的深浅是512字节,所以该img文件的轻重也是512字节。

boot.img唯一的功效是读取属于core.img的第3个扇区并跳转到它身上,将控制权交给该扇区的img。由于体积大小的界定,boot.img不只怕掌握文件系统的结构,由此grub二-install将会把core.img的职位硬编码到boot.img中,那样就必定能找到core.img的岗位。

(2)core.img

core.img依照diskboot.img、kernel.img和一多元的模块被grub二-mkimage程序动态成立。core.img中放置了丰裕多的功用模块以管教grub能访问/boot/grub,并且能够加载相关的模块达成相关的成效,例如加载运营菜单、加载指标操作系统的音讯等,由于grub二恢宏应用了动态作用模块,使得core.img体量变得充分小。

core.img中涵盖了四个img文件的剧情,包罗diskboot.img/kernel.img等。

core.img的装置地点随MB酷威磁盘和GPT磁盘而不一样,那在上文中已经证实过了。

(3)diskboot.img

假若开发银行设备是硬盘,即从硬盘运行时,core.img中的第2个扇区的内容就是diskboot.img。diskboo.img的职能是读取core.img中剩下的片段到内部存款和储蓄器中,并将控制权交给kernel.img,由于此时还不识别文件系统,所以将core.img的凡事岗位以block列表的点子编码,使得diskboot.img能够找到剩余的剧情。

该img文件因为占用3个扇区,所以体量为51二字节。

(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的木本1样,那样core.img就能够被LILO的”image=”识别。当然,那是分外LILO来使用的,但现行反革命哪个人还适用LILO呢?

(8)*.mod

各类成效模块,部分模块已经松开到core.img中,恐怕会被grub自动加载,但有时也急需接纳insmod命令手动加载。

1.2 安装grub2

官方手册原版的书文:https://www.gnu.org/software/grub/manual/html\_node/Installing-GRUB-using-grub\_002dinstall.html\#Installing-GRUB-using-grub\_002dinstall

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

正文首要介绍的是grub二,在文末对古板grub进行了简述,但在grub二的内容部分中蕴藏了重重grub二和历史观grub的对照。

1.2.2.2 传统grub中的stage文件

grub二的统一筹划方法和观念grub大区别,因而和stage之间的对照关系实在没那么规范,然而将它们拿来比较也促进驾驭img和stage文件的效应。

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

(1)stage1

stage壹文件在功效上等价于boot.img文件。

(2)*_stage1_5

*stage1_伍文本包蕴了各个识别文件系统的代码,使得grub能够从文件系统中读取体积更加大效用更扑朔迷离的stage贰文件。从这一边牵挂,它好像于core.img中加载对应文件系统模块的代码部分,不过core.img的意义远比stage一_5多。

实则古板的grub在一些环境下是能够毫不stage1_五文本就能健康运作的,不过grub2则没办法不够core.img。

(3)stage2

stage贰的功效是加载种种环境和加载内核,在grub第22中学并未有完全与之相呼应的img文件,不过core.img中包蕴了stage二的保有机能。

(4)stage2_eltorito

功效上等价于grub第22中学的core.img中的cdboot.img部分。一般在塑造救援情势的grub时才会动用到cd-rom相关文书。

(5)pxegrub

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

GRUB学习笔记,翻译和整治官方手册。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,用法和grub二-install一样。

假定唯有是想精通grub第22中学的boot.img/core.img/diskboot.img/kernel.img可能古板grub中stage1/stage一_5/stage2文件的功用,请直接跳至连带内容处阅读。

1.2.三 安装grub涉及的经过

安装grub二的进度大致分两步:一是依据/usr/lib/grub/i38陆-pc/目录下的文书生成core.img,并拷贝boot.img和core.img涉及的1些模块文件到/boot/grub2/i3捌六-pc/目录下;二是依照/boot/grub2/i3捌陆-pc目录下的文件向磁盘上写boot
loader。

本来,到底是先拷贝,依然先写boot
loader,没要求去搞通晓,只要/boot/grub2/i3八陆-pc下的img文件一定能经过grub二相关程序再一次生成boot
loader。所以,既能够认为/boot/grub2/i3八陆-pc目录下的img文件是boot
loader的特殊备份文件,也得以认为是boot loader的源文件。

可是,img文件和boot
loader的内容是不一样等的,因为img文件还要通过grub二相关程序来更换才是真的的boot
loader。

对此价值观的grub而言,拷贝的不是img文件,而是stage文件。

一.2.二 各样img和stage文件的辨证

法定手册原作:https://www.gnu.org/software/grub/manual/html\_node/Images.html\#Images

img文件是grub二生成的,stage文件是价值观grub生成的。上边是各样文件的印证。

1.壹 基础内容

一.三 grub二配置文件

grub二的默许配置文件为/boot/grub2/grub.cfg,该配置文件的写法弹性相当的大,但超过肆分之一亟需修改该配置文件时,都只需修改个中一小部分剧情就足以达标目的。

grub贰-mkconfig程序可用来扭转符合大多数景况的grub.cfg文件,默许它会活动尝试探测有效的操作系统内核,并转移对应的操作系统菜单项。使用方式万分简单,只需1个增选”-o”钦赐输出文件即可。

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

1.2.2.1 grub2中的img文件

grub二生成了几许个img文件,有个别分布在/usr/lib/grub/i3八6-pc目录下,某个分布在/boot/grub2/i386-pc目录下,它们之间的关联,相信看了下文之后就会明白了。

澳门金沙国际 5

澳门金沙国际 6

下图描述了逐条img文件之间的涉及。个中core.img是动态变化的,路径为/boot/grub2/i3八陆-pc/core.img,而其他的img则设有于/usr/lib/grub/i3八陆-pc目录下。当然,在装置grub时,boot.img会被拷贝到/boot/grub2/i3八陆-pc目录下。

澳门金沙国际 7

(1)boot.img

在BIOS平台下,boot.img是grub运行的率先个img文件,它被写入到MBTiguan中或分区的boot
sector中,因为boot
sector的轻重缓急是512字节,所以该img文件的大大小小也是51贰字节。

boot.img唯一的效益是读取属于core.img的率先个扇区并跳转到它身上,将控制权交给该扇区的img。由于体量大小的范围,boot.img不大概清楚文件系统的布局,由此grub二-install将会把core.img的职位硬编码到boot.img中,这样就决然能找到core.img的地点。

(2)core.img

core.img依照diskboot.img、kernel.img和一名目繁多的模块被grub二-mkimage程序动态创设。core.img中放置了10足多的功用模块以确认保障grub能访问/boot/grub,并且能够加载相关的模块达成相关的效应,例如加载运维菜单、加载指标操作系统的新闻等,由于grub贰大方运用了动态成效模块,使得core.img体量变得充裕小。

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

core.img的设置地点随MB奥迪Q伍磁盘和GPT磁盘而各异,那在上文中已经认证过了。

(3)diskboot.img

只要开行设备是硬盘,即从硬盘运行时,core.img中的第2个扇区的情节便是diskboot.img。diskboo.img的法力是读取core.img中多余的壹些到内部存款和储蓄器中,并将控制权交给kernel.img,由于此时还不识别文件系统,所以将core.img的全方位地点以block列表的方法编码,使得diskboot.img能够找到剩余的始末。

该img文件因为占用1个扇区,所以体积为51贰字节。

(4)cdboot.img

1旦开发银行设备是光驱(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自个儿就占有2捌KB空间,但放到到了core.img中后,core.img文件才唯有二陆KB大小。那是因为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.1.1 grub2和grub的区别

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

只表明多少个重点的:

一.布局文件的名目变更了。在grub中,配置文件为grub.conf或menu.lst(grub.conf的3个软链接),在grub第22中学改名字为grub.cfg。

2.grub二扩充了很多语法,更近乎于脚本语言了,例如补助变量、条件判断、循环。

三.grub第22中学,设备名称从壹初步,而在grub中是从0伊始的。

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

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

陆.在已进入操作系统环境下,不再提供grub命令,也便是不可能进来grub交互式界面,唯有在开机时才能跻身,算是一大缺憾。

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

壹.叁.一 通过/etc/default/grub文件生成grub.cfg

合法手册原作:

grub二-mkconfig是基于/etc/default/grub文件来创立布局文件的。该文件中定义的是grub的全局宏,修改内置的宏能够迅快速生成成grub配置文件。实际上在/etc/grub.d/目录下还有1对grub配置脚本,那么些shell脚本读取一些本子配置文件(如/etc/default/grub),依据钦赐的逻辑生成grub配置文件。若有趣味,不放读一读/etc/grub.d/十_linux文件,它带领了成立grub.cfg的细节,例如怎么着转移运营菜单。

[[email protected] ~]# 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部分含有了空格或别的特殊字符,则须要利用引号包围。

比如说,上面是1个/etc/default/grub文件的以身作则:

[[email protected] ~]# 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秒。等待历程中,按下4意按键都得以中断等待。

安装为0时,将不列出菜谱直接运用暗中认可的菜单项指点与之对应的操作系统,设置为”-壹”时将永久等待采取。

是还是不是出示菜单,和”GRUB_TIMEOUT_STYLE”的装置有关。

(4).GRUB_TIMEOUT_STYLE

假设该key未设置值或然设置的值为”menu”,则列出运行菜单项,并等待”GRUB_TIMEOUT”钦命的晚点时间。

要是设置为”countdown”和”hidden”,则不出示运维菜单项,而是直接等待”GRUB_TIMEOUT”内定的超时时间,假使超时了则运行暗许菜单项并携带对应的操作系统。在等候历程中,按下”ESC”键可以列出运维菜单。设置为countdown和hidden的界别是countdown会彰显超时时间的剩余时间,而hidden则完全隐形超时时间。

(5).GRUB_DISTRIBUTOR

设置发行版的标识名称,一般该名称用来作为菜单的1有个别,以便区分分裂的操作系统。

(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

私下认可情状下,grub二-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 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

默许情形下,grub二-mkconfig假若发现有多个同版本的或低版本的木本时,将只为最高版本的内核生成拔尖菜单,别的具备的低版本内核菜单都放入子菜单中,设置为”y”将一切生成为头等菜单。

(15).GRUB_HIDDEN_TIMEOUT(已吐弃,但为了向后13分,仍有效)

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

(16).GRUB_HIDDEN_TIMEOUT_QUIET(已抛弃,但为了向后格外,仍有效)

配合GRUB_HIDDEN_TIMEOUT使用,能够行使GRUB_TIMEOUT_STYLE=countdown来代表那两项。

1.2.2.2 传统grub中的stage文件

grub贰的陈设性艺术和历史观grub大分歧,因而和stage之间的对峙统1关系实在没那么正式,但是将它们拿来相比较也促进驾驭img和stage文件的法力。

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

澳门金沙国际 8

澳门金沙国际 9

澳门金沙国际,(1)stage1

stage一文件在效率上等价于boot.img文件。目标是跳转到stage一_伍或stage2的第一个扇区上。

(2)*_stage1_5

*stage1_伍文件包涵了各类识别文件系统的代码,使得grub能够从文件系统中读取体量更加大职能更复杂的stage2文件。从这一面考虑,它就像于core.img中加载对应文件系统模块的代码部分,但是core.img的成效远比stage1_5多。

stage1_5相似安装在MB翼虎后、第贰个分区前的那段空闲空间中,也便是MB奥德赛gap空间,它的效能是跳转到stage二的首先个扇区。

实质上古板的grub在好几环境下是足以毫不stage1_5文书就能符合规律运作的,然而grub二则无法不够core.img。

(3)stage2

stage二的功用是加载种种环境和加载内核,在grub第22中学从未完全与之相呼应的img文件,可是core.img中包括了stage2的有着机能。

当跳转到stage二的率先个扇区后,该扇区的代码负责加载stage二剩余的始末。

留意,stage2是存放在在磁盘上的,并未像core.img1样嵌入到磁盘上。

(4)stage2_eltorito

职能上等价于grub第22中学的core.img中的cdboot.img部分。一般在炮制救援格局的grub时才会利用到cd-rom相关文件。

(5)pxegrub

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

壹.一.二 命名习惯和文件路径表示方法

官方手册原来的书文: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文件

壹.3.二 脚本办法一贯编写grub.cfg文件

合法手册原版的书文:

  • 注释符:从#发端的字符都被认为是注释,所以grub辅助行中注释
  • 连天操作符:{ } | & $ ; < >
  • 保存重要字和符号:! [[ ]] { } case do done elif else esac fi for
    function if in menuentry select then time until
    while。并非全部的严重性字都有用,只是为了以往的功效扩大而提前提供的。

  • 引号和转义符

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

反斜线转义情势和shell壹样。

单引号中的全体字符串都以字面意思,未有别的格外含义,固然单引号中的转义符也被认为是纯粹的字符。所以’\”是无法保留单引号的。单引号必要接纳双引号来转换,所以应该写”‘”。

双引号和单引号成效一样,但它不能够转义某多少个特殊字符,包蕴”$”和”\”。对于双引号中的”$”符号,它任曾几何时候都保存本意。对于”\”,唯有反斜线后的字符是’$’、'”‘、’\’时才代表转义的情趣,此外,某行若以反斜线结尾,则代表续行,但官方不提议在grub.cfg中使用续行符。

  • 变量扩充

运用$符号引用变量,也能够行使${var}的方法引用var变量。

协理地点变量,例如$1引用的是率先个参数。

还匡助尤其的变量,如$?表示上二回命令的退出状态码。若是选用了职分变量,则还接济$*、[email protected]和$#,[email protected]意味着的有着参数全部,各参数之间是不可分割的,[email protected]也意味着享有变量,但[email protected]的各参数是能够被分割的,$#代表参数的个数。

  • 简不难单的授命

能够在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能够由此核心样式为分歧组的食谱展现不一样的样式风格。3个menuentry中,可以应用频仍class表示将该菜单分到八个组中去。

–users:该选项限制唯有那里列出的用户才能访问该菜单项,不点名该采用时将意味拥有用户都能访问该菜单。

–unrestricted:该选项表示拥有用户都有权访问该菜单项。

–hotkey:该选用为该菜单项关联2个热键,也正是快速键,关联热键后一旦按下该键就会当选该菜单。热键只好是字母键、backspace键、tab键或del键。

–id:该采取为该菜单关联1个唯一的数值。id的值能够由ASCII字母、数字//下划线组成,且不能数字发轫。

不无其余的参数包蕴title都被视作地点参数字传送递给大括号中的命令,但title总是$一,除title外的别的参数,地方值在此此前向后类推。

  • break [n]:强制退出for/while/until循环
  • continue [n]:跳到下三回迭代,即进入下二回巡回
  • return [n]:内定重返状态码
  • setparams [arg] …:从$1开端轮换地方参数
  • shift
    [n]:踢掉前n个参数,使得第n+3个参数变为$1,但和shell中不雷同的是,踢掉了前n个参数后,从$#-n+1到$#那些参数的地方不变

切实什么编写grub.cfg文件,继续看下文的命令和变量。

1.2.三 安装grub涉及的进度

设置grub贰的进程大概分两步:1是基于/usr/lib/grub/i3八六-pc/目录下的文书生成core.img,并拷贝boot.img和core.img涉及的一点模块文件到/boot/grub2/i3八6-pc/目录下;2是基于/boot/grub2/i38陆-pc目录下的公文向磁盘上写boot
loader。

本来,到底是先拷贝,照旧先写boot
loader,没须求去搞领悟,只要/boot/grub2/i386-pc下的img文件一定能透过grub二相关程序再一次生成boot
loader。所以,既能够认为/boot/grub2/i38陆-pc目录下的img文件是boot
loader的独特备份文件,也足以认为是boot loader的源文件。

然则,img文件和boot
loader的剧情是不一致的,因为img文件还要通过grub二相关程序来转换才是当真的boot
loader。

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

以下是设置守旧grub时,grub做的工作。很不幸,grub二上从未有过该命令,也从不与之等价的通令。

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_五到磁盘上,该文件系统类型的stage1_5占用了十五个扇区,最后安装stage一,并告知stage1stage一_5的地点是第一到第3几个扇区,之所以先嵌入stage一_五再放置stage一便是为着让stage一知道stage1_5的职责,最终还告知了stage一stage二和配备文件menu.lst的途径。

1.一.3 grub二指引操作系统的办法

官方手册最初的作品:https://www.gnu.org/software/grub/manual/html\_node/General-boot-methods.html\#General-boot-methods

grub二帮忙两种情势引导操作系统:

  • 一贯辅导:(direct-load)直接通过暗许的grub二 boot
    loader来辅导写在暗中同意配置文件中的操作系统
  • 链式辅导:(chain-load)使用暗许grub贰 boot loader链式教导另一个boot
    loader,该boot loader将指点对应的操作系统

诚如只行使第3种方法,唯有想指导grub私下认可不协助的操作系统时才会动用第两种办法。

1.四 命令行和菜单项中的命令

合法手册原版的书文:

grub二补助广大指令,有些命令只可以在交互式命令行下使用,有个别命令可用在安插文件中。在救援方式下,唯有insmod、ls、set和unset命令可用。

无需明白全部的授命,领悟用的上的多少个指令即可。

一.三 grub2配置文件

grub二的私下认可配置文件为/boot/grub2/grub.cfg,该配置文件的写法弹性非常的大,但大多数索要修改该配置文件时,都只需修改当中一小部分剧情就足以直达指标。

grub二-mkconfig程序可用来扭转符合超过三分一意况的grub.cfg文件,暗许它会活动尝试探测有效的操作系统内核,并生成对应的操作系统菜单项。使用方法万分简单,只需3个精选”-o”内定输出文件即可。

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

壹.1.四 grub二程序和价值观grub程序安装后的文本分布

在守旧grub软件设置完后,在/usr/share/grub/RELEASE/目录下会转移1些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

在grub二软件设置完后,会在/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.4.1 help命令

help [pattern]

来得能协作到pattern的有所命令的表达新闻和usage消息,假使不钦命patttern,将展现全部命令的简单音讯。

例如”help cmos”。

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

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

grub二-mkconfig是根据/etc/default/grub文件来创制布局文件的。该公文中定义的是grub的全局宏,修改内置的宏能够长足生成grub配置文件。实际上在/etc/grub.d/目录下还有局地grub配置脚本,那个shell脚本读取一些本子配置文件(如/etc/default/grub),依照钦定的逻辑生成grub配置文件。若有趣味,不放读一读/etc/grub.d/十_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秒。等待历程中,按下4意按键都足以中断等待。

安装为0时,将不列出菜谱直接行使暗中认可的菜单项指点与之对应的操作系统,设置为”-一”时将永远等待选取。

是还是不是出示菜单,和”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宝马X3Y”设置为”true”,不然该key钦点的暗中同意内核运维参数将生成两份,一份是用于暗中同意运维参数,一份用于恢复情势(recovery
mode)的开发银行参数。

该key生成的暗中同意内核运行参数将添加在”GRUB_CMDLINE_LINUX”所钦定的开发银行参数之后。

(8).GRUB_DISABLE_RECOVERY

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

(9).GRUB_DISABLE_LINUX_UUID

暗中同意情状下,grub二-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

暗中认可情状下,grub二-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.1.5 boot loader和grub的关系

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

价值观的grub将stage1转换后的情节安装到MB翼虎(VB安德拉或EB猎豹CS陆)中的boot
loader部分,将stage一_伍转换后的始末安装在紧跟在MB凯雷德后的扇区中,将stage贰转换后的剧情安装在/boot分区中。

grub二将boot.img转换后的始末安装到MB福特Explorer(VB昂Cora或EB酷路泽)中的boot
loader部分,将diskboot.img和kernel.img结合成为core.img,同时还会停放壹些模块或加载模块的代码到core.img中,然后将core.img转换后的内容安装到磁盘的钦赐地点处。

它们中间更有血有肉的涉及见下文。

1.4.2 boot命令

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

只在交互式命令行下可用。其实在menuentry命令的最后就富含了boot命令。

一.三.二 脚本办法直接编写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变量。

匡助地点变量,例如$壹引用的是率先个参数。

还帮助特殊的变量,如$?表示上3回命令的退出状态码。假若应用了岗位变量,则还支持$*、$@和$#,$@代表的兼具参数全体,各参数之间是不可分割的,$@也代表享有变量,但$@的各参数是足以被分开的,$#意味着参数的个数。

  • 大约的吩咐

可以在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能够透过核心样式为分化组的菜系突显不一样的样式风格。3个menuentry中,能够使用频仍class表示将该菜单分到三个组中去。

–users:该选项限制唯有那里列出的用户才能访问该菜单项,不钦赐该接纳时将意味拥有用户都能访问该菜单。

–unrestricted:该选项表示拥有用户都有权访问该菜单项。

–hotkey:该选用为该菜单项关联3个热键,也便是神速键,关联热键后1旦按下该键就会当选该菜单。热键只好是字母键、backspace键、tab键或del键。

–id:该选择为该菜单关联贰个唯壹的数值。id的值能够由ASCII字母、数字//下划线组成,且不可能数字起始。

具备别的的参数包括title都被视作地方参数字传送递给大括号中的命令,但title总是$壹,除title外的任何参数,地方值从前向后类推。

  • break [n]:强制退出for/while/until循环
  • continue [n]:跳到下一回迭代,即进入下二回巡回
  • return [n]:内定重回状态码
  • setparams [arg] …:从$一早先轮换地点参数
  • shift
    [n]:踢掉前n个参数,使得第n+贰个参数变为$一,但和shell中不雷同的是,踢掉了前n个参数后,从$#-n+1到$#这个参数的职位不变

切切实实哪些编写grub.cfg文件,继续看下文的授命和变量。

一.一.陆 grub贰的安装地方

官方手册原来的作品:https://www.gnu.org/software/grub/manual/html\_node/BIOS-installation.html\#BIOS-installation

适度从紧地说是core.img的设置地方,因为boot.img的职位是固定在MB奥迪Q5或VBSportage或EB路虎极光上的。

(1).MBR

MBTiggo格式的分区表用于PC
BIOS平台,那种格式允许八个主分区和附加的逻辑分区。使用那种格式的分区表,有二种格局安装GURB:

  1. 放到到MBLX570和率先个分区中间的空中,那部分便是大众所称的”boot
    track”,”MB瑞鹰 gap”或”embedding area”,它们大体须要3一kB的长空;
  2. 将core.img安装到某些文件系统中,然后采纳分区的第一个扇区(严刻地说不是首先个扇区,而是首先个block)存款和储蓄运行它的代码。

那二种办法有例外的难点。

动用嵌入的主意安装grub,就不曾保留的空余空间来保管安全性,例如有个别尤其的软件正是运用那段空间来兑现许可范围的;此外分区的时候,就算会在MB大切诺基和第一个分区中间预留空闲空间,但大概留下的半空中会比那越来越小。

格局2安装grub到文件系统,但如此的grub是软弱的。例如,文件系统的有些特点供给做尾部包装,甚至壹些fsck检查实验,它们或然会活动那几个block。

GRUB开发公司建议将GRUB嵌入到MBRubicon和率先个分区之间,除非有万分须要,但仍必供给保管第3个分区至少是从第1一kB(第四一个扇区)之后才起来创设的。

以后的磁盘设备,壹般都会有分区边界对齐的习性优化提示,所以率先个分区大概会自行从第二MB处初阶创办。

(2).GPT

壹些新的系统运用GUID分区表(GPT)格式,那种格式是EFI固件所钦定的1局地。但要是操作系统帮忙的话,GPT也得以用于BIOS平台(即MBBMWX五风格结合GPT格式的磁盘),使用那种格式,供给使用独立的BIOS
boot分区来保存GRUB
,GRUB被内置到此分区,不会有其余危害。

当在gpt磁盘上创制八个BIOS
boot分区时,需求保障两件事:(壹)它最小是31kB大小,但一般都会为此分区划分1MB的上空用于可扩大性;(贰)必须求有客观的分区类型标识(flag
type)。

譬如说利用gun parted工具时,能够安装为bios_grub标识:

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

尽管利用gdisk分区工具时,则分类项目设置为”EF0贰”。

即使使用其他的分区工具,可能供给钦点guid,则能够钦命其guid为”2168614八-644九-六e陆f-74肆e65656445464玖”。

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

澳门金沙国际 10

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

澳门金沙国际 11

1.4.3 set和unset命令

set [envvar=value]
unset envvar

前者设置条件变量envvar的值,假设不给定参数,则列出当前环境变量。

后来人释放环境变量envvar。

一.四 命令行和菜单项中的命令

合法手册原来的文章:https://www.gnu.org/software/grub/manual/html\_node/Commands.html\#Commands

grub二援救广大指令,有个别命令只幸而交互式命令行下使用,某些命令可用在布置文件中。在救援形式下,唯有insmod、ls、set和unset命令可用。

不要掌握全部的授命,明白用的上的多少个指令即可。

1.1.7 进入grub命令行

在观念的grub上,能够直接在bash下敲入grub命令进入命令交互形式,但grub贰只能在系统运行前进入grub交互命令行。

按下e见可以编写所选菜单对应的grub菜单配置项,按下c键能够进去grub命令行交互情势。

澳门金沙国际 12

澳门金沙国际 13

1.4.4 lsmod命令和insmod命令

分级用于列出已加载的模块和调用钦赐的模块。

专注,若要导入辅助ext文件系统的模块时,只需导入ext2.mod即可,实际上也一直不ext3和ext4对应的模块。

1.4.1 help命令

help [pattern]

展现能相称到pattern的拥有命令的辨证音讯和usage消息,如若不内定patttern,将体现全体命令的简要音信。

例如”help cmos”。

澳门金沙国际 14

1.2 安装grub2

官方手册原来的书文:https://www.gnu.org/software/grub/manual/html\_node/Installing-GRUB-using-grub\_002dinstall.html\#Installing-GRUB-using-grub\_002dinstall

此地的设置指的不是设置grub程序,而是安装Boot
loader,但貌似都叫作安装grub,且后文都以这么些意思。

1.4.5 linux和linux16命令

linux file [kernel_args]
linux16 file [kernel_args]

都代表装载钦赐的内核文件,并传递内核运营参数。linux1陆意味着以观念的千克人运转商业事务运转水源,linux表示以33位运营商业事务运转水源,但linux命令比linux16有局地范围。但半数以上时候,它们是足以通用的。

在linux或linux1陆指令之后,必须紧跟着使用init或init1陆限令装载init
ramdisk文件。

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

但在grub环境下,boot分区被当作root分区,即根分区,要是boot分区为第1块磁盘的第三个分区,则应该写成:

linux (hd0,msdos1)/vmlinuz-XXX

仍旧绝对路径的:

set root='hd0,msdos1'
linux /vmlinuz-XXX

在grub阶段能够传递内核的运维参数(内核的参数包蕴三类:编写翻译内核时参数,运营时参数和平运动转时参数),能够传递的起步参数格外丰硕多,完整的启航参数列表见:

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/sda二”,

1.4.2 boot命令

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

只在交互式命令行下可用。其实在menuentry命令的末段就带有了boot命令。

1.2.一 grub安装命令

安装情势分外不难,只需调用grub二-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下,那是暗许的,此时可直接使用grub贰-install安装。

shell> grub2-install

比方不是挂载在/boot/efi下,则运用–efi-directory钦定efi系统一分配区路径。

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

grub2-install实际上是2个shell脚本,用于调用别的工具,真正的功能都以任何工具去完毕的,所以若是不行熟练grub内部命令和编写制定,完全可以不用grub二-install。

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

1.4.6 initrd和initrd16命令

initrd file

唯其如此紧跟在linux或linux1陆限令之后采用,用于为就要运营的基业传递init
ramdisk路径。

一样,基于根分区,可以选拔相对路径,也足以使用相对路径。路径的意味方法和linux或linux1陆命令相同。例如:

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

1.4.3 set和unset命令

set [envvar=value]
unset envvar

前者设置条件变量envvar的值,假使不给定参数,则列出当前环境变量。

来人释放环境变量envvar。

一.二.2 各个img和stage文件的印证

合法手册原文:https://www.gnu.org/software/grub/manual/html\_node/Images.html\#Images

img文件是grub二生成的,stage文件是观念grub生成的。上边是种种文件的证实。

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,然后相配第3个,依次类推。

例如:

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语句中的第3个search中搜索uuid为”3陆柒d陆a77-03三b-4037-bbcb-41670伍ead0九五”的装置,但选拔了多少个hint选项,表示先相称bios平台下/boot分区为(hd0,msdos一)的装备,之后还点名了多少个hint,但因为search使用的是uuid搜索格局,所以那一个hint选项是剩下的,因为单磁盘上分区的uuid是绝无仅有的。

再举个例证,假诺某运行设备上有五个boot分区(如多系统共存时),分别是(hd0,msdos壹)和(hd0,msdos5),假使那时不利用uuid搜索,而是利用label方式搜索:

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

则此时将会中选(hd0,msdos5)那几个boot分区,若不利用hint,将入选(hd0,msdos一)那一个boot分区。

1.4.4 lsmod命令和insmod命令

分别用于列出已加载的模块和调用钦命的模块。

在意,若要导入帮助ext文件系统的模块时,只需导入ext二.mod即可,实际上也从没ext3和ext四对应的模块。

1.2.2.1 grub2中的img文件

grub2生成了有个别个img文件,有个别分布在/usr/lib/grub/i3八陆-pc目录下,有个别分布在/boot/grub2/i3捌陆-pc目录下,它们中间的关系,相信看了下文之后就会通晓了。

澳门金沙国际 15

澳门金沙国际 16

下图描述了逐壹img文件之间的关联。个中core.img是动态变化的,路径为/boot/grub2/i3八六-pc/core.img,而其余的img则设有于/usr/lib/grub/i386-pc目录下。当然,在装置grub时,boot.img会被拷贝到/boot/grub2/i3八六-pc目录下。

澳门金沙国际 17

(1)boot.img

在BIOS平台下,boot.img是grub运转的率先个img文件,它被写入到MB景逸SUV中或分区的boot
sector中,因为boot
sector的高低是51二字节,所以该img文件的大小也是51二字节。

boot.img唯1的效应是读取属于core.img的率先个扇区并跳转到它身上,将控制权交给该扇区的img。由于体积大小的界定,boot.img不只怕清楚文件系统的构造,由此grub贰-install将会把core.img的岗位硬编码到boot.img中,这样就一定能找到core.img的职责。

(2)core.img

core.img依据diskboot.img、kernel.img和1种种的模块被grub二-mkimage程序动态成立。core.img中放到了10足多的功用模块以管教grub能访问/boot/grub,并且能够加载相关的模块达成相关的成效,例如加载运行菜单、加载指标操作系统的新闻等,由于grub贰气势恢宏运用了动态功用模块,使得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文件因为占用多少个扇区,所以容量为51二字节。

(4)cdboot.img

假设开发银行设备是光驱(cd-rom),即从光驱运转时,core.img中的第二个扇区的的情节正是cdboo.img。它的效益和diskboot.img是1模一样的。

(5)pexboot.img

借使是从网络的PXE环境运维,core.img中的第壹个扇区的情节就是pxeboot.img。

(6)kernel.img

kernel.img文件包蕴了grub的宗旨运转时环境:设备框架、文件句柄、环境变量、救援方式下的吩咐行解析器等等。很少直接接纳它,因为它们曾经全部嵌入到了core.img中了。注意,kernel.img是grub的kernel,和操作系统的基础非亲非故。

假设条分缕析的话,会发现kernel.img本人就占据2八KB空间,但松开到了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.4.5 linux和linux16命令

linux file [kernel_args]
linux16 file [kernel_args]

都表示装载钦赐的基本文件,并传递内核运营参数。linux1陆象征以观念的14个人运维商业事务运营水源,linux表示以31人运行商事运转水源,但linux命令比linux1陆有部分限制。但多数时候,它们是足以通用的。

在linux或linux1陆下令之后,必须紧跟着使用init或init1陆命令装载init
ramdisk文件。

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

澳门金沙国际 18

但在grub环境下,boot分区被当作root分区,即根分区,假诺boot分区为第一块磁盘的率先个分区,则应该写成:

linux (hd0,msdos1)/vmlinuz-XXX

抑或绝对路径的:

set root=’hd0,msdos1′

linux /vmlinuz-XXX

在grub阶段能够传递内核的开发银行参数(内核的参数包含三类:编写翻译内核时参数,运营时参数和平运动作时参数),能够传递的启航参数十二分可怜多,完整的开发银行参数列表见: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/sda二”,

1.2.2.2 传统grub中的stage文件

grub二的筹划艺术和古板grub大差别,由此和stage之间的相持统一关系实在没那么专业,可是将它们拿来相比也有助于精晓img和stage文件的效率。

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

澳门金沙国际 19

澳门金沙国际 20

(1)stage1

stage一文件在效益上等价于boot.img文件。目标是跳转到stage一_5或stage2的率先个扇区上。

(2)*_stage1_5

*stage1_伍文本包蕴了各个识别文件系统的代码,使得grub能够从文件系统中读取体量越来越大效用更复杂的stage二文件。从这一端思念,它就像是于core.img中加载对应文件系统模块的代码部分,不过core.img的效能远比stage一_5多。

stage1_伍一般设置在MB奥迪Q7后、第二个分区前的那段空闲空间中,也便是MBLANDgap空间,它的成效是跳转到stage二的第一个扇区。

实际上古板的grub在①些条件下是足以毫无stage一_5文件就能健康运营的,可是grub二则无法不够core.img。

(3)stage2

stage贰的意义是加载各样条件和加载内核,在grub第22中学尚无完全与之相对应的img文件,不过core.img中涵盖了stage二的有所功用。

当跳转到stage二的首先个扇区后,该扇区的代码负责加载stage二剩余的剧情。

只顾,stage二是存放在磁盘上的,并不曾像core.img1样嵌入到磁盘上。

(4)stage2_eltorito

效率上等价于grub第22中学的core.img中的cdboot.img部分。1般在制作救援情势的grub时才会采用到cd-rom相关文书。

(5)pxegrub

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

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或linux1陆下令之后选拔,用于为就要开行的基石传递init
ramdisk路径。

一律,基于根分区,能够使用相对路径,也得以使用相对路径。路径的表示方法和linux或linux1陆指令相同。例如:

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

initrd16 /initramfs-0-rescue-d13bce5e247540a5b5886f2bf8aabb35.img

壹.二.三 安装grub涉及的进度

设置grub2的长河差不离分两步:1是基于/usr/lib/grub/i38陆-pc/目录下的文本生成core.img,并拷贝boot.img和core.img涉及的有些模块文件到/boot/grub2/i38陆-pc/目录下;二是依照/boot/grub2/i3八六-pc目录下的文书向磁盘上写boot
loader。

理所当然,到底是先拷贝,还是先写boot
loader,没要求去搞驾驭,只要/boot/grub2/i3八六-pc下的img文件一定能经过grub2相关程序再度生成boot
loader。所以,既可以认为/boot/grub2/i3八陆-pc目录下的img文件是boot
loader的格外规备份文件,也得以认为是boot loader的源文件。

可是,img文件和boot
loader的剧情是不平等的,因为img文件还要通过grub贰相关程序来转换才是真的的boot
loader。

对于守旧的grub而言,拷贝的不是img文件,而是stage文件。

以下是设置守旧grub时,grub做的行事。很消极,grub二上未有该命令,也从没与之等价的指令。

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到磁盘上,该文件系统类型的stage一_五占用了15个扇区,最后安装stage1,并告知stage壹stage①_5的地点是第2到第一两个扇区,之所以先嵌入stage1_伍再放置stage一便是为了让stage一知道stage一_5的任务,末了还告诉了stage1stage二和配备文件menu.lst的路线。

1.4.10 cat命令

读取文件内容,借此可以扶持判断哪些是boot分区,哪个是根分区。

交互式命令行下使用。

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,然后相配第3个,依次类推。

例如:

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为”3陆7d陆a77-033b-4037-bbcb-416705ead095″的装置,但使用了多个hint选项,表示先相配bios平台下/boot分区为(hd0,msdos壹)的装备,之后还点名了多少个hint,但因为search使用的是uuid搜索格局,所以那么些hint选项是剩下的,因为单磁盘上分区的uuid是绝无仅有的。

再举个例证,假使某运转设备上有三个boot分区(如多系统共存时),分别是(hd0,msdos一)和(hd0,msdos伍),如若此时不使用uuid搜索,而是选用label情势搜索:

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

则此时将会选中(hd0,msdos5)这些boot分区,若不使用hint,将入选(hd0,msdos壹)那几个boot分区。

一.叁 grub二配置文件

grub二的默许配置文件为/boot/grub2/grub.cfg,该配置文件的写法弹性不小,但多数急需修改该配置文件时,都只需修改当中一小部分内容就能够达到规定的标准目的。

grub二-mkconfig程序可用来扭转符合多数场合包车型客车grub.cfg文件,暗许它会自行尝试探测有效的操作系统内核,并扭转对应的操作系统菜单项。使用办法万分简单,只需3个选用”-o”钦定输出文件即可。

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

1.4.11 clear命令

清屏。

1.4.8 true和false命令

直白重返true或false布尔值。

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

合法手册原来的小说:https://www.gnu.org/software/grub/manual/html\_node/Simple-configuration.html\#Simple-configuration

grub二-mkconfig是依照/etc/default/grub文件来创建布局文件的。该文件中定义的是grub的全局宏,修改内置的宏可以长足生成grub配置文件。实际上在/etc/grub.d/目录下还有局部grub配置脚本,那一个shell脚本读取1些本子配置文件(如/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时,将不列出菜谱直接行使默许的菜单项带领与之相应的操作系统,设置为”-一”时将永生永世等待选取。

是或不是出示菜单,和”GRUB_TIMEOUT_STYLE”的设置有关。

(4).GRUB_TIMEOUT_STYLE

万一该key未设置值或然安装的值为”menu”,则列出运转菜单项,并等待”GRUB_TIMEOUT”钦赐的晚点时间。

设若设置为”countdown”和”hidden”,则不显得运转菜单项,而是径直等待”GRUB_TIMEOUT”钦定的过期时间,借使超时了则运维暗许菜单项并携带对应的操作系统。在等待历程中,按下”ESC”键能够列出运转菜单。设置为countdown和hidden的分别是countdown会呈现超时时间的剩余时间,而hidden则完全隐形超时时间。

(5).GRUB_DISTRIBUTOR

设置发行版的标识名称,壹般该名称用来作为菜单的1部分,以便区分不一致的操作系统。

(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福特ExplorerY”设置为”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中某菜单项的1部分故事情节。

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

默许情形下,grub二-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.12 configfile命令

及服装载贰个钦点的公文作为grub的安排文件。但注意,导入的文书中的环境变量不在当前见效。

在grub.cfg丢失时,该命令将排上用场。

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.3.贰 脚本办法直接编写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一样。

单引号中的所有字符串都以字面意思,未有其它异样意义,尽管单引号中的转义符也被认为是彻头彻尾的字符。所以’\”是不能保留单引号的。单引号供给选拔双引号来转换,所以应该写”‘”。

双引号和单引号效用1样,但它不可能转义某多少个特殊字符,包含”$”和”\”。对于双引号中的”$”符号,它任曾几何时候都保存本意。对于”\”,只有反斜线后的字符是’$’、'”‘、’\’时才表示转义的意味,此外,某行若以反斜线结尾,则意味续行,但法定不建议在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:该采用为该菜单关联四个唯1的数值。id的值能够由ASCII字母、数字//下划线组成,且无法数字初始。

不无其余的参数包涵title都被当作地方参数字传送递给大括号中的命令,但title总是$一,除title外的其余参数,地方值从前向后类推。

  • break [n]:强制退出for/while/until循环
  • continue [n]:跳到下贰回迭代,即进入下壹回巡回
  • return [n]:内定重回状态码
  • setparams [arg] …:从$一开头轮换地点参数
  • shift
    [n]:踢掉前n个参数,使得第n+贰个参数变为$一,但和shell中不1样的是,踢掉了前n个参数后,从$#-n+1到$#那几个参数的岗位不变

实际怎么编写grub.cfg文件,继续看下文的指令和变量。

1.4.13 echo命令

echo [-n] [-e] string

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

1.4.10 cat命令

读取文件内容,借此可以扶助判断哪些是boot分区,哪个是根分区。

交互式命令行下使用。

一.4 命令行和菜单项中的命令

法定手册最初的文章:https://www.gnu.org/software/grub/manual/html\_node/Commands.html\#Commands

grub二支持广大发令,某些命令只可以在交互式命令行下使用,有个别命令可用在陈设文件中。在解救格局下,唯有insmod、ls、set和unset命令可用。

无须通晓全部的一声令下,了解用的上的多少个指令即可。

1.4.14 export命令

导出环境变量,若在configfile的file中程导弹出环境变量,将会在现阶段条件也卓有成效。

1.4.11 clear命令

清屏。

1.4.1 help命令

help [pattern]

展现能相配到pattern的具有命令的印证音讯和usage消息,即便不点名patttern,将显得全体命令的回顾音讯。

例如”help cmos”。

澳门金沙国际 21

1.4.15 halt和reboot命令

关机或重启

1.4.12 configfile命令

立马装载二个点名的文本作为grub的配备文件。但只顾,导入的文件中的环境变量不在当前生效。

在grub.cfg丢失时,该命令将排上用场。

1.4.2 boot命令

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

只在交互式命令行下可用。其实在menuentry命令的最后就隐含了boot命令。

1.4.16 ls命令

ls [args]

就算不给定任何参数,则列出grub可知的配备。

若是给定的参数是3个分区,则显得该分区的文件系统新闻。

一旦给定的参数是三个相对路径表示的目录,则体现该目录下的有着文件。

例如:

1.4.13 echo命令

echo [-n] [-e] string

“-n”和”-e”用法同shell中echo。假诺要引用变量,使用${var}的点子。

1.4.3 set和unset命令

set [envvar=value]
unset envvar

前者设置环境变量envvar的值,借使不给定参数,则列出当前环境变量。

后来人释放环境变量envvar。

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.14 export命令

导出环境变量,若在configfile的file中程导弹出环境变量,将会在现阶段环境也一蹴而就。

1.4.4 lsmod命令和insmod命令

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

专注,若要导入援助ext文件系统的模块时,只需导入ext2.mod即可,实际上也从没ext三和ext肆对应的模块。

1.4.18 save_env和list_env命令

将环境变量保存到环境变量块中,以及列出当前的环境变量块中的变量。

1.4.15 halt和reboot命令

关机或重启

1.4.5 linux和linux16命令

linux file [kernel_args]
linux16 file [kernel_args]

都代表装载钦命的基础文件,并传递内核运行参数。linux16意味以观念的15个人运维商事运营水源,linux表示以三十4人运行商业事务运行水源,但linux命令比linux1陆有部分限量。但大部分时候,它们是足以通用的。

在linux或linux1六下令之后,必须紧跟着使用init或init1陆命令装载init
ramdisk文件。

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

澳门金沙国际 22

但在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/sda二”,

1.4.19 loopback命令

loopback [-d] device file

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

例如:

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

1.4.16 ls命令

ls [args]

借使不给定任何参数,则列出grub可知的装备。

若是给定的参数是三个分区,则展现该分区的文件系统消息。

万壹给定的参数是1个相对路径表示的目录,则显得该目录下的保有文件。

例如:

澳门金沙国际 23

1.4.6 initrd和initrd16命令

initrd file

不得不紧跟在linux或linux16限令之后选拔,用于为就要运营的基础传递init
ramdisk路径。

1如既往,基于根分区,能够行使相对路径,也得以动用相对路径。路径的象征方法和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.20 normal和normal_exit命令

跻身和剥离normal格局,normal是争辩于救援形式而言的,只要不是在救援形式下,正是在normal方式下。

援救方式下,只好选取格外少的通令,而normal格局下则足以应用13分多的授命。

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.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语句中的第2个search中搜索uuid为”3陆七d六a77-033b-4037-bbcb-41670五ead0玖伍”的设备,但接纳了七个hint选项,表示先相称bios平台下/boot分区为(hd0,msdos一)的配备,之后还钦点了几个hint,但因为search使用的是uuid搜索格局,所以那一个hint选项是多余的,因为单磁盘上分区的uuid是唯1的。

再举个例证,借使某运维设备上有多少个boot分区(如多系统共存时),分别是(hd0,msdos1)和(hd0,msdos伍),假使那时候不接纳uuid搜索,而是选择label格局搜索:

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

则此时将会入选(hd0,msdos5)那几个boot分区,若不选择hint,将当选(hd0,msdos一)这么些boot分区。

1.4.21 password和password_pbkdf2命令

password user clear-password
password_pbkdf2 user hashed-password

前端选择公开密码定义一个名称为user的用户。不提出利用此命令。

后人使用哈希加密后的密码定义三个名称叫user的用户,加密的密码通过”grub-mkpasswd-pbkdf二”工具生成。提议选取该命令。

1.4.18 save_env和list_env命令

将环境变量保存到环境变量块中,以及列出当前的环境变量块中的变量。

澳门金沙国际 24

澳门金沙国际 25

1.4.8 true和false命令

直白回到true或false布尔值。

1.5 多少个常设置的嵌入变量

1.4.19 loopback命令

loopback [-d] device file

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

例如:

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

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.5.1 chosen变量

当开机时相中有些菜单项运维时,该菜单的title将被赋值给chosen变量。该变量一般只用于引用,而不用于修改。

1.4.20 normal和normal_exit命令

进去和退出normal模式,normal是相持于救援情势而言的,只要不是在挽救形式下,正是在normal情势下。

救死扶伤方式下,只可以采用极度少的命令,而normal形式下则足以选用11分多的指令。

1.4.10 cat命令

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

交互式命令行下使用。

1.5.2 cmdpath变量

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

1.4.21 password和password_pbkdf2命令

password user clear-password
password_pbkdf2 user hashed-password

前者选择公开密码定义一个名称为user的用户。不提议选择此命令。

后人使用哈希加密后的密码定义叁个名叫user的用户,加密的密码通过”grub-mkpasswd-pbkdf贰”工具生成。建议使用该命令。

1.4.11 clear命令

清屏。

1.5.3 default变量

钦点默许的菜单项,1般其后都会跟随timeout变量。

default内定暗中同意菜单时,可选用菜单的title,也得以运用菜单的id,或许数值顺序,当使用数值顺序点名default时,从0开头总结。

一.五 几个常设置的放置变量

1.4.12 configfile命令

登时装载2个内定的文件作为grub的计划文件。但只顾,导入的文书中的环境变量不在当前见效。

在grub.cfg丢失时,该命令将排上用场。

1.5.4 timeout变量

设置菜单等待超时时间,设置为0时将间接开行默许菜单项而不展现菜单,设置为”-一”时将永久等待手动选取。

1.5.1 chosen变量

当开机时相中有些菜单项运行时,该菜单的title将被赋值给chosen变量。该变量壹般只用于引用,而不用于修改。

1.4.13 echo命令

echo [-n] [-e] string

“-n”和”-e”用法同shell中echo。若是要引用变量,使用${var}的法子。

1.5.5 fallback变量

当暗许菜单项运营战败,则应用该变量钦赐的菜单项运营,钦命形式同default,可采纳数值(从0开头总括)、title或id钦点。

1.5.2 cmdpath变量

grub二加载的core.img的目录路径,是相对路径,即包罗了设备名的门道,如(hd0,gpt壹)/boot/grub2/。该变量值不该修改。

1.4.14 export命令

导出环境变量,若在configfile的file中程导弹出环境变量,将会在眼下环境也行之有效。

1.5.6 grub_platform变量

点名该平台是”pc”依然”efi”,pc表示的便是观念的bios平台。

该变量不应当被修改,而应该被引用,例如用于if判断语句中。

1.5.3 default变量

钦点暗中认可的菜单项,壹般其后都会跟随timeout变量。

default钦定私下认可菜单时,可使用菜单的title,也足以利用菜单的id,大概数值顺序,当使用数值顺序点名default时,从0初阶猜测。

1.4.15 halt和reboot命令

关机或重启

1.5.7 prefix变量

在grub运行的时候,grub自动将/boot/grub2索引的相对路径赋值给该变量,使得以后能够一贯从该变量所代表的目录下加载各文件或模块。

例如,大概自行安装为:

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

从而能够应用”$prefix/grubN.cfg”来引用/boot/grub2/grubN.cfg文件。

该变量不应当修改,且若手动设置,则必须设置科学,不然牵一发而动全身。

1.5.4 timeout变量

设置菜单等待超时时间,设置为0时将间接开发银行暗中同意菜单项而不彰显菜单,设置为”-一”时将永久等待手动采用。

1.4.16 ls命令

ls [args]

假定不给定任何参数,则列出grub可知的设备。

假若给定的参数是3个分区,则展示该分区的文件系统音信。

一经给定的参数是贰个相对路径表示的目录,则呈现该目录下的具备文件。

例如:

澳门金沙国际 26

1.5.8 root变量

该变量钦定根设备的称谓,使得后续使用从”/”开首的相对路径引用文件时将从该root变量钦点的路线始于。一般该变量是grub运维的时候由grub依据prefix变量设置而来的。

例如prefix=(hd0,gpt一)/boot/grub二,则root=(hd0,gpt一),后续就足以运用相对路径/vmlinuz-XXX表示(hd0,gpt1)/vmlinuz-XXX文件。

注意:在Linux中,从根”/”开首的路径表示相对路径,如/etc/fstab。但grub中,从”/”开首的代表相对路径,其相对的口径是root变量安装的值,而使用”(dev_name)/”发轫的不二法门才表示相对路径。

一般root变量都代表/boot所在的分区,但那不是相对的,如若设置为根文件系统所在分区,如root=(hd0,gpt二),则三番五次能够使用/etc/fstab来引用”(hd0,gpt二)/etc/fstab”文件。

该变量在grub第22中学貌似不要修改,但若修改则必须钦命正确。

其它,root变量还应当于linux或linux16命令所钦点的基础运转参数”root=”区分开来,内核运营参数中的”root=”的意思是向来的,其内定的是根文件系统所在分区。例如:

set root='hd0,msdos1'
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

貌似意况下,/boot都会独自分区,所以root变量钦命的根设备和root运维参数所钦赐的根分区不是同3个分区,除非/boot不是独自的分区,而是在根分区下的三个索引。

1.5.5 fallback变量

当私下认可菜单项运行失利,则接纳该变量内定的菜单项运转,钦命形式同default,可采纳数值(从0早先盘算)、title或id钦命。

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值。

一.陆 grub配置和装置示例

首先写三个grub.cfg。例如此处,在msdos磁盘上设置了八个操作系统,CentOS
七和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.4.18 save_env和list_env命令

将环境变量保存到环境变量块中,以及列出当前的环境变量块中的变量。

澳门金沙国际 27

澳门金沙国际 28

1.7 传统grub简述

因为本文主要介绍grub2,所以守旧的grub只不难介绍下,其实后边早已谈到了广大价值观grub和grub二的可比了。其它,古板grub已丰盛强大,丰硕应付一般的急需。

1.5.7 prefix变量

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

例如,也许自行安装为:

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

所以能够选择”$prefix/grubN.cfg”来引用/boot/grub2/grubN.cfg文件。

该变量不该修改,且若手动设置,则必须安装科学,不然牵一发而动全身。

1.4.19 loopback命令

loopback [-d] device file

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

例如:

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

1.7.1 grub安装

比如设置到/dev/sda上。

shell> grub-install /dev/sda

1.5.8 root变量

该变量钦点根设备的称谓,使得后续使用从”/”初始的绝对路径引用文件时将从该root变量内定的门路始于。1般该变量是grub运营的时候由grub依照prefix变量设置而来的。

比如prefix=(hd0,gpt一)/boot/grub二,则root=(hd0,gpt一),后续就足以选用相对路径/vmlinuz-XXX代表(hd0,gpt一)/vmlinuz-XXX文件。

只顾:在Linux中,从根”/”开头的途径表示相对路径,如/etc/fstab。但grub中,从”/”开端的象征相对路径,其相对的尺码是root变量设置的值,而采纳”(dev_name)/”开头的路子才表示相对路径。

相似root变量都表示/boot所在的分区,但那不是纯属的,要是设置为根文件系统所在分区,如root=(hd0,gpt2),则一而再能够选择/etc/fstab来引用”(hd0,gpt二)/etc/fstab”文件。

该变量在grub第22中学1般不要修改,但若修改则必须钦点正确。

除此以外,root变量还应该于linux或linux1六发令所钦定的基本运维参数”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个目录。

1.4.20 normal和normal_exit命令

跻身和剥离normal情势,normal是相对于救援格局而言的,只要不是在解救方式下,便是在normal情势下。

解救格局下,只可以动用十三分少的吩咐,而normal格局下则能够动用十分多的下令。

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是不是是一个独门的分区,它影响前面路径的陈设。

在3个好端端的操作系统中查阅/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表示在第3块磁盘上,hd0,0的第3个0表示boot在率先个分区上,grub二在分区的计量上是从壹起来的,这是价值观grub和grub贰不一致的地点。

kernel定义内核文件的路线和运维参数,等价于grub二的linux命令或linux1陆指令。首先表达参数,ro代表只读,root=/dev/sda[N]或者root=UUID=”device_uuid_num”钦赐根文件系统所在的分区,那是必须的参数。rhgb代表在操作系统运营进程中接纳图形界面输出1些新闻,将其简要能够加速运行速度,quiet代表运维操作系统时静默输出信息。再表明路径,即使是boot是独立分区的,则kernel的门路定义形式为/vmlinuz-xxx,假如没有独自分区,则指明其相对路径,1般都是在根文件系统下的目录,所以1般为/boot/vmlinuz-xxx。

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

要么利用下图的UUID的诀要。

比方未有点名root=的选项,将报错“no or empty root …… dracut…kernel
panic”的一无可取。如下图。

 

 回到类别文章大纲:

一.陆 grub配置和设置示例

首先写3个grub.cfg。例如此处,在msdos磁盘上设置了四个操作系统,CentOS
七和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.4.21 password和password_pbkdf2命令

password user clear-password
password_pbkdf2 user hashed-password

前者选取公开密码定义一个名叫user的用户。不建议使用此命令。

后任使用哈希加密后的密码定义一个名称为user的用户,加密的密码通过”grub-mkpasswd-pbkdf二”工具生成。提议使用该命令。

转发请注解出处:

   

翻译了grub二 官方手册
的多方内容,然后本身收十了弹指间。因为内容有点杂,所以章节陈设上…

1.7 传统grub简述

因为本文首要介绍grub2,所以守旧的grub只简单介绍下,其实前边早已谈到了广大守旧grub和grub二的相比较了。别的,守旧grub已充分强劲,丰硕应付一般的急需。

壹.5 多少个常设置的放权变量

1.7.1 grub安装

比如设置到/dev/sda上。

shell> grub-install /dev/sda

1.5.1 chosen变量

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

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

在申明配置格局在此以前,必要证实2个关键点,boot是或不是是三个单身的分区,它影响前面路径的布置。

在一个符合规律化的操作系统中查看/boot/grub/grub.conf文件,能够在NOTICE段看到提醒,说你是还是不是拥有贰个单身的boot分区?假如有则代表kernel和initrd的门道是从/初始的而不是/boot开首的,如/vmlinuz-xxx,假设没有单独的boot分区,则kernel和initrd的路子中须要指明boot路径,例如Boot没有分区而是在/文件系统下的3个索引,则/boot/vmlinuz-xxx。

root
(hd0,0)定义grub识其余根。1般定义的都以boot所在的分区,grub只好分辨hd,所以那里不得不选择hd,hd0表示在率先块磁盘上,hd0,0的首个0表示boot在第一个分区上,grub二在分区的计量上是从一始发的,那是价值观grub和grub二分化的地点。

kernel定义内核文件的门径和起步参数,等价于grub2的linux命令或linux1六指令。首先表明参数,ro代表只读,root=/dev/sda[N]或者root=UUID=”device_uuid_num”钦点根文件系统所在的分区,那是必须的参数。rhgb代表在操作系统运维进度中央银行使图形界面输出一些新闻,将其简要能够加速运维速度,quiet代表运维操作系统时静默输出新闻。再表达路径,要是是boot是单独分区的,则kernel的路径定义格局为/vmlinuz-xxx,假若未有单身分区,则指明其相对路径,一般都以在根文件系统下的目录,所以一般为/boot/vmlinuz-xxx。

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

澳门金沙国际 29

抑或选取下图的UUID的方法。

澳门金沙国际 30

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

澳门金沙国际 31

1.5.2 cmdpath变量

grub二加载的core.img的目录路径,是相对路径,即包蕴了设施名的不二诀要,如(hd0,gpt一)/boot/grub2/。该变量值不该修改。

1.5.3 default变量

点名暗中同意的菜单项,1般其后都会跟随timeout变量。

default钦点暗中同意菜单时,可使用菜单的title,也足以运用菜单的id,恐怕数值顺序,当使用数值顺序点名default时,从0开始猜度。

1.5.4 timeout变量

安装菜单等待超时时间,设置为0时将直接开发银行暗中认可菜单项而不出示菜单,设置为”-一”时将永远等待手动选取。

1.5.5 fallback变量

当默许菜单项运维退步,则运用该变量钦赐的菜单项运转,钦赐格局同default,可应用数值(从0开始计算)、title或id钦点。

1.5.6 grub_platform变量

钦赐该平台是”pc”依然”efi”,pc表示的正是观念的bios平台。

该变量不该被改动,而应当被引述,例如用于if判断语句中。

1.5.7 prefix变量

在grub运转的时候,grub自动将/boot/grub二目录的相对路径赋值给该变量,使得以往能够一贯从该变量所表示的目录下加载各文件或模块。

譬如说,可能自行安装为:

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

故而能够利用”$prefix/grubN.cfg”来引用/boot/grub2/grubN.cfg文件。

该变量不应有修改,且若手动设置,则必须安装科学,不然牵一发而动全身。

1.5.8 root变量

该变量钦点根设备的称谓,使得后续使用从”/”开头的相对路径引用文件时将从该root变量钦定的路线始于。一般该变量是grub运行的时候由grub依据prefix变量设置而来的。

比如prefix=(hd0,gpt1)/boot/grub贰,则root=(hd0,gpt1),后续就能够运用相对路径/vmlinuz-XXX代表(hd0,gpt1)/vmlinuz-XXX文件。

留意:在Linux中,从根”/”起始的门径表示相对路径,如/etc/fstab。但grub中,从”/”起头的意味相对路径,其相对的标准是root变量设置的值,而利用”(dev_name)/”发轫的途径才代表相对路径。

诚如root变量都意味着/boot所在的分区,但那不是纯属的,要是设置为根文件系统所在分区,如root=(hd0,gpt二),则一而再可以应用/etc/fstab来引用”(hd0,gpt2)/etc/fstab”文件。

该变量在grub第22中学一般不要修改,但若修改则必须钦命正确。

除此以外,root变量还相应于linux或linux1陆发令所内定的基业运行参数”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.陆 grub配置和安装示例

率先写1个grub.cfg。例如此处,在msdos磁盘上安装了多个操作系统,CentOS
柒和CentOS 陆。

# 设置一些全局环境变量
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.7 传统grub简述

因为本文首要介绍grub二,所以古板的grub只简单介绍下,其实前面早已谈起了成都百货上千价值观grub和grub贰的比较了。其它,守旧grub已丰硕强大,丰裕应付壹般的须求。

1.7.1 grub安装

例如设置到/dev/sda上。

shell> grub-install /dev/sda

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

在印证配置方式在此以前,供给证Bellamy(Bellamy)个关键点,boot是还是不是是一个独自的分区,它影响前边路径的布署。

在1个正规的操作系统中查看/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在第壹个分区上,grub二在分区的总括上是从一从头的,那是价值观grub和grub二分化的地点。

kernel定义内核文件的不二等秘书籍和开发银行参数,等价于grub二的linux命令或linux1陆发令。首先表达参数,ro代表只读,root=/dev/sda[N]或者root=UUID=”device_uuid_num”钦赐根文件系统所在的分区,那是必须的参数。rhgb表示在操作系统运转进度中应用图形界面输出一些新闻,将其简要能够加速运转速度,quiet代表运转操作系统时静默输出消息。再表明路径,如若是boot是独自分区的,则kernel的路线定义方式为/vmlinuz-xxx,借使未有独立分区,则指明其相对路径,壹般都是在根文件系统下的目录,所以一般为/boot/vmlinuz-xxx。

initrd定义init
ramdisk的门道,路径的定义格局同kernel。除了路径之外未有此外参数。

澳门金沙国际 32

要么应用下图的UUID的主意。

澳门金沙国际 33

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

澳门金沙国际 34

 

 回到类别文章大纲:http://www.cnblogs.com/f-ck-need-u/p/7048359.html

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

   

相关文章