btar - Block TAR
Tar-compatible archiver which allows arbitrary compression and ciphering, redundancy, differential backup, indexed extraction, multicore compression, input and output serialisation, and tolerance to partial archive errors.
Features:
- Single file backup
- Optional indexed access
- Serialisable listing, backup and restore
- Backups (btar files) can be restored with usual unix tools (sh and tar)
- Allows any compression, ciphering, etc. (if you have a program that does so), and still resist partial corruption (-F)
- Can add an erasure code (block XOR of the others) that can protect against one erasure (-R)
- Can do quick incremental backups (rearchive only the files that changed) (-d/-D)
- Can work over a GNU tar output (even indexing it)
- Can be used in pipelines, with little memory usage even for big backup sizes
- Can parallelize the filter operations on any number of processes (compression, ciphering, ...) (-j)
- Can extract parts of the backup filtering (uncompressing, deciphering) only the relevant blocks
- Sending USR1 will show a progress report on stderr (on btar file creation)
- If linked with librsync, will only save deltas of big files on differential backup (-Y)
- The files can be re-filtered (-m) through pipes, not requiring extraction and reachiving.
Problems:
- 1.1.1 is simply in a "works for the me (author)" state. I store my backups *only* with it.
- The incremental backups are only based on mtime.
- Only supports regular files, directories and symlinks. No hard link storage
- A small tool provided (xortest) can recover one full lost block from the btar. But a better tool could be written, for non overlapping in-block small erasures. Maybe based on a ddrescue log file.
Learn how it works - How it compares to other backup tools
Download
Stable version: btar-1.1.1.tar.gz - 62KB - GPLv3+ - ChangeLog
Trunk version: trunk tarball (should be stable, and possibly with fixes after the release)
Use cases
Backup the home with xz compression with 4 cores:
# btar -F xz -j 4 -f /mnt/usbb/backup/myhomebackup.btar -c /home/
Update to a diff backup:
# btar -F xz -j 4 -d /mnt/usbb/backup/myhomebackup.btar \
-f /mnt/usbb/backup/myhomebackup_diff.btar \
-c /home/
Backup the mail using 4 cores with gpg, and add an XOR redundancy. Use gpg-agent or it will ask a password per block.
$ btar -F "gpg2 -se" -j 4 -R -c mail > /mnt/usbb/backup/mymailbackup.btar
Extract only my mail from the home backup made with xz (or whatever it was):
$ btar -x -f /mnt/usbb/backup/myhomebackup.btar 'home/viric/mail/*'
Test that a btar file contents are still the same on disk (although if a file is missing in the btar, it will not report it):
$ btar -T -f /mnt/usbb/backup/myhomebackup.btar | tar d
btar -h
btar 1.1 [e5b0e4f692] Copyright (C) 2011-2012 Lluis Batlle i Rossell
usage: btar [options] [actions]
actions:
-c Create a btar file. Non-options mean directories or files to add.
-x Extract the btar contents to disk.
In this case, non-options mean glob patterns to extract.
-T Extract the btar contents as a tar to stdout.
In this case, non-options mean glob patterns to extract.
-l List the btar index contents.
-L Output the btar index as tar.
-m Mangle filters and block size from stdin to output btar (-f or stdout)).
(none) Make btar file from the standard input data (filter mode).
options only meaningful when creating or filtering:
-b <blocksize> Set the block size in megabytes (default 10MiB)
-d <file> Take the index in the btar file as files already stored
-D <file> Take the index file as files already stored
-f <file> Output file while creating, input while extracting,
or stdin/out if ommitted.
-F <filter> Filter each block through program named 'filter'.
-H Delete files as noted in diff backups, when extracting.
-j <n> Number of blocks to filter in parallel.
-N Skip making an index in the btar, make only blocks.
-R Add a XOR redundancy block.
-U <filter> Filters for the index and deleted list.
-v Output the file names on stderr (on action 'c').
-X <pattern> Add glob exclude pattern.
-Y Create and use rsync signatures in indices for binary diff.
other options:
-G <defilter> Defilter each input block through program named 'filter'.
May be relevant for '-d' when creating/filtering, or extracting.
-V Show traces of what goes on. More V mean more traces.
examples:
tar c /home | btar -b 50 -F xz > /tmp/homebackup.btar
btar -F xz -c -f mydir.btar mydir
btar -d mydir.btar -v -c mydir > mydir2.btar
btar -T 'mydir/m*' < mydir.btar | tar x
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the source distribution for details.
Licence: GPLv3 or later
Author: LluĂs Batlle i Rossell <viric@virictar.name> (without the word tar)