Windyland 内核崩坏

常见文件系统调查

引子

对于桌面端、服务端来说,常见的文件系统莫过于Windows系的NTFS\FAT32\exFAT, 和Linux系的ext4, ext3, ext2, XFS, JFS, ReiserFS, btrfs, BSD/Solaris 系的UFS, ZFS。

但是随着移动端的兴起,对常见文件系统似乎又可以追加HFS+ (iOS), YAFFS (Android), Samsung RFS 等等。

这里就简述下几个常见的文件系统的相关特性: FAT, NTFS, ext4, HFS+, YAFFS

Case Sensitive or Case Insensitive ?

不区分大小写的文件系统似乎都是各家桌面环境比如Windows, Mac OS X的最爱。

比如NTFS 内部使用了UTF-16作为其的内部编码标示,最大文件名可以达到255 UTF-16字符, 即支持区分大小写,但是残念的是,Windows 内核较上层接口是将其处理为不区分大小写。 相比FAT 结构的在没有LFN扩展情况下,内部是不支持大小写。

HPS+ 或者HPS Plus,内部标示是255 UTF-16字符。也就是说OS X 系统本身是可以支持区分大小写,其实OS X的Disk Utility就支持Case-insensitve HFS+分区类型,但是由于历史原因,OS X默认是使用不区分大小写的。

基于HFS+ 的文件名标示所用的字符集是 NFD (Unicode Normalization Form D)格式, 有区分于 POSIX 系统常见的 NFC, NFD的特点之一就是一个字符(特别是Accent Character) 可能需要多个UTF 单位标示。

其他的较现代的文件系统似乎多以UTF8作为其默认文件名编码,如ext4, JFS,XFS等

Journal

现代的文件系统几乎都支持Journal 日志功能,比如ext4, NTFS。

MetaData

  • FAT: 没有用index 用于检索文件,文件通常被顺序检索找到。
  • NTFS: B+-trees
  • HFS+: B-trees
  • ext4: B-trees (HTree)

NANO flash

YAFFS 是为闪存芯片的特定设计的文件系统,见诸Android 和FireFox OS。 YAFFS 是日志结构的文件系统,其数据的MetaData 被顺序写入连续的日志中。其最大的目的是保证数据的一致性。

当然Android生态系统使用的文件系统不全是YAFFS, 最近更常见的似乎是ext4.

iOS 使用的是HPS+ with case sensitive 文件系统。

Futher Reading