pachy is a simple Python script to create incremental backups using rsync and xdelta3:
- By using rsync backups require little bandwidth;
- By using xdelta3, incremental backups use little space;
- The codebase is very small; thus easy to adapt to your own needs.
You will need Python's setuptools; xz-utils rsync and xdelta3. On Debian Linux, execute:
$ apt-get install python-setuptools rsync xdelta3 xz-utils
Then, to install pachy:
$ easy_install pachy
In this example we will backup our ~/Document
folder that contains:
.
├── dir1
│ ├── document2
│ └── document3
└── example1
To create a backup of ~/Documents
to /mnt/disk/Backup
, execute:
$ pachy ~/Documents /mnt/disk/Backup
INFO:root:0. Checking set-up
INFO:root:1. Running rsync
sending incremental file list
./
example1
dir1/
dir1/document2
dir1/document3
sent 237 bytes received 76 bytes 626.00 bytes/sec
total size is 0 speedup is 0.00
INFO:root:2. Checking for changes
INFO:root:3. Creating archive
INFO:root:4. Cleaning up
After some work we changed the file example1
and deleted document2
.
To create an incremental backup, just run the same command a second time.
Only changes will be copied.
$ pachy ~/Documents /mnt/disk/Backup
INFO:root:0. Checking set-up
INFO:root:1. Running rsync
sending incremental file list
./
example1
dir1/
deleting dir1/document2
sent 161 bytes received 38 bytes 398.00 bytes/sec
total size is 9 speedup is 0.05
INFO:root:2. Checking for changes
INFO:root:3. Creating archive
INFO:root:4. Cleaning up
If you look at /mnt/disk/Backup
you will find it contains:
.
├── deltas
│ └── [email protected]
└── mirror
├── dir1
│ └── document3
└── example1
The mirror
subdirectory is an exact copy of the ~/Documents
folder.
Under deltas
there is for each incremental backup a .tar.xz
archive.
We can uncompress it with
$ tar xJf [email protected]
We see it contains:
.
├── changed
│ └── example1.xdelta3
└── deleted
└── dir1
└── document2
Under the deleted
folder are all the files that were deleted.
Under changed
are the xdelta3 differences of the changed file.
To restore the old example1
to example1.restored
, run:
$ xdelta3 -d -s example1 example1.xdelta3 example1.restored
To create daily backups of a full server, execute:
$ crontab -e
and add the following line
@daily pachy my-server.com:/ /backups/my-server
This will create a full backup of all files. If you want to exclude
some files, you can create a .pachy-filter
file in the root of the
server with, for instance:
- /proc
- /dev
- /sys
- /tmp
- /var/tmp
- /var/run
- /var/cache