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日

相关文章

  • 详解磁盘配额是什么?

    磁盘配额是操作系统提供的一种限制存储空间的功能,用于控制某一用户或组所能使用的磁盘空间大小。当限制空间大小的阈值达到或超过时,系统会发出警告并限制用户或组的进一步存储。 磁盘配额可以在操作系统的用户或组上进行配置,常见的有以下两种方式: 针对单个用户设置配额限制 针对整个组设置配额限制 在 Windows 操作系统中,可以通过以下步骤来对单个用户或组的磁盘配…

    Linux高级文件系统管理 2023年3月25日
    00
  • 详解Linux ifconfig命令:查看和配置网络接口

    ifconfig命令是Linux系统中常用的网络工具之一,用于查看和配置网络接口的信息。 作用与用法 ifconfig用于查询或配置Linux系统中的网络接口,如网卡接口信息、IP地址、MAC地址、子网掩码等。ifconfig的基本用法格式如下: ifconfig [interface] [options] 其中,interface表示要操作的网络接口名称,…

    Linux函数大全 2023年3月24日
    00
  • 详解Linux tee命令:将命令的输出复制到文件和屏幕

    Linux中tee命令是一个很有用的命令,它一方面允许我们将数据输出到屏幕上,同时也将数据输出到文件中。下面将讲解tee命令的作用与使用方法的完整攻略。 作用 tee命令的作用是将标准输入输出到标准输出,并且将标准输入复制一份输出到文件中去。 tee命令的语法为: tee [OPTION]… [FILE]… 其中OPTION是选项参数,FILE是输出…

    Linux函数大全 2023年3月24日
    00
  • 详解Linux killall命令:杀死所有具有指定名称的进程

    当一些进程出现问题时,我们可能需要终止它们以恢复系统的正常运行。Linux操作系统提供了多种方式来停止进程,比如kill命令、pkill命令等。而本文将要介绍的是另一种便捷的终止进程的方法:killall命令。 一、命令作用 Linux系统中,killall命令的作用是杀死同名进程。可以通过以下命令来查看杀死进程的情况: $ killall [-u user…

    Linux函数大全 2023年3月24日
    00
  • Linux du命令:统计目录或文件所占磁盘空间大小

    Linux中的du命令是用于检查文件或目录的磁盘使用情况。使用该命令可以帮助用户了解文件或目录所占用的磁盘空间大小。该命令的用法和参数如下: du [选项] [文件或目录路径] 其中,可用的选项包括: -a:显示所有文件和目录的大小; -h:以人类可读的方式显示文件和目录的大小; -c:显示总共使用的磁盘空间; -s:只显示总共使用的磁盘空间,不显示每个文件…

    Linux文件系统管理 2023年3月25日
    00
  • 详解Linux groupdel命令:删除用户组

    当我们需要删除Linux系统中的用户组时,就可以使用groupdel命令。以下是该命令的详细作用及使用方法攻略: 作用 groupdel命令用于删除Linux系统中的用户组。 语法 groupdel [选项] 组名 选项 groupdel命令有如下选项: -f:强制删除用户组,不询问确认; -h:显示帮助信息; -R, –root CHROOT_DIR:在…

    Linux函数大全 2023年3月24日
    00
  • 详解Linux groupdel命令:刪除用户组

    Linux系统中的groupdel命令用来删除指定组。下面详细讲解groupdel命令的使用方法及相关注意事项: 命令格式 groupdel [组名] 命令参数 组名:指定要删除的组名。 使用方法 登录Linux系统,并以root用户身份执行groupdel命令。 在命令后加上要删除的组名,执行即可删除指定组。 删除组之前应该先确保该组已经没有任何用户使用,…

    Linux用户和用户组管理 2023年3月25日
    00
  • 详解Linux fg命令:把后台命令恢复在前台执行

    Linux fg命令是用于将后台运行的作业转入前台,并将其放到终端最前面的命令,其作用可以帮助我们控制当前正在运行的任务。 1. 命令格式 fg [作业编号] 2. 使用方法 当你想把后台运行的命令放到前台时,需要使用到fg命令。 使用方法如下: 1.在终端输入Ctrl + Z,将当前正在运行的命令暂停并放入后台。 2.输入命令fg,将当前正在运行的命令转为…

    Linux系统管理 2023年3月25日
    00
合作推广
合作推广
分享本页
返回顶部