天天看点

GRUB2 配置文件详解

1. GRUB2配置文件

GRUB2 的配置文件通常为

/boot/grub2/grub.cfg

,虽然此文件很灵活,但是我们并不需要手写所有内容。可以通过程序自动生成,或是直接修改生成之后的文件。

2. 简单配置

通常情况下简单配置文件

/etc/default/grub

,然后用程序

grub-mkconfig

来产生文件

grub.cfg

文件

/etc/default/grub

是一个 shell 脚本,通常仅是

KEY=value

这样的连续行。如果值包含空格或特殊字符,必须用

"

引用。详看 GRUB Manual: Simple configuration。其常用关键字如下:

2.1. GRUB_DEFAULT

默认菜单项。默认值为

。可选值有:

说明
<number> 菜单项的数字序号,从 开始
saved

GRUB_SAVEDEFAULT

保存的上次选择项
<id> 菜单项的唯一标识(menuentry ... --id xxxx)

2.2. GRUB_TIMEOUT

自启超时时间。默认值为

5

不等待
-1 永久等待
其他 等待对应秒

2.3. GRUB_TIMEOUT_STYLE

倒计时显示风格。默认值为

menu

menu 显示菜单
countdown 显示倒计时
hidden 隐藏

2.4. GRUB_DISTRIBUTOR

被用于生成菜单项的更多信息。

2.5. GRUB_TERMINAL

设置输入、输出终端类型。可选值有:

console 控制台
serial 串口
serial_<port> 具体串口号
gfxterm 图形模式输出
vga_text

VGA

文本输出

2.6. GRUB_CMDLINE_LINUX

添加到菜单项中的启动

linux

的命令行参数。

2.7. GRUB_DISABLE_RECOVERY

设置此选项为

true

,禁止产生恢复模式菜单项。

2.8. GRUB_DISABLE_SUBMENU

默认情况下,

grub-mkconfig

会将低版本内核放在高版本内核子菜单里。设置此选项为

true

,所有菜单项都将出现在顶层。

2.9. GRUB_DISABLE_OS_PROBER

grub-mkconfig

会使用外部程序

os-prober

检测其他已安装的操作系统,并产生菜单项。设置此选项为

true

来禁止它。

3. 直接修改

我们也可以直接修改由

grub-mkconfig

生成之后的

grub.cfg

,其由 GRUB 内建的脚本语言组成,和

GNU bash

语法非常相似,比如定义函数、判断语句等。以下列出一些可调用的命令,详看 GRUB Manual: Commands。

注意:
  1. 命令

    其中个别命令只能在

    grub.cfg

    中使用,不能在命令行模式使用。比如

    menuentry

    等。
  2. 指定设备

    定位一个文件,需要指定它所在设备分区与路径。指定设备的语法如下:

    (<device-type><device-number>,<partition-number>)
               
    注解:
    1. <device-type>

      设备类型,有如下几种常用类型:

      类型
      hd 硬盘
      fd 3.5 英寸软盘
      nd 网络
      cd CD/DVD等
    2. <device-number>

      BIOS能够识别的设备号,下标从

      开始计数。比如

      hd0

      表示主硬盘,等价于 linux 的

      /dev/hda

    3. <partition-number>

      分区号,比如

      modos2

      表示第

      2

      个分区。下标从

      1

      开始计数。

3.1. menuentry

定义 GRUB 的菜单项。当选中菜单项时,GRUB 将执行括号内的命令。如果最后的命令返回

成功

,并且内核被加载时,将自动执行

boot

命令。此命令不能在命令行模式执行。语法格式如下:

menuentry <title> [--class=<class> …] [--users=<users>] 
	[--unrestricted] [--hotkey=<key>] [--id=<id>] [<arg> …] { <command>; … }
           
  1. <title>
菜单项的显示名称。
  1. [--class=<class> …]

    将菜单项指定为某一类。可指定多个类别。不同的菜单主题可能会显示不同的菜单类别。

  2. [--users=<users>]

    授予指定用户访问菜单项的权利。

  3. [--unrestricted]

    允许所有用户访问此菜单项。

  4. [--hotkey=<key>]

    给菜单项指定一个快捷键。

  5. [--id=<id>]

    给菜单项指定一个唯一的

    ASCII

    字符串标识。
  6. [<arg> …]

    和 <title> 一起作为参数,传递给大括号里将要执行的命令。<title> 总是被指定为

    $1

3.2. boot

启动已加载的内核。

3.3. help

显示内建命令的帮助信息。语法格式如下:

help [<pattern> …]
           
  1. [<pattern> …]

    如果省略,则显示所有命令的简短描述。否则,显示指定命令的详细描述。

3.4. linux

从指定文件加载内核,并传递启动参数。任何

initrd

必须在此命令后重加载。语法格式如下:

linux <file> …
           

3.5. initrd

linux

内核加载初始的

ramdisk

,并在

linux

启动的内存区域,设置恰当的参数。语法格式如下:

initrd <file>
           

3.6. search

查找设备。语法格式如下:

search [--file|--label|--fs-uuid] [--set [<var>]] [--no-floppy] <name>
           
  1. [--file|--label|--fs-uuid]

    分别表示按文件、文件系统标志、文件系统

    UUID

    查找设备。
  2. [--set [<var>]]

    第一个找到的设备会被设置为环境变量

    var

    的值。默认变量是

    root

  3. [--no-floppy]

    防止搜索软盘。

3.7. set

设置环境变量。语法格式如下:

set [<envvar>=<value>]
           
  1. [<envvar>=<value>]

    如果省略此参数,打印所有变量。

  2. 根目录标识

    指定根目录后,可以像

    linux

    的绝对路径的方式去定位一个文件。语法格式如下:
    set root=(<device-type><device-number>,<partition-number>)
               

3.8. cat

显示文件内容。

3.9. ls

列出设备或文件。语法格式如下:

ls [<arg> …]
           

3.10. lsmod和insmod

lsmod
insmod <module>
           

继续阅读