]> arthur.barton.de Git - bup.git/blob - README.md
Update base_version to 0.34~ for 0.34 development
[bup.git] / README.md
1 bup: It backs things up
2 =======================
3
4 bup is a program that backs things up.  It's short for "backup." Can you
5 believe that nobody else has named an open source program "bup" after all
6 this time?  Me neither.
7
8 Despite its unassuming name, bup is pretty cool.  To give you an idea of
9 just how cool it is, I wrote you this poem:
10
11                              Bup is teh awesome
12                           What rhymes with awesome?
13                             I guess maybe possum
14                            But that's irrelevant.
15                         
16 Hmm.  Did that help?  Maybe prose is more useful after all.
17
18
19 Reasons bup is awesome
20 ----------------------
21
22 bup has a few advantages over other backup software:
23
24  - It uses a rolling checksum algorithm (similar to rsync) to split large
25    files into chunks.  The most useful result of this is you can backup huge
26    virtual machine (VM) disk images, databases, and XML files incrementally,
27    even though they're typically all in one huge file, and not use tons of
28    disk space for multiple versions.
29    
30  - It uses the packfile format from git (the open source version control
31    system), so you can access the stored data even if you don't like bup's
32    user interface.
33    
34  - Unlike git, it writes packfiles *directly* (instead of having a separate
35    garbage collection / repacking stage) so it's fast even with gratuitously
36    huge amounts of data.  bup's improved index formats also allow you to
37    track far more filenames than git (millions) and keep track of far more
38    objects (hundreds or thousands of gigabytes).
39    
40  - Data is "automagically" shared between incremental backups without having
41    to know which backup is based on which other one - even if the backups
42    are made from two different computers that don't even know about each
43    other.  You just tell bup to back stuff up, and it saves only the minimum
44    amount of data needed.
45    
46  - You can back up directly to a remote bup server, without needing tons of
47    temporary disk space on the computer being backed up.  And if your backup
48    is interrupted halfway through, the next run will pick up where you left
49    off.  And it's easy to set up a bup server: just install bup on any
50    machine where you have ssh access.
51    
52  - Bup can use "par2" redundancy to recover corrupted backups even if your
53    disk has undetected bad sectors.
54    
55  - Even when a backup is incremental, you don't have to worry about
56    restoring the full backup, then each of the incrementals in turn; an
57    incremental backup *acts* as if it's a full backup, it just takes less
58    disk space.
59    
60  - You can mount your bup repository as a FUSE filesystem and access the
61    content that way, and even export it over Samba.
62    
63  - It's written in python (with some C parts to make it faster) so it's easy
64    for you to extend and maintain.
65
66
67 Reasons you might want to avoid bup
68 -----------------------------------
69
70  - It's not remotely as well tested as something like tar, so it's
71    more likely to eat your data.  It's also missing some
72    probably-critical features, though fewer than it used to be.
73    
74  - It requires python >= 2.6, a C compiler, and an installed git
75    version >= 1.5.6.  It also requires par2 if you want fsck to be
76    able to generate the information needed to recover from some types
77    of corruption.
78  
79  - It currently only works on Linux, FreeBSD, NetBSD, OS X >= 10.4,
80    Solaris, or Windows (with Cygwin, and maybe with WSL).  Patches to
81    support other platforms are welcome.
82
83  - Any items in "Things that are stupid" below.
84
85
86 Notable changes introduced by a release
87 =======================================
88
89  - <a href="note/0.29.2-from-0.29.1.md">Changes in 0.29.2 as compared to 0.29.1</a>
90  - <a href="note/0.29.1-from-0.29.md">Changes in 0.29.1 as compared to 0.29</a>
91  - <a href="note/0.29-from-0.28.1.md">Changes in 0.29 as compared to 0.28.1</a>
92  - <a href="note/0.28.1-from-0.28.md">Changes in 0.28.1 as compared to 0.28</a>
93  - <a href="note/0.28-from-0.27.1.md">Changes in 0.28 as compared to 0.27.1</a>
94  - <a href="note/0.27.1-from-0.27.md">Changes in 0.27.1 as compared to 0.27</a>
95
96
97 Getting started
98 ===============
99
100 From source
101 -----------
102
103  - Check out the bup source code using git:
104  
105         git clone https://github.com/bup/bup
106
107  - This will leave you on the master branch, which is perfect if you
108    would like to help with development, but if you'd just like to use
109    bup, please check out the latest stable release like this:
110
111         git checkout 0.29.1
112
113    You can see the latest stable release here:
114    https://github.com/bup/bup/releases.
115
116  - Install the required python libraries (including the development
117    libraries).
118
119    On very recent Debian/Ubuntu versions, this may be sufficient (run
120    as root):
121
122             apt-get build-dep bup
123
124    Otherwise try this (substitute python2.6-dev if you have an older
125    system):
126
127             apt-get install python2.7-dev python-fuse
128             apt-get install python-pyxattr python-pylibacl
129             apt-get install linux-libc-dev
130             apt-get install acl attr
131             apt-get install python-tornado # optional
132
133    On CentOS (for CentOS 6, at least), this should be sufficient (run
134    as root):
135
136             yum groupinstall "Development Tools"
137             yum install python python-devel
138             yum install fuse-python pyxattr pylibacl
139             yum install perl-Time-HiRes
140
141    In addition to the default CentOS repositories, you may need to add
142    RPMForge (for fuse-python) and EPEL (for pyxattr and pylibacl).
143
144    On Cygwin, install python, make, rsync, and gcc4.
145
146    If you would like to use the optional bup web server on systems
147    without a tornado package, you may want to try this:
148
149             pip install tornado
150
151  - Build the python module and symlinks:
152
153         make
154         
155  - Run the tests:
156  
157         make long-check
158
159     or if you're in a bit more of a hurry:
160
161         make check
162         
163     The tests should pass.  If they don't pass for you, stop here and
164     send an email to bup-list@googlegroups.com.  Though if there are
165     symbolic links along the current working directory path, the tests
166     may fail.  Running something like this before "make test" should
167     sidestep the problem:
168
169         cd "$(pwd -P)"
170
171  - You can install bup via "make install", and override the default
172    destination with DESTDIR and PREFIX.
173
174    Files are normally installed to "$DESTDIR/$PREFIX" where DESTDIR is
175    empty by default, and PREFIX is set to /usr/local.  So if you wanted to
176    install bup to /opt/bup, you might do something like this:
177
178         make install DESTDIR=/opt/bup PREFIX=''
179
180  - The Python executable that bup will use is chosen by ./configure,
181    which will search for a reasonable version unless PYTHON is set in
182    the environment, in which case, bup will use that path.  You can
183    see which Python executable was chosen by looking at the
184    configure output, or examining cmd/python-cmd.sh, and you can
185    change the selection by re-running ./configure.
186
187 From binary packages
188 --------------------
189
190 Binary packages of bup are known to be built for the following OSes:
191
192  - Debian:
193     http://packages.debian.org/search?searchon=names&keywords=bup
194  - Ubuntu:
195     http://packages.ubuntu.com/search?searchon=names&keywords=bup
196  - pkgsrc (NetBSD, Dragonfly, and others)
197     http://pkgsrc.se/sysutils/bup
198     http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/sysutils/bup/
199  - Arch Linux:
200     https://www.archlinux.org/packages/?sort=&q=bup
201  - Fedora:
202     https://apps.fedoraproject.org/packages/bup
203
204
205 Using bup
206 ---------
207
208  - Get help for any bup command:
209
210         bup help
211         bup help init
212         bup help index
213         bup help save
214         bup help restore
215         ...
216
217  - Initialize the default BUP_DIR (~/.bup -- you can choose another by
218    either specifying `bup -d DIR ...` or setting the `BUP_DIR`
219    environment variable for a command):
220
221         bup init
222
223  - Make a local backup (-v or -vv will increase the verbosity):
224
225         bup index /etc
226         bup save -n local-etc /etc
227
228  - Restore a local backup to ./dest:
229
230         bup restore -C ./dest local-etc/latest/etc
231         ls -l dest/etc
232
233  - Look at how much disk space your backup took:
234
235         du -s ~/.bup
236
237  - Make another backup (which should be mostly identical to the last one;
238    notice that you don't have to *specify* that this backup is incremental,
239    it just saves space automatically):
240
241         bup index /etc
242         bup save -n local-etc /etc
243
244  - Look how little extra space your second backup used (on top of the first):
245
246         du -s ~/.bup
247
248  - Get a list of your previous backups:
249
250         bup ls local-etc
251
252  - Restore your first backup again:
253
254         bup restore -C ./dest-2 local-etc/2013-11-23-11195/etc
255
256  - Make a backup to a remote server which must already have the 'bup' command
257    somewhere in its PATH (see /etc/profile, etc/environment, ~/.profile, or
258    ~/.bashrc), and be accessible via ssh.
259    Make sure to replace SERVERNAME with the actual hostname of your server:
260
261         bup init -r SERVERNAME:path/to/remote-bup-dir
262         bup index /etc
263         bup save -r SERVERNAME:path/to/remote-bup-dir -n local-etc /etc
264
265  - Make a remote backup to ~/.bup on SERVER:
266
267         bup index /etc
268         bup save -r SERVER: -n local-etc /etc
269
270  - See what saves are available in ~/.bup on SERVER:
271
272         bup ls -r SERVER:
273
274  - Restore the remote backup to ./dest:
275
276         bup restore -r SERVER: -C ./dest local-etc/latest/etc
277         ls -l dest/etc
278
279  - Defend your backups from death rays (OK fine, more likely from the
280    occasional bad disk block).  This writes parity information
281    (currently via par2) for all of the existing data so that bup may
282    be able to recover from some amount of repository corruption:
283
284         bup fsck -g
285
286  - Use split/join instead of index/save/restore.  Try making a local
287    backup using tar:
288  
289         tar -cvf - /etc | bup split -n local-etc -vv
290         
291  - Try restoring the tarball:
292  
293         bup join local-etc | tar -tf -
294         
295  - Look at how much disk space your backup took:
296  
297         du -s ~/.bup
298         
299  - Make another tar backup:
300  
301         tar -cvf - /etc | bup split -n local-etc -vv
302         
303  - Look at how little extra space your second backup used on top of
304    the first:
305  
306         du -s ~/.bup
307         
308  - Restore the first tar backup again (the ~1 is git notation for "one
309    older than the most recent"):
310    
311         bup join local-etc~1 | tar -tf -
312  
313  - Get a list of your previous split-based backups:
314  
315         GIT_DIR=~/.bup git log local-etc
316         
317  - Save a tar archive to a remote server (without tar -z to facilitate
318    deduplication):
319    
320         tar -cvf - /etc | bup split -r SERVERNAME: -n local-etc -vv
321  
322  - Restore the archive:
323  
324         bup join -r SERVERNAME: local-etc | tar -tf -
325         
326 That's all there is to it!
327
328
329 Notes on FreeBSD
330 ----------------
331
332 - FreeBSD's default 'make' command doesn't like bup's Makefile. In order to
333   compile the code, run tests and install bup, you need to install GNU Make
334   from the port named 'gmake' and use its executable instead in the commands
335   seen above. (i.e. 'gmake test' runs bup's test suite)
336
337 - Python's development headers are automatically installed with the 'python'
338   port so there's no need to install them separately.
339
340 - To use the 'bup fuse' command, you need to install the fuse kernel module
341   from the 'fusefs-kmod' port in the 'sysutils' section and the libraries from
342   the port named 'py-fusefs' in the 'devel' section.
343
344 - The 'par2' command can be found in the port named 'par2cmdline'.
345
346 - In order to compile the documentation, you need pandoc which can be found in
347   the port named 'hs-pandoc' in the 'textproc' section.
348
349
350 Notes on NetBSD/pkgsrc
351 ----------------------
352
353  - See pkgsrc/sysutils/bup, which should be the most recent stable
354    release and includes man pages.  It also has a reasonable set of
355    dependencies (git, par2, py-fuse-bindings).
356
357  - The "fuse-python" package referred to is hard to locate, and is a
358    separate tarball for the python language binding distributed by the
359    fuse project on sourceforge.  It is available as
360    pkgsrc/filesystems/py-fuse-bindings and on NetBSD 5, "bup fuse"
361    works with it.
362
363  - "bup fuse" presents every directory/file as inode 0.  The directory
364    traversal code ("fts") in NetBSD's libc will interpret this as a
365    cycle and error out, so "ls -R" and "find" will not work.
366
367  - There is no support for ACLs.  If/when some entrprising person
368    fixes this, adjust t/compare-trees.
369
370
371 Notes on Cygwin
372 ---------------
373
374  - There is no support for ACLs.  If/when some enterprising person
375    fixes this, adjust t/compare-trees.
376
377  - In t/test.sh, two tests have been disabled.  These tests check to
378    see that repeated saves produce identical trees and that an
379    intervening index doesn't change the SHA1.  Apparently Cygwin has
380    some unusual behaviors with respect to access times (that probably
381    warrant further investigation).  Possibly related:
382    http://cygwin.com/ml/cygwin/2007-06/msg00436.html
383
384
385 Notes on OS X
386 -------------
387
388  - There is no support for ACLs.  If/when some enterprising person
389    fixes this, adjust t/compare-trees.
390
391
392 How it works
393 ============
394
395 Basic storage:
396 --------------
397
398 bup stores its data in a git-formatted repository.  Unfortunately, git
399 itself doesn't actually behave very well for bup's use case (huge numbers of
400 files, files with huge sizes, retaining file permissions/ownership are
401 important), so we mostly don't use git's *code* except for a few helper
402 programs.  For example, bup has its own git packfile writer written in
403 python.
404
405 Basically, 'bup split' reads the data on stdin (or from files specified on
406 the command line), breaks it into chunks using a rolling checksum (similar to
407 rsync), and saves those chunks into a new git packfile.  There is at least one
408 git packfile per backup.
409
410 When deciding whether to write a particular chunk into the new packfile, bup
411 first checks all the other packfiles that exist to see if they already have that
412 chunk.  If they do, the chunk is skipped.
413
414 git packs come in two parts: the pack itself (*.pack) and the index (*.idx).
415 The index is pretty small, and contains a list of all the objects in the
416 pack.  Thus, when generating a remote backup, we don't have to have a copy
417 of the packfiles from the remote server: the local end just downloads a copy
418 of the server's *index* files, and compares objects against those when
419 generating the new pack, which it sends directly to the server.
420
421 The "-n" option to 'bup split' and 'bup save' is the name of the backup you
422 want to create, but it's actually implemented as a git branch.  So you can
423 do cute things like checkout a particular branch using git, and receive a
424 bunch of chunk files corresponding to the file you split.
425
426 If you use '-b' or '-t' or '-c' instead of '-n', bup split will output a
427 list of blobs, a tree containing that list of blobs, or a commit containing
428 that tree, respectively, to stdout.  You can use this to construct your own
429 scripts that do something with those values.
430
431 The bup index:
432 --------------
433
434 'bup index' walks through your filesystem and updates a file (whose name is,
435 by default, ~/.bup/bupindex) to contain the name, attributes, and an
436 optional git SHA1 (blob id) of each file and directory.
437
438 'bup save' basically just runs the equivalent of 'bup split' a whole bunch
439 of times, once per file in the index, and assembles a git tree
440 that contains all the resulting objects.  Among other things, that makes
441 'git diff' much more useful (compared to splitting a tarball, which is
442 essentially a big binary blob).  However, since bup splits large files into
443 smaller chunks, the resulting tree structure doesn't *exactly* correspond to
444 what git itself would have stored.  Also, the tree format used by 'bup save'
445 will probably change in the future to support storing file ownership, more
446 complex file permissions, and so on.
447
448 If a file has previously been written by 'bup save', then its git blob/tree
449 id is stored in the index.  This lets 'bup save' avoid reading that file to
450 produce future incremental backups, which means it can go *very* fast unless
451 a lot of files have changed.
452
453  
454 Things that are stupid for now but which we'll fix later
455 ========================================================
456
457 Help with any of these problems, or others, is very welcome.  Join the
458 mailing list (see below) if you'd like to help.
459
460  - 'bup save' and 'bup restore' have immature metadata support.
461  
462     On the plus side, they actually do have support now, but it's new,
463     and not remotely as well tested as tar/rsync/whatever's.  However,
464     you have to start somewhere, and as of 0.25, we think it's ready
465     for more general use.  Please let us know if you have any trouble.
466
467     Also, if any strip or graft-style options are specified to 'bup
468     save', then no metadata will be written for the root directory.
469     That's obviously less than ideal.
470
471  - bup is overly optimistic about mmap.  Right now bup just assumes
472    that it can mmap as large a block as it likes, and that mmap will
473    never fail.  Yeah, right... If nothing else, this has failed on
474    32-bit architectures (and 31-bit is even worse -- looking at you,
475    s390).
476
477    To fix this, we might just implement a FakeMmap[1] class that uses
478    normal file IO and handles all of the mmap methods[2] that bup
479    actually calls.  Then we'd swap in one of those whenever mmap
480    fails.
481
482    This would also require implementing some of the methods needed to
483    support "[]" array access, probably at a minimum __getitem__,
484    __setitem__, and __setslice__ [3].
485
486      [1] http://comments.gmane.org/gmane.comp.sysutils.backup.bup/613
487      [2] http://docs.python.org/2/library/mmap.html
488      [3] http://docs.python.org/2/reference/datamodel.html#emulating-container-types
489
490  - 'bup index' is slower than it should be.
491  
492     It's still rather fast: it can iterate through all the filenames on my
493     600,000 file filesystem in a few seconds.  But it still needs to rewrite
494     the entire index file just to add a single filename, which is pretty
495     nasty; it should just leave the new files in a second "extra index" file
496     or something.
497    
498  - bup could use inotify for *really* efficient incremental backups.
499
500     You could even have your system doing "continuous" backups: whenever a
501     file changes, we immediately send an image of it to the server.  We could
502     give the continuous-backup process a really low CPU and I/O priority so
503     you wouldn't even know it was running.
504
505  - bup only has experimental support for pruning old backups.
506
507    While you should now be able to drop old saves and branches with
508    `bup rm`, and reclaim the space occupied by data that's no longer
509    needed by other backups with `bup gc`, these commands are
510    experimental, and should be handled with great care.  See the
511    man pages for more information.
512
513    Unless you want to help test the new commands, one possible
514    workaround is to just start a new BUP_DIR occasionally,
515    i.e. bup-2013, bup-2014...
516
517  - bup has never been tested on anything but Linux, FreeBSD, NetBSD,
518    OS X, and Windows+Cygwin.
519  
520     There's nothing that makes it *inherently* non-portable, though, so
521     that's mostly a matter of someone putting in some effort.  (For a
522     "native" Windows port, the most annoying thing is the absence of ssh in
523     a default Windows installation.)
524     
525  - bup needs better documentation.
526  
527     According to an article about bup in Linux Weekly News
528     (https://lwn.net/Articles/380983/), "it's a bit short on examples and
529     a user guide would be nice."  Documentation is the sort of thing that
530     will never be great unless someone from outside contributes it (since
531     the developers can never remember which parts are hard to understand).
532     
533  - bup is "relatively speedy" and has "pretty good" compression.
534  
535     ...according to the same LWN article.  Clearly neither of those is good
536     enough.  We should have awe-inspiring speed and crazy-good compression. 
537     Must work on that.  Writing more parts in C might help with the speed.
538    
539  - bup has no GUI.
540  
541    Actually, that's not stupid, but you might consider it a
542    limitation.  See the ["Related Projects"](https://bup.github.io/)
543    list for some possible options.
544     
545 More Documentation
546 ==================
547
548 bup has an extensive set of man pages.  Try using 'bup help' to get
549 started, or use 'bup help SUBCOMMAND' for any bup subcommand (like split,
550 join, index, save, etc.) to get details on that command.
551
552 For further technical details, please see ./DESIGN.
553
554
555 How you can help
556 ================
557
558 bup is a work in progress and there are many ways it can still be improved.
559 If you'd like to contribute patches, ideas, or bug reports, please join the
560 bup mailing list.
561
562 You can find the mailing list archives here:
563
564         http://groups.google.com/group/bup-list
565         
566 and you can subscribe by sending a message to:
567
568         bup-list+subscribe@googlegroups.com
569
570 Please see <a href="HACKING">./HACKING</a> for
571 additional information, i.e. how to submit patches (hint - no pull
572 requests), how we handle branches, etc.
573
574
575 Have fun,
576
577 Avery