3. 磁盘逻辑结构

在磁盘取证中,物理盘只是一个“裸设备”,真正承载文件系统语义的是逻辑结构。理解扇区、簇、柱面、磁头、LBA/CHS 寻址以及分区表到卷的映射关系,是后续定位文件数据、恢复被删除文件、解析分区表残留和判断证据来源的基础。本节从物理几何讲到逻辑寻址,再落到分区表与卷的映射,形成一条完整的“地址翻译链”。

一、扇区、簇与柱面:三个不同层级的“块”

扇区(Sector)是磁盘读写的最小物理单位。传统硬盘的扇区大小为 512 字节,现代大容量盘普遍采用 4096 字节的“高级格式”(4Kn),但为了兼容,很多盘对外仍报告 512 字节逻辑扇区(512e)。取证中必须区分“物理扇区大小”和“逻辑扇区大小”,因为镜像工具、分区对齐和文件系统参数都依赖后者。

簇(Cluster)是文件系统分配空间的最小单位,也叫分配单元(Allocation Unit)。一个簇由若干个连续扇区组成,例如 NTFS 默认簇大小为 4096 字节(8 个 512 字节扇区),exFAT 在大容量卷上可能使用 32KB 或 128KB 簇。簇越小,空间利用率越高但元数据越多;簇越大,大文件读写效率越高但小文件浪费空间。取证时,簇大小直接决定“文件碎片”的粒度,也影响删除文件残留数据的可恢复范围。

柱面(Cylinder)是 CHS 寻址时代的几何概念:所有盘片上半径相同的磁道构成一个柱面。早期磁盘用“柱面号—磁头号—扇区号”三元组定位数据,即 CHS 寻址。柱面数、磁头数、每道扇区数共同决定了磁盘的容量上限。由于 CHS 字段位宽有限(柱面 10 位、磁头 8 位、扇区 6 位),其最大可寻址容量约为 8GB,这直接催生了 LBA 寻址。

二、LBA 与 CHS:两种寻址方式的换算

LBA(Logical Block Addressing)把整个磁盘视为一个线性扇区数组,从 0 开始编号,不再关心物理几何。操作系统和取证工具看到的几乎都是 LBA。CHS 与 LBA 之间可以换算,公式如下(以每扇区 512 字节、每磁道 63 扇区、每柱面 255 磁头为例):

LBA = (C × Heads + H) × Sectors + (S - 1)
C   = LBA / (Heads × Sectors)
H   = (LBA / Sectors) % Heads
S   = (LBA % Sectors) + 1

其中 C 为柱面号,H 为磁头号,S 为扇区号(从 1 开始)。例如 LBA=1000000,代入 Heads=255、Sectors=63:C=62,H=62,S=11。这个换算在解析 MBR 分区表、老式引导记录和某些嵌入式设备镜像时经常用到。需要注意的是,现代磁盘的 CHS 值往往只是“翻译值”,并不对应真实物理位置,取证中应以 LBA 为准。

三、分区表与卷的映射关系

一块物理磁盘通常被划分为若干分区,每个分区在分区表中用“起始 LBA + 扇区数量”描述。MBR 分区表位于 LBA 0,使用 4 个 16 字节分区项,每项记录状态、分区类型、起始 CHS、结束 CHS、起始 LBA 和扇区总数。GPT 则位于 LBA 1,使用 128 个分区项,每项 128 字节,包含分区类型 GUID、唯一 GUID、起始 LBA、结束 LBA 和分区名。

分区表到卷的映射可以理解为:物理磁盘 → 分区表 → 分区 → 卷(Volume)→ 文件系统。一个分区可以承载一个卷,也可以由多个分区组成动态卷或软 RAID。取证中常见的问题是分区表被破坏、分区被隐藏或分区项被篡改,此时需要根据文件系统引导扇区(如 NTFS 的 $Boot、FAT 的 BPB)反推分区起始位置,再重建分区表。

在取证镜像中,分区起始 LBA 通常按 2048 扇区(1MB)对齐,这是现代 SSD 和高级格式磁盘的常见做法。若发现分区起始 LBA 为 63 等旧值,可能说明该分区由老工具创建或经过手工调整。

四、从地址到证据:一次完整的定位推演

假设我们拿到一块 512 字节逻辑扇区的磁盘镜像,MBR 显示某 NTFS 分区起始 LBA=2048,簇大小 4096 字节。现在要定位文件“report.docx”的数据。步骤是:先在 NTFS 的 MFT 中找到该文件的记录,读取其数据属性中的起始簇号(例如 0x0000000000003A2C),换算为 LBA:

起始 LBA = 分区起始 LBA + 簇号 × 每簇扇区数
         = 2048 + 0x3A2C × 8
         = 2048 + 14892 × 8
         = 2048 + 119136
         = 121184

于是文件数据从 LBA 121184 开始。若该文件被删除,MFT 记录可能被标记为空闲,但簇号仍可解析,数据区也可能尚未被覆盖。此时能否恢复,取决于簇是否被重新分配、是否被 TRIM 或擦除。取证人员需要结合 $Bitmap、$LogFile 和簇分配状态综合判断。

磁盘逻辑结构:从物理几何到卷映射 物理磁盘(Physical Disk) 盘片 / 磁头 / 磁道 / 柱面 / 扇区(512B 或 4Kn) CHS 几何:Cylinder × Head × Sector(历史寻址方式) LBA 线性编号 LBA 0 → LBA N-1 分区表(Partition Table) MBR(LBA 0) 4 项 × 16B,起始 LBA + 扇区数 GPT(LBA 1) 128 项 × 128B,GUID + LBA 范围 分区项字段 状态 / 类型 / 起始 LBA / 扇区数 分区(Partition)→ 卷(Volume) 分区 1(NTFS) 分区 2(exFAT) 分区 3(未分配) 分区 4(恢复分区) 文件系统(File System) 引导扇区($Boot / BPB)→ MFT / FAT → 簇分配 → 文件数据 簇号 → LBA 换算 地址翻译链

五、取证中的关键检查点

在实际取证中,围绕本节知识点应重点检查以下内容:

  • 逻辑扇区大小:确认镜像工具是否按 512 或 4096 字节扇区读取,避免偏移错位。
  • 分区起始 LBA:与文件系统引导扇区中的“隐藏扇区数”字段交叉验证,判断分区表是否被篡改。
  • 簇大小:从 BPB 或 $Boot 中读取,用于计算文件数据位置和碎片范围。
  • CHS 字段:MBR 分区项中的 CHS 值若与 LBA 换算不一致,可能说明分区表被手工编辑或由非标准工具写入。
  • 卷映射:确认分区是否被动态卷、软 RAID 或加密容器(如 BitLocker、LUKS)二次封装,避免直接按普通分区解析。
不要仅凭分区表类型字段判断文件系统。例如类型 0x07 通常表示 NTFS/exFAT,但实际可能是其他文件系统或被加密。应以引导扇区中的文件系统标识(如“NTFS”“EXFAT”“FAT32”)为准。

把上述层级串起来,就得到一条清晰的取证定位链:物理磁盘 → LBA 线性空间 → 分区表 → 分区起始 LBA → 卷 → 文件系统 → 簇号 → 文件数据。任何一环出现偏差,都会导致数据定位失败或证据链断裂。掌握这条链,才能在面对分区丢失、文件系统损坏或人为篡改时,快速判断问题出在哪一层,并选择正确的恢复与验证策略。