1. A method for backing up a data block, the method comprising: generating a digital fingerprint for a data block stored in a first data block location in a first storage device using a substantially collision-free algorithm; comparing the digital fingerprint to digital fingerprints stored in a database in a second storage device separate from the first storage device; and if the digital fingerprint does not match one of the stored digital fingerprints: backing up the data block to a third storage device separate from the first storage device; adding to the database the digital fingerprint; and adding to the database the first data block location in association with the digital fingerprint.