1. A method comprising: backing up data blocks by: calculating one or more fingerprints of one or more data blocks; sending the one or more fingerprints to one or more backup servers via a network interface; receiving from the one or more backup servers an indication of which one or more data blocks corresponding to the one or more fingerprints should be sent to the one or more backup servers; and if the indication indicates one or more data blocks to be sent to the one or more backup servers, sending the one or more data blocks to the one or more backup servers via the network interface wherein only nonduplicative data blocks are sent to the one or more backup servers via the network interface; and restoring data blocks by: receiving one or more fingerprints of one or more data blocks from one or more backup servers; upon determining not having the one or more data blocks corresponding to the received one or more fingerprints, sending an indication to the one or more backup servers that the one or more backup servers should send the one or more data blocks; and receiving the one or more data blocks from the one or more backup servers.