根据主引导记录,GRUB 第 2 阶段位于可引导紧凑型闪存上的什么位置?

根据主引导记录,GRUB 第 2 阶段位于可引导紧凑型闪存上的什么位置?

我试图了解 GRUB 第 2 阶段位于可启动紧凑型闪存上的位置。下面是针对紧凑型闪存的 MBR(前 512 字节)映像运行的 file 命令的输出。

它表示第 2 阶段地址是 0x2000,或十进制 8192,这会将其放置在第 16 个扇区(每个扇区 8192 字节/512 字节)。

我认为引导加载程序的第二阶段应该位于 VBR 或 PBR 的可引导分区中。如果是这种情况,那么我预计它的地址是 0x100000,这是可引导分区在扇区 2048 的开头。(2048 个扇区 x 512 字节 = 1048576 = 0x100000 )

那么在下面的输出中,第 2 阶段地址 0x2000 和第 2 阶段段 0x200 是什么意思?

[centos@centos6 ~]$ file SQFlash_MBR
SQFlash_MBR: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3,
stage2 address 0x2000, stage2 segment 0x200;
partition 1: ID=0x83, active, starthead 1, startsector 2048, 1880064 sectors, code offset 0x48
[centos@centos6 ~]$

答案1

由于输出提到了stage1stage2,我们在这里讨论的是 GRUB Legacy(即 GRUB 版本 0.97 或更早版本)。现代版本将有一个“核心映像”和一组模块。

stage2 address并且stage2 segment不要引用磁盘扇区;他们指的是记忆地址阶段 2 将被加载到。该地址采用 x86 处理器在 8086 兼容模式(“实模式”)下使用的段:偏移量格式。

由于这是 GRUB Legacy,当 GRUB 作为单个 32 位值安装到紧凑型闪存时,GRUB 将读取的下一个磁盘块的编号已嵌入到 MBR 代码中。 MBR 是块 #0,GRUB 将读取的下一个块通常是块 #1:它将包含 GRUB 块列表,该列表定义了下一阶段要读取的磁盘块序列。下一阶段可以是“stage1.5”(单个只读文件系统驱动程序)或完整的“stage2”。

如果使用 stage1.5,它将依次嵌入(磁盘、分区)标识符 + 路径名,将 stage2 的位置标识为特定分区上文件系统中的常规文件。磁盘部分可能会被省略,在这种情况下,假定磁盘与包含 stage1.5 组件的磁盘相同。通常,/grub/stage2如果/boot使用单独的分区,或者/boot/grub/stage2只是/boot根文件系统上的常规目录,则路径名将是。

显示的信息file不足以找出下一阶段的位置:您需要阻止列表块的内容才能找到它。

相关内容