Hoist your applications with petardfs
The petard filesystem is designed to produce only errors -- but you can stipulate what conditions generate the errors and what those errors should be. That makes petardfs useful for system and unit testing -- for example, making sure that an application gives a sane error message if it fails to open a file, or if there is a read error at byte 5000 of a file.
Petardfs uses Filesystem in Userspace (FUSE) to allow easy setup without requiring a kernel recompile or new kernel modules. In normal configuration you specify a "base filesystem" and give a mountpoint -- for example, saying that /home/ben/foo is the base filesystem and mounting the filesystem at /home/ben/petard-foo. Without any other configuration, any files in foo will be available in petard-foo unchanged. Petardfs uses an XML configuration file to tell which files to report errors for and what error code to use. For example, foo.txt can have an EIO error at bytes 34 to 37.
Building and installation of petardfs follows the conventional configure, make, make install procedure.