5.2 常见文件系统
不同的操作系统和场景下有不同的文件系统,每种文件系统都有自己的特点和适用场景。这一节我们介绍常见的文件系统,帮助你在不同场景下选择合适的文件系统。
Windows平台常见文件系统
1. FAT32
- 全称:File Allocation Table 32
- 发布时间:1996年
- 特点:
- 结构简单,兼容性极好,几乎所有操作系统和设备都支持
- 最大支持2TB分区,单个文件最大4GB
- 没有日志,没有权限控制,不支持压缩、加密等高级特性
- 容易产生文件碎片,性能较差
- 适用场景:U盘、内存卡等需要跨平台使用的小容量存储设备,因为兼容性好
- 缺点:单个文件不能超过4GB,不适合大文件存储
2. exFAT
- 全称:Extended File Allocation Table
- 发布时间:2006年,微软开发
- 特点:
- 是FAT32的改进版,解决了FAT32的很多限制
- 最大支持128PB分区,单个文件最大16EB(几乎没有限制)
- 仍然没有日志和完善的权限控制
- 兼容性比FAT32略差,但现在主流操作系统(Windows、macOS、Linux、Android、iOS)都已经支持
- 适用场景:大容量U盘、移动硬盘,需要跨平台传输大文件的场景,是现在移动存储的首选格式
- 优点:兼顾兼容性和大文件支持,比NTFS更适合移动存储,因为没有日志,对闪存的写入更少,寿命更长
3. NTFS
- 全称:New Technology File System
- 发布时间:1993年,是Windows的默认文件系统
- 特点:
- 日志型文件系统,可靠性高, crash 后容易恢复
- 支持权限控制、压缩、加密、磁盘配额、稀疏文件、硬链接、软链接等高级特性
- 最大支持256TB分区,单个文件最大16TB
- 性能稳定,适合大容量存储
- 适用场景:Windows系统的系统盘和数据盘,是Windows平台的首选
- 缺点:
- 兼容性一般,macOS默认只能读不能写,Linux需要安装驱动才能支持
- 有日志写入,对U盘等闪存设备的寿命有一定影响,不适合移动存储
Linux平台常见文件系统
1. EXT系列(EXT2/EXT3/EXT4)
- EXT2:1993年发布,非日志型文件系统,性能不错,但可靠性差,crash后容易丢失数据,现在基本不用了
- EXT3:2001年发布,在EXT2的基础上增加了日志功能,可靠性大大提升,最大支持32TB分区,单个文件最大2TB
- EXT4:2008年发布,是EXT3的改进版,也是现在大多数Linux发行版的默认文件系统
- 最大支持1EB分区,单个文件最大16TB
- 支持盘区(Extent)分配,减少文件碎片,提升大文件性能
- 支持延迟分配、快速fsck、日志校验等特性,性能和可靠性都很好
- 非常稳定,经过了十几年的大量使用验证
- 适用场景:通用场景,Linux系统盘、数据盘都可以用,是Linux下的万金油文件系统
2. XFS
- 开发公司:SGI,1994年发布,现在是RHEL/CentOS系列的默认文件系统
- 特点:
- 高性能的日志型文件系统,特别擅长处理大文件和大容量存储
- 最大支持8EB分区,单个文件最大8EB
- 支持在线扩容,非常适合服务器和大数据场景
- 对于大量小文件的场景性能略逊于EXT4
- 适用场景:服务器、大数据存储、大容量磁盘阵列,适合大文件多的场景
3. Btrfs(B-tree File System)
- 开发公司:Oracle,2007年发布,是Linux下的新一代写时复制文件系统
- 特点:
- 写时复制(CoW)机制,数据更安全
- 支持快照、子卷、透明压缩、数据校验、RAID、在线扩容/缩容等高级特性
- 最大支持16EB分区
- 性能比EXT4略低,但特性非常丰富
- 适用场景:需要快照、数据保护、多磁盘管理的场景,是未来Linux文件系统的发展方向之一,现在很多NAS系统已经采用Btrfs
4. ZFS
- 开发公司:Sun,2005年发布,是一个企业级的文件系统+逻辑卷管理器
- 特点:
- 功能极其丰富,支持快照、克隆、RAID-Z、数据校验、压缩、重复数据删除等高级特性
- 数据完整性极高,有“写时复制+校验和“机制,几乎不可能出现数据静默损坏
- 最大支持256ZB分区
- 内存占用较高
- 适用场景:企业级存储、NAS、数据备份等对数据可靠性要求极高的场景
- 注意:因为许可证问题,Linux主线内核没有包含ZFS,需要单独安装,FreeBSD和macOS原生支持ZFS
移动/嵌入式平台常见文件系统
1. F2FS(Flash Friendly File System)
- 开发公司:三星,2012年发布
- 特点:
- 专门为闪存设备(SSD、eMMC、UFS)设计的文件系统
- 针对闪存的特性优化,磨损均衡更好,性能更高,寿命更长
- 日志结构的文件系统,特别适合闪存
- 适用场景:安卓手机、SSD、嵌入式设备的闪存存储,现在很多安卓手机的默认文件系统就是F2FS
2. YAFFS2 / JFFS2
- 专门为NAND闪存设计的嵌入式文件系统,适合小型嵌入式设备
- 现在已经逐渐被F2FS取代
其他文件系统
1. HFS+ / APFS
- HFS+是苹果macOS旧版的默认文件系统,现在已经被APFS取代
- APFS是苹果2017年发布的新一代文件系统,针对SSD优化,支持快照、加密、空间共享等特性,是现在macOS和iOS的默认文件系统
2. NFS / SMB / CIFS
- 网络文件系统,用于网络共享,不是本地磁盘的文件系统
- NFS主要用于Unix/Linux系统之间的共享
- SMB/CIFS主要用于Windows系统之间的共享,也支持跨平台共享
文件系统对比与选型建议
| 文件系统 | 最大分区 | 最大文件 | 日志 | 跨平台兼容性 | 适用场景 |
|---|---|---|---|---|---|
| FAT32 | 2TB | 4GB | 否 | 极好 | 小容量U盘,老设备兼容 |
| exFAT | 128PB | 16EB | 否 | 好 | 大容量U盘、移动硬盘,跨平台大文件传输 |
| NTFS | 256TB | 16TB | 是 | 一般 | Windows系统盘、数据盘 |
| EXT4 | 1EB | 16TB | 是 | 一般 | Linux通用场景,系统盘、数据盘 |
| XFS | 8EB | 8EB | 是 | 一般 | Linux服务器、大数据存储,大文件场景 |
| Btrfs | 16EB | 16EB | 是 | 差 | 需要快照、高级特性的Linux场景,NAS |
| ZFS | 256ZB | 16EB | 是 | 一般 | 企业级存储,对可靠性要求极高的场景 |
| F2FS | 16TB | 4EB | 是 | 一般 | 闪存设备,手机、SSD |
| APFS | 8EB | 8EB | 是 | 差 | 苹果macOS/iOS设备 |
选型建议
- Windows桌面:系统盘和数据盘都选NTFS,没问题
- Linux桌面/服务器通用场景:选EXT4,稳定可靠,兼容性好
- Linux服务器大数据/大容量存储:选XFS,适合大文件和大容量
- 移动存储(U盘/移动硬盘):
- 小于32G,不需要存大于4G的文件:FAT32,兼容性最好
- 大于32G,或者需要存大文件:exFAT,兼顾兼容性和大文件支持
- 只在Windows上用:NTFS也可以
- 闪存设备(手机/SSD):优先选针对闪存优化的文件系统,比如F2FS、APFS
- 企业级存储/数据备份:选ZFS或者Btrfs,数据可靠性高,支持快照等高级特性
- 跨平台共享:选exFAT或者用网络文件共享
常见问题
我的U盘应该用什么格式?
优先选exFAT,现在新的设备都支持,可以存储大于4G的文件,比NTFS更适合U盘,写入更少寿命更长。如果需要兼容非常老的设备,再考虑FAT32。
为什么Linux不用NTFS?
NTFS是微软的专有文件系统,Linux下的NTFS驱动是反向工程实现的,性能和稳定性不如原生的EXT4/XFS,而且NTFS的权限模型和Linux不兼容,所以Linux一般不用NTFS作为本地文件系统。
日志文件系统有什么好处?
日志文件系统会在修改文件内容之前,先把要做的修改写到日志区域,然后再执行实际的修改。如果中途断电或者崩溃,重启后可以根据日志恢复,不会导致文件系统损坏,大大提升了可靠性。现在主流的文件系统都是日志型文件系统。
思考问题
- 为什么移动存储设备通常用FAT32或者exFAT,而不用NTFS或者EXT4?
- EXT4相比EXT3有哪些改进?
- 针对SSD优化的文件系统和传统文件系统有什么不同?
- 如果你要搭建一个文件存储服务器,你会选择什么文件系统?为什么?