Diff - integrity local import


For critical applications, it may be required to keep a backup on a fully independent
storage solution while keeping the advantage of ceph like diff import/export. When
re-applying an rbd-diff, there is no guarantee it has not been corrupted in the way,
either due to transport error, storage failure, neutrinos, whatever. There is also
currently no way to be sure the diff is being applied on the right image, especially
when dealing with renamed images neither to locally rebuild an image from a collection
of incremental diffs.


Interested Parties

Current Status

Diff format embeds "from" and "to" snapshots but not any source image id.
There is no checksumming inside the diff, if the file is somehow corrupted, there is no way to detect it.
It is possible to export a full image or a diff but there is currently no way to incrementally rebuild an image out of cluster.

Detailed Description

Work items

Coding tasks

  1. store original image "id" in diff
  2. store original image "id" from diff in destination image for check on later import
  3. append a crc32 at the end of each data chunk
  4. extend "rbd" command to support importing diff over to local file

Build / release tasks

  1. Task 1
  2. Task 2
  3. Task 3

Documentation tasks

  1. New rbd command
  2. New integrity checks
  3. Task 3

Deprecation tasks

  1. Task 1
  2. Task 2
  3. Task 3