A filesystem is a means to organize data expected to be retained after a program terminates by providing procedures to store, retrieve, and update data as well as manage the available space on the device(s) which contain it.
Linux has a few dozen filesystems available, each with their own advantages and disadvantages when considering a particular use case.
- Filesystem/Access Control List Guide — one of the more important security control features on multiuser Linux systems.
- Filesystem Security
Flash memory filesystems
The following flash memory filesystems are designed to be used on embedded flash memory known as MTDs; they are not intended to be used for USB based flash drives, SD cards, or other types of removable flash block devices.
- bcachefs - A next generation, robust, high performance filesystem supporting CoW (Copy-on-write), compression, and encryption.
- Cramfs - A memory and space sensitive compressed filesystem that supports random reading. It avoids the block device layer and usefulness in tiny embedded systems with very tight memory constraints.
- eCryptfs - The enterprise cryptographic filesystem for Linux.
- efivarfs - A (U)EFI variable filesystem
- ext4 - The default, GPL licensed journaling filesystem for many Linux distributions.
- FAT - The File Allocation Table (FAT) filesystem. Originally created for use with Microsoft Windows.
- exFAT - Extensible File Allocation Table (exFAT) filesystem by Microsoft, natively supported since Linux 5.7
- HFS - Hierarchical File System (HFS). Originally created for use with the Macintosh System Software, later renamed to Mac OS (Classic).
- HFS+ - The successor to HFS, introduced in Mac OS 8.1 and default filesystem for Mac OS X until macOS 10.12 Sierra.
- JFS - A GPL licensed, 64-bit Journaled File System (JFS) developed by IBM.
- Btrfs - A copy-on-write B-tree file system (Btrfs) with advanced features (an entirely open source licensed ZFS alternative).
- NILFS - A log-structured file system implementation for the Linux kernel.
- NTFS - Microsoft Windows' New Technology File System (NTFS) (Windows' default filesystem).
- Aufs - Advanced multi-layered unification file system (Aufs), formerly known as Another union file system.
- OverlayFS - The only union-like filesystem built-in to the Linux kernel.
- ReiserFS - Version 3 of the ReiserFS filesystem.
- Reiser4 - Version 4 of ReiserFS filesystem. Currently not implemented in the mainline Linux kernel.
- SquashFS - A compressed, read-only file system for Linux
- UDF - Universal Disk Format - needed for mounting some kind of .iso files
- GFS2 - Global File System 2: A shared disk filesystem. Typically used in compute clusters.
- UFS - The Unix File System (UFS) also called the Berkeley Fast File System.
- XFS - A GPL licensed, 64-bit journaling filesystem created by Silicon Graphics.
- ZFS - A CDDL (non-GPL compatible) licensed, copy-on-write filesystem created by Sun Microsystems.
- F2FS - A Flash-Friendly File System (F2FS) created by Samsung for the Linux kernel.
Virtual filesystems, also called pseudo filesystems, are for storing temporary data in memory while the system is running.
- debugfs - Used for debugging purposes; primarily Linux kernel development.
- procfs - Used to output and change of system and process information.
- securityfs - Used by the TPM BIOS character driver and IMA, an integrity provider.
- sysfs - Used to output information about and to configure devices and drivers.
- tmpfs - Used to store files in memory (RAM).
- devtmpfs - udev requires devtmpfs (Maintain a devtmpfs filesystem to mount at /dev) in the kernel.
- Ceph - A distributed object store and filesystem designed to provide excellent performance, reliability, and scalability.
- NFS - A common Linux network file system protocol.
- SSHFS - Implements FUSE to mount filesystems in user space.
- Tahoe-LAFS - A Least Authority File Store (LAFS).
- GlusterFS - A powerful network/cluster filesystem.
- CurlFtpFS - File system for accessing FTP hosts based on FUSE.
- exFAT - A FUSE filesystem for the extended FAT filesystem. Prior of Linux 5.7
- FuseISO - FUSE module to mount ISO filesystem images.
- MTPfs - A FUSE filesystem providing access to Media Transfer Protocol (MTP) devices.
- smbnetfs - A FUSE filesystem for SMB shares.
- squashfuse - Mount SquashFS archives using FUSE.
Filesystems can be mounted in several ways:
- mount - The command used to mount filesystems. Requires administrative privileges or entries in /etc/fstab.
- /etc/fstab - Contains descriptive information about the filesystems the system can mount.
- Removable media - Mount on file demand.
- Udevil - A small auto-mount utility with little dependencies.
- AutoFS - Automatic mount on file access.
- Bcache — a Linux kernel block layer cache.
- Filesystem security
- Filesystem in Userspace — a way for users to mount file systems without needing special permissions
- Linux Sea, by Sven Vermeulen, chapter about filesystems
- File systems (Arch Wiki)
- Bitrot and atomic COWs: Inside “next-gen” filesystems (Ars Technica)
- A Study of Linux File System Evolution (PDF document from USENIX)