Operating System Design/File Sys

A file system is a way of organizing information on a physical drive or other media (e.g, RAM) for access. In general, file systems can be divided into several groups:


 * Local file systems ‒ ext2/3, FAT32, NTFS
 * Distributed file systems ‒ NFS, AFS
 * Parrallel or cluster file systems ‒ GFS, PVFS, Lustre

Some current file systems:
 * File Allocation Table (FAT)
 * NTFS
 * ext4
 * JFS
 * BFS
 * HFS
 * ReiserFS

NTFS and FAT are used under Windows, while ext4 and ReiserFS tend to be used by Linux.

A file system may be described by a set of characteristics:
 * Ability to work with huge number of files/directories in a directory (e.g ReiserFS).
 * Large files support ‒ some file systems have 2-4G limit for this. Switching to 64-bits addressing solves the problem.
 * Fragmentation ‒ NTFS quickly becomes fragmented, while ext4 doesn't.
 * Fault tolerance ‒ compare e2fsck runs on dirty ext2 vs logging facilities of ext3 or ReiserFS.
 * Scalability ‒ some file systems have limits on their disk sizes.
 * Use of encryption/compression
 * Charsets support ‒ for example, FAT does not allow use of some symbols in file names, while NTFS does.
 * Long file names ‒ for ext4, 256 chars; FAT16 8+3 chars max

This section discusses the key components to a file system and common problems that an operating system must deal with. It concludes with a discussion about some of the more popular file systems in use today.