我试图了解 GRUB 阶段 2 在我的可启动紧凑型闪存上的位置。下面是针对紧凑型闪存的 MBR(前 512 个字节)的映像运行的文件命令的输出。
它表示第 2 阶段地址是 0x2000,或十进制 8192,这将把它放在第 16 个扇区(每个扇区 8192 字节/512 字节)。
我认为引导加载程序的第二阶段应该位于 VBR 或 PBR 的可引导分区中。如果是这种情况,那么我希望它的地址是 0x100000,这是 2048 扇区的可引导分区的开始。(2048 个扇区 x 512 字节 = 1048576 = 0x100000)
那么在下面的输出中,0x2000 的阶段 2 地址和 0x200 的阶段 2 段是什么意思?
[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 ~]$
由于输出提到
stage1
andstage2
,我们在这里讨论的是 GRUB Legacy(即 GRUB 版本 0.97 或更早版本)。现代版本将有一个“核心图像”和一组模块。stage2 address
并且stage2 segment
不要引用磁盘扇区;它们指的是第2 阶段将被加载到的内存地址。该地址采用 x86 处理器在 8086 兼容模式(“实模式”)中使用的段:偏移量格式。由于这是 GRUB Legacy,当 GRUB 安装到您的紧凑型闪存时,GRUB 将读取的下一个磁盘块的编号作为单个 32 位值嵌入到 MBR 代码中。MBR 是块#0,GRUB 将读取的下一个块通常是块#1:它将包含定义下一阶段要读取的磁盘块序列的 GRUB 块列表。下一阶段可以是“stage1.5”(单个只读文件系统驱动程序)或完整的“stage2”。
如果使用 stage1.5,它将依次嵌入(磁盘、分区)标识符 + 路径名,用于将 stage2 的位置标识为特定分区上文件系统中的常规文件。磁盘部分可能会被省略,在这种情况下,假设磁盘与包含 stage1.5 组件的磁盘相同。
/grub/stage2
如果使用单独的/boot
分区,或者/boot/grub/stage2
只是/boot
根文件系统上的常规目录,则路径名通常是。显示的信息
file
不足以找出下一阶段的位置:您需要阻止列表块的内容才能找到它。