Ilija Matoski

    ← Articles

    Debian Backup with Tartarus

    How to backup a Debian/Ubuntu server with Tartarus, and why is this usefull for us

    Why do you need this, if you are like me and like to experiment a lot, you will end up breaking your server a lot of times, so this will enable you to restore your server fast and easy.

    To be able to use Tartarus first we need to install it, so let’s issue the following commands.

    wget -O /etc/apt/sources.list.d/wertarbyte.list http://wertarbyte.de/apt/wertarbyte-apt.list
    wget -O - http://wertarbyte.de/apt/software-key.gpg | apt-key add -
    apt-get update
    apt-get install tartarus tar bzip2 lvm2 gnupg curl

    This will add and install the application on your server and some extra applications needed. Now we need to create the required directories for tartarus.

    mkdir /etc/tartarus
    mkdir -p /var/spool/tartarus/timestamps

    Let’s create a passphrase file, we can do this by executing the command

    pwgen -s 50 1 > /etc/tartarus/backup.sec

    That command will create a file that contains a random generated password, you can just do

    cat /etc/tartarus/backup.sec
    JvXqwrouhnV1xaGS563N1ivvmgevUaCVLX13kHkYUmJH6gCiql

    So you can see that we have gotten a random secure password. Next thing, we need to setup a general configuration, that all the other configurations are gonna extend from.

    touch /etc/tartarus/generic.inc

    Now open it up in your favorite editor, and adjust your settings to match.

    STORAGE_FTP_SSL_INSECURE="yes"
    STORAGE_METHOD="FTP"
    STORAGE_FTP_SERVER="<FTP SERVER>"
    STORAGE_FTP_USER="<FTP USER>"
    STORAGE_FTP_PASSWORD="<PUT YOUR FTP PASSWORD HERE>"
    STORAGE_FTP_USE_SFTP="yes"
    COMPRESSION_METHOD="bzip2"
    STAY_IN_FILESYSTEM="yes"
    ENCRYPT_SYMMETRICALLY="yes"
    ENCRYPT_PASSPHRASE_FILE="/etc/tartarus/backup.sec"
    TARTARUS_POST_PROCESS_HOOK() {
    echo -n "$STORAGE_FTP_PASSWORD" | /usr/sbin/charon.ftp \
    --host "$STORAGE_FTP_SERVER" \
    --user "$STORAGE_FTP_USER" --readpassword \
    --maxage 7 \
    --dir "$STORAGE_FTP_DIR" --profile "$NAME"
    }
    TARTARUS_DEBUG_HOOK() {
    echo $DEBUGMSG | logger
    }

    So this is the generic file from which everyone will extend. Now we have everything, all the variables are set, and we an create our first backup script. Let’s create a complete root backup.

    touch /etc/tartarus/root.conf

    After opening in your favorite editor add the following lines

    source /etc/tartarus/generic.inc
    NAME="root"
    DIRECTORY="/"
    EXCLUDE="/tmp/ /proc/ /sys/ /var/tmp/ /var/run/ /var/lib/mysql/"
    CREATE_LVM_SNAPSHOT="no"
    INCREMENTAL_STACKING="yes"
    INCREMENTAL_TIMESTAMP_FILE="/var/spool/tartarus/timestamps/root"

    You can see we excluded some of the directories for backup. Let’s explain some of the options, for a full list of options you can check them at Tartarus

    • INCREMENTAL_TIMESTAMP_FILE

      Everytime a full backup is successfully completed, Tartarus willtouch the file specified here as a reference point for future incremental backups.

    • INCREMENTAL_STACKING

      With this option enabled, Tartarus will also update the flagfile after completing a successfull partial (differential/incremental) backup run. By that, incremental backups are “stacked” on each other instead of being based on the most recent full backup.

    Now let’s create a backup script that we gonna put into cron to run everyday.

    touch /usr/local/sbin/tartarus-backup.sh
    chmod u+x /usr/local/sbin/tartarus-backup.sh

    And with your editor add the following contents

    #!/bin/sh
    # /usr/local/sbin/tartarus-backup.sh
    # Run all backup profile found in /etc/tartarus/ and pass
    # command line arguments on to tartarus (e.g. -i)
    for profile in /etc/tartarus/*.conf; do
    /usr/sbin/tartarus $* "$profile"
    done

    So in crontab we add the following, so it will do a full backup every sunday, and from monday to saturday incremental backup

    crontab -e

    And copy paste the following entries

    0 1 * * mon-sat /usr/local/sbin/tartarus-backup.sh -i
    0 1 * * sun /usr/local/sbin/tartarus-backup.sh

    When you do a

    crontab -l

    You should be able to see them in the output OK, so beacuse this is the first time, let’s run the backup script so it creates full backups

    /usr/local/sbin/tartarus-backup.sh

    Restoring a backup

    Since tartarus is based on linux utilities, restoring a backup from a rescue system is extremely easy, in case of incremental stacking you will need to extract all the files in the order they were created, you still use the same command to extract them.

    mkdir /mnt/restore
    curl ftp://USER:PASS@YOURSERVER/DIR/FILE | gpg --decrypt | tar xpvj -C /mnt/restore

    Your backup is restored in the directory /mnt/restore