A filesystem is a means to organize data to be retained after a program terminates. Filesystems provide procedures to store, retrieve, and update data, as well as to 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 — an additional security control feature for multiuser systems.
- Filesystem/Security — one of the basic means to harden a system.
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.
|JFFS2||Journalling Flash File System version 2.|
|YAFFS||sys-fs/yaffs2utils||Yet Another Flash File System.|
|bcachefs||sys-fs/bcachefs-tools||A next generation, robust, high performance filesystem supporting CoW (Copy-on-write), compression, and encryption.|
|btrfs||sys-fs/btrfs-progs||A copy-on-write B-tree file system (btrfs) with advanced features.|
|Cramfs||sys-fs/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||sys-fs/ecryptfs-utils||The enterprise cryptographic filesystem for Linux.|
|efivarfs||A (U)EFI variable filesystem|
|exFAT||sys-fs/exfatprogs||Extensible File Allocation Table (exFAT) filesystem by Microsoft, natively supported since Linux 5.7|
|ext4||sys-fs/e2fsprogs||The default, GPL licensed journaling filesystem for many Linux distributions.|
|F2FS||sys-fs/f2fs-tools||A Flash-Friendly File System (F2FS) created by Samsung for the Linux kernel.|
|FAT||sys-fs/dosfstools||The File Allocation Table (FAT) filesystem. Originally created for use with Microsoft Windows.|
|GFS2||Global File System 2: A shared disk filesystem. Typically used in compute clusters.|
|HFS||sys-fs/hfsutils||Hierarchical File System (HFS). Originally created for use with the Macintosh System Software, later renamed to Mac OS (Classic).|
|HFS+||sys-fs/hfsplusutils||The successor to HFS, introduced in Mac OS 8.1 and default filesystem for Mac OS X until macOS 10.12 Sierra.|
|JFS||sys-fs/jfsutils||A GPL licensed, 64-bit Journaled File System (JFS) developed by IBM.|
|NILFS||sys-fs/nilfs-utils||A log-structured file system implementation for the Linux kernel.|
|NTFS||Microsoft Windows' New Technology File System (NTFS) (Windows' default filesystem).|
|OCFS2||Oracle Cluster File System version 2.|
|OverlayFS||The only union-like filesystem built-in to the Linux kernel.|
|ReiserFS||sys-fs/reiserfsprogs||Version 3 of the ReiserFS filesystem. Scheduled for removal from the kernel in 2025.|
|SquashFS||sys-fs/squashfs-tools, sys-fs/squashfs-tools-ng||A compressed, read-only file system for Linux|
|UDF||sys-fs/udftools||Universal Disk Format - needed for mounting some kind of .iso files|
|UFS||The Unix File System (UFS) also called the Berkeley Fast File System.|
|XFS||sys-fs/xfsprogs||A GPL licensed, 64-bit journaling filesystem created by Silicon Graphics.|
|ZFS||sys-fs/zfs||A CDDL (non-GPL compatible) licensed, copy-on-write filesystem created by Sun Microsystems.|
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, AppArmor 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||sys-cluster/ceph||A distributed object store and filesystem designed to provide excellent performance, reliability, and scalability.|
|GlusterFS||sys-cluster/glusterfs||A powerful network/cluster filesystem.|
|NFS||net-fs/nfs-utils||A common Linux network file system protocol.|
|Samba||net-fs/samba||A re-implementation of the SMB/CIFS networking protocol.|
|CurlFtpFS||net-fs/curlftpfs||File system for accessing FTP hosts based on FUSE.|
|FuseISO||sys-fs/fuseiso||FUSE module to mount ISO filesystem images.|
|MTPfs||sys-fs/mtpfs||A FUSE filesystem providing access to Media Transfer Protocol (MTP) devices.|
|smbnetfs||net-fs/smbnetfs||A FUSE filesystem for SMB shares.|
|SSHFS||net-fs/sshfs||Implements FUSE to mount filesystems in user space.|
|squashfuse||sys-fs/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 — one of the basic means to harden a system.
- Filesystem in Userspace — a way for users to mount file systems without needing special permissions
- Filesystems in Handbook AMD64
- Linux Sea, by Sven Vermeulen, chapter about filesystems
- Bitrot and atomic COWs: Inside “next-gen” filesystems (Ars Technica)
- A Study of Linux File System Evolution (PDF document from USENIX)