<<HOME <TechDocs

Alexander von Boguszewski

Automatisches Backup Linux mit rsync


Automatisches Backup Linux mit rsync

Unter Linux kann man mit RSYNC, CRON und einem Bash Script ein Time Machine artiges Backupsystem aufsetzen.

Verteiltes Backup mit einen Backupserver. In diesem Fall wird das Script auf dem Backupserver via CRON gestartet. Auf dem zu sichernden System muss ein SSH Server laufen.

  1. Automatisches SSH Login vom BackupServer (Target) auf den BackupClient (Source) einrichten Auf dem BackupServer muss ein Public/Private Key Paar ohne Passwort erzeugt werden und der Public Key auf dem BackupClient registriert werden.

backupuser@Target:~$ backupuser@Target:~$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/backupuser/.ssh/id_rsa): Created directory ‘/home/backupuser/.ssh’. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/backupuser/.ssh/id_rsa. Your public key has been saved in /home/backupuser/.ssh/id_rsa.pub. The key fingerprint is: 7f:60:af:b0:87:6a:87:3a:6b:42:c3:a8:18:13:f5:78 backupuser@Target The key’s randomart image is: +–[ RSA 2048]—-+ | | | . | | . o | |. . E | | + . S o | |+ + o o | |o+ . …. o | |o . o o oo.o | | oo=.o… | +—————–+ backupuser@Target:~$ cat .ssh/id_rsa.pub | ssh share@Source ‘cat » .ssh/authorized_keys’ share@Source’s password: backupuser@Target:~$ backupuser@Target:~$ backupuser@Target:~$ ssh share@Source

The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Fri Apr 1 17:29:06 2016 from 192.168.2.110 share@Source:~$

  1. SSH Config anpassen Auf dem BackupServer muss für den BackupUser die ssh Konfiguration angepasst werden

vi ~/.ssh/config

Host * ServerAliveInterval 120 ServerAliveCountMax 5

Hierdurch wird alle zwei Minuten ein Datenpaket vom Client an den Server geschickt, um die Connection offen zu halten. Beim kopieren von größeren Datenmengen kann ansonsten die Session vom Server aus beendet werden. Anstelle des * kann natürlich auch der Hostname angegeben werden um mehrere Server unterschiedlich zu behandeln.

  1. Auf dem BackupServer muss das Backupscript kopiert werden

#!/bin/sh

date=date "+%Y-%m-%dT%H_%M_%S" SOURCEUSER=share SOURCESERVER=source SOURCEFOLDER=/home/share TARGETFOLDER=/DataVolume/shares/backup

rsync -aP
-e ‘ssh’
–delete
–delete-excluded
–link-dest=$TARGETFOLDER/current
$SOURCEUSER@$SOURCESERVER:$SOURCEFOLDER $TARGETFOLDER/incomplete_-$date
&& mv $TARGETFOLDER/incomplete_-$date $TARGETFOLDER/$date
&& rm -f $TARGETFOLDER/current
&& ln -s $TARGETFOLDER/$date $TARGETFOLDER/current

Die Variablen müssen noch an die Umgebung angepasst werden: SOURCEUSER= Loginuser auf dem Sourceserver für den der Passwortlose Login eingerichtet wurde SOURCESERVER= IP oder Hostname des Servers von dem die Daten gesichert werden sollen SOURCEFOLDER= Vollständiger Pfad des Ordners, der gesichert werden soll TARGETFOLDER= Vollständiger Pfad auf dem das Backup im Backupserver gesichert werden soll

  1. Cron Job anlegen

In der Datei /etc/crontab werden die einzelnen Cron Jobs konfigurert. In einer Zeile wird ein Job definiert: erst wann der Job ausgeführt wird Minute, Stunde, Tag, Monat, Wochentag dann der user und der Befehl. Hier wird jeden Tag um ein Uhr das Backupscript aufgerufen. Wichtig ist, dass am Ende der Tabelle ein Kommentar oder eine Leerzeile stehen.

/etc/crontab: system-wide crontab

Unlike any other crontab you don’t have to run the `crontab'

command to install the new version when you edit this file

and files in /etc/cron.d. These files also have username fields,

that none of the other crontabs do.

SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

m h dom mon dow user command

0 1 * * * backupuser /home/backupuser/backup.sh
#—————————————————————–

Für ein rein lokales Backup mit einer externen Festplatte lässt sich das Skript natürlich anpassen

#!/bin/sh

date=date "+%Y-%m-%dT%H_%M_%S"

SOURCEFOLDER=/home/share TARGETFOLDER=/DataVolume/shares/backup

rsync -aP
-e ‘ssh’
–delete
–delete-excluded
–link-dest=$TARGETFOLDER/current
$SOURCEFOLDER $TARGETFOLDER/incomplete_-$date
&& mv $TARGETFOLDER/incomplete_-$date $TARGETFOLDER/$date
&& rm -f $TARGETFOLDER/current
&& ln -s $TARGETFOLDER/$date $TARGETFOLDER/current