3、文件系统基础:FAT32、NTFS、ext4 的引导扇区结构、VBR 的作用与组成
在引导修复工作中,卷引导记录(VBR,Volume Boot Record) 是操作系统从磁盘启动时读取的第一个关键数据块。VBR 位于每个分区的第一个扇区(LBA 0),它包含了文件系统的元数据以及加载操作系统引导代码的入口。不同文件系统(FAT32、NTFS、ext4)的 VBR 结构虽有差异,但核心功能一致:描述分区参数并启动引导过程。
核心概念: VBR 是分区的“身份证”+“启动钥匙”。损坏的 VBR 会导致“Missing operating system”或“Bootmgr is missing”等致命错误。
3.1 VBR 的通用作用与组成
VBR 通常由以下三部分组成:
- 跳转指令(Jump Instruction): 占用前 3 字节,跳转到后续的引导代码,跳过 BPB 区域。
- BPB(BIOS Parameter Block)与扩展 BPB: 描述文件系统的几何参数(每扇区字节数、每簇扇区数、保留扇区数、FAT 表数量等)。
- 引导代码(Boot Code): 实际执行的机器码,负责加载操作系统内核或引导管理器(如 bootmgr、GRUB)。
修复要点: 当 VBR 的 BPB 参数错误时,文件系统可能无法挂载;当引导代码损坏时,分区虽可访问但无法启动。修复工具(如
bootsect、testdisk)通常只重写引导代码,保留 BPB 数据。
3.2 FAT32 引导扇区结构
FAT32 的 VBR 结构在 BPB 区域与 FAT16/FAT12 有显著区别,增加了 FSInfo 扇区 和 备份引导扇区 的概念。以下是 FAT32 VBR 的关键字段:
| 偏移(字节) | 长度(字节) | 字段名称 | 典型值 / 说明 |
|---|---|---|---|
| 0x00 | 3 | 跳转指令 | EB 58 90 |
| 0x03 | 8 | OEM ID | MSDOS5.0 或 MSWIN4.1 |
| 0x0B | 2 | 每扇区字节数 | 0x0200(512) |
| 0x0D | 1 | 每簇扇区数 | 0x08(4KB 簇) |
| 0x0E | 2 | 保留扇区数 | 0x0020(32 个扇区) |
| 0x10 | 1 | FAT 表数量 | 0x02 |
| 0x18 | 2 | 隐藏扇区数 | 分区起始偏移(LBA) |
| 0x1C | 4 | 总扇区数(32位) | 分区总大小 |
| 0x24 | 4 | 每 FAT 表扇区数 | FAT 表占用的扇区数量 |
| 0x2C | 4 | 根目录簇号 | 通常为 0x00000002 |
| 0x30 | 2 | FSInfo 扇区号 | 通常为 0x0001 |
| 0x32 | 2 | 备份引导扇区号 | 通常为 0x0006 |
FAT32 修复陷阱: 许多修复工具只重写主引导扇区(LBA 0),但 FAT32 的 备份引导扇区(通常位于 LBA 6)可能仍然完好。如果主 VBR 损坏,可以手动将备份扇区复制到 LBA 0 进行恢复。FSInfo 扇区(LBA 1)记录了空闲簇数,损坏后不影响启动但会导致空间报告错误。
3.3 NTFS 引导扇区结构
NTFS 的 VBR 与 FAT32 有相似之处,但 BPB 区域更精简,且引导代码直接指向 $MFT(主文件表)。NTFS 没有 FAT 表,其元数据全部存储在 $MFT 中。
| 偏移(字节) | 长度(字节) | 字段名称 | 典型值 / 说明 |
|---|---|---|---|
| 0x00 | 3 | 跳转指令 | EB 52 90 |
| 0x03 | 8 | OEM ID | NTFS (注意 4 个空格) |
| 0x0B | 2 | 每扇区字节数 | 0x0200(512) |
| 0x0D | 1 | 每簇扇区数 | 0x08(4KB 簇) |
| 0x0E | 2 | 保留扇区数 | 0x0000(NTFS 不使用保留扇区) |
| 0x10 | 1 | FAT 表数量 | 0x00(NTFS 无 FAT) |
| 0x18 | 2 | 隐藏扇区数 | 分区起始偏移(LBA) |
| 0x1C | 8 | 总扇区数(64位) | 分区总大小 |
| 0x24 | 8 | $MFT 起始簇号 | 通常为 0x000000000000000C(簇 12) |
| 0x2C | 8 | $MFTMirr 起始簇号 | 通常为 0x0000000000000002(簇 2) |
| 0x30 | 1 | 每 MFT 记录段簇数 | 0xF6(-10,表示 1KB 记录) |
NTFS 修复关键: 如果 VBR 中的
$MFT 起始簇号 损坏,整个分区将无法挂载。可以使用 chkdsk /f 或 testdisk 从 $MFTMirr(镜像)重建 $MFT 位置。NTFS 的引导代码(bootsect /nt60)与 BPB 区域相对独立,可以单独修复。
3.4 ext4 引导扇区与超级块
ext4 是 Linux 系统的主流文件系统,其引导机制与 FAT32/NTFS 有本质区别。ext4 不使用 VBR 概念,而是使用 超级块(Superblock) 和 块组描述符。引导代码通常存储在 引导扇区(Boot Sector) 中,位于分区前 1024 字节,但 ext4 的超级块位于偏移 1024 字节处。
| 偏移(字节) | 长度(字节) | 字段名称 | 典型值 / 说明 |
|---|---|---|---|
| 0x000 | 1024 | 引导代码区 | 通常全零,或存放引导加载器(如 GRUB 第一阶段) |
| 0x400 | 4 | 超级块签名 | 0xEF53(ext4 魔数) |
| 0x404 | 2 | 状态 | 0x0001(干净卸载) / 0x0002(有错误) |
| 0x420 | 4 | 块大小 | 0x00001000(4096 字节) |
| 0x42C | 4 | 每块组块数 | 0x00002000(8192 块) |
| 0x430 | 4 | 每块组描述符数 | 描述符表大小 |
| 0x438 | 4 | inode 数量 | 分区 inode 总数 |
| 0x44C | 4 | 块组描述符起始块 | 通常为 0x00000002 |
| 0x454 | 2 | 魔数 | 0xEF53 |
ext4 修复要点: 超级块在每个块组中都有备份(通常每 32768 块一个)。如果主超级块损坏,可以使用
fsck.ext4 -b 32768 指定备份超级块位置进行修复。引导代码区(前 1024 字节)损坏不会影响文件系统挂载,但会导致无法引导。
3.5 三种文件系统引导扇区对比
下表总结了 FAT32、NTFS、ext4 在引导扇区 / 超级块方面的核心差异: