File Systems Fundamentals
A file system gives stored data names, directories, metadata, and rules for access. It maps the files applications use to storage while preserving a consistent namespace across devices and file system implementations.
itOperating systems | OpenSkills.info
Course pathWalk it in order
Look it upDip in anytime
Go furtherLeaves this page
Don't Panic
Don't Panic — File Systems Fundamentals
A file system is the operating system's arrangement for turning unromantic storage locations into files with names, directories, metadata, and access rules. The disk offers numbered places to put bytes. This is useful, but it has all the charm of being handed a warehouse with every shelf numbered and no labels. A file system supplies the labels, along with rules for finding and protecting what they name.
The important trick is that a pathname is a route, not the thing at the end of it. The operating system walks directory entries one component at a time until it reaches a file object, often an inode on Unix-like systems. Opening that object creates an open file description and gives the process a file descriptor. Reads and writes then use the handle instead of setting off on the directory expedition again.
This is why names behave like small bureaucratic fictions. A hard link gives one file object another directory entry, so removing one name does not finish the job while another link remains. An open descriptor can also keep the object alive after its last visible name is gone. A symbolic link is a different creature: it stores another pathname and asks resolution to continue from there, which is a perfectly reasonable thing to do until it points somewhere surprising.
A mount makes separate file systems appear in one visible hierarchy. It attaches a file-system root at a directory, hiding that directory's former view without copying it. That explains why a path can cross from local storage to a network, memory, or kernel-generated file system while still looking like an ordinary directory walk. The hierarchy is a map, not proof that every place on it has the same storage or failure behavior.
The surprise waiting in the supply closet is that a successful write, an atomic rename, and durable storage are different promises. Caching can make data visible before it is durable. Journaling and copy-on-write designs help recover structural state after interruption, but neither recreates data with no valid copy. Backups remain their own job, because the universe has never accepted a journal entry as a substitute for one.
When space goes missing, count more than bytes. Data blocks, inodes, metadata space, quotas, snapshots, and open-but-unlinked files can each explain a failure. Check the Cheatsheet for the object relationships and diagnostic signals. Open the Slides for the layer map and the difference between visibility, atomicity, and durability. Use the Practice Reference and Exercise to watch links and descriptors behave in a disposable directory. The Reference tab leads from the portable rules into the implementation details that make each file system delightfully particular.
Where this skill leads
Relevant careers
See how this topic contributes to broader role-level skill maps.
Sources
- https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/V1_chap03.html
Supports
- Defines file systems, files, directories, directory entries, permission bits, and related portable terminology.
- https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/V1_chap04.html
Supports
- Specifies file hierarchy, pathname resolution, permissions, cache behavior, and file-time concepts.
- https://pubs.opengroup.org/onlinepubs/9799919799/functions/unlink.html
Supports
- Specifies removal of a directory entry and the lifetime of an unlinked file while references remain.
- https://pubs.opengroup.org/onlinepubs/9799919799/functions/rename.html
Supports
- Specifies rename behavior and the cross-file-system boundary.
- https://pubs.opengroup.org/onlinepubs/9799919799/functions/fsync.html
Supports
- Defines synchronization requests for file data and implementation-defined metadata.
- https://pubs.opengroup.org/onlinepubs/9799919799/functions/lseek.html
Supports
- Defines file offsets and interfaces for locating data and holes in sparse files.
- https://docs.kernel.org/filesystems/vfs.html
Supports
- Describes VFS, dentries, inodes, superblocks, file objects, descriptors, mounts, caches, and writeback error reporting.
- https://man7.org/linux/man-pages/man7/inode.7.html
Supports
- Documents inode identity, file types, ownership, modes, size, allocation, links, and timestamps.
- https://man7.org/linux/man-pages/man7/path_resolution.7.html
Supports
- Documents absolute and relative path walking, directory search permission, symbolic links, and lookup errors.
- https://man7.org/linux/man-pages/man8/mke2fs.8.html
Supports
- Creating an ext4 file system, and the -F option needed when the target is a regular file rather than a block device.
- https://man7.org/linux/man-pages/man8/mount.8.html
Supports
- Documents file-system attachment, VFS behavior, mount namespaces, and generic mount options.
- https://docs.kernel.org/filesystems/ext4/index.html
Supports
- Documents ext4 blocks, block groups, superblocks, allocation maps, inodes, extents, directories, checksums, and journaling.
- https://docs.kernel.org/filesystems/ext4/journal.html
Supports
- Explains the ext4 journal and its role in recovering file-system metadata changes.
- https://docs.kernel.org/filesystems/btrfs.html
Supports
- Lists Btrfs copy-on-write, checksum, snapshot, subvolume, compression, scrub, and multi-device features.
- https://github.com/sindresorhus/awesome
Supports
- Provides the required starting point for curated awesome-list discovery.
- https://github.com/awesome-foss/awesome-sysadmin#distributed-filesystems
Supports
- Identifies Ceph, HDFS, JuiceFS, Lustre, OpenAFS, and other distributed file-system projects for ecosystem curation.
- https://docs.ceph.com/en/latest/cephfs/index.html
Supports
- Describes CephFS as a POSIX file system over RADOS with separate metadata servers and direct client data access.
- https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html
Supports
- Describes HDFS architecture and its large-data, streaming-access design assumptions.
- https://juicefs.com/docs/community/architecture/
Supports
- Describes a POSIX-mounted client, separate metadata engine, and file data stored as object-storage blocks.
- https://doc.lustre.org/lustre_manual.xhtml
Supports
- Documents Lustre architecture, metadata services, object storage services, and client operation.
- https://docs.openafs.org/
Supports
- Documents OpenAFS clients, servers, cells, volumes, caching, and replication.
- https://people.eecs.berkeley.edu/~prabal/teaching/eecs582-w11/readings/ritchie74unix.pdf
Supports
- Documents the 1974 UNIX file-system interface, hierarchical directories, inodes, links, mounts, and special files.
- https://docs-archive.freebsd.org/44doc/smm/05.fastfs/paper.html
Supports
- Documents the 1984 Fast File System design, locality-aware allocation, larger blocks, fragments, symbolic links, rename, and quotas.
- https://pubs.opengroup.org/onlinepubs/009696699/frontmatter/preface.html
Supports
- Records the original IEEE Std 1003.1-1988 origin of the POSIX name and interface family.
- https://www.kernel.org/doc/html/v6.6/filesystems/ext2.html
Supports
- Records that ext2 was originally released in January 1993 and documents its Unix-style structures.
- https://openzfs.org/wiki/History
Supports
- Records ZFS development beginning in 2001, its 2005 source release, ports, and the 2013 OpenZFS project.
- https://btrfs.readthedocs.io/en/latest/Contributors.html
Supports
- Records Btrfs history from its first 2007 commit through its January 2009 mainline Linux merge.
- https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/managing_file_systems/getting-started-with-xfs_managing-file-systems
Supports
- Describes XFS allocation groups, extent-based storage, metadata journaling, growth, and administration.
- https://openzfs.github.io/openzfs-docs/Basic%20Concepts/index.html
Supports
- Explains copy-on-write, pools, datasets, checksums, snapshots, compression, scrub, and resilver behavior.
- https://learn.microsoft.com/en-us/windows-server/storage/file-server/ntfs-overview
Supports
- Describes NTFS as the Windows default with transaction logging, security descriptors, quotas, rich metadata, and compression.
- https://learn.microsoft.com/en-us/windows-server/storage/refs/refs-overview
Supports
- Describes ReFS integrity, resiliency, block cloning, and supported Windows Server storage scenarios.
- https://man7.org/linux/man-pages/man5/proc_pid_fd.5.html
Supports
- Documents the /proc/<pid>/fd directory as one symbolic-link entry per open file descriptor.
- https://github.blog/news-insights/the-library/nodeload2-downloads-reloaded/
Supports
- Describes an operational incident where unclosed file descriptors prevented space reclamation from purged archive caches.
- https://github.blog/news-insights/postmortem-of-last-week-s-fileserver-failure/
Supports
- Documents recovery of corrupted repositories from intact disk snapshots or backups after a fileserver failure, and the need to validate snapshot integrity.
