Upstream changes:
* The index format has changed, which will trigger a full index
rebuild on the next index run, making that run more expensive than
usual.
* When given `--xdev`, `bup save` should no longer skip directories
that are explicitly listed on the command line when the directory is
both on a separate filesystem, and a subtree of another path listed
on the command line. Previously `bup save --xdev / /usr` could skip
"/usr" if it was on a separate filesystem from "/".
* Tags along a branch are no longer shown in the branch's directory in
the virtual filesystem (VFS). i.e. given `bup tag special
/foo/latest`, "/foo/special" will no longer be visible via `bup ls`,
`bup web`, `bup fuse`, etc., but the tag will still be available as
"/.tag/special".
* bup now provides experimental `rm` and `gc` subcommands, which
should allow branches and saves to be deleted, and their storage
space reclaimed (assuming nothing else refers to the relevant data).
For the moment, these commands require an `--unsafe` argument and
should be treated accordingly. Although if an attempt to `join` or
`restore` the data you still care about after a `gc` succeeds,
that's a fairly encouraging sign that the commands worked correctly.
(The `t/compare-trees` command in the source tree can be used to
help test before/after results.)
Note that the current `gc` command is probabilistic, which means it
may not remove *all* of the obsolete data from the repository, but
also means that the command should be fairly efficient, even for
large repositories.
* bup may have less impact on the filesystem cache. It now attempts
to leave the cache roughly the way it found it when running a `save`
or `split`.
* A specific Python can be specified at `./configure` time via PYTHON,
i.e. `PYTHON=/some/python ./configure`, and that Python will be
embedded in all of the relevant scripts as an explicit "#!/..." line
during `make install`.
* The way bup writes the data to disk (the packfiles in particular),
should be a bit safer now if there is a coincident power failure or
system crash.
* bup should be more likely to get the data to permanent storage
safely on OS X, which appears to follow a surprising interpretation
of the `fsync()` specification.
* The build system now creates and uses cmd/bup-python which refers to
the `./configure` selected python.
This version primarily fixes bugs, but it includes a few new features,
and hopefully will provide a solid base for 0.28, which may finally
include rm/gc support.
Of note since 0.26:
- Files can be restored sparsely via "restore --sparse". See
bup-sparse(1) for the details. Given that this option is
completely new and affects the data written, some
caution/verification may be wise (i.e. there were bugs in some of
the development revisions that could mangle the output).
- Duplicity backups can be imported via the *experimental* command
"bup import-duplicity". Please exercise caution, and let us know
if you have any trouble.
- Tests can be run in parallel now via "make -j check".
As before, the metadata support is somewhat immature, but it seems to
be holding up fairly well. Though we still need to add better support
for cross-filesystem-type save/restore (which can be too noisy), etc.
This release doesn't include anything as significant as the metadata
support added in 0.25, but it has quite a few bug fixes and internal
improvements, in addition to these notable changes:
- When --meta is specified to the fuse command, instead of generic
data, the originally saved mode, uid, git, atime, mtime, and ctime
will be reported for the archive paths.
- When --browser is specified to the web command, a browser window
will be opened for the repository.
- The -x/--xdev/--one-filesystem options now include the mountpoint
itself in the traversal (matching rsyc, tar, etc.).
- Empty lines in --exclude-rx-from files will be ignored.
Previously they would cause all paths to be excluded.
- The index and restore commands now support --exclude-rx-from.
- Relative filesystem --excludes like "--exclude bar" should now
work. Previously --excludes had to be absolute.
- The drecurse command now supports --exclude-rx and
--exclude-rx-from.
- The --compress option should now work for remote repositories.
- Streams saved via "bup split" will now show up as a single file
named "data" at the top level of the VFS, instead of as a subtree
(i.e. when examined via ftp, ls, and fuse).
- The ls command now supports -n, -A, -F, --file-type,
--numeric-ids, and detailed -l options.
- The save dates are now taken from the corresponding git commit's
author date, not the committer date.
- The tornado server, required by the web command, is no longer
included. See the README for installation instructions.
Note that the metadata support is still somewhat immature. For
example, we still need to add better support for cross-filesystem-type
save/restore (which is too noisy), etc.
Please give this release a try and let us know what's broken. If
you're new to bup, start with the README (and then HACKING if you'd
like to help further):
https://github.com/bup/bup/blob/master/README.mdhttps://github.com/bup/bup/blob/master/HACKINGhttp://anonscm.debian.org/gitweb/?p=users/rlb/bup.git;a=blob;f=README.md;hb=refs/heads/masterhttp://anonscm.debian.org/gitweb/?p=users/rlb/bup.git;a=blob;f=HACKING;hb=refs/heads/master
And although I probably sound like a broken record -- while we expect
bup to work fairly well, I still don't recommend it as your sole
backup strategy. I'd still suggest a periodic
tar/rsync/etc. backstop.
This release includes a veritable ton of work, but the biggest change
is probably the addition of real (YMMV) metadata support, including
hardlinks, and the ability to directly save/restore trees without tar
and split/join. See bup-index(1), bup-save(1), bup-restore(1),
bup-meta(1), bup-xstat(1), and the updated "Using bup" section in the
README.
Note though, that the metadata support really is our first pass, and
there are already things that we know need fixing (i.e. better support
for cross-filesystem-type save/restore (too noisy), etc.). And check
the "Notes on ..." sections in the README for some platform-specific
limitations.
An incomplete list of other notable changes since 0.24b:
- bup will no longer create ~/.bup implicitly; "bup init" is
required.
- "bup split" now supports a compression-level option (-#).
- "bup tag" now supports "-f".
- "bup ls" now supports "-a", "-s", "--human-readable", etc., and
reports more information.
- "bup web" now supports "--human-readable".
- "bup import-rdiff-backup" has been added.
- "bup cat-file" has been added.
- The default "/usr" installation prefix can be overridden via PREFIX.
- Python 2.4 is no longer supported.
And we have at least one (likely minor) known issue:
- *Very* large (i.e. probably greater than MAX_LONG), or negative
filesystem timestamps may not always be handled correctly at the
moment. We'll fix that soon. And related -- some of the tests
may fail on FUSE filesystems.
bup is a program that backs things up. bup has a few advantages
over other backup software:
It uses a rolling checksum algorithm (similar to rsync) to split
large files into chunks. The most useful result of this is you can
backup huge virtual machine (VM) disk images, databases, and XML
files incrementally, even though they're typically all in one huge
file, and not use tons of disk space for multiple versions.
It uses the packfile format from git (the open source version
control system), so you can access the stored data even if you
don't like bup's user interface.
Unlike git, it writes packfiles directly (instead of having a
separate garbage collection / repacking stage) so it's fast even
with gratuitously huge amounts of data. bup's improved index formats
also allow you to track far more filenames than git (millions) and
keep track of far more objects (hundreds or thousands of gigabytes).
Data is "automagically" shared between incremental backups without
having to know which backup is based on which other one - even if
the backups are made from two different computers that don't even
know about each other. You just tell bup to back stuff up, and it
saves only the minimum amount of data needed.
You can back up directly to a remote bup server, without needing
tons of temporary disk space on the computer being backed up. And
if your backup is interrupted halfway through, the next run will
pick up where you left off. And it's easy to set up a bup server:
just install bup on any machine where you have ssh access.
Bup can use "par2" redundancy to recover corrupted backups even if
your disk has undetected bad sectors.
Even when a backup is incremental, you don't have to worry about
restoring the full backup, then each of the incrementals in turn;
an incremental backup acts as if it's a full backup, it just takes
less disk space.
You can mount your bup repository as a FUSE filesystem and access
the content that way, and even export it over Samba.