分区

硬盘分区是指将硬盘的整体存储空间划分成多个独立的区域,每个区域可以用来安装操作系统、应用程序以及存储数据文件等。分区的目的是为了更好地管理和使用硬盘空间,提高数据存取的效率和安全性。

分区的类型

硬盘分区主要有三种类型:主分区、扩展分区和逻辑分区。

  • 主分区:这是硬盘上最基本的分区类型,通常用于安装操作系统。一个硬盘最多可以有四个主分区。
  • 扩展分区:由于主分区的数量限制,扩展分区被引入来解决这个问题。扩展分区本身不能存储数据,但可以包含多个逻辑分区。
  • 逻辑分区:逻辑分区是扩展分区的一部分,可以用于存储数据。一个扩展分区可以包含多个逻辑分区。

分区的好处

分区有以下几个好处:

  1. 数据隔离:每个分区的数据是独立的,对一个分区的操作不会影响其他分区的数据。
  2. 提高性能:将数据集中在一个分区内,可以提高数据的读写速度和性能。
  3. 便于管理:分区可以帮助用户更好地管理硬盘空间,例如将操作系统、应用程序和数据文件分别存放在不同的分区中。

分区格式

常见的分区格式有MBR(主引导记录)和GPT(GUID分区表)。

  • MBR格式:这是早期硬盘使用的分区格式,支持最多四个主分区或三个主分区加一个扩展分区。
  • GPT格式:这是较新的分区格式,支持更多的分区,并且具有更好的兼容性和安全性。

MBR格式

MBR(Master Boot Record)诞生于1983年,伴随着IBM PC DOS 2.0问世,至今已有近40年历史。这个古老而精巧的设计位于硬盘的第一个扇区(第0扇区),虽然只有512字节,却掌控着整个硬盘的命运。

这512字节可以分为三个关键部分:

  1. 引导代码(前446字节):包含可执行代码,负责加载操作系统的第一阶段引导程序。
  2. 分区表(接下来的64字节):记录硬盘的分区信息,这是我们需要重点研究的核心内容
  3. 结束标志(最后2字节55AA):标识这是一个有效的MBR。

MBR分区表

  • 第 1 字节:引导标志
    • 这决定了计算机能不能从这个分区启动系统。
    • 如果在底层看到 80,代表这是激活的主分区(通常是 C 盘);如果是 00,代表非激活。如果遇到无法引导的故障,或者在分析恶意软件破坏引导扇区时,检查这个字节是第一步。
  • 第 2、3、4 字节 & 第 6、7、8 字节:CHS 寻址
    • CHS 代表 柱面(Cylinder)、磁头(Head)、扇区(Sector)。这是早期机械硬盘物理结构的寻址方式。
    • 但在现代大容量硬盘中,这种老旧的寻址方式早已触及上限(通常会被填满 FF FF FF 以表示该数值无效)。不过,在分析老旧存储设备或某些特定嵌入式系统的镜像包时,依然会遇到它。
  • 第 5 字节:分区类型 ID
    • 这就是咱们上一个问题中提到的类型标识符。
    • 07 是 NTFS,83 是 Linux 等。在进行底层数据恢复时,如果这一个字节被恶意软件篡改或者意外损坏(比如变成了 00 未知状态),操作系统就会在资源管理器中提示“分区未格式化”或完全不显示,但实际上底层的完整数据区毫发无损。通过手动将这个字节改回 07,就能瞬间恢复一个丢失的 Windows 盘。
  • 第 9、10、11、12 字节:LBA 起始偏移
    • 这是现代硬盘真正依赖的寻址方式(Logical Block Addressing,逻辑块寻址)。它记录了该分区从硬盘的第几个扇区开始。
    • 关键点——小端存储(Little-Endian): 图中特别标注了这一点。在计算机底层,低位字节存放在低地址。这意味着如果你在十六进制编辑器里看到这四个字节是 00 08 00 00,你需要把它反过来读成 00 00 08 00(十六进制),转换成十进制也就是第 2048 个扇区(这是现代 Windows 系统常见的起始偏移量,用于 4K 对齐)。
  • 第 13、14、15、16 字节:总扇区
    • 这决定了当前分区到底有多大。同样采用小端序存储。
    • 计算公式:起始 LBA 扇区号 + 总扇区数 = 这个分区的物理结束位置。在手工提取固件、切割磁盘镜像或逆向分析存储结构时,这两个 LBA 参数是划定数据边界的唯一基准。

局限性与变通方案

MBR设计上的限制逐渐在现代计算环境中显现:

  1. 容量限制:由于使用32位表示扇区数,MBR最大支持2TB(2^32×512字节)的硬盘。
  2. 分区数量限制:最多4个主分区,需要通过扩展分区和逻辑分区的复杂方案来突破。
  3. 单点故障:MBR损坏将导致整个磁盘无法访问,缺乏冗余设计。

尽管有这些限制,MBR因其简单可靠,至今仍被许多传统系统和工具所支持。

GPT格式

与 MBR 仅有 64 字节的局促空间不同,GPT 采用了极其宽裕且安全的设计。它抛弃了陈旧的 CHS 寻址,全面采用 64 位的 LBA(逻辑块寻址),最大支持惊人的 9.4 ZB 容量。

在底层结构上,GPT 最大的特点是冗余备份:硬盘头部(LBA 1)有一份主分区表,硬盘尾部(最后一个扇区)还会强制存放一份备份分区表。在数据取证或灾难恢复时,如果头部遭受勒索软件破坏,直接跳转到磁盘末尾提取备份表,即可瞬间找回所有分区。

GPT 的每个分区表项占用 128 字节,详细拆解如下:

  • 第 0~15 字节:分区类型 GUID
    • 占用 16 字节(128 位)。这是分区的“职业代码”。
    • 例如:Windows 基本数据分区的固定代码是 EBD0A0A2-B9E5-4433-87C0-68B6B72699C7。在底层扫描时,如果匹配到这串十六进制特征码,就可以断定这是一个 Windows 数据盘。
  • 第 16~31 字节:唯一分区 GUID
    • 占用 16 字节。这是分区的“绝对唯一身份证”。
    • 每次创建分区时由系统随机生成。在复杂的电子证据保全中,这个 GUID 是确认“这就是原本那个分区”的铁证,比盘符(C盘、D盘)可靠得多。
  • 第 32~39 字节:起始 LBA
    • 占用 8 字节(64 位寻址),这也是它能突破 MBR 2TB 限制的核心。
    • 关键点——依然是小端存储:同 MBR 一样,低位字节在前。它精确记录了分区数据的物理起点的绝对扇区号。
  • 第 40~47 字节:结束 LBA
    • 占用 8 字节。记录分区结束的绝对扇区号。
    • 计算公式: 与 MBR 需要自己计算不同,GPT 直接给出了终点。(结束 LBA - 起始 LBA + 1) * 扇区大小(通常512或4096字节) = 这个分区的精确字节大小。
  • 第 48~55 字节:属性标志
    • 占用 8 字节的标志位。
    • 它控制着这个分区在操作系统中的行为。例如,第 60 位如果被设置为 1,操作系统就会将其视为“只读”分区,禁止写入;第 62 位可将其设为“隐藏”分区。
  • 第 56~127 字节:分区名称
    • 占用 72 字节。
    • 编码方式: 采用 UTF-16LE 编码(小端序 Unicode)。每个字符占 2 个字节,这意味着它最多可以存储 36 个字符的自定义名称(比如你给分区起的“Work Data”或“证据镜像”)。这在底层十六进制查看器中,通常表现为字母中间夹杂着 00

文件系统

核心作用

  • 空间分配:当你保存一个文件时,文件系统负责在硬盘上寻找空闲的“货架”(扇区/簇),并把数据存进去。
  • 目录结构维护:它实现了我们熟悉的“文件夹嵌套文件夹”的树状结构,让你能通过路径(如 /usr/local/binC:\Windows)找到目标。
  • 索引与寻址(关键机制):文件系统会维护一本“超级目录”(比如 Windows 的 MFT 或 Linux 的 Inode 表)。这本目录记录了每个文件的名称、权限(元数据),以及它在硬盘上的物理绝对位置。

常见文件系统

FAT文件系统

FAT16

image.png

标识符
  • 在 MBR 分区表中(第 5 字节): 与 NTFS 固定使用 07 不同,FAT 系统由于历史悠久,经历了多次升级,所以有多个标识符(Type ID):
    • 06:早期的 FAT16(大于 32MB 的分区)。
    • 04:极其古老的 FAT16(小于 32MB 的分区)。
  • 在 GPT 分区表中(16 字节 Type GUID):
    • 如果你在硬盘上划出一块 2GB 的空间并格式化为 FAT16,在底层的 GPT 分区表中,它的 第 0~15 字节(分区类型 GUID) 会被无差别地打上以下标识:EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
    • C12A7328-F81F-11D2-BA4B-00A0C93EC93B
  • 逻辑层面
    • FAT16:在 VBR 偏移 0x36 处,固定为 ASCII 码 FAT16 (十六进制:46 41 54 31 36 20 20 20

FAT32

image.png

特点
  • 最广泛兼容的文件系统,几乎所有操作系统都能识别
  • 单个文件最大不能超过4GB
  • 单个分区最大不能超过32GB(实际格式化时通常限制在2TB以内)
  • 没有内置的安全特性和权限管理

适用场景:U盘、存储卡、需要在不同系统间共享的小容量存储设备

标识符
  • **在 MBR 分区表中(第 5 字节)
    • 0B:FAT32(使用旧的 CHS 寻址,通常适用于 8GB 以下容量)。
    • 0C:FAT32(使用现代的 LBA 寻址,目前最常见)。
  • 在 GPT 分区表中(16 字节 Type GUID):
    • 普通数据盘: 如果你把 U 盘格式化为 FAT32,它通常直接共用 Windows 基本数据分区的 GUID:EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
    • 系统引导盘(ESP): 这是现代计算机非常关键的一个分区。所有采用 UEFI 启动的电脑,硬盘开头必定会隐藏一个 EFI 系统分区 (ESP),用来存放引导文件。这个 ESP 分区强制要求必须是 FAT32 格式,它拥有专属的强标识 GUID:C12A7328-F81F-11D2-BA4B-00A0C93EC93B
  • 逻辑层面(内部 VBR 扇区特征码):
    • FAT32:在 VBR(第 0 扇区)偏移 0x520x59 处,固定为 ASCII 码 FAT32 (十六进制:46 41 54 33 32 20 20 20)。
    • FAT16:在 VBR 偏移 0x36 处,固定为 ASCII 码 FAT16 (十六进制:46 41 54 31 36 20 20 20)。

exFAT文件系统

特点
  • 微软专为闪存设计的文件系统
  • 克服了FAT32的文件大小限制,支持超过4GB的大文件
  • 比NTFS更轻量,但没有NTFS的高级功能
  • 兼容性介于FAT32和NTFS之间,苹果电脑也可读写
标识符
  • 逻辑层面
    • exFAT:在 VBR 偏移 0x03 处,固定为 ASCII 码 EXFAT (十六进制:45 58 46 41 54 20 20 20)。

Windows文件分区

NTFS文件系统

NTFS 抛弃了 FAT 系列老旧的链表式结构,采用了一种名为 MFT(主文件表,Master File Table) 的关系型数据库结构来管理硬盘。在 NTFS 的世界里有一个至高无上的哲学:“万物皆文件”(包括文件系统本身的元数据,也全都是隐藏文件)。

特点
  • Windows NT/2000/XP/Vista/7/8/10/11的默认文件系统
  • 理论上支持16EB(1EB=1024PB=1,048,576TB)的单个文件和分区大小
  • 提供文件权限控制、加密、压缩功能
  • 具有日志功能,可以在系统崩溃后快速恢复数据一致性
  • 支持硬链接、文件流等高级特性
标识符
  • 物理层面(分区表): MBR 中为 07;GPT 中同为基本数据分区 GUID EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
  • 逻辑层面(内部 VBR 扇区):
    • 偏移 0x030x0A 处,固定为 ASCII 码 NTFS (十六进制:4E 54 46 53 20 20 20 20)。
    • 扇区开头的跳转指令通常为 EB 52 90
  • 终极取证层面(MFT 魔数):
    • 每一个 1KB 的 MFT 记录起点,固定为 ASCII 字符 FILE(十六进制:46 49 4C 45)。
    • 若该区域有物理坏道,Windows 会将其标记为 BAAD(十六进制:42 41 41 44)。全盘搜索 FILE0 即可在无分区表的情况下重建目录树。
MFT(主文件表)的微观世界

MFT 就像是一本超级字典,硬盘里的每一个文件(或文件夹)在这本字典里都占有一页,这一页被称为 MFT 记录(通常是 1024 字节/1KB) 在数据恢复和底层分析时,我们主要就是和这 1KB 的记录打交道。NTFS 会用不同的“属性(Attributes)”来填充这 1KB 的空间:

  • 驻留属性 (Resident): 如果你存了一个只有几十个字节的极小文件(比如一段密码文本),NTFS 觉得为了这点数据去硬盘里找个大扇区太浪费了,它会直接把文件的真实内容塞进这 1KB 的 MFT 记录里! 这种情况下,文件甚至不需要占用外部的数据簇。
  • 非驻留属性 (Non-Resident): 当文件很大,1KB 塞不下时,NTFS 就会在这 1KB 里写下被称为“数据运行(Data Runs)”的指针,这些指针像藏宝图一样,精确指向硬盘上真正存放巨大数据的物理扇区位置。

Linux文件分区

Linux 遵循“一切皆文件”的哲学,通过 VFS(虚拟文件系统)屏蔽了底层差异。其核心数据结构与 Windows 有着本质的区别。

ext4文件系统

作为绝大多数主流 Linux 发行版(如 Ubuntu, Debian)的默认格式,ext4 是目前最经典、使用最广泛的 Linux 文件系统。

特点
  • 极度稳定与成熟:支持日志记录(防断电损坏),支持大文件。
  • 连续数据块技术 (Extent):底层采用 extent 技术来分配连续的物理扇区,极大地减少了磁盘碎片,提升读写效率。
  • 权限分离:基于 Linux 特有的 UID/GID 权限体系,与 Windows 的 ACL 权限体系完全不互通。
标识符
  • 物理层面(分区表)
    • MBR 中,Linux 原生数据分区的标识符通常固定为 83
    • GPT 中,Linux 基本数据分区的 GUID 通常为 0FC63DAF-8483-4772-8E79-3D69D8477DE4
  • 逻辑层面(内部超级块特征码)
    • ext4 的底层特征码不叫 VBR,而是存放在超级块 (Superblock) 中。
    • 偏移与魔数:跳转到分区的第 1024 字节(0x400)处进入超级块,在超级块的偏移 0x38 处,必定能看到固定的 十六进制特征码 53 EF(小端序存储的 0xEF53)。这是底层取证扫描 ext4 分区的绝对核心标志。
Inode (索引节点) 的微观世界

与 NTFS 的 MFT 记录直接包含文件名不同,Linux 的文件属性和文件名是身首异处的。

  • Inode 本体:这是 Linux 底层真正的文件身份证。里面存放了文件的大小、权限(rwx)、所有者(UID/GID)、时间戳(MAC时间)以及指向物理数据块的指针。注意:整个 Inode 中绝对不包含文件名!
    • 目录项 (dentry):文件名存放在该文件所在的“父目录”的数据中。目录就像一个通讯录,记录着“文件名 Inode 号”的映射关系。
    • 取证与底层意义:这解释了为什么 Linux 可以一边运行程序一边无缝更新它(底层认的是 Inode 号,只要进程还占着这个 Inode,数据就在运行);这也是硬链接的底层原理(两个不同名字的文件指向同一个 Inode)。

XFS文件系统

特点
  • 企业级王者:目前 CentOS 和 Red Hat (RHEL) 的默认文件系统。
  • 超强吞吐:极度擅长处理超大文件和高并发的并行 I/O 读写,非常适合大型数据库和视频存储服务器。
  • 能屈不能伸:支持在线扩容,但极难缩容,强行缩小分区极易导致底层数据崩溃。

Btrfs文件系统

特点
  • 新一代魔法师:全称 B-Tree FS,被认为是 Linux 存储的未来,目前是 Fedora 等系统的默认格式。
  • 写时复制 (CoW):修改文件时,不覆盖原数据块,而是写入新的空闲块,最后再修改指针。
  • 原生快照:得益于 CoW 技术,可以实现极速的系统状态备份和秒级无感回滚,且快照本身几乎不占用额外存储空间。

文件

文件的构成

文件头

  • 作用: 告诉操作系统和软件“这是一个什么类型的文件”。它位于文件的最起始位置。
  • 细节:计算机其实并不完全依赖文件名后缀(如 .jpg.mp3)来识别文件。很多文件开头都有一串特殊的特征码。例如,PDF 文件的内部往往以 %PDF- 开头,而 ZIP 压缩包通常以 PK 开头。如果文件头损坏,文件通常会无法打开。

元数据 / 属性信息

  • 作用:描述文件本身的信息(即“关于数据的数据”)。
  • 细节:它通常包含两部分:
    • 文件系统层面的元数据:包括文件名、创建时间、最后修改时间、文件大小、读写权限等(通常存储在硬盘的目录索引中)。
    • 嵌入式元数据 存在于文件内部的信息。比如一首 MP3 音乐里包含的歌手名、专辑封面;一张手机拍摄的 JPG 照片中包含的 EXIF 信息(拍摄时间、GPS 定位、手机型号等)。

主体数据区

  • 作用: 文件的核心内容,也是占用存储空间最大的部分。

  • 细节:这是你真正需要存储和查看的信息。

    • 对于纯文本文件 (TXT),这里是文字的字符编码(如 UTF-8)。
    • 对于图片/视频,这里是由复杂算法压缩过的像素和音频数据。
    • 对于可执行程序 (.exe),这里是计算机 CPU 可以直接执行的二进制机器指令。

文件尾 / 结束标志

  • 作用:标记文件数据的结束,告诉读取软件“内容到此为止”。
  • 细节: 并非所有文件格式都有明确的文件尾,但很多结构严谨的格式会使用它。例如,标准的 JPEG 图片文件会以固定的 FF D9 两个字节作为结尾;一些视频文件也会在文件尾部存放索引(Index),以便播放器能够快速拖动进度条。如果文件尾丢失,通常意味着文件下载未完成或损坏。

文件头文件尾

图片

  • JPEG 文件头:FF D8 FF 文件尾:FF D9
  • TGA 未压缩的前4字节 00 00 02 00 RLE压缩的前5字节 00 00 10 00 00
  • PNG 文件头:89 50 4E 47 0D 0A 1A 0A 文件尾:AE 42 60 82
  • GIF 文件头:47 49 46 38 39(37) 61 文件尾:00 3B
  • BMP 文件头:42 4D 文件头标识(2 bytes) 42(B) 4D(M)
  • TIFF (tif) 文件头:49 49 2A 00
  • ico 文件头:00 00 01 00
  • Adobe Photoshop (psd) 文件头:38 42 50 53

office文件

  • MS Word/Excel (xls.or.doc) 文件头:D0 CF 11 E0
  • MS Access (mdb) 文件头:53 74 61 6E 64 61 72 64 20 4A
  • WordPerfect (wpd) 文件头:FF 57 50 43
  • Adobe Acrobat (pdf) 文件头:25 50 44 46 2D 31 2E
  • application/vnd.visio(vsd) 文件头:D0 CF 11 E0 A1 B1 1A E1
  • Email [thorough only] (eml) 文件头:44 65 6C 69 76 65 72 79 2D 64 61 74 65 3A
  • Outlook Express (dbx) 文件头:CF AD 12 FE C5 FD 74 6F
  • Outlook (pst) 文件头:21 42 44 4E
  • Rich Text Format (rtf) 文件头:7B 5C 72 74 66
  • txt 文件(txt) 文件头:Unicode:FE FF / Unicode big endian:FF FE / UTF-8:EF BB BF /ANSI编码是没有文件头的

压缩包文件

  • ZIP Archive (zip) 文件头:50 4B 03 04 文件尾:50 4B
  • RAR Archive (rar) 文件头:52 61 72 21

音频文件

  • Wave (wav) 文件头:57 41 56 45
  • audio(Audio) 文件头: 4D 54 68 64
  • audio/x-aac(aac)
  • avi文件头:52 49 46 46 (RIFF) 后跟 41 56 49 20 (AVI)
  • 文件头:FF F1(9)

视频文件

  • AVI (avi) 文件头:41 56 49 20
  • Real Audio (ram) 文件头:2E 72 61 FD
  • Real Media (rm) 文件头:2E 52 4D 46
  • MPEG (mpg) 文件头:00 00 01 BA(3)
  • Quicktime (mov) 文件头:6D 6F 6F 76
  • Windows Media (asf) 文件头:30 26 B2 75 8E 66 CF 11
  • MIDI (mid) 文件头:4D 54 68 64

代码文件

  • XML (xml) 文件头:3C 3F 78 6D 6C
  • HTML (html) 文件头:68 74 6D 6C 3E
  • Quicken (qdf) 文件头:AC 9E BD 8F
  • Windows Password (pwl) 文件头:E3 82 85 96

其他类型

  • windows证书文件(der) 文件头:30 82 03 C9
  • CAD (dwg) 文件头:41 43 31 30
  • Windows Shortcut (lnk) 文件头:4C 00 00 00
  • Windows reg(reg) 文件头:52 45 47 45 44 49 54 34