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
Intro
File Systems Fundamentals
A file system organizes stored data as named objects and defines how software finds, reads, changes, and protects them. Applications work with paths and open files. The operating system translates those requests through a common interface to a specific file system implementation and its backing storage.
A disk or solid-state drive supplies addressable storage blocks. It does not supply filenames, directories, ownership, or crash recovery. A file system adds those structures. Some file systems use local block devices. Others obtain data from a remote server, distributed cluster, memory, or a kernel-generated view such as /proc.
The path from a name to data
Consider an application opening /srv/reports/q2.csv on Linux. An absolute path starts at the process root. The kernel resolves each component in order: srv, then reports, then q2.csv. Every intermediate component must identify a searchable directory. A relative path starts at the process working directory, or at a directory file descriptor for interfaces that accept one.
Linux sends the request through the Virtual File System, or VFS. VFS provides one system-call interface while ext4, XFS, Btrfs, network file systems, and pseudo file systems implement different storage behavior. The directory-entry cache helps pathname lookup. A directory entry connects a name to an inode, and an inode represents the file object and its metadata. Opening the result creates a kernel file object and places a file descriptor in the process table. Later reads and writes use that descriptor instead of resolving the original path again.
This distinction explains several behaviors that otherwise appear surprising. Renaming an open file does not invalidate its descriptor. Removing one directory entry does not necessarily destroy the file because another hard link or an open file description can still refer to the same object. A symbolic link stores a pathname and usually triggers another round of path resolution.
Continue the course
This section is part of the paid course.
See pricing to subscribe, or log in if you already have access.
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/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.
