Requirements for the program I imagine:
tar | duplicity | libchop | rsync | dar | btar | btar some day | |
---|---|---|---|---|---|---|---|
Should look simple enough | Yes | No (python) | No (complex implementation) | Yes | No (own format) | Yes (6660 C lines, can be unpacked with tar) | Yes (could still be unpacked with tar) |
Allows incremental backups | GNU tar yes, with special index apart. Only with full files. | Yes, with rolling checksum. | Yes (content-based) | Yes, but not multiple snapshots | Yes, but only with full files | Yes, using the index and optionally with librsync for big file deltas | Yes, using the index and optionally with librsync for big file deltas |
Verifiable integrity | No data checksum | No | Yes (content-based) | No (no checkums in the backup) | Yes (but needs ciphering password in the host) | Using filters, like signing | Using filters, like signing |
Allow ciphering or compressing | Yes, any | Some | Some | No (only zlib on transfer) | Some (per file) | Yes, any | Yes, any |
Easy remote incremental backups | GNU tar yes, with special snapshot indexes | Yes (with cache) | Yes | Yes (no snapshots) | Yes, with its indexes | Yes, passing the index | Yes, passing the index |
Indexed listing or retrieving | No | Yes (with cache) | Yes | Yes | Yes | Yes | Yes |
Serialisation (to a stream, from a stream) | Yes | No | No? | No | No | Yes | Yes |
Can use multicores | No | No | Could be | No | No | Only making the backup | Yes |
Resist partial data loss/manipulation. | Only if not compressed | No | Index plays a major role. Then, there is the db. | Yes | Yes? | Yes | Yes |
Redundancy | No | No | No | No | No | Yes (inter-block parity) | Yes (inter-block parity) |