Linux GRUB2
boot loader
在计算机启动的时候决定如何运行(启动)安装于硬盘上的操作系统,GRand Unified Bootloader(GRUB)是 Linux 中最流行的 Bootloader 程序。目前主要有 2 个 GRUB 版本:
- GRUB Legacy : 遗留版本 GRUB v1,在较旧的 Linux 发行版中使用
- GRUB 2 : 当前最新版本,较新的 Linux 发行版中默认的 Bootloader. GRUB 2 的主要功能依旧是 查找并启动已安装在计算机上的操作系统 。同时 通过内嵌了一些工具和配置文件提供了更强大的功能以及灵活性 。
相比于 GRUB Legacy,GRUB 2 有以下优点:
- 脚本支持 。支持脚本语言如 函数 , 循环 , 变量 等
- 模块动态加载(Dynamic Module Loading)
- 救援模式(Rescue Mode)
- 自定义菜单(Custom Menus)
- 主题(Thems)
- 图形化的启动菜单
- 直接从硬盘启动 LiveCD ISO
- 全新的配置文件结构
Non-x86
架构支持,如 PowerPC- 全局 UUIDs 支持
GRUB 2 的配置文件是 /boot/grub/grub.cfg
或者 /boot/grub2/grub.cfg
,关于其配置文件,要注意以下事项:
/boot/grub/grub.cfg
的内容是由工具grub-mkconfig
或者update-grub
根据/etc/default/grub
和/etc/grub.d/
中的内容自动生成,最好不要手动改动/boot/grub/grub.cfg
。要修改控制选项,可以修改/etc/default/grub
和/etc/grub.d/*
,然后使用update-grub
/boot/grub/grub.cfg
的内容会因为 GRUB 2 的包升级(如内核升级导致新增内核或移除内核)而被覆盖,或者用户使用update-grub
命令也会覆盖- 可用的启动内核列表(
/boot/grub/grub.cfg
中的menuentry
)是由命令update-grub
或update-grub2
(一般是grub
的软链接)自动生成 - 用户可以在 OS 启动列表中自定义添加启动条目(menu entry),这个功能一般是通过修改
/etc/grub.d/40_custom
实现 - 控制启动列表显示菜单的选项位于主配置文件
/etc/default/grub
中 - 和 GRUB Legacy 不同,GRUB 2 分区(partitions)编号从 1 开始,而不是 0。但是 硬盘编号 依旧从 0 开始 。如系统上的第一个硬盘的第一个分区,GRUB Legacy 中是
hd(0, 0)
,GRUB 2 中是hd(0, 1)
grub.cfg
中可以包含 Shell 脚本语法,如 函数,循环,变量等- 用于定位内核(Kernels)和
Initial RAM
位置的设备名称,最好是使用更加可靠的 标签(Labels) 或者是 UUIDs(Universally Unique Identifiers) ,而不是类似于/dev/sda
的设备名称,这可以防止计算机系统新增硬盘后,/dev/sda
变成了/dev/sdb
而导致系统启动时内核无法找到。 - 配置文件更改后,只有执行了
update-grub
后才会最终生效
GRUB 2 配置流程
GRUB 2 的配置变更主要是通过修改主配置文件 /etc/default/grub
以及包含自定义脚本文件的目录 /etc/grub.d/
,然后执行 update-grub
最终生效。update-grub
会从 /etc/default/grub
和 /etc/grub.d/
收集相关配置并将其更新到 /boot/grub/grub.cfg
。
启动菜单(Menu Display)的展示行为主要是通过 /etc/default/grub
进行控制 。