详解grub(三)

GRUB

GRUB 是如何工作的?

当计算机启动时,BIOS 将控制权转移到第一个启动设备,该设备可以是硬盘、软盘 磁盘、CD-ROM 或任何其他 BIOS 识别的设备。我们将专注于硬盘,为了 单纯。

硬盘上的第一个扇区称为主引导记录 (MBR)。这个部门是 只有 512 字节长,包含一小段代码(446 字节),称为主引导加载程序和 分区表(64 字节),描述主分区和扩展分区。

默认情况下,MBR 代码查找标记为活动的分区,一旦找到这样的分区,它就会加载其 将扇区引导到内存中并将控制权传递给它。

GRUB 用自己的代码替换默认的 MBR。

此外,GRUB 分阶段工作

阶段 1 位于 MBR 中,主要指向阶段 2,因为MBR太小,无法包含所有需要的数据。

阶段 2 指向其配置文件,其中包含所有复杂用户 在谈论 GRUB 时,我们通常熟悉的界面和选项。第 2 阶段可以位于 磁盘。如果第 2 阶段找不到其配置表,GRUB 将停止引导序列并显示 用户使用命令行进行手动配置。

阶段 1.5 也存在,如果引导信息足够小,则可以使用 以适合 MBR 之后立即的区域。

Stage 架构允许 GRUB 很大 (~20-30K),因此相当复杂且高度可配置, 与大多数引导加载程序相比,大多数引导加载程序稀疏且简单,无法适应分区表的限制。

GRUB的使用

title openSUSE 10.2
root (hd0,2)
kernel /boot/vmlinuz-...
initrd /boot/initrd.img-...

这是菜单中的第一个操作系统条目。

标题听起来很简单。它只是一个字符串,旨在帮助 用户以人类术语阅读菜单。

  • root (hd0,2) 告诉 GRUB 它的配置文件的位置。在此 例如,它们可以在 (hd0,2)/boot/grub 下找到。
  • kernel /boot/vmlinuz-...引导实际的内核映像。可以有许多这样的图像可用。没有指定设备的事实 在 /boot/vmlinuz 之前,表示映像与 GRUB 本身位于同一分区上。这通常是您主要选择的默认情况 的操作系统。
  • initrd /boot/initrd.img-...是使系统化的临时文件系统 准备 - 在加载真正的根之前,使通用内核映像适应特定硬件。
title Ubuntu, kernel ...(/dev/sda9)
kernel (hd0,8)/boot/vmlinuz-...
initrd (hd0,8)/boot/initrd.img-...
  • 同样,标题表示一个名称,在这种情况下,用技术装饰 详。
  • kernel (hd0,8)/boot/vmlinuz-...指向第一个硬盘 (HD9,0) 上的第 8 个分区。 意外地,根标志 (/dev/sda9) 指示根分区是 与包含内核映像的映像相同。通常,情况是这样的, 为简单起见,您将在安装过程中需要此选项。
  • initrd (hd0,8)/boot/initrd.img-...这里没有什么新鲜事。

有关内核映像和根分区的注意事项:在具有不支持访问的 BIOS 的旧计算机上 除了前 1024 个柱面之外,您还可以设置一个包含内核映像的引导分区,而 根本身位于其他地方。但是,拥有比拙劣的Y2K危机更年轻的计算机的人不必担心。

title Windows 95/98/NT/2000 root (hd0,0) makeactive
chainloader +1

title Linux

root (hd0,1)

kernel /vmlinuz root=/dev/hda3 ro

我们从标题开始。root 指定我们希望在其中找到 Windows内核并挂载它(rootnoverify 会 将此作业留给 Windows 引导加载程序)。makeactive 命令将根磁盘(上图)上的活动分区设置为 GRUB 根目录 设备。这意味着下一个命令链加载器在没有 指定的目标分区(因为目标分区现在相同)。

第二个条目更简单。我们命名一个Linux,我们调用它的分区,然后我们启动内核。在这种情况下, 我们看到一个非常有趣的情况,即操作系统的内核映像和根 (/) 分区不在同一分区上。这将 对于较旧的计算机或具有特定启动分区的计算机,这种情况非常可能。最后,疯狂的东西:一个 GRUB 菜单启动 100+ 系统 DOS、Windows、Linux、BSD 和 Solaris。

GRUB2

GRUB 2 引入了许多新的更改。GRUB 2 具有更好的可移植性和 模块化,支持非ASCII字符,模块动态加载,真实内存管理等。

新布局

旧的 GRUB 文件曾经(现在仍然!)位于 /boot/grub/ 下,包括 menu.lst 文件,该文件在引导期间读取,哪些内容以 GRUB 的形式显示给用户 菜单。GRUB 2 将其文件放置在三个核心位置:

/boot/grub/grub.cfg - 这是替换menu.lst的主配置文件。与menu.lst不同,此文件不能 手工编辑!我强烈建议不要尝试篡改此文件,使用 chattr 命令或任何 排序。随它去。

/etc/grub.d/ - 这个新目录包含 GRUB 脚本。这些脚本是 构建 grub.cfg 文件的构建基块。执行相关的 GRUB 命令时,脚本 按一定的顺序读取并创建 grub.cfg。

/etc/default/grub - 此文件包含 读取的 GRUB 菜单设置 GRUB 脚本并写入 GRUB.cfg。它是 GRUB 的自定义部分,类似于旧的 menu.lst,实际启动项除外。

这意味着如果要更改 GRUB 菜单,则必须编辑现有脚本或创建新脚本, 然后更新菜单。这更类似于 LILO 而不是 GRUB 遗留版,后者允许即时编辑菜单。

样本 grub.cfg 文件

该文件位于 /boot/grub2/ 下:
在这里插入图片描述

这是 grub.cfg 文件的样子:
在这里插入图片描述

它并不有趣,因为它只是一个 shell 脚本。

示例 /etc/grub.d/ 目录

让我们回顾一下脚本:
在这里插入图片描述
00_header是从 /etc/default/grub 加载 GRUB 设置的脚本,包括超时、默认引导项等。

10_linux加载已安装发行版的菜单项。

20_linux_xen 加载 memtest 实用程序。

30_os探测器是扫描硬盘以进行其他操作的脚本 系统,并将其添加到引导菜单中。

40_custom是一个模板,可用于创建要添加的其他条目 到启动菜单。

您是否注意到脚本名称中的编号?嗯,这有点类似于开始/杀死的顺序 在不同运行级别中使用的脚本。编号定义优先级。这意味着10_linux将是 在 20_linux_xen之前执行,因此在引导菜单顺序中排名较高。

示例 /etc/default/grub

在这里插入图片描述

GRUB 2 是如何工作的?

GRUB 2 的工作原理是这样的:/etc/default/grub 包含自定义;/etc/grub.d/ 脚本包含 GRUB 菜单信息和操作系统引导脚本。什么时候 运行 update-grub 命令,它读取 grub 文件和 grub.d 脚本的内容,并创建 grub.cfg 文件。

就这样。要更改 grub.cfg 文件,您需要编辑 grub 文件或 grub.d 下的脚本。脚本 是要执行的。这意味着它们已打开执行位。如果关闭执行位, 他们不会跑。

这意味着您可以将任意数量的文件放入 grub.d 目录中,只要它们不是 update-grub 可以读取的可执行 shell 脚本。如果要使用它们,将激活可执行文件 位,反之亦然,将其关闭。让我们检查一下脚本。例如,00_header05_debian_theme

添加新的 GRUB 脚本

要添加新的引导选项,您必须遵循基本语法:

创建一个名称中包含XX_前缀的新文件,其中 XX 是数字序列。如果你想要新的 条目要放在其他人之上,使用较低的数字,如果您希望将其放置在其他人下方,请使用较高的数字 数字。

例如,11_something将被放置在操作系统的默认条目之后,而 08_something将放在10_linux条目之前。下一步是编写实际内容。这是一个 样本:

#!/bin/sh -e
echo “some string” cat << EOF menuentry “Something”
{
set root=(hdX,Y)
-- boot parameters --
}
EOF

让我们检查一下该文件。这是一个 shell 脚本,如第一行所述。

echo “some string” 是运行 update-grub 时会看到的字符串。如果你 不想看到打印的 echo 命令,可以将其重定向到标准错误或 /dev/null:

echo “some string” > &2

示例:echo “add openSUSE 11.2”

cat << EOF 定义实际启动项的开始。

菜单条目“某物”是将显示在菜单中的名称。示例:Linux。

set root=(hdX,Y) - 我们回到了老派,设置根设备。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值