User:Pi3832/Relevent File Systems
Appearance
Comparison of relevant file systems
[edit]The Comparison of file systems page is bloody useless because it lumps all file systems in the known universe together.
So, I've copied it here, and trimmed things that don't come up much in my narrow little view of the world.
Limits
[edit]File system | Maximum filename length | Allowable characters in directory entries | Maximum pathname length | Maximum file size | Maximum volume size |
---|---|---|---|---|---|
FAT16 | 8.3 (255 UTF-16 code units with LFN) | Any byte except for values 0-31, 127 (DEL) and: " * / : < > ? \ | + , . ; = [] (lowcase a-z are stored as A-Z). With VFAT LFN any Unicode except NUL |
No limit defined | 2 GB (4 GB) | 2 GB or 4 GB |
FAT32 | 8.3 (255 UTF-16 code units with LFN) | Any byte except for values 0-31, 127 (DEL) and: " * / : < > ? \ | + , . ; = [] (lowcase a-z are stored as A-Z). With VFAT LFN any Unicode except NULL |
No limit defined | 4 GB | 2 TB (16 TB) |
NTFS | 255 characters | Any Unicode except NUL and \ / : * ? " < > | | 32,767 Unicode characters with each path component (directory or filename) commonly up to 255 characters long | 16 EB | 16 EB |
ext2 | 255 bytes | Any byte except NUL and / | No limit defined | 2 TB | 32 TB |
ext3 | 255 bytes | Any byte except NUL and / | No limit defined | 2 TB | 32 TB |
ext4 | 256 bytes | Any byte except NUL and / | No limit defined | 16 TB | 1 EB |
ReiserFS | 4,032 bytes/226 characters | Any byte except NUL | No limit defined | 8 TB (v3.6), 2 GB (v3.5) | 16 TB |
NILFS | 255 bytes | Any byte except NUL | No limit defined | 8 EB | 8 EB |
XFS | 255 bytes | Any byte except NUL | No limit defined | 8 EB | 8 EB |
JFS | 255 bytes | Any Unicode except NUL | No limit defined | 4 PB | 32 PB |
UDF | 255 bytes | Any Unicode except NUL | 1,023 bytes | 16 EB | Unknown |
ZFS | 255 bytes | Any Unicode except NUL | No limit defined | 16 EB | 16 EB |
Btrfs | 255 bytes | Any byte except NUL | Unknown | 16 EB | 16 EB |
File system | Maximum filename length | Allowable characters in directory entries | Maximum pathname length | Maximum file size | Maximum volume size |
Metadata
[edit]File system | Stores file owner | POSIX file permissions | Creation timestamps | Last access/ read timestamps | Last content modification timestamps | Disk copy created | Last metadata change timestamps | Last archive timestamps | Access control lists | Security/ MAC labels | Extended attributes/ Alternate data streams/ forks | Checksum/ ECC |
---|---|---|---|---|---|---|---|---|---|---|---|---|
FAT16 | No | No | Partial | Partial | Yes | Yes | No[1] | No | No | No | No[2] | No |
FAT32 | No | No | Partial[3] | Partial[3] | Yes | Yes | No[1] | No | No | No | No | No |
NTFS | Yes | Yes | Yes | Yes | Yes | No | Yes | No | Yes | Yes | Yes | No |
ext2 | Yes | Yes | No | Yes | Yes | Unknown | Yes | No | Yes | Yes | Yes | No |
ext3 | Yes | Yes | No | Yes | Yes | No | Yes | No | Yes | Yes | Yes | No |
ext4 | Yes | Yes | Yes | Yes | Yes | Unknown | Yes | No | Yes | Yes | Yes | Partial |
NILFS | Yes | Yes | Yes | No | Unknown | Unknown | Yes | No | No | No | No | Yes |
ReiserFS | Yes | Yes | No | Yes | Yes | No | No | No | No | No | No | No |
Reiser4 | Yes | Yes | No | Yes | Yes | Unknown | Yes | No | No | No | No | No |
XFS | Yes | Yes | No | Yes | Yes | Unknown | Yes | No | Yes | Yes | Yes | No |
JFS | Yes | Yes | Yes | Yes | Yes | Unknown | Yes | No | Yes | Yes | Yes | No |
UDF | Yes | Yes | Yes | Yes | Unknown | Unknown | Yes | Yes | Yes | No | Yes | No |
ZFS | Yes | Yes | Yes | Yes | Yes | Unknown | Yes | Yes | Yes | Yes | Yes | Yes |
Btrfs | Yes | Yes | Yes | Yes | Yes | Unknown | Yes | Unknown | Yes | Yes | Yes | Yes |
File system | Stores file owner | POSIX file permissions | Creation timestamps | Last access/read timestamps | Last content modification timestamps | Disk copy created | Last metadata change timestamps | Last archive timestamps | Access control lists | Security/ MAC labels | Extended attributes/ Alternate data streams/ forks | Checksum/ ECC |
Features
[edit]File system | Hard links | Symbolic links | Block journaling | Metadata-only journaling | Case-sensitive | Case-preserving | File Change Log | Snapshot | XIP | Encryption | COW | integrated LVM | Data deduplication | Volumes are resizeable |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
FAT16 | No | No | No | No | No | Partial | No | No | No | No | No | No | No | Offline[4] |
FAT32 | No | No | No | No | No | Partial | No | No | No | No | No | No | No | Offline[4] |
NTFS | Yes | Yes[5] | No[6] | Yes[6] | Yes[7] | Yes | Yes | Partial[8] | Yes | Yes | Partial | Unknown | No | Online[9] |
ext2 | Yes | Yes | No | No | Yes | Yes | No | No | Yes[10] | No | No | No | No | Online[11] |
ext3 | Yes | Yes | Yes[12] | Yes | Yes | Yes | No | No | Yes | No | No | No | No | Online[11] |
ext4 | Yes | Yes | Yes[12] | Yes | Yes | Yes | No | No | Yes | No | No | No | No | Online[11] |
NILFS | Yes | Yes | Yes[13] | No | Yes | Yes | Yes | Yes | No | No | Yes | Unknown | Unknown | Unknown |
ReiserFS | Yes | Yes | No[14] | Yes | Yes | Yes | No | No | No | No | No | No | No | Offline |
XFS | Yes | Yes | Yes | Yes | Yes[15] | Yes | No | No | No | No | No | No | No | Online (cannot be shrunk) |
JFS | Yes | Yes | No | Yes | Yes[16] | Yes | No | Yes | No | No | No | Unknown | Unknown | Online (cannot be shrunk)[17] |
UDF | Yes | Yes | Yes[13] | Yes[13] | Yes | Yes | No | No | Yes | No | No | No | No | Unknown |
ZFS | Yes | Yes | Yes[18] | No[18] | Yes | Yes | No | Yes | No | Yes | Yes | Yes | Yes | Online (cannot be shrunk)[19] |
Btrfs | Yes | Yes | Unknown | Yes | Yes | Yes | Unknown | Yes | No | Planned[20] | Yes | Yes | Work-in-Progress | Online |
File system | Hard links | Symbolic links | Block journaling | Metadata-only journaling | Case-sensitive | Case-preserving | File Change Log | Snapshotting | XIP | Encryption | COW | integrated LVM | Data deduplication | Volumes are resizeable |
Allocation and layout policies
[edit]File system | Block suballocation | Variable file block size[21] | Extents | Allocate-on-flush | Sparse files | Transparent compression |
---|---|---|---|---|---|---|
Btrfs | Yes | No | Yes | Yes | Yes | Yes |
FAT16 | No | No | No | No | No | No[22] |
FAT32 | No | No | No | No | No | No |
NTFS | Partial | No | Yes | No | Yes | Partial[23] |
ext2 | No[24] | No | No | No | Yes | No[25] |
ext3 | No[24] | No | No | No | Yes | No |
ext4 | No[24] | No | Yes | Yes | Yes | No |
NILFS | No | No | No | Yes | Yes | No |
ReiserFS | Yes | No | No | No | Yes | No |
XFS | No | No | Yes | Yes | Yes | No |
JFS | Yes | No | Yes | No | Yes | only in JFS1 on AIX[26] |
UDF | No | No | Yes | Depends[27] | No | No |
ZFS | Partial[28] | Yes | No | Yes | Yes | Yes |
File system | Block suballocation | Variable file block size[21] | Extents | Allocate-on-flush | Sparse files | Transparent compression |
Supporting operating systems
[edit]File system | DOS | Windows 9x | Windows NT | Linux | Mac OS | Mac OS X | FreeBSD | BeOS | Solaris | AIX | z/OS | OS/2 | Windows CE | Windows Mobile | VxWorks | HP-UX |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
FAT16 | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Partial | Unknown | Yes | Yes | Yes | Yes | Unknown |
FAT32 | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Partial | Unknown | Yes | Yes | Yes | Unknown | |
NTFS | Yes | Yes | No | Unknown | Unknown | Partial | No | Unknown | Unknown | |||||||
ext2 | Unknown | Unknown | Yes | No | Yes | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | |||||
ext3 | Unknown | Unknown | Yes | No | Yes | Unknown | Yes | Unknown | Unknown | Unknown | Unknown | Unknown | ||||
ext4 | No | No | Yes | No | No | Unknown | Unknown | Unknown | Unknown | Unknown | No | Unknown | Unknown | Unknown | ||
NILFS | No | Unknown | Unknown | Yes | No | Unknown | No | Unknown | Unknown | Unknown | Unknown | Unknown | No | No | Unknown | Unknown |
ReiserFS | No | Unknown | Partial | Yes | No | No | Partial | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | Unknown | ||
XFS | No | Unknown | Unknown | Yes | No | Unknown | Partial | Unknown | Unknown | Unknown | Unknown | Unknown | No | No | Unknown | Unknown |
JFS | No | Unknown | Unknown | Yes | No | No | No | Unknown | Unknown | Yes | Unknown | Yes | No | No | Unknown | |
UDF | Unknown | Partial | Yes | Yes | Yes | Yes | Yes | Unknown | Yes | Unknown | Unknown | Unknown | Yes | Unknown | Unknown | Unknown |
ZFS | No | No | No | No | Yes | No | Yes | No | No | No | Unknown | Unknown | Unknown | Unknown | ||
Btrfs | No | No | No | Yes | No | No | No | No | No | No | No | No | No | No | Unknown | Unknown |
File system | DOS | Windows 9x | Windows NT | Linux | Mac OS | Mac OS X | FreeBSD | BeOS | Solaris | AIX | z/OS | OS/2 | Windows CE | Windows Mobile | VxWorks | HP-UX |
- ^ a b Cite error: The named reference
fat-ctime
was invoked but never defined (see the help page). - ^ Cite error: The named reference
note-22
was invoked but never defined (see the help page). - ^ a b Cite error: The named reference
fat-cstamp
was invoked but never defined (see the help page). - ^ a b Cite error: The named reference
parted-resize
was invoked but never defined (see the help page). - ^ As of Windows Vista, NTFS fully supports soft links. See this Microsoft article on Vista kernel improvements. NTFS 5.0 (Windows 2000) and higher can create junctions, which allow any valid local directory (but not individual files) ("target" of junction) to be mapped to an NTFS version thereof ("source" = location of junction). The source directory must lie on an NTFS 5+ partition, but the target directory can lie on any valid local partition and needn't be NTFS. Junctions are implemented through reparse points, which allow the normal process of filename resolution to be extended in a flexible manner.
- ^ a b 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.
- ^ NTFS does not internally support snapshots, but in conjunction with the Volume Shadow Copy Service can maintain persistent block differential volume snapshots.
- ^ http://www.bleepingcomputer.com/tutorials/tutorial133.html
- ^ Linux kernel versions 2.6.12 and newer.
- ^ a b c Offline growing/shrinking as well as online growing: "Linux man page for resize2fs(8) (from e2fsprogs 1.41.9)".
- ^ a b Off by default.
- ^ a b c Cite error: The named reference
note-38
was invoked but never defined (see the help page). - ^ Full block journaling for ReiserFS was not added to Linux 2.6.8 for obvious reasons.
- ^ Optionally no on IRIX.
- ^ 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.
- ^ http://www.linux.com/archive/feed/32002
- ^ a b 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.
- ^ "How to resize ZFS".
- ^ McPherson, Amanda (2009-06-22), A Conversation with Chris Mason on BTRfs: the next generation file system for Linux, Linux Foundation, retrieved 2009-09-01
- ^ a b Variable block size refers to systems which support different block sizes on a per-file basis. (This is similar to extents but a slightly different implementational choice.) The current implementation in UFS2 is read-only.
- ^ Cite error: The named reference
note-51
was invoked but never defined (see the help page). - ^ Only if formatted with 4kB-sized clusters or smaller
- ^ a b c Fragments were planned, but never actually implemented on ext2 and ext3.
- ^ e2compr, a set of patches providing block-based compression for ext2, has been available since 1997, but has never been merged into the mainline Linux kernel.
- ^ "AIX documentation: JFS data compression". IBM.
- ^ Depends on UDF implementation.
- ^ When enabled, ZFS's logical-block based compression behaves much like tail-packing for the last block of a file.