Using Model Checking to Find Serious File System Errors Junfeng Yang, Paul Twohey, Dawson Engler ∗ Madanlal Musuvathi {junfeng, twohey, engler}@cs.stanford.edu
[email protected] Computer Systems Laboratory Microsoft Research Stanford University One Microsoft Way Stanford, CA 94305, U.S.A. Redmond, WA 98052, U.S.A. Abstract Not only are errors in file systems dangerous, file This paper shows how to use model checking to find system code is simultaneously both difficult to reason serious errors in file systems. Model checking is a for- about and difficult to test. The file system must cor- mal verification technique tuned for finding corner-case rectly recover to an internally consistent state if the sys- errors by comprehensively exploring the state spaces de- tem crashes at any point, regardless of what data is being fined by a system. File systems have two dynamics that mutated, flushed or not flushed to disk, and what invari- make them attractive for such an approach. First, their ants have been violated. Anticipating all possible failures errors are some of the most serious, since they can de- and correctly recovering from them is known to be hard; stroy persistent data and lead to unrecoverable corrup- our results do not contradict this perception. tion. Second, traditional testing needs an impractical, The importance of file system errors has led to the de- exponential number of test cases to check that the sys- velopment of many file system stress test frameworks; tem will recover if it crashes at any point during execu- two good ones are [24, 30]. However, these focus mostly tion.