在 Linux 服务器上,GRUB(GRand Unified Bootloader)是最常用的引导加载程序,它负责在系统启动时加载操作系统内核,并提供一个菜单界面,让用户选择启动的操作系统或内核版本。GRUB 配置文件是控制启动过程的关键文件,通过它,你可以设置内核启动参数、修改引导选项、调整引导顺序等。
GRUB 配置文件概述
GRUB 配置文件通常分为两个主要部分:
- GRUB 主配置文件(通常为
/etc/default/grub
) - GRUB 引导菜单配置文件(通常为
/boot/grub2/grub.cfg
或/boot/grub/grub.cfg
)
1. /etc/default/grub
— 主配置文件
这个文件是 GRUB 配置的主要文件,里面包含了用户自定义的参数和选项。该文件由 GRUB 的安装和更新程序(如 update-grub
、grub2-mkconfig
)生成,但用户可以手动编辑这个文件来调整 GRUB 的行为。文件中的每一项设置都对应着 GRUB 启动过程中的某些特性。
常见的配置项包括:
-
GRUB_DEFAULT
设置默认启动的条目。可以是菜单项的编号(从 0 开始计数),或者使用 "saved" 表示启动上次选择的条目。
示例:GRUB_DEFAULT=0 # 启动菜单中的第一个操作系统 GRUB_DEFAULT=saved # 启动上次启动的内核
-
GRUB_TIMEOUT
设置 GRUB 启动菜单的显示时间,单位为秒。如果设置为 0,GRUB 将立即启动默认项;如果为 -1,则会等待直到用户选择。
示例:GRUB_TIMEOUT=5 # 显示菜单 5 秒
-
GRUB_DISTRIBUTOR
这项用于设置发行版的名称,通常不需要修改,除非你有特定的需求。
示例:GRUB_DISTRIBUTOR="Ubuntu"
-
GRUB_CMDLINE_LINUX
这是一个内核启动参数,用于传递内核启动时所需要的参数,通常用于调整系统行为或加载模块。
示例:GRUB_CMDLINE_LINUX="quiet splash"
-
GRUB_DISABLE_RECOVERY
设置是否禁用恢复模式菜单项。默认情况下,GRUB 会提供一个恢复模式选项。
示例:GRUB_DISABLE_RECOVERY="true" # 禁用恢复模式
-
GRUB_TERMINAL
设置终端类型,通常设置为console
或gfxterm
,后者支持图形界面。
示例:GRUB_TERMINAL=console
-
GRUB_GFXMODE
设置引导菜单的分辨率,如果支持图形模式的话。
示例:GRUB_GFXMODE=1920x1080
-
GRUB_HIDDEN_TIMEOUT
控制 GRUB 菜单是否隐藏。如果设置为非零值,菜单会在此时间段内显示,然后自动启动默认操作系统。
示例:GRUB_HIDDEN_TIMEOUT=0
2. /boot/grub2/grub.cfg
或 /boot/grub/grub.cfg
— 引导菜单配置文件
grub.cfg
是 GRUB 实际读取的配置文件,包含了 GRUB 启动菜单项以及相关的启动项和内核信息。该文件一般由 GRUB 工具(如 grub2-mkconfig
或 update-grub
)自动生成,不建议手动编辑。它会根据 /etc/default/grub
文件中的设置,以及系统中安装的操作系统和内核版本来动态生成。
GRUB 配置文件中通常包括以下部分:
-
菜单项(Menu entries)
这些是 GRUB 显示在启动菜单上的条目。每个菜单项对应一个内核启动项,可能包括 Linux 内核、恢复模式或其他操作系统。
示例:menuentry 'Ubuntu, with Linux 5.15.0-56-generic' --class ubuntu --class gnu-linux --class gnu --class os { recordfail load_video gfxmode $linux_gfx_mode set root='hd0,msdos1' linux /boot/vmlinuz-5.15.0-56-generic root=UUID=1234abcd-5678-efgh-9012-ijklmnopqrs ro quiet splash initrd /boot/initrd.img-5.15.0-56-generic }
-
Linux 内核条目(Linux kernel entries)
这类条目指定了启动 Linux 系统的内核路径,以及相应的初始化程序(initrd
)路径。linux /boot/vmlinuz-5.15.0-56-generic root=UUID=abcd1234 ro quiet splash initrd /boot/initrd.img-5.15.0-56-generic
-
操作系统条目(Other OS entries)
如果你的系统有多个操作系统(例如双启动配置),GRUB 会在此文件中自动列出这些操作系统的启动项。
示例:menuentry 'Windows 10' { set root=(hd0,msdos1) chainloader +1 }
-
高级选项(Advanced options)
对于每个操作系统,GRUB 还会列出其对应的高级选项,如恢复模式或内核的不同版本。
示例:menuentry 'Ubuntu, with Linux 5.15.0-56-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os { linux /boot/vmlinuz-5.15.0-56-generic root=UUID=abcd1234 ro recovery nomodeset initrd /boot/initrd.img-5.15.0-56-generic }
GRUB 配置文件的更新
-
更新 GRUB 配置文件
当你修改了/etc/default/grub
文件后,或者添加/删除了内核、操作系统时,你需要运行以下命令来更新 GRUB 配置:- 在基于 GRUB 2 的系统中(如 CentOS 7 及更高版本、Ubuntu 16.04 及更高版本):
sudo grub2-mkconfig -o /boot/grub2/grub.cfg # BIOS 系统 sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg # UEFI 系统
- 在基于 GRUB 2 的系统中(如 CentOS 7 及更高版本、Ubuntu 16.04 及更高版本):
-
重新安装 GRUB 引导加载程序
如果你修改了 GRUB 配置后需要重新安装 GRUB 引导加载程序(例如在更换硬盘或操作系统时),你可以运行:sudo grub2-install /dev/sda # 替换为你的引导磁盘
总结
GRUB 配置文件在 Linux 系统启动过程中起着至关重要的作用。/etc/default/grub
文件主要包含了默认的 GRUB 设置,允许用户调整启动菜单、内核参数等。而 /boot/grub/grub.cfg
文件则是由系统自动生成的启动菜单文件,包含了具体的内核和操作系统条目。你可以通过编辑 /etc/default/grub
来调整 GRUB 设置,然后使用工具更新配置文件和引导程序。