A self healing file system is designed for proactive detection and
containment of faults, errors, and corruptions, in order to enable in
place (online) and non-intrusive recovery. For proactive fault detection,
the file system maintains certain per-block metadata of each file system
block. The per-block metadata includes a redundancy check, and for file
system data blocks, an inode identifier, and an offset of the file system
data block in the file including the file system data block. The
redundancy check is used to detect and mark bad file system blocks. The
inode identifier and offset is used for validating connectivity of the
file system blocks to the inodes, and for tracing bad blocks to files
that contain the bad blocks.