Linux /boot/grub/目录分析

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 screen命令:在单个终端窗口中运行多个命令会话

    Linux的screen是一个非常常用的命令,可以在一个终端窗口中运行多个会话,并在会话之间自由切换。接下来我将介绍screen命令的基本用法以及常用命令操作,方便站长们进行服务器管理操作。 一、screen命令的作用 screen命令被称为终端多路复用器,可以在单个会话中创建多个虚拟终端,在这些虚拟终端中可以启动不同的终端程序、命令行界面和要运行的任务等等…

    Linux函数大全 2023年3月24日
    00
  • 详解Linux SetGID(SGID)文件特殊权限用法

    Linux SetGID(SGID)标志是一种在Linux中的文件和目录上设置特殊权限的机制。SetGID标志在许多情况下非常有用,并且能够跨越多个用户以及多个组来管理文件和目录。 一般来说,SetGID标志与一个文件或目录所属的组有关系。当SetGID标志被设置在一个目录上时,这个目录下的所有新的文件和子目录都将自动地继承这个目录的组所有权。 在下面的示例…

    Linux权限管理 2023年3月25日
    00
  • 详解Linux kill命令:终止进程

    1. Linux kill命令作用 Linux kill命令用于向进程发送信号。 在Linux系统中,所有进程都会分配一个唯一的PID(Process ID),以便系统对其进行管理和控制。kill命令通过向进程发送信号来使进程终止或更改运行状态。kill命令的常用信号包括: SIGTERM:终止进程 SIGKILL:强制终止进程 SIGHUP:终止进程,并重…

    Linux系统管理 2023年3月25日
    00
  • SELinux配置文件(/etc/selinux/config)

    SELinux是一种强制访问控制(MAC)机制,它是Linux系统安全性的重要组成部分。配置SELinux需要编辑/etc/selinux/config文件,下面是SELinux配置文件的完整攻略分为以下几个部分: 配置文件基本结构 /etc/selinux/config文件的基本结构如下: # This file controls the state of…

    SELinux管理 2023年3月25日
    00
  • 详解Linux parted命令:磁盘分区工具

    Linux parted命令是用于管理磁盘分区的工具。它可以帮助用户创建、调整、移动、删除和复制分区。在本文中,我们将介绍如何使用parted命令进行分区,包括分区表、分区大小、分区类型和分区文件系统的设置。 安装Parted 如果你使用的是Debian或Ubuntu等Linux发行版,则可以使用以下命令来安装Parted: sudo apt-get ins…

    Linux函数大全 2023年3月24日
    00
  • 详解Linux cat命令:显示文件内容

    下面是Linux cat命令的作用与使用方法的完整攻略: 概述 cat是一个可以将多个文件合并为一个输出的命令工具,同时也可以用来显示文件内容。cat的名称来源于“concatenate”,字面意思是“连结”。 语法 cat [选项] [文件] 参数说明 文件:指定要操作的一个或多个文件。 选项说明 选项 含义 -n 输出时自动加上行号 -e 输出非打印字符…

    Linux函数大全 2023年3月24日
    00
  • SELinux 的工作模式(Disabled、Permissive和Enforcing)

    SELinux是Linux系统中一种安全模块,用于控制系统中各个进程、应用程序和用户对系统资源(如文件、目录)的访问权限。它的工作模式有三种:Disabled、Permissive和Enforcing。下面我将详细讲解SELinux三种工作模式的含义和实例说明。 1. Disabled Disabled表示SELinux完全关闭,不对系统资源进行任何安全限制…

    SELinux管理 2023年3月25日
    00
  • 详解Linux history命令:显示用户命令历史

    Linux history命令是用来查看历史执行命令的工具。下面是Linux history命令的作用和使用方法的完整攻略: 作用 history命令用于查看在当前Shell环境下已经执行过的命令历史记录,包括执行命令的时间和序号等信息。可以很方便的查找以前执行过的命令,节省操作时间。 使用方法 在终端中输入history命令,即可查看所有已经执行过的命令记…

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