welcome: please sign in
location: rsync

Einfaches Backup mit rsync

rsync ist ein einfaches Tool auf Unixsystemen mit dem man ein Backup zwischen 2 Hosts realisieren kann. In diesem Beispiel gehen wir von einem Webserver und einem Host im lan des Serveradministrators aus. Wieso gerade rsync? rsync hat den Vorteil das es durch einen effiziennten Checksummenvergleich der Files nur Files uebertraegt die sich veraendert haben. So wird viel Traffic und Zeit gesparrt.

Naehere Angaben zur Theorie bitte der manpage entnehmen.

man rsync

SYNOPSIS (aus man rsync)

       rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
       rsync [OPTION]... [USER@]HOST:SRC DEST
       rsync [OPTION]... SRC [SRC]... DEST
       rsync [OPTION]... [USER@]HOST::SRC [DEST]
       rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
       rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
       rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST

rsync einrichten?

  1. Nunja, es empfieht sich erstmal die Software ueber http://www.rpmfind.net fuer LinuxUser zu besorgen. Nach einem einfachen ./configure mit anschliessendem make && make install sollte sich die software auch leicht von der Source aus installieren lassen. RPM user muessen halt rpm -i rsync.wad.weiss.ich.fuer.ne.version.rpm machen. FreeBSD user haben wie immer Glueck und kommen mit einem cd /usr/ports/net/rsync und anschliessendem make install clean davon.

  2. Die Konfiguration von rsync wird in diesem Beispiel auf dem Webserver angelegt. Hierfuer muss das File /usr/local/etc/rsync.conf (bei Suse 8.2 unter /etc/rsync.conf) angelegt bzw. modifiziert werden.
    Hier ein Beispiel:

    # rsyncd.conf
    uid = root
    gid = wheel
    max connections = 4
    syslog facility = local5
    pid file = /var/run/rsyncd.pid
    hosts allow = 213.239.192.xxx/32
    
    [home]
            path = /home
            comment = rsync backup for /home
    
    [mysql]
            path = /var/db/mysql
            comment = rsync backup for /var/db/mysql -> lear
    • Uid & Gid koennen gegebenenfalls geaendert werden. es ist jedoch selbstverstaendlich notwendig das der rsyncuser lesende rechte auf die zu sichernden Dateien hat.

    • max connections beschreibt wieviele gleichzeitige Verbindungen aufgebaut werden koennen. Es wuerde auch eine Connection reichen in diesem Beispiel.
    • syslog facility gibt an wohin rsync bei Fehlern logged. Siehe man syslog. In diesem beispiel werden nur errors gelogged.
    • Der Pfad zum PidFile. (in diesem ist die ProzessId gespeichert waehrend der rsync gestartet ist)

    • hosts allow: Die IP-Adresse die der Remoterechner hat. Im Falle von NAT, muss gegebenenfalls die Uebersetzte Adresse eingetragen werden. User von dynamischen IP-Adressen haben hier ein Problem und muessen eine Wildcard [0.0.0.0/0] setzen.. bzw. die Adresse taeglich aendern. Naeheres spaeter in einer erweiterten Form.
    • Die [] leiten einen Container ein. path = /der_pfad_zu_den_zu_sichernden.dateien. Es koennen beliebig viele Container angelegt werden. In diesem Beispiel verbirgt sich der Pfad /home in dem Container [home].
  3. Wie bekommt man das ganze taeglich zu einer bestimmten Uhrzeit zum laufen?
    Dies ist eine leichte Frage, mittels cronjob. Erstmal legt man sich auf dem Remoterechner ein Script wie das folgende an.

    #rsync -aHo --delete webserver.domain.de::containername /verzeichnis/in/dass/das/backup/soll
    rsync -aHo --delete --exclude-from=/etc/rsyncd.home webserver.domain.de::home /bak/home/
    rsync -aHo --delete  webserver.domain.de::mysql /bak/var/db/mysql.hamlet

    Nun noch das ganze als z.b. backup.sh an einem Ort /root/bin speichern, und die rootcrontab editieren mit crontab -e.

    #muster crontab 
    SHELL=/bin/sh
    MAILTO=root@localhost
    PATH=/usr/local/bin:/usr/bin:/bin
    
    # min   hour    mday    month   wday    command
    00     03       *       *       *  /root/bin/backup.sh
    Was passiert also.. um 00:03 taeglich versucht der Client auf den Webserver zu connecten. Er wird zunaecht das Backup des Containers [home] durchzufuehren. Er schaut in der Datei /etc/rsyncd.home nach Verzeichnissen die er evtl nicht sichern soll. /etc/rsyncd.home ist eine einfache liste an Verzeichnisnamen in /home die rsync ignorieren soll. Nach dem Diff der Dateien beginnt er mit der Uebertragung. Dateien die es nicht mehr gibt auf dem Remoteserver werden geloescht durch den Anhang --delete. Wer also mehr als einen Tag Backup haben moechte muss local das Backupverzeichnis nocheinmal kopieren.

rsync (last edited 2008-07-14 09:55:41 by localhost)