Filesystem

A filesystem is Article description::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.

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 - Yet Another Flash File System.

Disk filesystems

 * 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
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 - requires devtmpfs (Maintain a devtmpfs filesystem to mount at ) in the kernel.

Network filesystems

 * 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.

FUSE-based filesystems

 * 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.

Mounting
Filesystems can be mounted in several ways:


 * - The command used to mount filesystems. Requires administrative privileges or entries in.
 * 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.

External resources

 * 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)