Эквивалентная функция экспорта-сравнения librbd - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь использовать 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?

...