Skip to main content

NTFS源码阅读引导(2) -- NTFS Partition Boot Sector

来源:

  1. 概要介绍: https://en.wikipedia.org/wiki/NTFS
  2. NTFS PBS: https://www.ntfs.com/ntfs-partition-boot-sector.htm
  3. https://github.com/libyal/libfsntfs/blob/main/documentation/New%20Technologies%20File%20System%20(NTFS).asciidoc

硬盘分区后(拥有了 GPT 或 MBR 分区表), 一个卷(分区)就可以被格式化为对应的文件系统. 当卷被格式化为 NTFS 时, 格式化工具会使用卷的前 16 个 sector 作为 $Boot 元数据文件的存放区域(16*512 = 8192 Byte). 其中第一个 sector (512 字节), 即 NTFS boot sector, 包含启动代码和文件系统基础信息, 而剩余的 15 个 sector 可以作为初始化程序加载器(代码)的存放位置.

同时, 为了保证文件系统可靠性, 卷的最后一个 sector 会存放 boot sector 的备份.

Boot Sector 的结构如下所示:

Byte OffsetField LengthField Name
0x003 bytesJump Instruction
0x03LONGLONG(8 bytes)OEM ID
0x0B25 bytesBPB
0x2448 bytesExtended BPB
0x54426 bytesBootstrap Code
0x01FEWORD(2 bytes)End of Sector Marker

其中关于如何实现系统启动的部分暂时不管(Bootstrap Code). OEM ID 固定为 NTFS(又称为 Magic), 而 NTFS 基础信息存放在 BPB 及 Extended BPB 中. 详细结构可以参考文章开头链接.

开发时, 透过 Boot Sector 构建出整个磁盘的基础信息是一个非常重要的步骤(形成一个 Volume 的表示结构).