1 <?xml version="1.0" encoding="utf-8" ?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6 <meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
7 <title>Brioche Backup</title>
8 <meta name="author" content="Amand Tihon" />
9 <meta name="date" content="Jan 5th, 2008" />
10 <meta name="copyright" content="GNU GPL, see copyright file." />
11 <style type="text/css">
14 :Author: David Goodger (goodger@python.org)
15 :Id: $Id: html4css1.css 5196 2007-06-03 20:25:28Z wiemann $
16 :Copyright: This stylesheet has been placed in the public domain.
18 Default cascading style sheet for the HTML output of Docutils.
20 See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
21 customize this style sheet.
24 /* used to remove borders from tables and images */
25 .borderless, table.borderless td, table.borderless th {
28 table.borderless td, table.borderless th {
29 /* Override padding for "table.docutils td" with "! important".
30 The right padding separates the table cells. */
31 padding: 0 0.5em 0 0 ! important }
34 /* Override more specific margin styles with "! important". */
35 margin-top: 0 ! important }
37 .last, .with-subtitle {
38 margin-bottom: 0 ! important }
44 text-decoration: none ;
51 margin-bottom: 0.5em }
53 /* Uncomment (and remove this text!) to get bold-faced definition list terms
61 div.abstract p.topic-title {
65 div.admonition, div.attention, div.caution, div.danger, div.error,
66 div.hint, div.important, div.note, div.tip, div.warning {
68 border: medium outset ;
71 div.admonition p.admonition-title, div.hint p.admonition-title,
72 div.important p.admonition-title, div.note p.admonition-title,
73 div.tip p.admonition-title {
75 font-family: sans-serif }
77 div.attention p.admonition-title, div.caution p.admonition-title,
78 div.danger p.admonition-title, div.error p.admonition-title,
79 div.warning p.admonition-title {
82 font-family: sans-serif }
84 /* Uncomment (and remove this text!) to get reduced vertical space in
86 div.compound .compound-first, div.compound .compound-middle {
87 margin-bottom: 0.5em }
89 div.compound .compound-last, div.compound .compound-middle {
98 div.dedication p.topic-title {
106 div.footer, div.header {
115 div.line-block div.line-block {
121 margin: 0 0 0.5em 1em ;
122 border: medium outset ;
124 background-color: #ffffee ;
129 div.sidebar p.rubric {
130 font-family: sans-serif ;
133 div.system-messages {
136 div.system-messages h1 {
140 border: medium outset ;
143 div.system-message p.system-message-title {
150 h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
151 h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
169 ol.simple, ul.simple {
173 list-style: decimal }
176 list-style: lower-alpha }
179 list-style: upper-alpha }
182 list-style: lower-roman }
185 list-style: upper-roman }
199 white-space: nowrap }
208 font-family: sans-serif ;
213 font-family: sans-serif ;
225 pre.literal-block, pre.doctest-block {
230 font-family: sans-serif ;
231 font-style: oblique }
233 span.classifier-delimiter {
234 font-family: sans-serif ;
238 font-family: sans-serif }
241 white-space: nowrap }
249 span.section-subtitle {
250 /* font-size relative to parent (h1..h6 element) */
254 border-left: solid 1px gray;
262 margin-bottom: 0.5em }
265 border-left: solid 1px black;
268 table.docutils td, table.docutils th,
269 table.docinfo td, table.docinfo th {
270 padding-left: 0.5em ;
271 padding-right: 0.5em ;
272 vertical-align: top }
274 table.docutils th.field-name, table.docinfo th.docinfo-name {
277 white-space: nowrap ;
280 h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
281 h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
285 list-style-type: none }
290 <div class="document" id="brioche-backup">
291 <h1 class="title">Brioche Backup</h1>
292 <table class="docinfo" frame="void" rules="none">
293 <col class="docinfo-name" />
294 <col class="docinfo-content" />
296 <tr><th class="docinfo-name">Author:</th>
297 <td>Amand Tihon</td></tr>
298 <tr><th class="docinfo-name">Contact:</th>
299 <td><<a class="reference external" href="mailto:amand.tihon@alrj.org">amand.tihon@alrj.org</a>></td></tr>
300 <tr><th class="docinfo-name">Version:</th>
302 <tr><th class="docinfo-name">Date:</th>
303 <td>Jan 5th, 2008</td></tr>
304 <tr><th class="docinfo-name">Copyright:</th>
305 <td>GNU GPL, see copyright file.</td></tr>
308 <!-- HTML version generated with rst2html -t README > README.html -->
309 <div class="section" id="abstract">
311 <p>Brioche is yet another backup shell script. Its main features are</p>
313 <li>Full and differential backups</li>
314 <li>LVM snapshots</li>
315 <li>Xen+paravirt oriented (somehow)</li>
316 <li>Soon: Upload to a distant FTP server.</li>
319 <div class="section" id="rationale">
321 <p>Large numbers of backup solutions are freely available today, but when playing
322 with incremental or differential backups, most of them rely on some filesystem
323 capabilities, like <em>hard-linking</em>. If the only remote location available to
324 store the backups is an FTP server, this is not a solution.
325 Brioche relies on GNU tar's <tt class="docutils literal"><span class="pre">--listed-incremental</span></tt> option to create <em>real</em>
326 differential <a class="footnote-reference" href="#diff" id="id1">[1]</a> archives.</p>
327 <p>A second feature that makes Brioche interresting is the ability to use LVM
328 snapshots. In the case of a Xen setup where the domUs use logical volumes as
329 partitions, Brioche is able to backup everything from the dom0.</p>
330 <table class="docutils footnote" frame="void" id="diff" rules="none">
331 <colgroup><col class="label" /><col /></colgroup>
333 <tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>Each differential backup is based upon the last <em>full</em> backup, unlike
334 incremental, which are based upon the last (full or incremental) backup.</td></tr>
338 <div class="section" id="getting-brioche">
339 <h1>Getting Brioche</h1>
340 <p>You can download the tarball from <a class="reference external" href="http://www.alrj.org/projects/brioche">http://www.alrj.org/projects/brioche</a>
341 or get the latest development version with the following git command:</p>
342 <pre class="literal-block">
343 git clone http://git.alrj.org/brioche.git
346 <div class="section" id="installation">
347 <h1>Installation</h1>
348 <p>Copy the three files <tt class="docutils literal"><span class="pre">brioche</span></tt>, <tt class="docutils literal"><span class="pre">brioche.conf</span></tt> and <tt class="docutils literal"><span class="pre">briochetab</span></tt> where
349 you like, and set the <tt class="docutils literal"><span class="pre">CONFIG_FILE</span></tt> variable in the <tt class="docutils literal"><span class="pre">brioche</span></tt> script
350 accordingly. If needed, run <tt class="docutils literal"><span class="pre">chmod</span> <span class="pre">+x</span> <span class="pre">/path/to/brioche</span></tt>.</p>
352 <div class="section" id="using-brioche">
353 <h1>Using Brioche</h1>
354 <div class="section" id="configuration">
355 <h2>Configuration</h2>
356 <p>Edit the file <tt class="docutils literal"><span class="pre">brioche.conf</span></tt> to suit your needs. Each option is commented
357 inline and will be detailed here.</p>
358 <dl class="docutils">
360 <dd>Full absolute path to the briochetab file. This file describes which logical
361 volumes and partitions must be backed up. Its format is explained in the
362 <a class="reference internal" href="#defining-backups">Defining backups</a> section.</dd>
364 <dd>When the job is done, Brioche will send a summary of the operations by email.
365 You can set it to any value that your <tt class="docutils literal"><span class="pre">mail</span></tt> command understands.</dd>
367 <dl class="docutils" id="repodir">
369 <dd>Brioche will store all the generated archives in this directory.Note that
370 before doing a full backup, Brioche will move all previous archives into an
371 "undo" subdirectory, which will be removed only if the backup is successful.
372 Make sure there's enough free space on the device where REPODIR is located.</dd>
374 <dd>The report email will include a warning if the space used on REPODIR goes
375 beyond the given threshold. The value must be an integer.</dd>
377 <dd>This directive allows to specify the compression method to apply to the
378 archives. Possible values are "gz", "bz2" and "lzma". <strong>Warning</strong> : lzma may
379 not be available with older versions of GNU tar.</dd>
381 <dd>Additionnal options that you may want to pass to tar. A typical value could
382 be <tt class="docutils literal"><span class="pre">"--one-filesystem</span> <span class="pre">-S"</span></tt>. The first option will skip all other mointpoints
383 (very usefull if you have /dev, /proc, /sys or REPODIR mounted under a device
384 that must be archived). The second one will try to deal with sparse files.</dd>
385 <dt>SNAPSHOT_MOUNTPOINT</dt>
386 <dd>Sets the directory where the temporary LVM snapshots must be mounted.</dd>
387 <dt>SNAPSHOT_NAME</dt>
388 <dd>The name to use for the snapshot volumes.</dd>
389 <dt>SNAPSHOT_SIZE</dt>
390 <dd>Set the size of the snapshot volume. The same suffix than for lvcreate(8)
396 <div class="section" id="defining-backups">
397 <h2>Defining backups</h2>
398 <p>The backups are defined in the file <tt class="docutils literal"><span class="pre">birochetab</span></tt>. Here is a typical example
399 for a Xen config where cottman is the dom0 and syrtis, kadarin, valeron are
401 <pre class="literal-block">
402 # Partition or LV Snapshot Host name Volume name
403 # ---------------------------------------------------------------
407 /dev/vg00/valeron-root yes valeron root
409 /dev/vg00/kadarin-root yes kadarin root
410 /dev/vg00/kadarin-home yes kadarin home
412 /dev/vg00/syrtis-root yes syrtis root
413 /dev/vg00/syrtis-home yes syrtis home
414 /dev/vg00/syrtis-usr yes syrtis usr
415 /dev/vg00/syrtis-var yes syrtis var
417 <p>Blank lines, or lines beginning with # are ignored.</p>
418 <p>The first column defines the directory or logical volume to backup. In this
419 example,the first two lines are plain directories, while the other ones point
421 <p>The second column specify if the backup should be taken from an LVM snapshot or
422 not. It <strong>must</strong> be set to "no" for the backup of a directory and to "yes" for
423 the backup of a logical volume.</p>
424 <p>The last two columns are more or less cosmetic, and define where the archive
425 files will be stored, and how they'll be named. The destination directory will
426 be created under the <a class="reference internal" href="#repodir">REPODIR</a>, and its name will be the value on the third
427 column. Inside this directory, archive files will be named from the value given
428 in the fourth column. For instance, a full and a differential backup for
429 valeron would lead to the following structure</p>
430 <pre class="literal-block">
431 user:/REPODIR$ ls -l valeron/
433 -rw-r--r-- 1 root root 363545613 Jan 3 03:10 root.full.20090103.tar.bz2
434 -rw-r--r-- 1 root root 504722 Jan 3 03:10 root.full.snar
435 -rw-r--r-- 1 root root 504725 Jan 4 04:06 root.incr.20090104.snar
436 -rw-r--r-- 1 root root 160542 Jan 4 04:06 root.incr.20090104.tar.bz2
439 <div class="section" id="running-brioche">
440 <h2>Running Brioche</h2>
441 <p>Brioche understands the following arguments:</p>
442 <table class="docutils option-list" frame="void" rules="none">
443 <col class="option" />
444 <col class="description" />
446 <tr><td class="option-group">
447 <kbd><span class="option">-f</span>, <span class="option">--full</span></kbd></td>
448 <td>Do a full backup (by default, brioche will do a differential).</td></tr>
449 <tr><td class="option-group">
450 <kbd><span class="option">-h</span>, <span class="option">--help</span></kbd></td>
451 <td>Show a very limited help.</td></tr>
454 <p>When everything is ready, execute the <tt class="docutils literal"><span class="pre">brioche</span></tt> script as root. The
455 script is pretty verbose, so don't panic if you see lots of lines scrolling in
456 your terminal. By default, Brioche will try to make differential backups, but
457 will gracefully fall back and do a full backup if none is available.</p>
458 <p>If all is fine, it can be added in the system crontab. Here's a suggestion for
459 weekly full backup on Sunday, with differential during the weekdays</p>
460 <pre class="literal-block">
461 # Daily incremental backup
462 30 3 * * 1-6 /usr/local/bin/brioche > /var/log/backup.`date "+%a"`.log 2>&1
463 # Weekly full backup on Sunday
464 30 3 * * 0 /usr/local/bin/brioche -f > /var/log/backup.`date "+%a"`.log 2>&1
466 <p>The output of the script will be saved in /var/log/backup.DOW.log with DOW
467 being the abbreviated day of the week (see man date(1) for the format).</p>
470 <div class="section" id="bug-reporting">
471 <h1>Bug reporting</h1>
472 <p>There's no bugtracker for this project, your bug reports should be sent to the
473 author : Amand Tihon <<a class="reference external" href="mailto:amand.tihon@alrj.org">amand.tihon@alrj.org</a>>. Please include as much information
474 as possible in your report.</p>
476 <div class="section" id="references">
479 <li>GNU tar documentation : <a class="reference external" href="http://www.gnu.org/software/tar/manual/">http://www.gnu.org/software/tar/manual/</a></li>
480 <li>LVM documentation and links : <a class="reference external" href="http://sourceware.org/lvm2/">http://sourceware.org/lvm2/</a></li>
485 <hr class="footer" />
486 Generated on: 2009-01-05 19:27 UTC.