A backup is performed by a client at a time when a backup server is unable
to process the backup. The client maintains a cache including a root tag
vector and hash entries. The client begins a backup by writing the root
tag vector to a journal file and breaking files into pieces. For each
piece, the client performs a hash and compares the resulting hash to
entries in the cache. If the hash does not match any entries, the client
records a request in the journal file to add the corresponding piece of
data to an archive. After completing the backup, the journal file can be
sent to the server. Before processing the journal file, the server
validates the root tag vector. If the root tag vector is valid, the
server processes each of the requests to add data. Otherwise, the server
discards the journal file.