FAT文件系统
定义
FAT文件系统是一种以文件分配表(File Allocation Table)为核心数据结构的文件系统,由微软开发,最初用于小型磁盘与层级简单的目录结构[1]。它把卷划分成若干固定大小的簇,并用一张与簇一一对应的表记录每个簇是空闲、占用、损坏,还是指向同一文件的下一个簇[3]。因为表在卷的最前端以固定位置存放,且通常保存两个副本,所以结构易于解析,也便于在其他平台上重新实现[5]。
「FAT」这个名称既指整套文件系统,也常被用来直接称呼那张分配表本身,两种用法在技术文献中并存[2]。
原理
FAT卷在逻辑上分为4个区域:引导扇区所在的保留区、保存分配表的FAT区、根目录区(仅FAT12与FAT16独立存在),以及存放文件实际内容的数据区[6]。引导扇区中的BIOS参数块记录着簇大小、FAT副本数、每份FAT的扇区数等几何参数,操作系统依靠这些字段定位其余结构[6]。FAT32把根目录移入数据区,因此根目录可以像普通目录一样增长,不再受固定表项数限制[6]。
文件的目录项只记录起始簇号与文件长度,后续内容靠分配表中的指针逐簇串联,形成所谓的簇链[3]。若簇号为 $c$,读取时先查分配表第 $c$ 项,得到的值若是有效簇号就继续跳转,若是文件结束标记则停止;0 值表示该簇空闲,另有保留值用于标记坏簇[7]。目录本身也是一种特殊文件,其内容由若干目录项组成。
flowchart LR
A[引导扇区 / BIOS参数块] --> B[FAT 副本 1]
B --> C[FAT 副本 2]
C --> D[根目录]
D --> E[数据区:簇链]
簇是分配空间的最小单位,其大小随卷容量增长,早期软盘上通常只有 1 个至数个扇区,而exFAT允许的簇可达 32 MB[4][8]。表项宽度决定了可寻址的簇数上限:12 位对应约 4000 余个簇,16 位对应 6 万余个,32 位版本则只用其中 28 位[9]。这正是各版本容量差异的根源[9]。
发展历程
原始的 8 位FAT由马克·麦克唐纳(Marc McDonald)在与其时同事讨论的基础上设计并实现,1977 年前后随微软为NCR数据录入终端配套的独立磁盘版BASIC投入使用,当时的目录项为 16 字节且不支持子目录[10][11]。1978 年该BASIC被移植到 8086 平台,1979 年起FAT亦被用于微软自研的MDOS/MIDAS系统[11]。
1980 年问世的QDOS/86-DOS采用FAT12作为8英寸与5.25英寸软盘的文件系统,此后随MS-DOS进入个人计算机,成为PC上的主流格式[9]。1984 年IBM PC AT与PC DOS 3.0发布,簇地址扩展到 16 位,可管理的簇数升至 6 万余个,FAT16由此成形[10]。VFAT扩展则在Windows 95中引入长文件名支持,使文件名可超出传统 8.3 格式的限制[4]。
FAT32于 1995 年随Windows 95 OSR2推出,将表项扩展至 32 位(实际使用 28 位),分区上限显著提高,Windows 2000起NT系列也提供支持[12][8]。不过Windows 2000及之后的格式化程序把可创建的FAT32卷限制在 32 GB,读写更大卷仍可进行[13]。为适应闪存与大文件需求,微软在 2006 年11 月随Windows Embedded CE 6.0引入exFAT,其后又被Windows Vista SP1采纳[4]。
在Windows NT系列上,NTFS逐步取代FAT承担系统盘角色,FAT退居可移动介质与兼容性场景[2]。微软至今仍在新版Windows中保留FAT与exFAT支持[2]。
应用
FAT最广泛的用途是可移动存储:软盘、U盘、闪存卡、记忆棒等介质普遍以FAT或exFAT格式化[3]。数字相机采用的DCF规范自 1998 年起要求物理层使用FAT12、FAT16、FAT32或exFAT之一,以保证存储卡能在不同厂商设备间通用[3]。便携播放器、摄像机、手机、游戏机以及车载音响、机顶盒等嵌入式系统也常读写该格式[14]。
在双系统或混合环境中,FAT因几乎被所有操作系统原生支持,常被选作Windows、macOS、Linux之间交换数据的中间格式[1]。固件与引导场景同样依赖其简洁性,因为存储需在操作系统加载之前被读取[15]。Windows还提供将FAT卷就地转换为NTFS的工具,但转换难以逆向[3]。
局限
容量与文件大小受表项位数与簇大小共同约束:FAT32单文件上限为 4 GiB,卷上限理论约 2 TiB,FAT16的分区上限则在 2 GB 量级[2][4]。文件按整簇分配,1 KB 的文件放在 32 KB 簇中会浪费 31 KB,小文件众多时空间利用率明显下降[6]。
FAT不提供文件级访问权限,也不支持日志、加密与压缩,因此难以满足多用户隔离与审计需求[16]。由于缺少日志机制,写入过程若被中断,分配表可能与其他结构不一致,造成簇丢失或数据损坏,需借助外部检查工具修复[15][17]。
簇链是单向链表,随机定位需要从头逐簇遍历,文件越大寻道次数越多,访问性能随之下降[7]。频繁改写还会造成文件碎片分散,通常要定期整理以维持效率[13]。此外,目录需顺序扫描,表项数量随卷容量增长,容量越大空闲空间统计与分配的开销越明显[17]。exFAT虽解除了容量瓶颈,但同样没有日志机制,可靠性仍不及日志式文件系统[18]。
参见
参考资料
- 检查文件分配表 (FAT) 文件系统 [引用日期2026-10-29]
- What is File Allocation Table (FAT)? - TechTarget.com/whatis [引用日期2026-10-29]
- File Allocation Table [引用日期2026-10-29]
- exFAT [引用日期2026-10-29]
- FAT、HPFS 和 NTFS 文件系统概述 - Windows Client [引用日期2026-10-29]
- wikipedia.org 上的网页 [引用日期2026-10-29]
- [0024] 图4是表示FAT16的FAT(305,306)的结构图 [引用日期2026-10-29]
- 图文详情——科普中国资源服务 [引用日期2026-10-29]
- File Allocation Table – Wikipedia [引用日期2026-10-29]
- wikipedia.org 上的网页 [引用日期2026-10-29]
- File Allocation Table [引用日期2026-10-29]
- FAT32支持到2TB?exFAT格式才是你的首选 [引用日期2026-10-29]
- FAT(文件配置表)_百度百科 [引用日期2026-10-29]
- File Allocation Table [引用日期2026-10-29]
- ninjaone.com 上的网页 [引用日期2026-10-29]
- 了解文件系统 [引用日期2026-10-29]
- [CentOS] Re: software raid [引用日期2026-10-29]
- arstechnica.com 上的网页 [引用日期2026-10-29]