1. A computer-implemented method comprising: accessing a file maintained by a file system that manages access to a block device, wherein the file includes a plurality of active blocks, wherein each of the plurality of active blocks is associated with a respective logical block number and a respective block index that represents a position of the block relative to other blocks in the file; assigning a file index to the file; analyzing the file to determine a maximum block index and a minimum block index included in the file; identifying runs of blocks in the plurality of active blocks, wherein each run of blocks includes a respective start block, wherein some runs of blocks include multiple blocks that are adjacent to one another in the file, wherein the logical block numbers associated with the adjacent blocks increase by one; for each of the runs of blocks, identifying a respective length of the run of blocks; for each start block, generating a file map entry for each start block, wherein generating the file map entry comprises: compressing the file index; compressing the block index associated with the start block based on the maximum block index and minimum block index; and compressing the length of the run of blocks associated with the start block; and storing the file map entries in a file map; and further comprising: loading the file map, during an initialization process associated with the block device; and for each N-th file map entry included in the file map: storing a pointer to the N-th file map entry in a data structure, wherein N is an integer greater than 1 and wherein the pointer to the N-th file map entry is stored at a location based on the logical block number associated with the N-th file map entry divided by N.