A Fast File System for UNIX --- McKusick et al., 1984. Summary by Petros Maniatis - Problems with the ``traditional'' UNIX file system: - i-nodes are separated from their data. - blocks are allocated randomly, sometimes resulting in long seeks per 512-byte transfer. - free blocks were organized in a linked list. The list's locality quality deteriorated after use. - First wave of changes: - increase of block size to 1024 - fsck for maintaining reliability - The real FFS had the following enhancements - superblock replicated at well known locations. Each replica is located on a different platter, cylinder or track. - another increase in block size: 4096k - disk is divided in cylinder groups, each containing its own i-nodes, datablocks, block map etc. This ensures that access locality can be maintained to some extent. It also means that some free space needs to be reserved to allow this to happen. - access locality is also maintained through optimal rotational placement of consecutive blocks on disk. The characteristics of the disk are part of the info in the superblock and the cylinder summary info. - allocation policies (local with full info/global with partial info) are used to decide where an i-node or data block will go. - blocks are split into fragments to minimize waste through fragmentation. Fragments can only be used at the end of a file. This means that growing files with trailing fragments might need to copy those fragments into new blocks. instead of a free list, a block map is used. In fact, this is a fragment map. - Additional Functionality, which wasn't coming as a direct response to shortcomings in the traditional Unix File System - long file names - advisory locks. - symlinks - ``atomic'' rename - quotas