Introduction détaillée à grub2

零下一度
Libérer: 2017-06-30 15:40:07
original
7385 Les gens l'ont consulté

Traduit la majeure partie du manuel officiel de grub2 puis je l'ai réglé moi-même. Parce que le contenu est un peu compliqué, la disposition des chapitres peut ne pas être très raisonnable, alors comprenez.


Répertoire de cet article :

1.1 Contenu de base

1.2 Installer grub2

1.3 Fichier de configuration grub2

1.4 Commandes dans la ligne de commande et les éléments de menu

1.5 Plusieurs variables intégrées courantes

1.6 Exemple de configuration et d'installation de grub

1.7 Brève introduction au grub traditionnel


Cet article présente principalement grub2 À la fin de l'article, le grub traditionnel est brièvement décrit, mais le contenu de grub2 contient de nombreuses comparaisons entre grub2 et grub traditionnel.

Si vous voulez juste connaître le rôle des fichiers boot.img/core.img/diskboot.img/kernel.img dans grub2 ou le rôle des fichiers stage1/stage1_5/stage2 dans les fichiers traditionnels grub, veuillez passer directement au contenu connexe pour le lire.


1.1 Contenu de base

1.1.1 La différence entre grub2 et grub

Texte original du manuel officiel :

Expliquez-en seulement quelques-uns principaux :

1. Le nom du fichier de configuration a changé. Dans grub, le fichier de configuration est grub.conf ou menu.lst (un lien symbolique vers grub.conf) et est renommé grub.cfg dans grub2.

2.grub2 ajoute beaucoup de syntaxe, qui est plus proche d'un langage de script, comme la prise en charge des variables, des jugements conditionnels et des boucles.

3. Dans grub2, le nom de l'appareil commence à 1, mais dans grub, il commence à 0.

4.grub2 utilise des fichiers img et n'utilise plus stage1, stage1.5 et stage2 dans grub.

5. Prend en charge l'interface graphique pour configurer grub, mais vous devez installer le package grub-customizer, qui est fourni par la source epel.

6. Après être entré dans l'environnement du système d'exploitation, la commande grub n'est plus fournie, c'est-à-dire que l'interface interactive grub ne peut pas être saisie, elle ne peut être saisie qu'au démarrage de l'ordinateur, ce qui constitue un gros défaut. .

7. Il n'y a pas de commande find utile dans grub2, ce qui constitue une autre lacune majeure.

1.1.2 Habitudes de dénomination et représentation du chemin de fichier

Texte original du manuel officiel :

(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文件
Copier après la connexion

1.1.3 Comment grub2 démarre le système d'exploitation

Texte original du manuel officiel :

grub2 prend en charge deux façons de démarrer le système d'exploitation :

  • Démarrage direct : (chargement direct) Démarrez directement le système d'exploitation écrit dans le fichier de configuration par défaut via le chargeur de démarrage grub2 par défaut

  • chain Type boot : (chain-load) Utilisez le chargeur de démarrage grub2 par défaut pour démarrer en chaîne un autre chargeur de démarrage. Le chargeur de démarrage démarrera le système d'exploitation correspondant

Généralement, seule la première méthode est utilisée. . La deuxième méthode n'est utilisée que lorsque vous souhaitez démarrer un système d'exploitation que Grub ne prend pas en charge par défaut.

1.1.4 Distribution des fichiers après l'installation du programme grub2 et du programme grub traditionnel

Une fois le logiciel grub traditionnel installé, certaines étapes seront générées dans le fichier /usr/share/grub/RELEASE/ document d'annuaire.

[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
Copier après la connexion

Une fois le logiciel grub2 installé, de nombreux fichiers de module et fichiers img seront générés dans le répertoire /usr/lib/grub/i386-pc/ répertoire , comprend également certains fichiers de liste lst.

[root@server7 ~]# ls /usr/lib/grub/i386-pc/*.mod | wc -l257[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
Copier après la connexion

1.1.5 boot loader和grub的关系

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

传统的grub将stage1转换后的内容安装到MBR(VBR或EBR)中的boot loader部分,将stage1_5转换后的内容安装在紧跟在MBR后的扇区中,将stage2转换后的内容安装在/boot分区中。

grub2将boot.img转换后的内容安装到MBR(VBR或EBR)中的boot loader部分,将diskboot.img和kernel.img结合成为core.img,同时还会嵌入一些模块或加载模块的代码到core.img中,然后将core.img转换后的内容安装到磁盘的指定位置处。

它们之间更具体的关系见下文。

1.1.6 grub2的安装位置

官方手册原文:

严格地说是core.img的安装位置,因为boot.img的位置是固定在MBR或VBR或EBR上的。

(1).MBR

MBR格式的分区表用于PC BIOS平台,这种格式允许四个主分区和额外的逻辑分区。使用这种格式的分区表,有两种方式安装GURB:

  1. 嵌入到MBR和第一个分区中间的空间,这部分就是大众所称的"boot track","MBR gap"或"embedding area",它们大致需要31kB的空间;

  2. 将core.img安装到某个文件系统中,然后使用分区的第一个扇区(严格地说不是第一个扇区,而是第一个block)存储启动它的代码。

这两种方法有不同的问题。

使用嵌入的方式安装grub,就没有保留的空闲空间来保证安全性,例如有些专门的软件就是使用这段空间来实现许可限制的;另外分区的时候,虽然会在MBR和第一个分区中间留下空闲空间,但可能留下的空间会比这更小。

方法二安装grub到文件系统,但这样的grub是脆弱的。例如,文件系统的某些特性需要做尾部包装,甚至某些fsck检测,它们可能会移动这些block。

GRUB开发团队建议将GRUB嵌入到MBR和第一个分区之间,除非有特殊需求,但仍必须要保证第一个分区至少是从第31kB(第63个扇区)之后才开始创建的。

现在的磁盘设备,一般都会有分区边界对齐的性能优化提醒,所以第一个分区可能会自动从第1MB处开始创建。

(2).GPT

一些新的系统使用GUID分区表(GPT)格式,这种格式是EFI固件所指定的一部分。但如果操作系统支持的话,GPT也可以用于BIOS平台(即MBR风格结合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
Copier après la connexion

如果使用gdisk分区工具时,则分类类型设置为"EF02"。

如果使用其他的分区工具,可能需要指定guid,则可以指定其guid为"21686148-6449-6e6f-744e656564454649"。

下图是某个bios/gpt格式的bios boot分区信息,从中可见,它大小为1M,没有文件系统,分区表示为bios_grub。

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

1.1.7 进入grub命令行

在传统的grub上,可以直接在bash下敲入grub命令进入命令交互模式,但grub2只能在系统启动前进入grub交互命令行。

按下e见可以编辑所选菜单对应的grub菜单配置项,按下c键可以进入grub命令行交互模式。


1.2 安装grub2

官方手册原文:

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

1.2.1 grub安装命令

安装方式非常简单,只需调用grub2-install,然后给定安装到的设备名即可。

shell> grub2-install /dev/sda
Copier après la connexion
Copier après la connexion

这样的安装方式,默认会将img文件放入到/boot目录下,如果想自定义放置位置,则使用--boot-directory选项指定,可用于测试练习grub的时候使用,但在真实的grub环境下不建议做任何改动。

shell> grub2-install --boot-director=/mnt/boot /dev/fd0
Copier après la connexion

如果是EFI固件平台,则必须挂载好efi系统分区,一般会挂在/boot/efi下,这是默认的,此时可直接使用grub2-install安装。

shell> grub2-install
Copier après la connexion

如果不是挂载在/boot/efi下,则使用--efi-directory指定efi系统分区路径。

shell> grub2-install --efi-directory=/mnt/efi
Copier après la connexion

grub2-install est en fait un script shell utilisé pour appeler d'autres outils. Les vraies fonctions sont complétées par d'autres outils, donc si vous êtes très familier avec les commandes et mécanismes internes de grub, vous n'avez pas du tout besoin de grub2-install.

La commande d'installation grub traditionnelle correspondante est grub-install, et son utilisation est la même que grub2-install.


1.2.2 Description des divers fichiers img et scène

Texte original du manuel officiel :

Le fichier img est généré par grub2 et le fichier stage est généré par grub traditionnel. Vous trouverez ci-dessous les descriptions des différents fichiers.

1.2.2.1 fichiers img dans grub2

grub2 génère plusieurs fichiers img, certains sont distribués dans le répertoire /usr/lib/grub/i386-pc, et certains sont distribués dans /boot/ Dans le répertoire grub2/i386-pc, je pense que vous comprendrez la relation entre eux après avoir lu ce qui suit.

La figure suivante décrit la relation entre différents fichiers img. Parmi eux, core.img est généré dynamiquement et le chemin est /boot/grub2/i386-pc/core.img, tandis que d'autres img existent dans le répertoire /usr/lib/grub/i386-pc. Bien entendu, lors de l'installation de grub, boot.img sera copié dans le répertoire /boot/grub2/i386-pc.

(1)boot.img

Sous la plate-forme BIOS, boot.img est le premier fichier img démarré par grub, et il est écrit dans le MBR ou le secteur de démarrage de la partition, car la taille du secteur de démarrage est de 512 octets, la taille du fichier img est également de 512 octets.

La seule fonction de boot.img est de lire le premier secteur appartenant à core.img et d'y accéder, donnant le contrôle à l'img de ce secteur. En raison des limitations de taille, boot.img ne peut pas comprendre la structure du système de fichiers, donc grub2-install codera en dur l'emplacement de core.img dans boot.img, afin que l'emplacement de core.img puisse être trouvé.

(2)core.img

core.img est créé dynamiquement par le programme grub2-mkimage basé sur diskboot.img, kernel.img et une série de modules. Il y a suffisamment de modules fonctionnels intégrés dans core.img pour garantir que grub puisse accéder à /boot/grub, et les modules pertinents peuvent être chargés pour implémenter des fonctions associées, telles que le chargement du menu de démarrage, le chargement d'informations sur le système d'exploitation cible, etc. grub2 est largement utilisé. Le module de fonction dynamique rend la taille de core.img suffisamment petite.

core.img contient le contenu de plusieurs fichiers img, notamment diskboot.img/kernel.img, etc.

L'emplacement d'installation de core.img varie selon les disques MBR et les disques GPT, comme expliqué ci-dessus.

(3)diskboot.img

Si le périphérique de démarrage est un disque dur, c'est-à-dire lors du démarrage à partir du disque dur, le contenu du premier secteur de core.img est diskboot. img. La fonction de diskboo.img est de lire les parties restantes de core.img en mémoire et de transférer le contrôle vers kernel.img. Étant donné que le système de fichiers n'est pas reconnu pour le moment, tous les emplacements de core.img sont répertoriés dans la liste de blocage. Codé de telle manière que diskboot.img puisse trouver le contenu restant.

Étant donné que le fichier img occupe un secteur, sa taille est de 512 octets.

(4)cdboot.img

Si le périphérique de démarrage est un lecteur optique (cd-rom), c'est-à-dire lors du démarrage à partir du lecteur optique, le contenu du premier secteur du noyau .img est cdboo .img. Sa fonction est la même que diskboot.img.

(5)pexboot.img

En cas de démarrage à partir de l'environnement PXE du réseau, le contenu du premier secteur de core.img est pxeboot.img.

(6)kernel.img

Le fichier kernel.img contient l'environnement d'exécution de base de grub : structure de périphérique, descripteur de fichier, variables d'environnement, analyseur de ligne de commande en mode de secours, etc. Il est rarement utilisé directement car ils sont entièrement intégrés dans core.img. Notez que kernel.img est le noyau de grub et n'a rien à voir avec le noyau du système d'exploitation.

Si vous faites attention, vous constaterez que kernel.img lui-même occupe 28 Ko d'espace, mais après avoir été intégré dans core.img, le fichier core.img ne fait que 26 Ko. En effet, kernel.img dans core.img est compressé.

(7)lnxboot.img

Le fichier img est placé au début de core.img, ce qui rend grub semblable au noyau Linux, afin que core.img puisse être utilisé par "l'image" de LILO ="identifier. Bien sûr, ceci est utilisé conjointement avec LILO, mais qui utilise encore LILO maintenant ?

(8)*.mod

Divers modules fonctionnels, dont certains ont été embarqués dans core.img, ou seront automatiquement chargés par grub, mais parfois il est aussi nécessaire d'utiliser le commande insmod pour les charger manuellement.

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目录下拷贝过来的。

(1)stage1

stage1文件在功能上等价于boot.img文件。目的是跳转到stage1_5或stage2的第一个扇区上。

(2)*_stage1_5

*stage1_5文件包含了各种识别文件系统的代码,使得grub可以从文件系统中读取体积更大功能更复杂的stage2文件。从这一方面考虑,它类似于core.img中加载对应文件系统模块的代码部分,但是core.img的功能远比stage1_5多。

stage1_5一般安装在MBR后、第一个分区前的那段空闲空间中,也就是MBR gap空间,它的作用是跳转到stage2的第一个扇区。

其实传统的grub在某些环境下是可以不用stage1_5文件就能正常运行的,但是grub2则不能缺少core.img。

(3)stage2

stage2的作用是加载各种环境和加载内核,在grub2中没有完全与之相对应的img文件,但是core.img中包含了stage2的所有功能。

当跳转到stage2的第一个扇区后,该扇区的代码负责加载stage2剩余的内容。

注意,stage2是存放在磁盘上的,并没有像core.img一样嵌入到磁盘上。

(4)stage2_eltorito

功能上等价于grub2中的core.img中的cdboot.img部分。一般在制作救援模式的grub时才会使用到cd-rom相关文件。

(5)pxegrub

功能上等价于grub2中的core.img中的pxeboot.img部分。

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.
Copier après la connexion

首先检测各stage文件是否存在于/boot/grub目录下,随后嵌入stage1_5到磁盘上,该文件系统类型的stage1_5占用了15个扇区,最后安装stage1,并告知stage1 stage1_5的位置是第1到第15个扇区,之所以先嵌入stage1_5再嵌入stage1就是为了让stage1知道stage1_5的位置,最后还告知了stage1 stage2和配置文件menu.lst的路径。


1.3 grub2配置文件

grub2的默认配置文件为/boot/grub2/grub.cfg,该配置文件的写法弹性非常大,但绝大多数需要修改该配置文件时,都只需修改其中一小部分内容就可以达成目标。

grub2-mkconfig程序可用来生成符合绝大多数情况的grub.cfg文件,默认它会自动尝试探测有效的操作系统内核,并生成对应的操作系统菜单项。使用方法非常简单,只需一个选项"-o"指定输出文件即可。

shell> grub2-mkconfig -o /boot/grub2/grub.cfg
Copier après la connexion

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

官方手册原文:

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
Copier après la connexion

在/etc/default/grub中,使用"key=vaule"的格式,key全部为大小字母,如果vaule部分包含了空格或其他特殊字符,则需要使用引号包围。

例如,下面是一个/etc/default/grub文件的示例:

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

虽然可用的宏较多,但可能用的上的就几个: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 {
    ...
}
Copier après la connexion

如果想将此菜单设为默认菜单,则可设置"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_RECOVERY"设置为"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 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

Définissez l'image d'arrière-plan. L'image d'arrière-plan doit être lisible par grub. Le suffixe du nom du fichier image doit être ".png", ".tga", ".jpg", ".jpeg". Si nécessaire, grub appuiera. Réduisez la taille de l’image pour l’adapter à l’écran.

(11).GRUB_THEME

Définissez le thème du menu Grub.

(12).GRUB_GFXPAYLOAD_LINUX

Lorsqu'il est défini sur "text", il forcera Linux à démarrer en mode texte. Dans certains cas, le mode graphique peut ne pas être pris en charge.

(13).GRUB_DISABLE_OS_PROBER

Par défaut, grub2-mkconfig tentera d'utiliser le programme os-prober (s'il est déjà installé, il devrait l'être par défaut) pour détecter les autres programmes disponibles noyaux du système d'exploitation et générez les éléments de menu de démarrage correspondants. Définissez sur « true » pour désactiver la détection automatique.

(14).GRUB_DISABLE_SUBMENU

Par défaut, si grub2-mkconfig trouve plusieurs noyaux de la même version ou d'une version inférieure, il générera uniquement un menu de niveau supérieur pour la version la plus élevée de le noyau. Tous les autres menus du noyau de version basse sont placés dans des sous-menus, et le réglage sur "y" les générera tous en tant que menus de niveau supérieur.

(15).GRUB_HIDDEN_TIMEOUT (obsolète, mais toujours valable pour la compatibilité descendante)

Utilisez "GRUB_TIMEOUT_STYLE={countdown|hidden}" pour remplacer cet élément

( 16) .GRUB_HIDDEN_TIMEOUT_QUIET (obsolète, mais toujours valable pour la compatibilité descendante)

Utilisé avec GRUB_HIDDEN_TIMEOUT, vous pouvez utiliser GRUB_TIMEOUT_STYLE=countdown pour remplacer ces deux éléments.

1.3.2 Écrire le fichier grub.cfg directement dans le script

Texte original du manuel officiel :

  • Caractère de commentaire : les caractères commençant par # sont considérés comme des commentaires, donc grub prend en charge les commentaires en ligne

  • Opérateurs de connexion : { } & $ < >

  • Mots-clés et symboles réservés : ! [[ ]] { } case do done elif else esac fi pour la fonction si dans l'entrée de menu, sélectionnez puis time jusqu'à while.
  • Tous les mots-clés ne sont pas utiles, ils sont uniquement fournis à l'avance pour une future extension des fonctions.

    Guillemets et caractères d'échappement
  • Les caractères spéciaux doivent être échappés. Il existe trois façons de s'échapper : en utilisant des barres obliques inverses, en utilisant des guillemets simples et en utilisant des guillemets doubles.

La méthode d'échappement par barre oblique inverse est la même que dans le shell.

Toutes les chaînes entre guillemets simples sont littérales et n'ont aucune signification particulière, même les caractères d'échappement entre guillemets simples sont considérés comme des caractères purs. Donc ''' ne peut pas conserver les guillemets simples. Les guillemets simples doivent être transférés à l'aide de guillemets doubles, donc "'" doit être écrit.

Les guillemets doubles ont le même effet que les guillemets simples, mais ils ne peuvent pas échapper à certains caractères spéciaux, notamment "$" et "". Le symbole « $ » entre guillemets doubles conserve à tout moment sa signification originale. Pour "", seuls les caractères après la barre oblique inverse sont '$', '"' et ''. De plus, si une ligne se termine par une barre oblique inverse, cela signifie une continuation de ligne, mais ce n'est pas officiellement recommandé. Utilisez la continuation de ligne caractères dans grub.cfg

    Extension de variable
  • Utilisez le symbole $ pour référencer les variables, vous pouvez également utiliser ${var} La méthode fait référence à var variables.

prend en charge les variables de position. Par exemple, $1 fait référence au premier paramètre

prend également en charge les variables spéciales, telles que $? des variables de position sont utilisées, $*, $@ et $# sont également pris en charge. Tous les paramètres représentés par $@ sont indivisibles dans leur ensemble. $@ représente également toutes les variables, mais chaque paramètre de $@ peut être divisé, $# représente le. nombre de paramètres.

    Commandes simples
  • Vous pouvez utiliser des commandes simples dans grub.cfg. Utilisez une nouvelle ligne ou un point-virgule entre les commandes pour indiquer le nombre de paramètres. fin de la commande. Si "!" est utilisé avant la commande, cela indique une inversion logique : for name in word …; do list; done

Structure de boucle : while cond; do list; done