Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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系统之间的共享,也支持跨平台共享

文件系统对比与选型建议

文件系统最大分区最大文件日志跨平台兼容性适用场景
FAT322TB4GB极好小容量U盘,老设备兼容
exFAT128PB16EB大容量U盘、移动硬盘,跨平台大文件传输
NTFS256TB16TB一般Windows系统盘、数据盘
EXT41EB16TB一般Linux通用场景,系统盘、数据盘
XFS8EB8EB一般Linux服务器、大数据存储,大文件场景
Btrfs16EB16EB需要快照、高级特性的Linux场景,NAS
ZFS256ZB16EB一般企业级存储,对可靠性要求极高的场景
F2FS16TB4EB一般闪存设备,手机、SSD
APFS8EB8EB苹果macOS/iOS设备

选型建议

  1. Windows桌面:系统盘和数据盘都选NTFS,没问题
  2. Linux桌面/服务器通用场景:选EXT4,稳定可靠,兼容性好
  3. Linux服务器大数据/大容量存储:选XFS,适合大文件和大容量
  4. 移动存储(U盘/移动硬盘)
    • 小于32G,不需要存大于4G的文件:FAT32,兼容性最好
    • 大于32G,或者需要存大文件:exFAT,兼顾兼容性和大文件支持
    • 只在Windows上用:NTFS也可以
  5. 闪存设备(手机/SSD):优先选针对闪存优化的文件系统,比如F2FS、APFS
  6. 企业级存储/数据备份:选ZFS或者Btrfs,数据可靠性高,支持快照等高级特性
  7. 跨平台共享:选exFAT或者用网络文件共享

常见问题

我的U盘应该用什么格式?

优先选exFAT,现在新的设备都支持,可以存储大于4G的文件,比NTFS更适合U盘,写入更少寿命更长。如果需要兼容非常老的设备,再考虑FAT32。

为什么Linux不用NTFS?

NTFS是微软的专有文件系统,Linux下的NTFS驱动是反向工程实现的,性能和稳定性不如原生的EXT4/XFS,而且NTFS的权限模型和Linux不兼容,所以Linux一般不用NTFS作为本地文件系统。

日志文件系统有什么好处?

日志文件系统会在修改文件内容之前,先把要做的修改写到日志区域,然后再执行实际的修改。如果中途断电或者崩溃,重启后可以根据日志恢复,不会导致文件系统损坏,大大提升了可靠性。现在主流的文件系统都是日志型文件系统。

思考问题

  1. 为什么移动存储设备通常用FAT32或者exFAT,而不用NTFS或者EXT4?
  2. EXT4相比EXT3有哪些改进?
  3. 针对SSD优化的文件系统和传统文件系统有什么不同?
  4. 如果你要搭建一个文件存储服务器,你会选择什么文件系统?为什么?