Comparison of file systems
From Wikipedia, the free encyclopedia
The following tables compare general and technical information for a number of computer file systems.
General information
Metadata
| File system | Stores file owner |
POSIX file permissions |
Creation timestamps |
Last access/ read timestamps |
Last metadata change timestamps |
Last archive timestamps |
Security/ MAC labels |
|||
|---|---|---|---|---|---|---|---|---|---|---|
| bcachefs | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes |
| BeeGFS | Yes | Yes | No | Yes | Yes | No | Yes | ? | Yes | Yes |
| CP/M file system | No | No | Yes[c] | No | No | No | No | No | No | No |
| DECtape[8] | No | No | Yes | No | No | No | No | No | No | No |
| Elektronika BK tape format | No | No | No | No | No | No | No | No | No | Yes |
| Level-D | Yes | Yes | Yes | Yes (date only) | Yes | Yes | Yes (FILDAE) | No | No | No |
| RT-11[9] | No | No | Yes (date only) | No | No | No | No | No | No | Yes |
| Version 6 Unix file system (V6FS)[10] | Yes | Yes | No | Yes | No | No | No | No | No | No |
| Version 7 Unix file system (V7FS)[11] | Yes | Yes | No | Yes | No | No | No | No | No | No |
| exFAT | No | No | Yes | Yes | No | No | No | No | No | No |
| FAT12/FAT16/FAT32 | No | No | Yes | Yes | No[d] | No | No | No | No[e] | No |
| HPFS | Yes[f] | No | Yes | Yes | No | No | No | ? | Yes | No |
| NTFS | Yes | Yes[g] | Yes | Yes | Yes | No | Yes | Yes[h] | Yes | No |
| ReFS | Yes | Yes | Yes | Yes | Yes | No | Yes | ? | Yes[i] | Yes |
| HFS | No | No | Yes | No | No | Yes | No | No | Yes | No |
| HFS Plus | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ? | Yes | No |
| FFS | Yes | Yes | No | Yes | Yes | No | No | No | No | No |
| UFS1 | Yes | Yes | No | Yes | Yes | No | Yes[j] | Yes[j] | No[k] | No |
| UFS2 | Yes | Yes | Yes | Yes | Yes | No | Yes[j] | Yes[j] | Yes | Partial |
| HAMMER | Yes | Yes | Yes | Yes | Yes | ? | Yes | Yes | No | Yes |
| HAMMER2 | Yes | Yes | ? | ? | ? | ? | ? | ? | ? | ? |
| LFS | Yes | Yes | No | Yes | Yes | No | No | No | No | No |
| EROFS | Yes | Yes | No | No | Yes | No | Yes | Yes | Yes | No |
| ext | Yes | Yes | No | No | No | No | No | No | No | No |
| Xiafs | Yes | Yes | No | Yes | Yes | No | No | No | No | No |
| ext2 | Yes | Yes | No | Yes | Yes | No | Yes[l] | Yes[l] | Yes | No |
| ext3 | Yes | Yes | No | Yes | Yes | No | Yes[l] | Yes[l] | Yes | No |
| ext4 | Yes | Yes | Yes | Yes | Yes | No | Yes[l] | Yes[l] | Yes | Partial[m] |
| NOVA | Yes | Yes | Yes | Yes | Yes | No | No | No | No | Yes |
| Lustre | Yes | Yes | No | Yes | Yes | No | Yes | Yes | Yes | No |
| F2FS | Yes | Yes | Yes | Yes | Yes | No | Yes[l] | Yes[l] | Yes | No |
| GPFS | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes |
| GFS | Yes | Yes | No | Yes | Yes | No | Yes[l] | Yes[l] | Yes | No |
| NILFS | Yes | Yes | Yes | No | Yes | No | No | No | No | Yes |
| ReiserFS | Yes | Yes | No | Yes | Yes | No | Yes[l] | Yes[l] | Yes | No |
| Reiser4 | Yes | Yes | No | Yes | Yes | No | No | No | No | No |
| OCFS | No | Yes | No | No | Yes | Yes | No | No | No | No |
| OCFS2 | Yes | Yes | No | Yes | Yes | No | No | No | No | No |
| XFS | Yes | Yes | Yes[n] | Yes | Yes | No | Yes | Yes[l] | Yes | Yes |
| JFS | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | No |
| QFS | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | No |
| BFS | Yes | Yes | Yes | No | No | No | No | No | Yes | No |
| AdvFS | Yes | Yes | No | Yes | Yes | No | Yes | No | Yes | No |
| NSS | Yes | Yes | Yes[o] | Yes[o] | Yes | Yes[o] | Yes | ? | Yes[p][q] | No |
| NWFS | Yes | ? | Yes[o] | Yes[o] | Yes | Yes[o] | Yes | ? | Yes[p][q] | No |
| Files-11 ODS-1[15] | Yes | Yes | Yes | No | No | No | No | No | Yes[r] | No |
| Files-11 ODS-2[16] | Yes | Yes | Yes | No | No | Yes | Yes | ? | Yes[r] | No |
| Files-11 ODS-5 | Yes | Yes | Yes | ? | ? | Yes | Yes | ? | Yes[r] | No |
| APFS | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| VxFS | Yes | Yes | Yes | Yes | Yes | No | Yes | ? | Yes[l] | No |
| UDF | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes |
| Fossil | Yes | Yes[s] | No | Yes | Yes | No | No | No | No | No |
| ZFS | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes[t] | Yes[u] | Yes |
| Btrfs | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes |
| Minix V1 | Yes | Yes | No | No | No | No | No | No | No | No |
| Minix V2 | Yes | Yes | No | Yes | Yes | No | No | No | No | No |
| Minix V3 | Yes | Yes | No | Yes | Yes | No | No | No | No | No |
| VMFS2 | Yes | Yes | No | Yes | Yes | No | No | No | No | No |
| VMFS3 | Yes | Yes | No | Yes | Yes | No | No | No | No | No |
| ISO 9660:1988 | No | No | Yes | No | No | No | No | No | No | No |
| ISO 9660: Rock Ridge extension | Yes | Yes | No | Yes[v] | Yes | No | No[w] | No[x] | No[x] | No |
| ISO 9660: Joliet extension | No | No | Yes | No | No | No | No | No | No | No |
| ISO 9660:1999 | No | No | Yes | No | No | No | No | No | No | No |
| High Sierra | No | No | Yes | No | No | No | No | No | No | No |
| SquashFS | Yes | Yes | No | No | Yes | No | No | Yes | Yes | No |
| BlueStore/CephFS | Yes | Yes | Yes | Yes | ? | No | Yes | Yes | Yes | Yes |
| File system | Stores file owner |
POSIX file permissions |
Creation timestamps |
Last access/ read timestamps |
Last metadata change timestamps |
Last archive timestamps |
Security/ MAC labels |
All widely used file systems record a last modified time stamp (also known as "mtime"). It is not included in the table.
Individual file systems may record additional special types of date and time stamps. For example, the specification of ISO 9660 includes a "File Expiration Date and Time" and a "File Effective Date and Time".[17]
Features
File capabilities
| File system | Hard links | Symbolic links | Block journaling | Metadata-only journaling | Case-sensitive | Case-preserving | File Change Log | XIP |
|---|---|---|---|---|---|---|---|---|
| DECtape | No | No | No | No | No | No | No | No |
| BeeGFS | No | Yes | Yes | Yes | Yes | Yes | No | No |
| Level-D | No | No | No | No | No | No | No | No |
| RT-11 | No | No | No | No | No | No | No | No |
| APFS | Yes | Yes | ? | ? | Optional[y] | Yes | ? | ? |
| Version 6 Unix file system (V6FS) | Yes | No | No | No | Yes | Yes | No | No |
| Version 7 Unix file system (V7FS) | Yes | No[z] | No | No | Yes | Yes | No | No |
| exFAT | No | No | No | Partial (with TexFAT only) | No | Yes | No | No |
| FAT12 | No | No | No | Partial (with TFAT12 only) | No | Partial (with VFAT LFNs only) | No | No |
| FAT16 / FAT16B / FAT16X | No | No | No | Partial (with TFAT16 only) | No | Partial (with VFAT LFNs only) | No | No |
| FAT32 / FAT32X | No | No | No? | Partial (with TFAT32 only) | No | Partial (with VFAT LFNs only) | No | No |
| GFS | Yes | Yes[aa] | Yes | Yes[ab] | Yes | Yes | No | No |
| HPFS | No | No | No | No | No | Yes | No | No |
| NTFS | Yes | Yes[ac] | No[ad] | Yes[ad] (2000) | Yes[ae] | Yes | Yes | ? |
| HFS Plus | Yes[19] | Yes | No | Yes[af] | Optional[ag] | Yes | Yes[ah] | No |
| FFS | Yes | Yes | No | No | Yes | Yes | No | No |
| UFS1 | Yes | Yes | No | No | Yes | Yes | No | No |
| UFS2 | Yes | Yes | No | Yes[ai] [24] [aj] | Yes | Yes | No | ? |
| HAMMER | Yes | Yes | Yes | Yes | Yes | Yes | ? | No |
| HAMMER2 | Yes | Yes | ? | ? | ? | ? | ? | ? |
| LFS | Yes | Yes | Yes[ak] | No | Yes | Yes | No | No |
| EROFS | Yes | Yes | No | No | Yes | Yes | No | No |
| ext | Yes | Yes | No | No | Yes | Yes | No | No |
| Xiafs | Yes | Yes | No | No | Yes | Yes | No | No |
| ext2 | Yes | Yes | No | No | Yes | Yes | No | Yes[al] |
| ext3 | Yes | Yes | Yes (2001) [am] | Yes (2001) | Yes | Yes | No | Yes |
| ext4 | Yes | Yes | Yes[am] | Yes | Yes, optional [27] | Yes | No | Yes |
| NOVA | Yes | Yes | No | Yes | Yes | Yes | No | Yes |
| F2FS | Yes | Yes | Yes[ak] | No | Yes | Yes | No | No |
| Lustre | Yes | Yes | Yes[am] | Yes | Yes | Yes | Yes | No |
| NILFS | Yes | Yes | Yes[ak] | No | Yes | Yes | No | No |
| ReiserFS | Yes | Yes | Yes[an] | Yes | Yes | Yes | No | ? |
| Reiser4 | Yes | Yes | Yes | No | Yes | Yes | No | ? |
| OCFS | No | Yes | No | No | Yes | Yes | No | No |
| OCFS2 | Yes | Yes | Yes | Yes | Yes | Yes | No | No |
| XFS | Yes | Yes | Yes[am] | Yes | Yes[ao] | Yes | Yes | ? |
| JFS | Yes | Yes | Yes | Yes (1990) | Yes[ap] | Yes | No | ? |
| QFS | Yes | Yes | No | Yes | Yes | Yes | No | No |
| BFS | Yes | Yes | No | Yes | Yes | Yes | ? | No |
| NSS | Yes | Yes | ? | Yes | Yes[aq] | Yes[aq] | Yes[ar] | No |
| NWFS | Yes[as] | Yes[as] | No | No | Yes[aq] | Yes[aq] | Yes[ar] | No |
| Files-11 ODS-1[15] | Yes | No | No | No | No | No | No | No |
| Files-11 ODS-2 [16] | Yes | Yes[at] | No | Yes | No | No | Yes | No |
| Files-11 ODS-5 | Yes | Yes[at] | No | Yes | No | Yes | Yes | ? |
| UDF | Yes | Yes | Yes[ak] | Yes[ak] | Yes | Yes | No | Yes |
| VxFS | Yes | Yes | Yes | No | Yes | Yes | Yes | ? |
| Fossil | No | No | No | No | Yes | Yes | Yes | No |
| ZFS | Yes | Yes | Yes[au] | No[au] | Yes | Yes | No | No |
| Btrfs | Yes | Yes | Yes[av] | No | Yes | Yes | ? | ? |
| bcachefs | Yes | Yes | Yes[aw] | No | Yes, optional [29] | Yes | ? | ? |
| Minix V1 | Yes | Yes | No | No | Yes | Yes | No | No |
| Minix V2 | Yes | Yes | No | No | Yes | Yes | No | No |
| Minix V3 | Yes | Yes | No | No | Yes | Yes | No | No |
| VMFS2 | Yes | Yes | No | Yes | Yes | Yes | No | No |
| VMFS3 | Yes | Yes | No | Yes | Yes | Yes | No | No |
| ReFS | Yes[ax] | Yes | ? | ? | Yes[ae] | Yes | ? | ? |
| ISO 9660 | No | No | No | No | No | No | No | No |
| ISO 9660: Rock Ridge extension | Yes | Yes | No | No | Yes | Yes | No | No |
| ISO 9660: Joliet extension | No | No | No | No | No | Yes | No | No |
| SquashFS | Yes | Yes | No | No | Yes | Yes | No | No |
| BlueStore/CephFS | Yes | Yes | Yes | Yes | Yes | Yes | No | No |
| File system | Hard links | Symbolic links | Block journaling | Metadata-only journaling | Case-sensitive | Case-preserving | File Change Log | XIP |
Block capabilities
Note that in addition to the below table, block capabilities can be implemented below the file system layer in Linux (LVM, integritysetup, cryptsetup) or Windows (Volume Shadow Copy Service, SECURITY), etc.
| File system | Internal snapshotting / branching | Encryption | Deduplication | Data checksum/ ECC | Persistent Cache | Multiple Devices | Compression | Self-healing[ay] |
|---|---|---|---|---|---|---|---|---|
| DECtape | No | No | No | No | No | No | No | No |
| BeeGFS | No | No | Yes | No | No | No | Yes | No |
| Level-D | No | No | No | No | No | No | No | No |
| RT-11 | No | No | No | No | No | No | No | No |
| APFS | Yes | Yes | Yes [30] | No | No | No | Yes | No |
| Version 6 Unix file system (V6FS) | No | No | No | No | No | No | No | No |
| Version 7 Unix file system (V7FS) | No | No | No | No | No | No | No | No |
| exFAT | No | No | No | No | No | No | No | No |
| FAT12 | No | No | No | No | No | No | Partial[az] | No |
| FAT16 / FAT16B / FAT16X | No | No | No | No | No | No | Partial[az] | No |
| FAT32 / FAT32X | No | No | No | No | No | No | No | No |
| GFS | No | No | ? | No | No | No | No | No |
| HPFS | ? | No | ? | No | No | No | No | No |
| NTFS | No | Yes | Yes[ba][32] | No | No | No | Yes | No |
| HFS Plus | No | No[bb] | No | No | No | No | No | No |
| FFS | No | No | No | No | No | No | No | No |
| UFS1 | No | No | No | No | No | No | No | No |
| UFS2 | Yes | No | No | No | No | No | No | No |
| HAMMER | Yes | No | Yes | Yes | No | No | No | No |
| HAMMER2 | Yes | ? | Yes | Yes | ? | ? | Yes | Pending |
| LFS | Yes | No | No | No | No | No | No | No |
| EROFS | No | No | Yes | No | No | Yes | Yes | No |
| ext | No | No | No | No | No | No | No | No |
| Xiafs | No | No | No | No | No | No | No | No |
| ext2 | No | No | No | No | No | No | No | No |
| ext3 | No | No | No | No | No | No | No | No |
| ext4 | No | Yes, experimental [33] | No | No[34] | No | No | No | No |
| NOVA | Yes | No | No | Yes | No | No | No | ? |
| F2FS | No | Yes, experimental [35] | No | No | No | No | Yes | No |
| Lustre | No | No | No | No | Yes | Yes | No | No |
| NILFS | Yes, continuous[ak] | No | No | Yes | No | No | No | No |
| ReiserFS | No | No | No | No | No | No | No | No |
| Reiser4 | ? | Yes[bc] | ? | No | No | No | Yes | No |
| OCFS | No | No | No | No | No | No | No | No |
| OCFS2 | No | No | No | No | No | No | No | No |
| XFS | No | No | Yes[36] | No[34] | No | No | No | No |
| JFS | ? | No | ? | No | No | No | only in JFS1 on AIX[37] | No |
| QFS | No | No | No | No | No | No | No | No |
| BFS | No | No | No | No | No | No | No | No |
| NSS | Yes | Yes | ? | No | No | No | Yes | No |
| NWFS | ? | No | ? | No | No | No | Yes | No |
| Files-11 ODS-2 | Yes | No | No | No | No | No | No | No |
| Files-11 ODS-5 | Yes | No | No | No | No | No | No | ? |
| UDF | No | No | No | No | No | No | No | No |
| VxFS | Yes[bd] | No | Yes | No | No | No | No | No |
| Fossil | Yes | No | Yes | No | No | No | Yes | No |
| ZFS | Yes | Yes[be] | Yes | Yes | Yes | Yes | Yes[bf] | Yes |
| Btrfs | Yes | No | Yes | Yes[bg] | No | Yes | Yes[bh] | Yes |
| bcachefs | Yes | Yes | No | Yes[bi] | Yes[43] | Yes | Yes[bj] | Yes[bk] |
| Minix V1 | No | No | No | No | No | No | No | No |
| Minix V2 | No | No | No | No | No | No | No | No |
| Minix V3 | No | No | No | No | No | No | No | No |
| VMFS2 | No | No | No | No | No | No | No | No |
| VMFS3 | No | No | No | No | No | No | No | No |
| ReFS | Yes[bl] | No | Yes | No[bm] | No | No | No[bn] | No[bm] |
| ISO 9660 | No | No | No[bo] | No | No | No | No | No |
| ISO 9660: Rock Ridge extension | No | No | No[bo] | No | No | No | No | No |
| ISO 9660: Joliet extension | No | No | No[bo] | No | No | No | No | No |
| SquashFS | No | No | Yes | Yes | No | No | Yes | No |
| BlueStore/CephFS | Yes | No | No | Yes | Yes | Yes | Yes | Yes |
| File system | Internal snapshotting / branching | Encryption | Deduplication | Data checksum/ ECC | Persistent Cache | Multiple Devices | Compression | Self-healing[ay] |
Resize capabilities
"Online" and "offline" are synonymous with "mounted" and "not mounted".
| File system | Host OS | Offline grow | Online grow | Offline shrink | Online shrink | Add and remove physical volumes |
|---|---|---|---|---|---|---|
| exFAT | misc. | No | No | No | No | No |
| FAT16 / FAT16B / FAT16X | misc. | Yes[bp] | No | Yes[bp] | No | No |
| FAT32 / FAT32X | misc. | Yes[bp] | No | Yes[bp] | No | No |
| NTFS | Windows | Yes | Yes | Yes | Yes | No |
| ReFS | Windows | ? | Yes | ? | No | No |
| HFS | macOS | No | No | No | No | No |
| HFS Plus | macOS | No | Yes | No | Yes | No |
| APFS | macOS | ? | Yes | ? | Yes | ? |
| HAMMER | DragonflyBSD | ? | ? | ? | ? | ? |
| EROFS | Linux | Yes | No | No | No | Yes |
| ext2[48] | Linux | Yes | No | Yes | No | No |
| ext3[48] | Linux | Yes | Yes | Yes | No | No |
| ext4[48] | Linux | Yes | Yes | Yes | No | No |
| NOVA | Linux | No | No | No | No | No |
| F2FS[49] | Linux | Yes | No | No | No | No |
| Lustre[50] | Linux | ? | Yes | No | No | Yes |
| XFS[51] | Linux | No | Yes | No[52] | No[52] | No |
| JFS2 | AIX | Yes | Yes | Yes | Yes | No |
| JFS[53] | Linux | Yes | No | No | No | No |
| NTFS[54] | Linux | Yes | No | Yes | No | No |
| ReiserFS[55] | Linux | Yes | Yes | Yes | No | No |
| Reiser4[56] | Linux | Yes | Yes | Yes | No | No |
| Btrfs[57] | Linux | Yes | Yes | Yes | Yes | Yes |
| bcachefs[43] | Linux | Yes | Yes | No | No | Yes |
| NILFS[58] | Linux | No | Yes | No | Yes | No |
| ZFS | misc. | No | Yes | No | Yes | Partial[59] |
| UFS2[60] | FreeBSD | Yes | Yes (FreeBSD 10.0-RELEASE or later) | No | No | No |
| SquashFS | Linux | No | No | No | No | No |
| BlueStore/CephFS | Linux | No | Yes | No | Yes | Yes |
Allocation and layout policies
| File system | Sparse files | Block suballocation | Tail packing | Extents | Variable block size[bq] | Inline data (resident files) | Allocate-on-flush | Copy on write | Trim support |
|---|---|---|---|---|---|---|---|---|---|
| DECtape | No | No | No | No | No | ? | No | No | No |
| BeeGFS | Yes | No | No | Yes | Yes | ? | Yes | Yes | ? |
| Level-D | No | No | No | Yes | No | ? | No | No | ? |
| APFS | Yes | ? | ? | Yes | ? | ? | Yes | Yes | Yes[61][62] |
| Version 6 Unix file system (V6FS) | Yes | No | No | No | No | No | No | ? | No |
| Version 7 Unix file system (V7FS) | Yes | No | No | No | No | No | No | ? | No |
| exFAT | No | No | No | Partial (only if the file fits into one contiguous block range) | No | No | No | No | Yes (Linux) |
| FAT12 | Partial (only inside of compressed volumes)[63] | Partial (only inside of Stacker 3/4 and DriveSpace 3 compressed volumes[31]) | No | Partial (only inside of compressed volumes)[64] | No | No | No | No | Yes (Linux) |
| FAT16 / FAT16B / FAT16X | Partial (only inside of compressed volumes)[63] | Partial (only inside of Stacker 3/4 and DriveSpace 3 compressed volumes[31]) | No | Partial (only inside of compressed volumes)[64] | No | No | No | No | Yes (Linux) |
| FAT32 / FAT32X | No | No | No | No | No | No | No | No | Yes (Linux) |
| GFS | Yes | No | Partial[br] | No | No | ? | No | ? | Yes |
| HPFS | No | No | No | Yes | No | ? | No | ? | Yes (Linux) |
| NTFS | Yes | Partial | No | Yes | No | Yes (approximately 700 bytes) | No | ? | Yes (NT 6.1+; Linux) |
| HFS Plus | No | No | No | Yes | No | ? | No | ? | Yes (macOS) |
| FFS | Yes | 8:1[bs] | No | No | No | No | No | ? | No |
| UFS1 | Yes | 8:1[bs] | No | No | No | No | No | ? | No |
| UFS2 | Yes | 8:1[bs] | No | No | Read-only so far | No | No | ? | Yes[65][66] |
| HAMMER | ? | ? | ? | ? | ? | ? | ? | Yes | ? |
| HAMMER2 | ? | ? | ? | ? | ? | Yes | ? | Yes | ? |
| LFS | Yes | 8:1[bs] | No | No | No | ? | No | Yes | ? |
| EROFS | Yes | Yes | Yes | Yes | No | Yes | No | No | No |
| ext | Yes | No | No | No | No | ? | No | No | No |
| Xiafs | Yes | No | No | No | No | ? | No | ? | ? |
| ext2 | Yes | No[bt] | No | No | No | ? | No | No | Yes |
| ext3 | Yes | No[bt] | No | No | No | ? | No | No | Yes |
| ext4 | Yes | No[bt] | No | Yes | No | Yes (inode size - 96B)[67] | Yes | No | Yes |
| NOVA | Yes | No | No | Yes | No | ? | No | Yes | ? |
| F2FS | Yes | No | No | Partial[bu] | No | Yes (approximately 3.4KB)[68] | Yes | Yes | Yes[69] |
| Lustre | Yes | No | No | Yes | No | ? | Yes | ? | ? |
| NILFS | Yes | No | No | No | No | ? | Yes | Yes | Yes (Linux NILFS2) |
| ReiserFS | Yes | Yes[bv] | Yes | No | No | No | No | ? | ? |
| Reiser4 | Yes | Yes[bv] | Yes | Yes[bw] | No | No | Yes | ? | Testing[70] |
| OCFS | ? | No | No | Yes | No | ? | No | ? | ? |
| OCFS2 | Yes | No | No | Yes | No | Yes | No | ? | Yes (Linux) |
| XFS | Yes | No | No | Yes | No | No (not accepted)[71] | Yes | Yes, on request[72] | Yes (Linux) |
| JFS | Yes | Yes | No | Yes | No | Yes (256 bytes)[bx] | No | ? | Yes (Linux) |
| QFS | ? | Yes | No | No | No | ? | No | ? | ? |
| BFS | ? | No | No | Yes | No | ? | No | ? | Yes (Haiku) |
| NSS | ? | No | No | Yes | No | ? | Yes | ? | ? |
| NWFS | ? | Yes[by] | No | No | No | ? | No | ? | ? |
| Files-11 ODS-5 | ? | No | No | Yes | No | No | No | ? | ? |
| VxFS | Yes | ? | No | Yes | No | ? | No | ? | ? |
| UDF | Yes | No | No | Yes | No | Yes[73] | Depends on implementation. | Yes, for write once read many media | No |
| Fossil | ? | No | No | No | No | ? | No | ? | ? |
| ZFS | Yes | Yes | No | No | Yes | Yes (112 bytes)[74] | Yes | Yes | Yes |
| Btrfs | Yes | Yes | No[75] | Yes | Yes | Yes (2 KiB)[75] | Yes | Yes | Yes |
| bcachefs | Yes | Yes[bz] | Yes[ca] | Yes | No | Yes (half block size)[43] | Yes | Yes | Yes[43] |
| VMFS2 | Yes | Yes | No | No | No | ? | No | ? | ? |
| VMFS3 | Yes | Yes | No | No | No | ? | No | ? | ? |
| ReFS | Yes | ? | ? | ? | No | ? | ? | Yes | Yes (NT 6.1+) |
| ISO 9660 | No | No | No | ISO 9660 Level 3 only | No | ? | No | No | No |
| ISO 9660: Rock Ridge extension | No | No | No | extended from ISO 9660 | No | ? | No | No | No |
| ISO 9660: Joliet extension | No | No | No | extended from ISO 9660 | No | ? | No | No | No |
| SquashFS | Yes | No | Yes | No | No | ? | No | No | No |
| BlueStore/CephFS | Yes | ? | ? | ? | ? | ? | No | Yes | Yes |
| File system | Sparse files | Block suballocation | Tail packing | Extents | Variable block size[bq] | Inline data (resident files) | Allocate-on-flush | Copy on write | Trim support |
OS support
| File system | DOS | Linux | macOS | Windows 9x (historic) | Windows (current) | Classic Mac OS |
FreeBSD | OS/2 | BeOS | Minix | Solaris | z/OS | Android |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| DECtape | No | No | No | No | No | No | No | No | No | No | No | No | No |
| BeeGFS | No | Yes | ? | No | No | No | No | No | ? | ? | ? | No | No |
| Level-D | No | ? | ? | No | No | No | No | No | No | No | ? | ? | No |
| RT-11 | No | No | No | No | No | No | No | No | No | No | No | No | No |
| APFS | No | Partial (read-only with apfs-fuse[77] or linux-apfs[78]) | Yes (Since macOS Sierra) |
No | No | No | No | No | No | No | No | No | No |
| Version 6 Unix file system (V6FS) | No | ? | No | No | No | No | No | No | No | No | No | No | No |
| Version 7 Unix file system (V7FS) | No | Yes | No | No | No | No | No | No | ? | ? | ? | No | No |
| exFAT | No | Yes (since 5.4,[79] available as a kernel module or FUSE driver for earlier versions) | Yes | No | Yes | No | Yes (available as a FUSE driver) | No | No | No | Yes (available as a FUSE driver) | No | With kernel 5.10 |
| FAT12 | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Partial (via dosdir, dosread, doswrite) | Yes | ? | Yes |
| FAT16 / FAT16B / FAT16X | Yes (FAT16 from DOS 3.0, FAT16B from DOS 3.31, FAT16X from DOS 7.0) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Partial (via dosdir, dosread, doswrite, not FAT16X) | Yes | ? | Yes |
| FAT32 / FAT32X | Yes[b] | Yes | Yes | Yes[b] | Yes | ? | Yes | Yes | Yes | No | Yes | ? | Yes |
| GFS | No | Yes | ? | No | No | No | No | ? | ? | ? | ? | ? | No |
| HPFS | Partial (with third-party drivers) | Yes | ? | No | No | ? | Yes | Yes (from OS/2 1.2) | ? | No | ? | ? | No |
| NTFS | Needs 3rd-party drivers | Yes Native since Linux Kernel 5.15 NTFS3. Older kernels may use backported NTFS3 driver or ntfs-3g[80] | Read only, write support needs Paragon NTFS or ntfs-3g | Needs 3rd-party drivers like Paragon NTFS for Win98, DiskInternals NTFS Reader | Yes | No | Yes with ntfs-3g | ? | Yes with ntfs-3g | No | Yes with ntfs-3g | ? | With third party tools |
| HFS | No | Yes | No write support since Mac OS X 10.6 and no support at all since macOS 10.15 | No | Needs Paragon HFS+ [81] | Yes | No | ? | Yes | No | ? | No | No |
| HFS Plus | No | Partial - writing support only to unjournalled FS | Yes | No | Needs Paragon HFS+ [81] | Yes from Mac OS 8.1 | No | ? | with addon | No | ? | No | No |
| FFS | No | ? | Yes | No | ? | ? | Yes | ? | ? | ? | ? | ? | No |
| UFS1 | No | Partial - read only | Yes | No | Partial (with ufs2tools, read only) | ? | Yes | No | ? | ? | Yes | ? | No |
| UFS2 | No | Yes | Yes | No | Partial (with ufs2tools, read only) | ? | Yes | No | ? | ? | ? | ? | No |
| LFS | No | ? | ? | No | No | ? | No | No | ? | ? | ? | ? | No |
| EROFS | No | Yes | Needs - since erofs-utils 1.4 | No | No | No | No | No | No | No | No | No | Yes |
| ext | No | Yes - until 2.1.20 | No | No | No | No | No | No | No | No | No | No | No |
| Xiafs | No | Yes - until 2.1.20 |
No | No | No | No | No | No | No | No | No | No | No |
| ext2 | No | Yes | Needs Paragon ExtFS [84] or ext2fsx | Partial (read-only, with explore2fs)[85] | Needs Paragon ExtFS [86] or partial with Ext2 IFS[87] or ext2fsd[88] | No | Yes | No | Yes | ? | ? | ? | No |
| ext3 | No | Yes | Needs Paragon ExtFS [84] or partial with ext2fsx (journal not updated on writing) | Partial (read-only, with explore2fs)[85] | Needs Paragon ExtFS [86] or partial with Ext2 IFS[87] or ext2fsd[88] | Partial (read only)[citation needed] | Yes[89] | No | with addon | ? | Yes | ? | Yes |
| ext4 | No | Yes | Needs Paragon ExtFS [84] | No | Yes, with the optional WSL2; physical and VHDX virtual disks.[90][91] | ? | Yes since FreeBSD 12.0[89] | No | with addon | ? | ? | ? | Yes |
| NOVA | No | Yes | No | No | No | No | No | No | No | No | No | No | No |
| F2FS | No | Yes | No | No | No | No | No | No | No | No | No | No | Yes |
| Lustre | No | Yes[92] | ? | No | No | ? | No | ? | ? | ? | Yes | ? | No |
| NILFS | No | Yes as an external kernel module | ? | No | ? | ? | No | ? | ? | ? | ? | ? | No |
| ReiserFS | No | Yes - until 6.13 | ? | No | No | ? | Partial - Read Only from 6.0 to 10.x[93] and dropped in 11.0[94][95] | ? | with addon | ? | ? | ? | No |
| Reiser4 | No | Yes with a kernel patch | ? | No | No | ? | No | ? | ? | ? | ? | ? | No |
| SpadFS | No | Yes | No | No | No | No | ? | No | No | No | No | No | No |
| OCFS | No | Yes | ? | No | No | ? | No | No | ? | ? | ? | ? | No |
| OCFS2 | No | Yes | ? | No | No | ? | No | No | ? | ? | ? | ? | No |
| XFS | No | Yes | ? | No | No | ? | Partial | ? | with addon (read only) | ? | ? | ? | No |
| JFS | No | Yes | ? | No | No | ? | No | Yes | ? | ? | ? | ? | No |
| QFS | No | Client[96] | ? | No | No | ? | No | No | ? | ? | Yes | ? | No |
| Be File System | No | Partial - read-only | ? | No | No | ? | No | No | Yes | ? | ? | ? | No |
| NSS | No | Yes via EVMS[cb] | ? | No | No | ? | No | No | ? | ? | ? | ? | No |
| NWFS | Partial (with Novell drivers) | ? | ? | No | No | ? | Yes | No | ? | ? | ? | ? | No |
| Files-11 ODS-2 | No | ? | ? | No | No | ? | No | No | ? | ? | ? | ? | No |
| Files-11 ODS-5 | No | ? | ? | No | No | ? | No | No | ? | ? | ? | ? | No |
| UDF | No | Yes | Yes | ? | Yes | ? | Yes | ? | ? | ? | Yes | ? | No |
| VxFS | No | Yes | ? | No | No | ? | No | No | ? | ? | Yes | ? | No |
| Fossil | No | Yes[cc] | Yes[cc] | No | No | No | Yes[cc] | No | No | No | Yes[cc] | ? | No |
| ZFS | No | Yes with FUSE[97] or as an external kernel module[98] | Yes with Read/Write Developer Preview[99] | No | With third-party software (OpenZFS).[100] | No | Yes | No | No | No | Yes | No | No |
| Btrfs | No | Yes | ? | No | Yes with WinBtrfs[101] | ? | No | ? | ? | ? | ? | ? | No |
| bcachefs | No | Yes | No | No | No | No | No | No | No | No | No | No | No |
| VMFS2 | No | ? | ? | No | No | ? | No | No | ? | ? | ? | ? | No |
| VMFS3 | No | ? | ? | No | No | ? | No | No | ? | ? | ? | ? | No |
| IBM HFS | No | No | No | No | No | No | No | No | No | No | No | Yes | No |
| IBM zFS | No | No | No | No | No | No | No | No | No | No | No | Yes | No |
| ReFS | No | Needs Paragon ReFS for Linux | ? | No | Yes | ? | ? | ? | ? | ? | ? | ? | No |
| ISO 9660 | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No |
| ISO 9660: Rock Ridge extension | No | Yes | Yes | No | No | No | Yes | No | No | Yes | Yes | ? | No |
| ISO 9660: Joliet extension | No | Yes | Yes | Yes | Yes | ? | Yes | Yes | Yes | ? | Yes | ? | No |
| SquashFS | No | Yes | Partial (There are ports of unsquashfs and mksquashfs.) | No | Partial (There are ports of unsquashfs and mksquashfs.) | No | Partial (There are ports of unsquashfs and mksquashfs and fusefs-port.[102][103]) | No | No | No | No | No | No |
| BlueStore/CephFS | No | Yes | Client[cd] | No | Client[ce] | No | Client[cd] | No | No | No | No | No | No |
| File system | DOS | Linux | macOS | Windows 9x (historic) | Windows (current) | Classic Mac OS |
FreeBSD | OS/2 | BeOS | Minix | Solaris | z/OS | Android |
Limits
While storage devices usually have their size expressed in powers of 10 (for instance a 1 TB Solid State Drive will contain at least 1,000,000,000,000 (1012, 10004) bytes), filesystem limits are invariably powers of 2, so usually expressed with IEC prefixes. For instance, a 1 TiB limit means 240, 10244 bytes. Approximations (rounding down) using power of 10 are also given below to clarify.
No filesystem has ever allowed NUL, so it won't be listed in the table below even if the text says “Any byte” or “?”.
| File system | Maximum filename length | Allowable characters in directory entries[cf] | Maximum pathname length | Maximum file size | Maximum volume size[cg] | Max number of files |
|---|---|---|---|---|---|---|
| AdvFS | 255 bytes | Any byte except /[ch] | No limit defined[ci] | 16 TiB (17.59 TB) | 16 TiB (17.59 TB) | ? |
| APFS | 255 bytes | Any Unicode 9.0 character[104] except /[ch] | ? | 8 EiB (9.223 EB) | ? | 263 [105] |
| bcachefs | 512 bytes[106] | Any byte except /[ch] | No limit defined | 8 EiB (9.22 EB)[cj] | 2040 PiB (2.3 EB)[ck] | 264[cl] |
| BeeGFS | 255 bytes | Any byte[ch] | No limit defined[ci] | 16 EiB (18.44 EB) | 16 EiB (18.44 EB) | ? |
| BFS | 255 bytes | Any byte[ch] | No limit defined[ci] | 12,288 bytes to 260 GiB (279.1 GB)[cm] | 256 PiB (288.2 PB) to 2 EiB (2.305 EB) | Unlimited |
| BlueStore/CephFS | 255 characters | any byte, except "/" | No limit defined | Max. 264 bytes, 1 TiB (1.099 TB) by default [107] | Not limited | Not limited, default is 100,000 files per directory [108] |
| Btrfs | 255 bytes | Any byte except /[ch] | No limit defined | 16 EiB (18.44 EB) | 16 EiB (18.44 EB) | 264 |
| CBM DOS | 16 bytes | Any byte | No directory hierarchy (flat file system) | 16 MiB (16.77 MB) | 16 MiB (16.77 MB) | ? |
| CP/M file system | 8.3 | ASCII except for < > . , ; : = ? * [ ] | No directory hierarchy (but accessibility of files depends on user areas via USER command since CP/M 2.2) | 32 MiB (33.55 MB) | 512 MiB (536.8 MB) | ? |
| DECtape | 6.3 | A–Z, 0–9 | DTxN:FILNAM.EXT = 15 | 369,280 bytes (577 × 640) |
369,920 bytes (578 × 640) |
? |
| Disk Operating System (GEC DOS) | ? | ? | ? | ? at least 131,072 bytes | ? | ? |
| Elektronika BK tape format | 16 bytes | ? | No directory hierarchy (flat file system) | 64 KiB (65.53 KB) | Not limited. Approx. 800 KiB (819.2 KB) (one side) for 90 min cassette | ? |
| EROFS | 255 bytes | Any byte except /[ch] | No limit defined[ci] | 16 EiB (18.44 EB) | 1 EiB (1.152 EB) | 264 |
| exFAT | 255 UTF-16 characters | Unicode except for control codes 0x0000 - 0x001F or " * / : < > ? \ | [109] | 32,760 characters with each path component no more than 255 characters[110] | 16 EiB (18.44 EB)[110] | 64 ZiB (75.55 ZB) (276 bytes) | ? |
| ext | 255 bytes | Any byte except /[ch] | No limit defined[ci] | 2 GiB (2.147 GB) | 2 GiB (2.147 GB) | ? |
| ext2 | 255 bytes | Any byte except /[ch] | No limit defined[ci] | 16 GiB (17.17 GB) to 2 TiB (2.199 TB)[cg] | 2 TiB (2.199 TB) to 32 TiB (35.18 TB) | ? |
| ext3 | 255 bytes | Any byte except /[ch] | No limit defined[ci] | 16 GiB (17.17 GB) to 2 TiB (2.199 TB)[cg] | 2 TiB (2.199 TB) to 32 TiB (35.18 TB) | ? |
| ext4 | 255 bytes[111] | Any byte except /[ch] | No limit defined[ci] | 16 GiB (17.17 GB) to 16 TiB (17.59 TB)[cg][112] | 1 EiB (1.152 EB) | 232 (static inode limit specified at creation) |
| F2FS | 255 bytes | Any byte except /[ch] | No limit defined[ci] | 4,228,213,756 KiB (4.329 TB) | 16 TiB (17.59 TB) | ? |
| FAT (8-bit) | 6.3 (binary files) / 9 characters (ASCII files) | ASCII (0x00 and 0xFF not allowed in first character) | No directory hierarchy (flat file system) | ? | ? | ? |
| FAT12/FAT16 | 8.3 (255 UCS-2 characters with LFN)[cn] | SFN: OEM A-Z, 0–9, ! # $ % & ' ( ) - @ ^ _ ` { } ~, 0x80-0xFF, 0x20. LFN: Unicode except " * / : < > ? \ | [cf][ch] | No limit defined[ci] | 32 MiB (33.55 MB) (4 GiB (4.294 GB))[co] | 1 MiB (1.048 MB) to 32 MiB (33.55 MB) | ? |
| FAT16B/FAT16X | 8.3 (255 UCS-2 characters with LFN)[cn] | SFN: OEM A-Z, 0–9, ! # $ % & ' ( ) - @ ^ _ ` { } ~, 0x80-0xFF, 0x20. LFN: Unicode except " * / : < > ? \ | [cf][cn][ch] | No limit defined[ci] | 2 (4) GiB[co] (2.147 GB) | 16 MiB (16.77 MB) to 2 (4) GiB (2.147 GB) | ? |
| FAT32/FAT32X | 8.3 (255 UCS-2 characters with LFN)[cn] | SFN: OEM A-Z, 0–9, ! # $ % & ' ( ) - @ ^ _ ` { } ~, 0x80-0xFF, 0x20. LFN: Unicode except " * / : < > ? \ | [cf][cn][ch] | 32,760 characters with each path component no more than 255 characters[110] | 4 GiB (4.294 GB)[110] | 512 MiB (536.8 MB) to 16 TiB (17.59 TB)[cp] | ? |
| FATX | 42 bytes[cn] | ASCII. | No limit defined[ci] | 2 GiB (2.147 GB) | 16 MiB (16.77 MB) to 2 GiB (2.147 GB) | ? |
| FFS | 255 bytes | Any byte except /[ch] | No limit defined[ci] | 4 GiB (4.294 GB) | 256 TiB (281.4 TB) | ? |
| Files-11 ODS-1[15] | 9.3 in RADIX-50 | A–Z, 0–9, $ | No limit defined; only two-level paths supported by operating systems | 2 TiB (2.199 TB) | 2 TiB (2.199 TB) | 216-1 |
| Files-11 ODS-2[16] | 20 bytes | A–Z, 0–9, $, -, _ | 4,096 bytes[cq] | 2 TiB (2.199 TB) | 2 TiB (2.199 TB) | 224-1 |
| Files-11 ODS-5 | 236 bytes[cr] | ISO 8859-1 or UCS-2 | 4,096 bytes[cq] | 2 TiB (2.199 TB) | 2 TiB (2.199 TB) | ? |
| Fossil | ? | ? | ? | ? | ? | ? |
| GEC DOS filing system extended | 8 bytes | A–Z, 0–9. Period was directory separator | ? No limit defined (workaround for OS limit) | ? at least 131,072 bytes | ? | ? |
| GEMDOS | 8.3 | A-Z, a-z, 0-9 ! @ # $ % ^ & ( ) + - = ~ ` ; ' " , < > | [ ] ( ) _[114] | ? | ? | ? | ? |
| GFS2 | 255 bytes | Any byte except /[ch] | No limit defined[ci] | 100 TiB (109.95 TB) to 8 EiB (9.223 EB)[cs] | 100 TiB (109.95 TB) to 8 EiB (9.223 EB)[cs] | ? |
| GFS | 255 bytes | Any byte except /[ch] | No limit defined[ci] | 2 TiB (2.199 TB) to 8 EiB (9.223 EB)[ct] | 2 TiB (2.199 TB) to 8 EiB (9.223 EB)[ct] | ? |
| GPFS | 255 UTF-8 codepoints[citation needed] | Any byte[ch] | No limit defined[ci] | 9 EiB (10.37 EB) | 524,288 YiB (299 bytes) | ? |
| HAMMER | 1023 bytes[116] | Any byte except /[ch] | ? | ? | 1 EiB (1.152 EB)[117] | ? |
| HFS | 31 bytes | Any byte except :; in macOS, : in file names is converted to / in the file system, and / are disallowed[ch] | Unlimited | 2 GiB (2.147 GB) | 2 TiB (2.199 TB) | ? |
| HFS Plus | 255 UTF-16 code units[cu] | Any valid Unicode character except :;[cv] in macOS, : in file names is converted to / in the file system, and / are disallowed[ch] | Unlimited | slightly less than 8 EiB (9.223 EB) | slightly less than 8 EiB (9.223 EB)[118][119] | ? |
| High Sierra Format | ? | ? | ? | ? | ? | ? |
| HPFS | 255 bytes | Any byte[cw] | No limit defined[ci] | 2 GiB (2.147 GB) | 2 TiB (2.199 TB)[cx] | ? |
| IBM SFS | 8.8 | ? | Non-hierarchical[120] | ? | ? | ? |
| ISO 9660:1988 | Level 1: 8.3, Level 2 & 3: ~ 180 |
Depends on Level[cy] | ~ 180 bytes? | 4 GiB (4.294 GB) (Level 1 & 2) to 8 TiB (8.796 TB) (Level 3)[cz] | 8 TiB (8.796 TB)[da] | ? |
| ISO 9660:1999 | ? | ? | ? | ? | ? | ? |
| JFS | 255 bytes | Any Unicode | No limit defined[ci] | 4 PiB (4.503 PB) | 32 PiB (36.02 PB) | ? |
| JFS1 | 255 bytes | Any byte except /[ch] | No limit defined[ci] | 8 EiB (9.223 EB) | 512 TiB (562.9 TB) to 4 PiB (4.503 PB) | ? |
| ISO 9660: Joliet extension | 64 characters | All UCS-2 code except *, /, \, :, ;, and ?[121] | ? | same as ISO 9660:1988 | same as ISO 9660:1988 | ? |
| Level-D | 6.3 | A–Z, 0–9 | DEVICE:FILNAM.EXT[PROJCT,PROGRM] = 7 + 10 + 15 = 32; + 5*7 for SFDs = 67 | 34,359,738,368 words (235); 206,158,430,208 SIXBIT bytes | Approx 12 GiB (12.88 GB) (64 × 178 MiB (186.6 MB)) | ? |
| Lustre | 255 bytes | Any byte[ch] | No limit defined[ci] | 16 EiB (18.44 EB) on ZFS | 16 EiB (18.44 EB) | ? |
| MFS | 255 bytes | Any byte except : | No directory hierarchy (flat file system) | 256 MiB (268.4 MB) | 256 MiB (268.4 MB) | ? |
| MicroDOS file system | 14 bytes | ? | ? | 16 MiB (16.77 MB) | 32 MiB (33.55 MB) | ? |
| Minix V1 FS | 14 or 30 bytes, set at filesystem creation time | Any byte[ch] | No limit defined[ci] | 256.5 MiB (268.9 MB) [db] | 64 MiB (67.10 MB) | ? |
| Minix V2 FS | 14 or 30 bytes, set at filesystem creation time | Any byte[ch] | No limit defined[ci] | 2 GiB (2.147 GB) [db] | 1 GiB (1.073 GB) | ? |
| Minix V3 FS | 60 bytes | Any byte[ch] | No limit defined[ci] | 2 GiB (2.147 GB) | 4 GiB (4.294 GB) | ? |
| NILFS | 255 bytes | Any byte except /[ch] | No limit defined[ci] | 8 EiB (9.223 EB) | 8 EiB (9.223 EB) | ? |
| NOVA | 255 bytes | Any byte except /[ch] | No limit defined[ci] | 16 EiB (18.44 EB) | 16 EiB (18.44 EB) | ? |
| NSS | 256 UTF-16 code units | Depends on namespace used[dc] | Only limited by client | 8 TiB (8.796 TB) | 8 TiB (8.796 TB) | ? |
| NTFS | 255 UTF-16 code units | In Win32 namespace: any UTF-16 code unit (case-insensitive) except /\:*"?<>|
In POSIX namespace: any UTF-16 code unit (case-sensitive) except /[122] |
32,767 UTF-16 code units with each path component (directory or filename) up to 255 UTF-16 code units long.[ci]
However, the limit is approximate due to UNC, and some limitations may be removed on demand.[123] |
16 TiB (17.59 TB) to 8 PiB (9.007 PB)[dd][124] | 16 TiB (17.59 TB) to 8 PiB (9.007 PB)[dd][124] | 232 |
| NWFS | 80 bytes[de] | Depends on namespace used[dc] | No limit defined[ci] | 4 GiB (4.294 GB) | 1 TiB (1.099 TB) | ? |
| OCFS | 255 bytes | Any byte[ch] | No limit defined[ci] | 8 TiB (8.796 TB) | 8 TiB (8.796 TB) | ? |
| OCFS2 | 255 bytes | Any byte[ch] | No limit defined[ci] | 4 PiB (4.503 PB) | 4 PiB (4.503 PB) | ? |
| QFS | 255 bytes | Any byte[ch] | No limit defined[ci] | 16 EiB (18.44 EB)[df] | 4 PiB (4.503 PB)[df] | ? |
| ReFS | 255 UTF-16 code units[125] | In Win32 namespace: any UTF-16 code unit (case-insensitive) except /\:*"?<>|
In POSIX namespace: any UTF-16 code unit (case-sensitive) except /[125][126] |
32,767 characters with each path component (directory or filename) up to 255 characters long[125] | 16 EiB (18.44 EB)[125][127] | 1 YiB (1.208 YB)[125] | ? |
| ReiserFS | 4032 bytes/255 characters | Any byte except /[ch] | No limit defined[ci] | 8 TiB (8.796 TB)[dg] (v3.6), 4 GiB (4.294 GB) (v3.5) | 16 TiB (17.59 TB) | ? |
| Reiser4 | 3976 bytes | Any byte except /[ch] | No limit defined[ci] | 8 TiB (8.796 TB) on x86 | ? | ? |
| ISO 9660: Rock Ridge extension | 255 bytes | Any byte except /[ch] | No limit defined[ci] | same as ISO 9660:1988 | same as ISO 9660:1988 | ? |
| RT-11 | 6.3 in RADIX-50 | A–Z, 0–9, $ | No directory hierarchy (flat file system) | 33,554,432 bytes (65536 × 512) |
33,554,432 bytes | ? |
| SquashFS | 256 bytes | ? | No limit defined | 16 EiB (18.44 EB) | 16 EiB (18.44 EB) | ? |
| UDF | 255 bytes | Any Unicode | 1,023 bytes[dh] | 16 EiB (18.44 EB) | 512 MiB (536.8 MB) to 16 TiB (17.59 TB) | ? |
| UFS1 | 255 bytes | Any byte except /[ch] | No limit defined[ci] | 16 GiB (17.17 GB) to 256 TiB (281.4 TB) | 16 EiB (18.44 EB) | Subdirectory per directory is 32,767[129] |
| UFS2 | 255 bytes | Any byte except /[ch] | No limit defined[ci] | 512 GiB (549.7 GB) to 32 PiB (36.02 PB) | 512 ZiB (604.4 ZB)[130] (279 bytes) | Subdirectory per directory is 32,767[129] |
| UniFS | No limit defined (depends on client) | ? | No limit defined (depends on client) | Available cache space at time of write (depends on platform) | No limit defined | No limit defined |
| VaultFS | configurable (1024 default) | Any byte | No limit defined | No limit defined | No limit defined | No limit defined |
| Version 6 Unix file system (V6FS) | 14 bytes | Any byte except /[ch] | No limit defined[ci] | 16 MiB (16.77 MB)[di] | 32 MiB (33.55 MB) | ? |
| Version 7 Unix file system (V7FS) | 14 bytes | Any byte except /[ch] | No limit defined[ci] | 1 GiB (1.073 GB)[dj] | 2 TiB (2.199 TB) | ? |
| VMFS2 | 128 | Any byte except /[ch] | 2,048 | 4 TiB (4.398 TB)[dk] | 64 TiB (70.36 TB) | ? |
| VMFS3 | 128 | Any byte except /[ch] | 2,048 | 2 TiB (2.199 TB)[dk] | 64 TiB (70.36 TB) | ? |
| VxFS | 255 bytes | Any byte except /[ch] | No limit defined[ci] | 16 EiB (18.44 EB) | ? | ? |
| XFS | 255 bytes[dl] | Any byte except /[ch] | No limit defined[ci] | 8 EiB (9.223 EB)[dm] | 8 EiB (9.223 EB)[dm] | 264 |
| Xiafs | 248 bytes | Any byte[ch] | No limit defined[ci] | 64 MiB (67.10 MB) | 2 GiB (2.147 GB) | ? |
| ZFS | 1023 bytes | Any byte except /[ch] | No limit defined[ci] | 16 EiB (18.44 EB) | 268,435,456 QiB (2128 bytes) | 2128 |
| File system | Maximum filename length | Allowable characters in directory entries[cf] | Maximum pathname length | Maximum file size | Maximum volume size[cg] | Max number of files |
| File system | Start date (time) | End date (time) | Granularity
(last modified time) |
|---|---|---|---|
| APFS | 1970-01-01 00:00:00 | 2554-07-21 23:34:33 | 0.000000001 seconds (1 nanosecond) |
| Btrfs | 1970-01-01 - ~292 billion years | 1970-01-01 + ~292 billion years | 0.000000001 seconds (1 nanosecond) |
| exFAT [dn] | 1980-01-01 00:00:00 | 2107-12-31 23:59:59 | 0.01 seconds (10 milliseconds) |
| ext2, ext3 | 1901-12-14 20:45:52 | 2038-01-19 03:14:07 | 1 second |
| ext4 | 1901-12-14 20:45:52 | 2446-05-10 22:38:55 | 0.000000001 seconds (1 nanosecond) |
| FAT12, FAT16, FAT32[do] | 1980-01-01 00:00:00 | 2107-12-31 23:59:58 | 2 seconds |
| ISO 9660[133] | 0001-01-01 | 9999-12-31[dp] | 0.01 seconds (10 milliseconds) |
| JFS | Unknown | Unknown | 0.000000001 seconds (1 nanosecond) |
| MFS, HFS, HFS Plus | 1904-01-01 00:00:00 | 2040-02-06 06:28:15 | 1 second |
| NTFS | 1601-01-01 | 60056-05-28 | 0.0000001 seconds (100 nanoseconds) |
| ReiserFS | 1901-12-14 20:45:52 | 2038-01-19 | 1 second |
| tux3 | Unknown | Unknown | 0.00390625 seconds (1/256th of a second) |
| UDF | 0001-01-01 | 9999-12-31 | 0.000001 seconds (1 microsecond) |
| UFS1 | 1901-12-14 20:45:52 | 2038-01-19 03:14:07 | Originally one second; 0.000000001 seconds (1 nanosecond) in 4.4BSD and 4.4BSD-derived systems. |
| UFS2 | 1970-01-01 - ~292 billion years | 1970-01-01 + ~292 billion years | 0.000000001 seconds (1 nanosecond) |
| XFS | 1901-12-13 | 2486-07-02 | 0.000000001 seconds (1 nanosecond) |
See also
Notes
- Microsoft first introduced FAT32 in MS-DOS 7.1 / Windows 95 OSR2 (OEM Service Release 2) and then later in Windows 98. NT-based Windows did not have any support for FAT32 up to Windows NT4; Windows 2000 was the first NT-based Windows OS that received the ability to work with it.
- Implemented in later versions as an extension
- Some FAT implementations, such as in Linux, show file modification timestamp (mtime) in the metadata change timestamp (ctime) field. This timestamp is however, not updated on file metadata change.
- Particular Installable File System drivers and operating systems may not support extended attributes on FAT12 and FAT16. The OS/2 and Windows NT filesystem drivers for FAT12 and FAT16 support extended attributes (using a "EA DATA. SF" pseudo-file to reserve the clusters allocated to them). Other filesystem drivers for other operating systems do not.
- The f-node contains a field for a user identifier. This is not used except by OS/2 Warp Server, however.
- NTFS access control lists can express any access policy possible using simple POSIX file permissions (and far more), but use of a POSIX-like interface is not supported without an add-on such as Services for UNIX or Cygwin.
- As of Vista, NTFS has support for Mandatory Labels, which are used to enforce Mandatory Integrity Control.[12]
- Initially, ReFS lacked support for ADS, but Server 2012 R2 and up add support for ADS on ReFS
- Access-control lists and MAC labels are layered on top of extended attributes.
- Some Installable File System drivers and operating systems may not support extended attributes, access control lists or security labels on these filesystems. Linux kernels prior to 2.6.x may either be missing support for these altogether or require a patch.
- Creation time stored since June 2015, xfsprogs version 3.2.3
- Novell calls this feature "multiple data streams". Published specifications say that NWFS allows for 16 attributes and 10 data streams, and NSS allows for unlimited quantities of both.
- Some file and directory metadata is stored on the NetWare server irrespective of whether Directory Services is installed or not, like date/time of creation, file size, purge status, etc; and some file and directory metadata is stored in NDS/eDirectory, like file/object permissions, ownership, etc.
- Record Management Services (RMS) attributes include record type and size, among many others.
- Supported on FreeBSD and Linux implementations, support may not be available on all operating systems.
- Solaris "extended attributes" are really full-blown alternate data streams, in both the Solaris UFS and ZFS.
- Access times are preserved from the original file system at creation time, but Rock Ridge file systems themselves are read-only.
- There are two variants of APFS, one that is case-sensitive, and one that is not. The non-case-sensitive variant is the default one for APFS in macOS 10.13+, while the case-sensitive variant is the default one for iOS 10.3+.
- System V Release 4, and some other Unix systems, retrofitted symbolic links to their versions of the Version 7 Unix file system, although the original version didn't support them.
- Context based symlinks were supported in GFS, GFS2 only supports standard symlinks since the bind mount feature of the Linux VFS has made context based symlinks obsolete
- Optional journaling of data
- As of Windows Vista, NTFS fully supports symbolic links.[18] NTFS 3.0 (Windows 2000) and higher can create junctions, which allow entire directories (but not individual files) to be mapped to elsewhere in the directory tree of the same partition (file system). These are implemented through reparse points, which allow the normal process of filename resolution to be extended in a flexible manner.
- NTFS stores everything, even the file data, as meta-data, so its log is closer to block journaling.
- While NTFS itself supports case sensitivity, the Win32 environment subsystem cannot create files whose names differ only by case for compatibility reasons. When a file is opened for writing, if there is any existing file whose name is a case-insensitive match for the new file, the existing file is truncated and opened for writing instead of a new file with a different name being created. Other subsystems like e. g. Services for Unix, that operate directly above the kernel and not on top of Win32 can have case-sensitivity.
- Metadata-only journaling was introduced in the Mac OS X 10.2.2 HFS Plus driver; journaling is enabled by default on Mac OS X 10.3 and later.
- Although often believed to be case sensitive, HFS Plus normally is not. The typical default installation is case-preserving only. From Mac OS X 10.3 on the command newfs_hfs -s will create a case-sensitive new file system.[20] HFS Plus version 5 optionally supports case-sensitivity. However, since case-sensitivity is fundamentally different from case-insensitivity, a new signature was required so existing HFS Plus utilities would not see case-sensitivity as a file system error that needed to be corrected. Since the new signature is 'HX', it is often believed this is a new filesystem instead of a simply an upgraded version of HFS Plus.[21][22]
- "Soft dependencies" (softdep) in NetBSD, called "soft updates" in FreeBSD provide meta-data consistency at all times without double writes (journaling)
- UDF, LFS, and NILFS are log-structured file systems and behave as if the entire file system were a journal.
- Linux kernel versions 2.6.12 and newer.
- Off by default.
- Full block journaling for ReiserFS was added to Linux 2.6.8.
- Optionally no on IRIX and Linux.
- Particular Installable File System drivers and operating systems may not support case sensitivity for JFS. OS/2 does not, and Linux has a mount option for disabling case sensitivity.
- Case-sensitivity/Preservation depends on client. Windows, DOS, and OS/2 clients don't see/keep case differences, whereas clients accessing via NFS or AFP may.
- Available only in the "NFS" namespace.
- These are referred to as "aliases".
- ZFS is a transactional filesystem using copy-on-write semantics, guaranteeing an always-consistent on-disk state without the use of a traditional journal. However, it does also implement an intent log to provide better performance when synchronous writes are requested.
- Btrfs is a transactional filesystem using copy-on-write semantics, guaranteeing an always-consistent on-disk state without the use of a traditional journal. It keeps track of last five transactions and uses checksums to find problematic drives, making write intent logs unnecessary.
- Bcachefs is a transactional filesystem using copy-on-write semantics, guaranteeing an always-consistent on-disk state without the use of a traditional journal. Journal commits are fairly expensive operations as they require issuing FLUSH and FUA operations to the underlying devices. By default, a journal flush is issued one second after a filesystem update has been done, which primarily records btree updates ordered by when they occurred. This option may be useful on a personal workstation or laptop, and perhaps less appropriate on a server.
- Since Windows 10 Enterprise Insider Preview build 19536
- A file system is self-healing if its capable to proactively autonomously detect and correct all but grave errors, faults and corruptions online both in internal metadata AND data. See US7694191B1 as example. This usually requires full checksumming as well as internal redundancy as well as corresponding logic.
- only inside of Stacker 3/4 and DriveSpace 3 compressed volumes[31]
- Supported only on Windows Server SKUs. However, partitions deduplicated on Server can be used on Client.
- Reiser4 supports transparent compression and encryption with the cryptcompress plugin which is the default file handler in version 4.1.
- VxFS provides an optional feature called "Storage Checkpoints" which allows for advanced file system snapshots.
- LZJB (optimized for performance while providing decent data compression)
LZ4 (faster & higher ratio than lzjb)
gzip levels: 1 (fastest) to 9 (best), default is 6
zstd positive: 1 (fastest) to 19 (best), default is 3
zstd negative: 1(best & default)-10, 20, 30, …, 100, 500, 1000(fastest)
zle: compresses runs of zeros.[41] - disabling copy-on-write (COW) to prevent fragmentation also disables data checksumming
- none (default)
The three currently supported algorithms are gzip, LZ4, zstd.
The compression level may also be optionally specified, as an integer between 0 and 15, e.g. lz4:15. 0 specifies the default compression level, 1 specifies the fastest and lowest compression ratio, and 15 the slowest and best compression ratio.[44] - 3.7: Added file-level snapshot (only available in Windows Server 2022).[46]
- Some file system creation implementations reuse block references and support deduplication this way. This is not supported by the standard, but usually works well due to the file system's read-only nature.
- With software based on GNU Parted.
- Only for "stuffed" inodes
- Other block:fragment size ratios supported; 8:1 is typical and recommended by most implementations.
- Fragments were planned, but never actually implemented on ext2 and ext3.
- Stores one largest extent in disk, and caches multiple extents in DRAM dynamically.
- Tail packing is technically a special case of block suballocation where the suballocation unit size is always 1 byte.
- In "extents" mode.
- _inline_all field in jfs_dinode.h
- Each possible size (in sectors) of file tail has a corresponding suballocation block chain in which all the tails of that size are stored. The overhead of managing suballocation block chains is usually less than the amount of block overhead saved by being able to increase the block size but the process is less efficient if there is not much free disk space.
- Effectively, implemented as inline data support for any small extent.
- Effectively, implemented as many inline data extents packed in a single metadata node.
- Supported using only EVMS; not currently supported using LVM
- Provided in Plan 9 from User Space
- FUSE based driver available that can eliminate need for iSCSI gateways or SMB shares, but the physical backend store BlueStore only runs on Linux.
- Filesystem driver "Dokany" available that can eliminate need for iSCSI gateways or SMB shares, but the physical backend store BlueStore only runs on Linux.
- These are the restrictions imposed by the on-disk directory entry structures themselves, as well as those imposed by operating systems across all file systems. Particular Installable File System drivers may place restrictions of their own on file and directory names.
DOS, Windows, and OS/2 allow only the following characters from the current 8-bit OEM codepage in SFNs: A-Z, 0-9, characters ! # $ % & ' ( ) - @ ^ _ ` { } ~, as well as 0x80-0xFF and 0x20 (SPACE). Specifically, lowercase letters a-z, characters " * / : < > ? \ | + , . ; = [ ], control codes 0x00-0x1F, 0x7F and in some cases also 0xE5 are not allowed.) In LFNs, all Unicode characters except \ / : ? * " > < | and NUL are allowed in file and directory names across all filesystems.
Unix-like systems disallow the characters / and NUL in file and directory names across all file systems. - For filesystems that have variable allocation unit (block/cluster) sizes, a range of size are given, indicating the maximum volume sizes for the minimum and the maximum possible allocation unit sizes of the filesystem (e.g. 512 bytes and 128 KiB (131.0 KB) for FAT — which is the cluster size range allowed by the on-disk data structures, although some Installable File System drivers and operating systems do not support cluster sizes larger than 32 KiB (32.76 KB)).
- In these filesystems the directory entries named "." and ".." have special status. Directory entries with these names are not prohibited, and indeed exist as normal directory entries in the on-disk data structures. However, they are mandatory directory entries, with mandatory values, that are automatically created in each directory when it is created; and directories without them are considered corrupt.
- The on-disk structures have no inherent limit. Particular Installable File System drivers and operating systems may impose limits of their own, however. Limited by its Current Directory Structure (CDS), DOS does not support more than 32 directory levels (except for DR DOS 3.31-6.0) or full pathnames longer than 66 bytes for FAT, or 255 characters for LFNs. Windows NT does not support full pathnames longer than 32,767 bytes for NTFS. Older POSIX APIs which rely on the PATH_MAX constant have a limit of 4,096 bytes on Linux but this can be worked around. Linux itself has no hard path length limits.[131][132]
- File size can be greater than total available space due to compression, extent sharing and holes in sparse files.
- Only 231-4096 files/directories with inodes_32bit option in effect.
- Varies wildly according to block size and fragmentation of block allocation groups.
- Depends on whether the FAT12, FAT16, and FAT32 implementation has support for LFNs. Where it does not, as in OS/2, DOS, Windows 95, Windows 98 in DOS-only mode and the Linux "msdos" driver, file names are limited to 8.3 format of 8-bit OEM characters (space padded in both the basename and extension parts) and may not contain NUL (end-of-directory marker) or character 5 (replacement for character 229 which itself is used as deleted-file marker). Short names also must not contain lowercase letters. A few special device names (CON, NUL, AUX, PRN, LPT1, COM1, etc.) should be avoided, as some operating systems (notably DOS, OS/2 and Windows) reserve them.
- While FAT32 partitions this large work fine once created, some software won't allow creation of FAT32 partitions larger than 32 GiB (34.35 GB). This includes, notoriously, the Windows XP installation program and the Disk Management console in Windows 2000, XP, 2003 and Vista. Use FDISK from a Windows ME Emergency Boot Disk to avoid.[113]
- Maximum pathname length is 4,096 bytes, but quoted limits on individual components add up to 1,664 bytes.
- Maximum combined filename/filetype length is 236 bytes; each component has an individual maximum length of 255 bytes.
- Depends on kernel version and arch. For 2.4 kernels the max is 2 TiB (2.199 TB). For 32-bit 2.6 kernels it is 16 TiB (17.59 TB). For 64-bit 2.6 kernels it is 8 EiB (9.223 EB).
- The "classic" Mac OS provides two sets of functions to retrieve file names from an HFS Plus volume, one of them returning the full Unicode names, the other shortened names fitting in the older 31 byte limit to accommodate older applications.
- HFS Plus mandates support for an escape sequence to allow arbitrary Unicode. Users of older software might see the escape sequences instead of the desired characters.
- The "." and ".." directory entries in HPFS that are seen by applications programs are a partial fiction created by the Installable File System drivers. The on-disk data structure for a directory does not contain entries by those names, but instead contains a special "start" entry. Whilst on-disk directory entries by those names are not physically prohibited, they cannot be created in normal operation, and a directory containing such entries is corrupt.
- This is the limit of the on-disk structures. The HPFS Installable File System driver for OS/2 uses the top 5 bits of the volume sector number for its own use, limiting the volume size that it can handle to 64 GiB (68.71 GB).
- Through the use of multi-extents, a file can consist of multiple segments, each up to 4 GiB (4.294 GB) in size. See ISO 9660#The 2 GiB (2.147 GB) (or 4 GiB (4.294 GB) depending on implementation) file size limit
- Assuming the typical 2048 Byte sector size. The volume size is specified as a 32 bit value identifying the number of sectors on the volume.
- Sparse files can be larger than the file system size, even though they can't contain more data.
- NSS allows files to have multiple names, in separate namespaces.
- Some namespaces had lower name length limits. "LONG" had an 80-byte limit, "NWFS" 80 bytes, "NFS" 40 bytes and "DOS" imposed 8.3 filename.
- QFS allows files to exceed the size of disk when used with its integrated HSM, as only part of the file need reside on disk at any one time.
- This restriction might be lifted in newer versions.
- The actual maximum was 1,082,201,088 bytes, with 10 direct blocks, 1 singly-indirect block, 1 doubly-indirect block, and 1 triply-indirect block. The 4.0BSD and 4.1BSD versions, and the System V version, used 1,024-byte blocks rather than 512-byte blocks, making the maximum 4,311,812,608 bytes or approximately 4 GiB (4.294 GB).
- Maximum file size on a VMFS volume depends on the block size for that VMFS volume. The figures here are obtained by using the maximum block size.
- Note that the filename can be much longer XFS#Extended attributes
- exFAT records 10-millisecond increments for last modification and creation time stamps, but only one second for the last access time stamp. exFAT file system specification
- FAT has different granularities for different time stamps. Only the date of last access is recorded, not the time. The file creation time (treated as "change time" by Linux for this specific file system) is recorded more granularly, at a hundredth of a second. FAT: General Overview of On-Disk Format, page 23.
- Software that doesn't recognize Extended Attribute Records in ISO 9660 will only recognize a date range from 1900 to 2155, see section 9.1.5 Recording Date and Time in the source.