Chapter 6. File Systems

  • 6.1 The Basics of File Systems

    • 6.1.1 Unix's S5FS

    • 6.1.2 Disk Architecture

      • 6.1.2.1 The Rhinopias Disk Drive

    • 6.1.3 Problems with S5FS

    • 6.1.4 Improving Performance

      • 6.1.4.1 Larger Blocks and Improved Layouts

      • 6.1.4.2 Aggressive Caching and Optimized Writes

    • 6.1.5 Dynamic Inodes

  • 6.2 Crash Resiliency

    • 6.2.1 What Goes Wrong

    • 6.2.2 Dealing with Crashes

      • 6.2.2.1 Soft Updates

      • 6.2.2.2 Journaled File Systems

      • 6.2.2.3 Shadow-Paged File Systems

  • 6.3 Directories and Naming

    • 6.3.1 Directories

      • 6.3.1.1 Hashing

      • 6.3.1.2 B+ Trees

    • 6.3.2 Name-Space Management

      • 6.3.2.1 Multiple Name Spaces

      • 6.3.2.2 Naming Beyond the File System

  • 6.4 Multiple Disks

    • 6.4.1 Redundant Arrays of Inexpensive Disks (RAID)

  • 6.5 Flash Memory

    • 6.5.1 Flash Technology

    • 6.5.2 Flash-Aware File Systems

    • 6.5.3 Augmenting Disk Storage

  • 6.6 Case Studies

    • 6.6.1 FFS

    • 6.6.2 Ext3

    • 6.6.3 Reiser FS

    • 6.6.4 NTFS

    • 6.6.5 WAFL

    • 6.6.6 ZFS

  • 6.7 Conclusions

  • 6.8 Exercises

  • 6.9 References

The purpose of a file system is to provide easy-to-use permanent storage with modest functionality. Unlike database systems with sophisticated search and access capabilities, file systems typically present files as simple, unstructured collections of bytes and provide tree-structured naming. We use files to hold the programs we run, the source code of programs we're developing, documents we're reading or composing, email messages we've sent and received, data we've collected from an experiment, and the like.

There are few aspects of operating systems that aren't affected by file systems. The performance of the ...

Get Operating Systems in Depth now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.