Patent ID: 8548957

Claim:
A computer-implemented method, comprising: at a computing device: receiving a request for a file associated with an instance of a virtual file system, wherein the requested file has a predefined set of data blocks stored at one or more storage devices communicatively connected to the computing device; in response to the request, identifying, respectively, a set of data block identifiers and a set of parity block identifiers associated with the requested file; retrieving the set of data blocks using the set of data block identifiers from at least one of the storage devices; identifying one or more of the set of data blocks as missing data blocks after failing to retrieve the missing data blocks from the storage devices; for each missing data block: selecting one or more of the set of parity block identifiers as being associated with the missing data block; retrieving one or more parity blocks associated with the selected parity block identifiers from one of the storage devices, wherein a parity block is generated in an inter-file manner by applying a predefined recovery scheme to a predefined number of data blocks, at least one of the data blocks associated with a file different from the requested file, such that any member of the predefined number of data blocks can be computed by applying the predefined recovery scheme to the parity block and other members of the predefined number of data blocks; and computing the missing data block by applying all the predefined recovery scheme to the retrieved parity blocks and at least one of the other retrieved data blocks; reconstructing the requested file using the computed missing data blocks and the other retrieved data blocks associated with the requested file; after reconstructing the requested file: generating a set of new data block identifiers, each new data block identifier of the new data block identifiers corresponding to a respective re-computed missing data block; updating the file's associated metadata to including the set of new data block identifiers; and synchronizing the virtual file system at the computing device with the storage devices, including storing the re-computed missing blocks and the set of new data block identifiers at the respective storage devices.