Perform simple incremental backup using rdiff-backup utility.
Required software
Install rdiff-backup utility.
$ sudo apt-get install rdiff-backup
Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: libjs-sphinxdoc libjs-underscore librsync1 python-pylibacl python-pyxattr Suggested packages: python-pylibacl-dbg python-pyxattr-dbg The following NEW packages will be installed: libjs-sphinxdoc libjs-underscore librsync1 python-pylibacl python-pyxattr rdiff-backup 0 upgraded, 6 newly installed, 0 to remove and 28 not upgraded. Need to get 386 kB of archives. After this operation, 1,500 kB of additional disk space will be used. Do you want to continue? [Y/n] [...]
Perform incremental backup on local machine
Perform incremental backup of the blog.sleeplessbeastie.eu
directory to /srv/backup/blog.sleeplessbeastie.eu
, but exclude _site
directory with generated content.
$ rdiff-backup --exclude blog.sleeplessbeastie.eu/_site blog.sleeplessbeastie.eu /srv/backup/blog.sleeplessbeastie.eu
Perform incremental backup to remote location.
$ rdiff-backup --exclude blog.sleeplessbeastie.eu/_site blog.sleeplessbeastie.eu backup.example.org::/srv/backup/blog.sleeplessbeastie.eu
Perform incremental backup, display modified files and detailed statistics at the end.
$ rdiff-backup --exclude blog.sleeplessbeastie.eu/_site --verbosity 5 --print-statistics blog.sleeplessbeastie.eu /srv/backup/blog.sleeplessbeastie.eu
Using rdiff-backup version 1.2.8 POSIX ACLs not supported by filesystem at blog.sleeplessbeastie.eu Unable to import win32security module. Windows ACLs not supported by filesystem at blog.sleeplessbeastie.eu escape_dos_devices not required by filesystem at blog.sleeplessbeastie.eu ----------------------------------------------------------------- Detected abilities for source (read only) file system: Access control lists Off Extended attributes On Windows access control lists Off Case sensitivity On Escape DOS devices Off Escape trailing spaces Off Mac OS X style resource forks Off Mac OS X Finder information Off ----------------------------------------------------------------- POSIX ACLs not supported by filesystem at /srv/backup/blog.sleeplessbeastie.eu/rdiff-backup-data/rdiff-backup.tmp.0 Unable to import win32security module. Windows ACLs not supported by filesystem at /srv/backup/blog.sleeplessbeastie.eu/rdiff-backup-data/rdiff-backup.tmp.0 escape_dos_devices not required by filesystem at /srv/backup/blog.sleeplessbeastie.eu/rdiff-backup-data/rdiff-backup.tmp.0 ----------------------------------------------------------------- Detected abilities for destination (read/write) file system: Ownership changing Off Hard linking On fsync() directories On Directory inc permissions On High-bit permissions On Symlink permissions Off Extended filenames On Windows reserved filenames Off Access control lists Off Extended attributes On Windows access control lists Off Case sensitivity On Escape DOS devices Off Escape trailing spaces Off Mac OS X style resource forks Off Mac OS X Finder information Off ----------------------------------------------------------------- Backup: must_escape_dos_devices = 0 Starting increment operation blog.sleeplessbeastie.eu to /srv/backup/blog.sleeplessbeastie.eu Processing changed file . Incrementing mirror file /srv/backup/blog.sleeplessbeastie.eu Processing changed file _posts Incrementing mirror file /srv/backup/blog.sleeplessbeastie.eu/_posts Processing changed file _posts/.2018-09-12-how-to-perform-incremental-backup-using-rdiff-backup.html.swp Incrementing mirror file /srv/backup/blog.sleeplessbeastie.eu/_posts/.2018-09-12-how-to-perform-incremental-backup-using-rdiff-backup.html.swp Processing changed file _posts/2018-09-12-how-to-perform-incremental-backup-using-rdiff-backup.html Incrementing mirror file /srv/backup/blog.sleeplessbeastie.eu/_posts/2018-09-12-how-to-perform-incremental-backup-using-rdiff-backup.html --------------[ Session statistics ]-------------- StartTime 1519208194.00 (Wed Feb 21 10:16:34 2018) EndTime 1519208196.31 (Wed Feb 21 10:16:36 2018) ElapsedTime 2.31 (2.31 seconds) SourceFiles 4122 SourceFileSize 321298360 (306 MB) MirrorFiles 4122 MirrorFileSize 321298180 (306 MB) NewFiles 0 NewFileSize 0 (0 bytes) DeletedFiles 0 DeletedFileSize 0 (0 bytes) ChangedFiles 4 ChangedSourceSize 13850 (13.5 KB) ChangedMirrorSize 13670 (13.3 KB) IncrementFiles 4 IncrementFileSize 858 (858 bytes) TotalDestinationSizeChange 1038 (1.01 KB) Errors 0 --------------------------------------------------
Verify current data in repository.
$ rdiff-backup --verify-at-time now /srv/backup/blog.sleeplessbeastie.eu
Every file verified successfully.
List incremental backups in repository.
$ rdiff-backup --list-increments /srv/backup/blog.sleeplessbeastie.eu
Found 2 increments: increments.2018-02-21T10:13:59Z.dir Wed Feb 21 10:13:59 2018 increments.2018-02-21T10:16:34Z.dir Wed Feb 21 10:16:34 2018 Current mirror: Wed Feb 21 10:21:56 2018
List files in the most recent backup.
$ rdiff-backup --list-at-time now /srv/backup/blog.sleeplessbeastie.eu
. .git .git/COMMIT_EDITMSG .git/HEAD .git/branches .git/config .git/description .git/hooks [...] atom.xml favicon.ico favicon.png feed.xml humans.txt index.html robots.txt search search/data.js search/data.json search/index.html search_words.sh sitemap.xml tags tags/index.html tracking tracking/index.html
List files modified since given time.
$ rdiff-backup --list-changed-since "2018-02-21T10:13:59" /srv/backup/blog.sleeplessbeastie.eu
changed _posts changed _posts/.2018-09-12-how-to-perform-incremental-backup-using-rdiff-backup.html.swp changed _posts/2018-09-12-how-to-perform-incremental-backup-using-rdiff-backup.html
Compare current state of the directory with a most recent backup.
$ rdiff-backup --exclude blog.sleeplessbeastie.eu/_site --compare-at-time now blog.sleeplessbeastie.eu /srv/backup/blog.sleeplessbeastie.eu
changed: _posts changed: _posts/.2018-09-12-how-to-perform-incremental-backup-using-rdiff-backup.html.swp changed: _posts/2018-09-12-how-to-perform-incremental-backup-using-rdiff-backup.html
Restore backup from specific point in time.
$ rdiff-backup --restore "2018-02-21T10:13:59Z" /srv/backup/blog.sleeplessbeastie.eu /home/milosz/blog.sleeplessbeastie.eu/
Force restore backup from specific point in time.
$ rdiff-backup --force --restore "2018-02-21T10:13:59Z" /srv/backup/blog.sleeplessbeastie.eu /home/milosz/blog.sleeplessbeastie.eu/
Restore most recent backup.
$ rdiff-backup --restore now /srv/backup/blog.sleeplessbeastie.eu /home/milosz/blog.sleeplessbeastie.eu/
Restore specific file.
$ rdiff-backup --restore now /srv/backup/blog.sleeplessbeastie.eu/about/index.html index-about.html
Remove incremental backups that are older than 1 month.
$ rdiff-backup --remove-older-than 1M /srv/backup/blog.sleeplessbeastie.eu
$ cat << EOF | tee /etc/cron.d/blog-backup 10 04 * * * rdiff-backup --exclude blog.sleeplessbeastie.eu/_site blog.sleeplessbeastie.eu /srv/backup/blog.sleeplessbeastie.eu 30 03 * * * rdiff-backup --remove-older-than 1M /srv/backup/blog.sleeplessbeastie.eu EOF