Table of Contents

Multiplicity

Multiplicity is a very basic frontend to rdiff-backup. Its goal is to provide easy management of multiple independant backup tasks.

Overview

rdiff-backup uses rsync (incremental file tree copies to save bandwidth), hard links (to save backup space), ssh (to transmit data) and a very handy incremental machinery (to allow us to go back in time through our backups).

multiplicity is a script aimed at easing the management of backup jobs. It is a basic frontend to rdiff-backup. It consists of the main scipt and a directory filled with task files. Each task file defines a backup source, a backup target and various other parameters.

Task files

A task file must be in the configuration directory (may be set on the command line and defaults to /etc/multiplicity). It should be named with a .task suffix (read dot task). The following configuration values are accepted in a task file :

Example task file /etc/multiplicity/example.task :

run_this        no
max_age         185D
source_root     /
target_root     /backup
exclude_file    local.exclude
pre             mount -o remount,rw /backup
post            mount -o remount,ro /backup

Carefull, what separates configuration keys from configuration values is a real tabulation \t. I should probably fix this, one day.

Example exclude file /etc/multiplicity/local.exclude :

/var
/proc
/bin
*.log

Global pre and post scripts

There is also the possibility of running global pre and post scripts, i.e scripts that run before and after the task batch. Those are to put in the configuration directory under the names of pre.sh and post.sh.

Example pre.sh :

#!/bin/bash
# This script is run before the backup task batch begins.
# Feel free to customize it

# Dump mysql data to a file
mysqldump --user root --password=pass --all-databases > /var/backups/mysqldata base.dump

Usage

multiplicity accepts the following command-line options :

Download

You can browse multiplicity's source online.

You can get the source using darcs:

darcs get http://sousmonlit.dyndns.org/~niol/repository/multiplicity

Installation (short)

multiplicity may run in any directory, but it was made to be run in the following way :

Installation (my setup)

This section describes my setup. The goal is to backup from ripley to backup1 and backup2.

Password-less SSH logins

The first thing to do is to setup password-less SSH logins for the root user to the hosts you want to backup to (or the hosts you want to backup from, but I'll describe here how to use remote backup hosts to backup to). First create a key pair for this purpose.

# cd
# mkdir .ssh
# chmod 700 .ssh
# ssh-keygen -t rsa -f ~/.ssh/id_rsa
(no passphrase)

If, like me, you have aliases for your hosts and special ports, you may want to use a .ssh/config file :

Host backup1
User backupuser
Port 400
HostName backupfool.foo1.org

Host backup2
User backupuser
Port 400
HostName backupguy.foo2.org

Now, copy your IDs to the remote hosts (repeat for backup2) :

# ssh-copy-id -i ~/.ssh/id_rsa.pub backupuser@backup1
Password:

Now you should be able to login with the local root user on localhost:

# ssh backup1
(no password prompted)
backupuser@backupfool.foo1.org $

Multiplicity configuration

So, here is the plan : I want to backup several selected directories to a dedicated /backup partition and I want to backup only a part of those selected directories to the remote hosts, especially avoiding to send to the remote hosts my passwords and my emails.

I run a mySQL server on ripley. Thus, I use /etc/multiplicity/pre.sh to dump the database contents to a file :

#!/bin/bash
mysqldump --user root --password=unbreakable_password --all-databases > /var/backups/mysqldatabase.dump

Then I described /etc/multiplicity/local.include which is a list of the things on ripley that I want to backup :

/etc
- **tmp
/home/niol
/root
- /var/fileserv/enac/album**tn
/var/fileserv/enac/album/**jpg
/var/backups
/var/spool/minimalist
/var/www
- **

Basically, I want to backup /etc, no files that end with tmp, my personal directory, stuff on my ftp server except thumbnails directories, /var/backups, my mailing list manager config, my web directory and nothing else. Check the backup-manager manual page for more information on file inclusions and exclusions (globbing filelists).

But when backing up to a remot host, I want to omit some files (the contents of the ftp server which is too big and the ones that contain clear text passwords) which I described in /etc/multiplicity/remote.exclude:

/var/fileserv/
**id_rsa
**id_dsa
**identity
**gpg*
**.bash_history
**.fetchmailrc
**.gnubiffrc
/etc/ssh/ssh_host*key
/etc/multiplicity/pre.sh
/home/niol/fromannalee/home/niol/.gaim
/home/niol/fromannalee/home/niol/.mozilla
/var/www/sousmonlit.dyndns.org/sql.conf.php

(I really don't like clear-text-stored passwords…)

This was the most difficult part bescause you need to know what is on your computer. But now, the only remaining thing is to describe multiplicity tasks.

/etc/multiplicity/local.task (the local backup):

run_this        yes
max_age         185D
source_root     /
target_root     /backup/local
include_file    local.include
pre             mount -o remount,rw /backup
post            mount -o remount,ro /backup

/etc/multiplicity/backup1.task (the order of exclude_file and include_file is important):

run_this        yes
max_age         10D
source_root     /
target_root     backup1::/home/backupuser/fromripley/
exclude_file    remote.exclude
include_file    local.include

/etc/multiplicity/backup2.task (this is the second friend I send my backups to, just in case):

run_this        yes
max_age         10D
source_root     /
target_root     backup2::/home/backupuser/fromripley/
exclude_file    remote.exclude
include_file    local.include

This should be self explainatory and this should show what is multiplicity about.

Running the script

The first run should be a bit long :

# /etc/cron.daily/multiplicity -v

From now on, you can check on the remote hosts which files have been backed up :

# ssh backup1
backupuser@backupfool.foo1.org $ ls fromripley
etc  home  rdiff-backup-data  root  var

You also may check what increments are available :

backupuser@backupfool.foo1.org $ rdiff-backup -l fromripley
Warning: ownership cannot be changed on filesystem at /home/backupuser/fromripley/rdiff-backup-data
-----------------------------------------------------------------
Detected abilities for archive (read/write) file system:
  Characters needing quoting                   ''
  Ownership changing                           Off
  Hard linking                                 On
  fsync() directories                          On
  Directory inc permissions                    On
  Access control lists                         Off
  Extended attributes                          Off
  Mac OS X style resource forks                Off
  Mac OS X Finder information                  Off
-----------------------------------------------------------------
Found 9 increments:
    increments.2005-12-27T06:30:54+01:00.dir   Tue Dec 27 06:30:54 2005
    increments.2005-12-28T06:31:53+01:00.dir   Wed Dec 28 06:31:53 2005
    increments.2005-12-29T06:31:03+01:00.dir   Thu Dec 29 06:31:03 2005
    increments.2005-12-30T06:32:27+01:00.dir   Fri Dec 30 06:32:27 2005
    increments.2005-12-31T06:33:26+01:00.dir   Sat Dec 31 06:33:26 2005
    increments.2006-01-01T06:32:10+01:00.dir   Sun Jan  1 06:32:10 2006
    increments.2006-01-02T06:31:25+01:00.dir   Mon Jan  2 06:31:25 2006
    increments.2006-01-03T06:30:41+01:00.dir   Tue Jan  3 06:30:41 2006
    increments.2006-01-04T06:31:11+01:00.dir   Wed Jan  4 06:31:11 2006
Current mirror: Thu Jan  5 06:31:08 2006

Check the rdiff-backup beginners guide to know how to recover an old file…