Я пытаюсь использовать librbd
для репликации функции rbd export-diff
. У меня есть следующий python код:
offsets = []
extents = []
def iter_cb(offset, length, exists):
if exists:
offsets.append(offset)
extents.append(length)
image.diff_iterate(0, image.size(), None, iter_cb)
with open(os.path.join(BACKUP_DIR, 'test.img'), 'wb') as f:
for offset, extent in zip(offsets, extents):
f.write(image.read(offset, extent))
f.close()
Я могу записать в файл, но файл больше, чем файл, созданный rbd export-diff
. Однако длина суммы extents
равна 144629760
, что соответствует показанию rbd diff rbd/test | awk '{ SUM += $2 } END { print SUM }'
.
Так почему же, когда я сохраняю все различия в файле, он больше export-diff
?
Я могу достаточно легко скопировать export
, просто записав image.read(0, image.size())
в файл, но это включает все нули и является истинным размером изображения. Кроме того, если я запишу разность, которая появляется при запуске этой функции, для нового изображения того же размера, оно будет читаться правильно.
Как мне эмулировать rbd export-diff
в librbd
?