Linux /boot/grub/目录分析

yizhihongxing

Linux操作系统的启动过程中,GRUB(GNU GRand Unified Bootloader)扮演着极其重要的角色。/boot/grub/目录中包含了GRUB启动所需要的一切配置文件,对于Linux系统管理员来说,熟悉这些文件的内容和作用是非常有必要的。

下面我将对/boot/grub/目录进行详细分析,包括每个文件的作用和示例说明。

具体文件分析

menu.lst / grub.conf

这个文件是GRUB启动时所使用的主配置文件,同时也是最重要的一个文件。

  • menu.lst是老版本GRUB的默认配置文件名,一般情况下仅存在于早期的Linux发行版中;
  • grub.conf是新版本GRUB的默认配置文件名,包括现在常用的GRUB2版。

menu.lst / grub.conf示例:

以下是一个简短的grub.conf示例:

# grub.conf for CentOS 7
default=0
timeout=5

title CentOS (3.10.0-229.11.1.el7.x86_64)
        root (hd0,0)
        kernel /vmlinuz-3.10.0-229.11.1.el7.x86_64 ro root=/dev/mapper/centos-root rd.md=0 rd.dm=0           

title CentOS (3.10.0-123.4.2.el7.x86_64)
        root (hd0,0)
        kernel /vmlinuz-3.10.0-123.4.2.el7.x86_64 ro root=/dev/mapper/centos-root

title Windows 7
        rootnoverify (hd0,1)
        chainloader +1

以上示例文件中:

  • default=0表示默认使用第一项;
  • timeout=5表示在5秒钟内没有人工干预,GRUB将自动引导第一项;
  • title后面的文字描述就是菜单栏的文本描述,可以自己设置;
  • root用来指定内核位于的硬盘位置, (hd0,0)表示第一个硬盘的第一个分区,后续如果想要在分区中查找文件,就可以从这个根目录开始。注意多数Linux机子第一块硬盘是sda,而不是hda;
  • kernel指定内核文件的路径和启动参数。在此例中,两条拥有不同内核版本的kernel语句都指向了相同的root设备;
  • chainloader命令用来加载另一个操作系统,需要成功引导到Windows Loader Code。

grub.cfg

这个文件是由GRUB2自动生成的,并读取所有在其他文件夹中的配置文件。

在GRUB启动引导进程中,grub.cfg文件将作为主要的配置文件而存在,也是GRUB2的重要组成部分。所有可启动的操作系统条目都需要在grub.cfg文件中手工定义。选择grub.cfg自动生成其他文件的方式,具有高度灵活性。修改grub.cfg会对内存设置之类的产生深远的影响。

grub.cfg示例:

以下是一个简短的grub.cfg示例:

# Automatically generated file by grub2-mkconfig command
#
# DO NOT EDIT THIS FILE

set default="0"
set timeout="5"
insmod ext2
insmod part_msdos
insmod gzio
insmod part_gpt
insmod btrfs

# code for menu entry of CentOS Linux 7 (Core) failsafe mode
menuentry 'CentOS Linux 7 (Core) failsafe mode' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-514.16.1.el7.x86_64-advanced-c16e6bf8-db6f-42fb-813b-9dde0de7fe67' {
    load_video
    insmod gzio
    insmod part_msdos
    insmod ext2
    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  c16e6bf8-db6f-42fb-813b-9dde0de7fe67
    else
      search --no-floppy --fs-uuid --set=root c16e6bf8-db6f-42fb-813b-9dde0de7fe67
    fi
    echo    'Loading Linux 3.10.0-514.16.1.el7.x86_64 ...'
    linux   /vmlinuz-3.10.0-514.16.1.el7.x86_64 root=/dev/mapper/centos-root ro single
    echo    'Loading initial ramdisk ...'
    initrd  /initramfs-3.10.0-514.16.1.el7.x86_64.img
}

以上示例文件中:

  • set default指定默认选项,默认值为“0”,在此例中,如果您没有选择任何操作系统,第一个操作系统会被启动;
  • set timeout指定依赖应用程序的初始化时间。如果您没有按钮或手工选择任何操作系统,将在超时时间之后启动默认操作系统;
  • insmod指定要加载的模块。在此例中,有insmod gzio指令加载GZIP压缩的交换分区,insmod part_msdos加载msdos分区,等等;
  • menuentry是定制的GRUB2条目的标准方法。该选项仅显示文本并包含一些信息(例如菜单编号、菜单提示等),但不执行任何操作。以下是检查是否为GRUB2菜单入口的示例语句:if [ "${grub_platform}" == "pc" ]; then
  • load_video这个指令用于为GRUB2安装效果加载视频库;
  • search指令用于在引导启动时搜索指定设备的句柄;
  • linux指令用于指定Linux内核的位置和所需的其他参数;
  • initrd是压缩的InitRAMFS(芯片)(InitRD)文件,包含Linux需要使用的主要文件和设备驱动程序。这个文件是由GRUB2加载进入内存的。

device.map

该文件是一个映射规则表,它将磁盘/设备名称映射到GRUB所用的名称。

虽然这个文件的存在是可选的,但在多硬盘系统中方便多了(例如RAID和USB设备等)。

device.map示例:

以下是一个简短的device.map示例:

(fd0)   /dev/fd0
(hd0)   /dev/sda
(hd1)   /dev/sdb

以上示例文件中:

  • (fd0)是软盘设备;
  • (hd0)是第一个硬盘设备,对应的设备文件为/dev/sda;
  • (hd1)则是第二个硬盘设备,对应的设备文件为/dev/sdb。

这些设备名称不需要与现有设备名称完全相同,因为它们将被重新映射到GRUB定义的名称。这对于备份和崩溃恢复非常有用。

grubenv

GRUB2版本启动时会加载这个文件,这个文件是用于持久保存GRUB2环境变量。

GRUB2也称为“可编辑可渐进可恢复的超级UEFI启动管理器”。GRUB2是新的UEFI最佳选择,并使传统BIOS下的启动也变得非常易于管理。

grubenv示例:

以下是一个简短的grubenv示例:

saved_entry=CentOS Linux (3.10.0-229.el7.x86_64) 7 (Core)
boot_success_record=0
boot_indication_record=0

以上示例文件中:

  • saved_entry记录上次引导时选择的操作系统版本;
  • boot_success_recordboot_indication_record记录当前的引导状态信息,以及与电源有关的信息。如果系统异常关机,它通常可以检测到这些信息并恢复操作。这是GRUB2最为人所知的特性之一,也是很多Linux管理员忙碌下进行紧急修复工作时必须了解的信息之一。需要注意的是,grubenv需要GRUB2才能使用,不支持旧版本的GRUB。

fonts/目录

GRUB使用的字体放在这个目录中。比较常用的字体有unicode和bitmap两种。

其中,Bitmap文件是直接定义字符字形的图像文件。在字体加载之前,GRUB2将2个或更多点字合在一起。TrueTypeOpenType字体*.ttf*.otf为扩展名存储,这些字体用于屏幕上显示更清晰的文字。

fonts/目录示例:

以下是一个简短的fonts/目录示例:

10.pf2
lucida_mono_ bold_18.pf2
unicode.pf2

以上示例文件中:

  • 10.pf2是一个11像素大小的字体;
  • lucida_mono_bold18.pf2是粗体Lucida字族18点字体;
  • unicode.pf2是支持Unicode字符集的字体(两倍宽和高的14点字)。

grub.cfg.example和grub.conf.example

这两个文件是示范文件,其目的是为GRUB菜单文件的编写提供便利。

grub.cfg.example和grub.conf.example示例:

以下是一个简短的grub.cfg.example示例:

# This is a sample config file that contains examples of how to use
# grub2's functionality beyond just the booting of an OS.

# This file is sourced by /etc/grub.d/10_linux, /etc/grub.d/10_lupin
# and /etc/grub.d/40_custom. These files will each "source" the script
# configuration contained herein.

# You can also add your own entries to the Grub menu by using the custom
# file, /etc/grub.d/40_custom. Entries that you add can be placed under
# the following stub comment:
# ### BEGIN /etc/grub.d/40_custom ###
# and follow these guidlines:
#    - Entries may be static, such as a kernel image or a system
#      utility. The kernel must be uncompressed, and if it is a bzImage,
#      It must be extracted from the archive
#    - Entries may load an arbitrary file. Load the file as normal.
#    - Entries may execute a command when selected.
#    - Some entries may require modification above and beyond the
#      guidelines. See the grub2 info manual for capture more about this.
#    - Entries are numbered from 0, and do not have to be in sequential
#      order.

#    - Some examples to get you started:

以上示例文件中,说明了如何使用grub.cfg来增强GRUB2的功能,以及如何创建自定义菜单。

grub.conf.example也是类似的,说明文件基本相同,只是文件名有所不同。

总结

现在您已经了解了Linux /boot/grub/目录的分析攻略,了解了在该目录中存在哪些文件,以及这些文件的作用和示例。对于Linux管理员来说,熟悉这些文件的内容和作用是非常有必要的。

同时,值得注意的是,这个目录中的文件和内容有可能因Linux发行版的差异有所不同。但除非有明确的理由不建议修改任何配置文件。在有需要时,应该详细阅读文件注释,以免错误修改导致系统无法启动。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Linux /boot/grub/目录分析 - Python技术站

(0)
上一篇 2023年3月25日
下一篇 2023年3月25日

相关文章

  • 详解Linux lsmod命令:显示当前加载的内核模块

    下面就为大家详细讲解Linux lsmod命令的作用与使用方法的攻略。 一、命令简介 Linux lsmod命令用于显示已经加载到内核中的模块列表。这个命令输出的列表展示了内核模块的名字、模块大小、模块是否已经使用、模块被引用的计数器以及模块所依赖的其它模块列表。 二、命令语法 lsmod 命令的基本语法如下: lsmod [选项] 常用的选项有: -h 显…

    Linux函数大全 2023年3月24日
    00
  • Linux parted命令用法详解:创建分区

    Linux parted是一个分区工具,可以用于分割硬盘或创建新分区。它支持许多分区方案,如MBR(Master Boot Record)、GPT(GUID Partition Table)等,并且能够操作Linux和Windows系统。 以下是使用parted命令的详细步骤: 确定待分区的硬盘设备名称 在终端中,使用以下命令列出所有的硬盘设备及其大小: s…

    Linux文件系统管理 2023年3月25日
    00
  • Linux字符界面调整分辨率的方法

    调整Linux字符界面的分辨率首先需要确定使用的终端。不同的终端可能需要不同的步骤进行调整。 以下是一些可能需要调整分辨率的终端,以及对应的调整方法。 1. GNOME Terminal GNOME Terminal 是 GNOME 桌面环境中的默认终端。它的分辨率可以通过修改 profile 来实现。 步骤如下: 打开终端,点击菜单栏中的 Edit,选择 …

    Linux启动管理 2023年3月25日
    00
  • 详解Linux host命令:DNS 查询工具

    Linux下的host命令用于查询DNS主机名解析,可以通过使用该命令来查找互联网上的网站所对应的IP地址。下面就是host 命令的详细讲解: 什么是host命令 host命令是Linux中的一个命令,可以在终端中使用。它能够将域名解析成IP地址,或反向查询即将IP地址转化为域名,提供了一个查找DNS主机名解析的方法。 host命令的使用方法 host命令的…

    Linux函数大全 2023年3月24日
    00
  • 详解Linux pstree命令:查看进程树

    Linux pstree命令作用与使用方法说明 pstree命令可以显示进程之间的关系,以树形结构展示。有助于了解进程的依赖关系、启动关系和父子关系等,方便进行调试和管理。 命令格式 pstree [选项] [进程号] 选项: -a 显示程序的路径及参数。 -c 强制显示在同一个父进程中运行的子进程。 -h 显示完整指令路径。 -n 排序子进程。 -p 显示…

    Linux系统管理 2023年3月25日
    00
  • 详解Linux进程管理及作用

    Linux中的进程是指正在运行的程序,它们由Linux内核直接管理。Linux进程管理是Linux系统中的一个非常重要的组成部分,可以让我们查看进程信息、杀死进程、设置进程优先级等。本文将详细讲解Linux进程管理及作用,同时提供实例说明。 1. 进程概述 进程是计算机科学中的一个重要概念,代表着一个正在运行的程序。从操作系统的角度来看,进程是计算机中可以被…

    Linux系统管理 2023年3月25日
    00
  • 详解Linux重建RPM数据库

    在Linux系统中,RPM包管理器是一种常用的包管理工具,可以用于安装、更新、卸载软件包。在使用 RPM 包管理器时,可能会遇到 RPM 数据库损坏或出现错误的情况,这时需要进行 RPM 数据库的重建。 下面是重建 RPM 数据库的完整攻略: 步骤1:备份旧的 RPM 数据库 在进行 RPM 数据库重建之前,需要备份旧的 RPM 数据库以防出现意外情况。可以…

    Linux软件安装 2023年3月25日
    00
  • 详解Linux gzip命令:压缩文件

    Linux中gzip命令是一种压缩文件的工具,在文件传输、备份、存储等场景下经常被使用。gzip 命令可以将指定的文件进行压缩,同时保留源文件,压缩后的文件名默认为原始文件名加上扩展名 .gz。下面是gzip命令的使用方法攻略及两个典型的示例说明。 gzip命令的基本语法 gzip [选项] 文件路径 选项: 选项 描述 -c 将压缩以后的文件输出到标准输出…

    Linux函数大全 2023年3月24日
    00
合作推广
合作推广
分享本页
返回顶部