1. A method of efficiently checking a filesystem for errors, the filesystem including a set of data blocks and a set of virtual block pointers (VBPs), the set of VBPs arranged in a set of VBP blocks, each VBP block storing a plurality of the VBPs, the method comprising: iterating through the set of VBP blocks and, for each VBP block of the set of VBP blocks: loading that VBP block from the filesystem into cache; loading metadata that describes that VBP block from the filesystem into cache unless the metadata that describes that VBP block is already present in the cache; calculating a check value for that VBP block; comparing the calculated check value for that VBP block with an expected check value for that VBP block as stored in the cached metadata that describes that VBP block; for VBP blocks for which the comparison fails, marking, within a validity bitmap, entries corresponding to all VBPs in those VBP blocks as invalid; and for VBP blocks for which the comparison succeeds, for each owner VBP stored within those VBP blocks, performing a consistency check on that owner VBP, the consistency check yielding a valid or invalid validity result, and marking, within the validity bitmap, an entry corresponding to that owner VBP indicating the validity result from the consistency check for that owner VBP, wherein an owner VBP is a VBP that points directly to a data block rather than to another VBP; after iterating through the set of VBP blocks, traversing a block pointer structure associated with each of a set of files of the filesystem, each block pointer structure pointing to a set of owner VBPs that indicate which data blocks of the filesystem are part of a file; and returning an error based on whether any of the owner VBPs pointed to by any of the traversed block pointer structures correspond to an entry within the validity bitmap marked as invalid.