A method for data backup including (a) forming an image of the storage device; (b) for each block to be backed up to the image, generating a hash; (c) for each block stored in the image, storing a hash in a hash table; (c) for each additional block of the storage device to be backed up, generating a hash; (d) sorting all the generated hashes and deleting duplicate hashes; (e) comparing the hashes to identify candidate blocks that might have identical contents with contents of blocks stored in the image; (f) if the hashes are not coincident, then backing up, to the image, contents of unidentified blocks and blocks that do not have identical hashes, and (g) otherwise, storing links in the image instead of the contents of the blocks, (h) after checking all the hashes for those blocks that need to be backed up, writing only unique hashes to the hash table; (h) links for multiple blocks with identical contents point to a single block in the image, (i) the image contains a bitmap of the backup; (j) the bitmap contains indicators for the links that define if a block contains the content or if the block points to another block, (k) also indicators that reflect used and unused blocks such that an indicator whether contents are shared with another block vs. contents are unique to every other block in the image.