A FileSystem is basically a file format for a disk. In order to use the diskspace, you need a way to determine which parts are in use, and where files are located, how they're called and so on. This is what a FileSystem provides. FileSystems lists the many different kinds of FileSystems currently in use.
If part of a FileSystem has been corrupted you need to be able to repair it. Under MicrosoftWindows the stock tool is called ScanDisk. Unix systems call their corresponding tool fsck(8). fsck is automatically run if the FileSystem wasn't properly unmounted or hasn't been checked in a long time (the SuperUser can specify what constitutes a long time).
Microsoft file systems
On a MicrosoftWindows system, Partitions are formatted with the old and aging FAT or the much more modern NTFS FileSystem. A list of Microsoft filesystems:
Linux has full read/write support for FAT32, full read support for NTFS, and limited write support. If you wish to format a file system so that Windows and Linux can both see it, choose FAT32.
Traditional Linux file systems
In contrast, the traditional FileSystem of choice on Linux is Ext2. It is very trusty and rock solid - losing much data from an Ext2 partition is nearly impossible short of a hardware failure. The only problem is that an fsck takes a very long time. On servers that don't get rebooted in months, this is not much of a headache, but Linux is making its way to the desktop, where machines get rebooted frequently. Therefore, a variant that supports journalling was created: Ext3. The next revision of this filesystem, Ext4 is gaining wider acceptance and aims to increase performance when dealing with large files.
Journalling file systems
Journalling file systems keep a log of changes pending completion, so in the event of a crash, they can quickly finish up or undo changes as required to bring the FileSystem back to a consistent state. A full consistency check with fsck crawling the entire disk is then unnecessary. Nevertheless, you should fsck partitions at least every once in a blue moon to ensure that no inconsistencies creep in. The likelihood is low, but better to be safe than sorry.
Network file systems
NetworkFileSystems are another class of FileSystem designed to operate across multiple machines on a network. NFS originally from SunMicrosystems is a very widely used NetworkFileSystem, but recents AndrewFileSystem, OpenAFS and Coda have taken off, partly because of their Kerberos security.
Other file systems
Linux looks at its file-system in the way Unix does: it adopts the concepts of super-block, inode, directory and file in the way Unix uses them:
- The super-block owes its name to its historical heritage, from when the first data block of a disk or partition was used to hold meta-information about the partition itself. The super-block is now detached from the concept of data block, but still is the data structure that holds information about each mounted file-system. The actual data structure in Linux is called struct super_block and hosts various housekeeping information, like mount flags, mount time and device blocksize. The 2.0 kernel keeps a static array of such structures to handle up to 64 mounted file-systems.
- An inode is associated to each file. Such an 'index node' encloses all the information about a named file except its name and its actual data. The owner, group, permissions and access times for a file are stored in its inode, as well as the size of the data it holds, the number of links and other information. The idea of detaching file information from filename and data is what allows to implement hard-links -- and to use the `dot' and `dot-dot' notations for directories without any need to treat them specially. An inode is described in the kernel by a struct inode.
- The directory is a file that associates filenames to inodes. The kernel has no special data strcture to represent a directory, which is treated like a normal file in most situations. Functions specific to each filesystem-type are used to read and modify the contents of a directory independently of the actual layout of its data.
- The file itself is something that is associated to an inode. Usually files are data areas, but they can also be directories, devices, FIFO's or sockets. An 'open file' is described in the Linux kernel by a struct file item; the structure encloses a pointer to the inode representing the file. file structures are created by system calls like open, pipe and socket, and are shared by father and child across fork.
File system that use inodes:
B-Tree file systems