搜索

第 26 章 使用 GRUB 2

download PDF

Red Hat Enterprise Linux 7 带有 GNU GRand Unified Bootloader(GRUB 2)版本 2,允许用户选择在系统启动时载入的操作系统或内核。GRUB 2 还允许用户向内核传递参数。

26.1. GRUB 2 简介

GRUB 2 从基于 BIOS 的传统机器上的 /boot/grub2/grub.cfg 文件中读取其配置,以及 UEFI 计算机上的 /boot/efi/EFI/redhat/grub.cfg 文件。此文件包含菜单信息。

GRUB 2 配置文件 grub.cfg 在安装 期间或通过调用 /usr/sbin/grub2-mkconfig 实用程序生成,每次安装新内核时,RUB by 会自动更新该文件。使用 grub2-mkconfig 手动 生成时,文件会根据 /etc/grub.d/ 中的模板文件生成,以及 /etc/default/grub 文件中的自定义设置。当使用 grub2-mkconfig 重新生成文件时,grub.cfg 的编辑都将丢失,因此还必须小心反映 /etc/default/grub 中的任何手动更改。

grub.cfg 上的常规操作(例如删除和添加新内核)应使用 grubby 工具执行;对于脚本,应使用 new-kernel-pkg 工具执行。如果您使用 grubby 修改默认内核,则安装新内核时将继承更改。有关 grubby 的更多信息,请参阅 第 26.4 节 “使用 grubby 工具对 GRUB 2 菜单进行持久更改”

grub2-mkconfig 工具使用 /etc/default/grub 文件,该工具供 anaconda 在安装过程中创建 grub.cfg 使用;出现故障时,例如需要重新创建启动加载器配置时,可以使用该文件。通常,不建议手动运行 grub 2-mkconfig 来替换 grub.cfg 文件,除非作为最后的手段。请注意,对 /etc/default/grub 的任何手动更改都需要重建 grub.cfg 文件。

grub.cfg 中的菜单条目

在各种代码片段和指令中,grub .cfg 配置文件包含一个或多个 菜单输入 块,各自代表单个 GRUB 2 引导菜单条目。这些块始终以 menuentry 关键字开头,后跟标题、选项列表和打开大括号,最后是右花括号。打开和关闭括号之间的任何内容都应缩进。例如,以下是带有 Linux 内核 3.8.0-0.40.el7.x86_64 的 Red Hat Enterprise Linux 7 的菜单输入 块示例:

menuentry 'Red Hat Enterprise Linux Server' --class red --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-c60731dc-9046-4000-9182-64bdcce08616' {
    load_video
    set gfxpayload=keep
    insmod gzio
    insmod part_msdos
    insmod xfs
    set root='hd0,msdos1'
    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' 19d9e294-65f8-4e37-8e73-d41d6daa6e58
    else
     search --no-floppy --fs-uuid --set=root 19d9e294-65f8-4e37-8e73-d41d6daa6e58
    fi
    echo  'Loading Linux 3.8.0-0.40.el7.x86_64 ...'
    linux16  /vmlinuz-3.8.0-0.40.el7.x86_64 root=/dev/mapper/rhel-root ro rd.md=0 rd.dm=0 rd.lvm.lv=rhel/swap crashkernel=auto rd.luks=0 vconsole.keymap=us rd.lvm.lv=rhel/root rhgb quiet
    echo  'Loading initial ramdisk ...'
    initrd /initramfs-3.8.0-0.40.el7.x86_64.img
}

代表安装的 Linux 内核的每个 菜单输入 块包含 64 位 IBM POWER 系列 中的 linux、x86_64 基于 BIOS 的系统中 linux16,以及基于 UEFI 的系统上的 linuxefi。然后,init rd 指令加上到内核的路径和 initramfs 镜像。如果创建了单独的 /boot 分区,到内核和 initramfs 镜像 的路径相对于 /boot。在上例中,init rd /initramfs-3.8.0-0.40.el7.x86_64.img 行表示 initramfs 映像实际位于 /boot/initramfs-3.8.0-0.40.el7.x86_64.img (在 文件系统挂载时)。

linux16 /vmlinuz-kernel_version 行上提供的内核版本号必须与每个 菜单条目块initrd /initramfs-kernel_version.img 行中给出的 initramfs 映像的版本号匹配。有关如何验证初始 RAM 磁盘镜像的更多信息,请参阅 Red Hat Enterprise 7 内核管理指南

注意

菜单条目 块中,init rd 指令必须指向 initramfs 文件与同一内核版本对应的 initramfs 文件的位置(相对于 /boot/ 目录)。此指令称为 initrd,因为之前的工具创建了初始 RAM 磁盘镜像 mkinitrd,它创建了所谓的 initrd 文件。grub.cfg 指令保留 initrd,以保持与其他工具的兼容性。使用 dracut 实用程序创建初始 RAM 磁盘映像的系统文件算法是 initramfs-kernel_version.img

有关使用 Dracut 的详情,请参考 Red Hat Enterprise 7 内核管理指南

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.