diff-dd

Diff Disk Dump


Keywords
diff-dd, diff, disk, dump, tool, binary-diffing, cli, library, python, python2, python3
License
GPL-3.0
Install
pip install diff-dd==1.0.4

Documentation

Diff Disk Dump

Overview

This program can create diff files of large files or block devices. I write it for creating VM disks diffs.

Install

pip install diff-dd

CLI Usage

Backup examples:

diff-dd --if /backup/full_disk_copy.raw --df /dev/lvm/changed_disk_snapshot --of /backup/diff_disk_copy.ddd
diff-dd --if /backup/full_disk_copy.raw --df /dev/lvm/changed_disk_snapshot > /backup/diff_disk_copy.ddd
diff-dd --if /backup/full_disk_copy.raw --df /dev/lvm/changed_disk_snapshot | gzip > /backup/diff_disk_copy.ddd.gz
diff-dd --if <(zcat /backup/full_disk_copy.raw.gz) --df /dev/lvm/changed_disk_snapshot --of /backup/diff_disk_copy.ddd
zcat /backup/full_disk_copy.raw.gz | ddd --df /dev/lvm/changed_disk_snapshot --of /backup/diff_disk_copy.ddd
cat /dev/lvm/changed_disk_snapshot | diff-dd --if <(zcat /backup/full_disk_copy.raw.gz) --of /backup/diff_disk_copy.ddd
diff-dd --if <(ssh remotehost cat /backup/full_disk_copy.raw) --df <(ssh remote2host cat /dev/lvm/changed_disk_snapshot) | ssh remote3host dd of=/backup/diff_disk_copy.ddd

Restore examples:

diff-dd --mode restore --if /backup/full_disk_copy.raw --df /backup/diff_disk_copy.ddd --of /dev/lvm/disk
diff-dd --mode restore --if <(zcat /backup/full_disk_copy.raw.gz) --df <(zcat /backup/diff_disk_copy.ddd.gz) > /dev/lvm/disk
zcat /backup/full_disk_copy.raw.gz | diff-dd --mode restore --df <(ssh remotehost cat /backup/diff_disk_copy.ddd.gz) | ssh remote2host dd of=/dev/lvm/disk

API Usage

Backup:

from diff_dd import CreateDiff
iffd = open('/backup/full_disk_copy.raw', 'rb')
dffd = open('/dev/lvm/changed_disk_snapshot', 'rb')
offd = open('/backup/diff_disk_copy.ddd', 'wb')

differ = CreateDiff(iffd=iffd, dffd=dffd, offd=offd, block_size=16384)
differ.start()

Restore:

from diff_dd import RestoreDiff
iffd = open('/backup/full_disk_copy.raw', 'rb')
dffd = open('/backup/diff_disk_copy.ddd', 'rb')
offd = open('/dev/lvm/disk', 'wb')

differ_restore = RestoreDiff(iffd=iffd, dffd=dffd, offd=offd, block_size=16384)
differ_restore.start()