1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

HowTo Systemlaufwerks-schonende Backups mithilfe rsync

Dieses Thema im Forum "CS Root & Vserver" wurde erstellt von 0800555333, 14. August 2013.

  1. 0800555333
    Offline

    0800555333 Hacker

    Registriert:
    9. Juli 2013
    Beiträge:
    327
    Zustimmungen:
    367
    Punkte für Erfolge:
    0
    Um das trotzdem mal hier aufzugreifen, was ich im Post (

    Dieser Link ist nur für Mitglieder!!! Jetzt kostenlos Registrieren ?

    ) erwähnt hatte:
    Mit rsync werden in diesem Fall nur die Dateien kopiert, die sich verändert haben.
    Wenn man einmal ein komplettes Image erstellt hat und dann nur noch mit rsync arbeitet, wird nicht jedesmal nochmal alles kopiert sondern wie bereits erwähnt nur das was sich seither verändert hat..
    Das geht vorallem auch in den meisten Fällen wesendlich schneller als jedesmal ein komplettes Image zu erzeugen

    1) Einmalig ein Image mit " dd " erstellen, in diesem Beispiel wird das " if " Laufwerk nach /mnt/usbstick/Backup_sda.img geschrieben:
    Code:
    dd if=/dev/sda of=/mnt/usbstick/Backup_sda.img
    2) Ein Verzeichnis für den 3.Schritt erstellen:
    Code:
    mkdir -p /mnt/Backup
    3) Das erstellte Image mounten (einbinden):
    Code:
    mount -o loop /mnt/usbstick/Backup_sda.img /mnt/Backup
    4) Das Programm "rsync" installieren:
    Code:
    apt-get install rsync
    5) Script /root/rsync_backup.sh erstellen zum regelmässigen backupen mit rsync:
    Code:
    #!/bin/bash
    # Simple backup with rsync
    
    ## Create Log? [0=no , 1=yes]
    LOG=1
    
    ## Log also verbose (--dry-run) rsync output? [0=no , 1=yes]
    # NOTE: Logfile can get very big!
    VERBOSE=0
    
    ## Wheres the Imagefile to get mounted?
    IMAGE="/mnt/usbstick/BACKUP/rpi.img"
    
    ## MountPoint where Backuped-Image is mounted
    MOUNTPOINT="/mnt/Backup"
    
    ## Exclude Dirs/Files (these dirs/files dont get backuped) (space seperated)
    EXCLUDE="/mnt/usbstick"
    
    
    # -------------------------------------------------------------- #
    # >>> >> >  DO NOT MESS WiTH ANYTHiNG BELOW THiS LiNE!  < << <<< #
    # -------------------------------------------------------------- #
    
    
    for EX in $EXCLUDE ; do
        [ -z "$EXCL" ] && EXCL="--exclude=$EX" || EXCL="$EXCL --exclude=$EX"
    done
    
    #- variables
    LOGFILE=/var/log/$(basename $0).log
    RSYNCopt="-aR --update --exclude=$MOUNTPOINT --exclude=$IMAGE --exclude=/proc --exclude=/sys $EXCL"
    
    
    #- functions
    
    
    # check and write log / also echo message to console
    _LOG() {
        [[ "$1" =~ "\r\n" ]] && echo -e "$1"
        message="$1"
        if [ $LOG = "1" ]; then
            _DT=$(date +"%d.%m.%Y %H:%M:%S")
            echo -e "[$_DT] $message" >> $LOGFILE
        fi
    }
    
    
    #- main code
    
    
    [ "$VERBOSE" = 1 ] && RSYNCopt="--dry-run $RSYNCopt"
    
    MOUNTED=$(mount | grep "$MOUNTPOINT");
    
    if [ -z "$MOUNTED" ]; then
        _LOG "$MOUNTPOINT not mounted. Mounting $IMAGE to $MOUNTPOINT\r\n"
        [ ! -d "$MOUNTPOINT" ] && mkdir -p $MOUNTPOINT
        mount -o loop $IMAGE $MOUNTPOINT
    fi
    
    if [ "${MOUNTPOINT:${#MOUNTPOINT}-1:1}" != "/" ]; then
      MOUNTPOINT=$MOUNTPOINT/
    fi
    
    
    _LOG "rsync $RSYNCopt / $MOUNTPOINT\r\n"
    if [ "$VERBOSE" = 1 ]; then
        rsync $RSYNCopt / $MOUNTPOINT >> $LOGFILE 2>&1 
    else
        rsync $RSYNCopt / $MOUNTPOINT
    fi
    
    
    exit 0
    6. Das Script ausführbar machen:
    Code:
    chmod +x /root/rsync_backup.sh
    7. Zur Kontrolle das Script ausführen:
    Code:
    /root/rsync_backup.sh
    8. Das Script in die Crontab eintragen. In diesem Beispiel wird es ein mal jede Woche, Montag Morgen um 03:00 ausgeführt:
    nano /etc/crontab
    Code:
    0 3 * * 1       /root/rsync_backup.sh >/dev/null 2>&1

    [HR][/HR]

    Wer an sein Gerät immer nur einen USB-Stick oder Festplatte anschliest kann ausserdem sein System so einstellen dass das Device immer automatisch beim einstecken, eingehängt (mounted) und beim abziehen auch wieder ausgehängt (unmounted) wird - letzteres ist ebenfalls wichtig da es sonst haufenweise Fehlermeldungen in den Systemlogs verursacht
    1) udev Regel anlegen:
    Code:
    nano /etc/udev/rules.d/99-usbautomount.rules
    Mit folgendem Inhalt:
    Code:
    ACTION=="add", SUBSYSTEMS=="usb", KERNEL=="sd?1", RUN+="/bin/mount /dev/%k /mnt/usbstick"
    ACTION=="remove", SUBSYSTEMS=="usb", KERNEL=="sd?1", RUN+="/bin/umount /dev/%k"
    Das ist eine sehr einfach gehaltene Regel, damit ein x-beliebiger USB-Stick immer nach /mnt/usbstick eingebunden wird..

    2) udev neu starten:
    Code:
    /etc/init.d/udev restart
    3) mount-point (Verzeichnis wohin der Stick gemounted wird) anlegen:
    Code:
    mkdir -p /mnt/usbstick
    4) USB-Stick mit einer FAT32 Partition formatieren, einstecken und mit dem Befehl
    Code:
    mount
    prüfen ob obiges funktioniert :)


    Das funktioniert in der Form aber nur mit einem USB-Stick/HDD. Wer mehrere nutzten möchte, muss die udev-Regel anpassen bzw anhand genauerer Merkmale das Device unterschieden
     
    #1
    lokipoki, jensebub, Osprey und 4 anderen gefällt das.
  2. phantom

    Nervigen User Advertisement

  3. TaTuEe
    Offline

    TaTuEe Spezialist

    Registriert:
    10. Oktober 2012
    Beiträge:
    657
    Zustimmungen:
    503
    Punkte für Erfolge:
    93
    AW: Systemlaufwerks-schonende Backups mithilfe rsync

    Hi, dazu hätte ich eine Frage…Ich finde die Idee ziemlich genial bzw. sehr praktisch!

    1. Den USB Stick kann ich doch immer am USB Port anliegen haben, so das z.B. Montags aktualisiert werden kann, Richtig?
    2. Das Programm "rsync" aktualisiert die neuen veränderten Dateien innerhalb des Images bzw. am Ende (auf dem USB Stick) habe ich dann z.B das *.img Format (Backup_sda.img) Richtig?

    Warum diese Fragen? Wie so viele haben wir alle eine CF Karte, das bedeutet das Image muss noch auf die CF Karte übertragen werden, ist als solches kein Problem bis auf das ich immer drei Versuche benötige bis es dann tatsächlich funktioniert ;-( und vom Igel auch gelesen werden kann.

    Wäre es theoretisch möglich die Backup CF-Karte in einen USB Cardreader zu stecken und mit deinem Know How dort die Daten gleich zu aktualisieren, dann dürften diese aber nicht im *.img Format vorliegen bzw. es dürfte keine Image Datei sein. Würde wahrscheinlich die CF Karte zu sehr belasten ?

    Selbst wenn meine Idee nicht realisierbar ist würde ich es so umsetzen wie du es geschrieben hast....hört sich alles sehr gut an.

    Danke + Gruß
     
    #2
  4. lokipoki
    Offline

    lokipoki Meister

    Registriert:
    5. August 2012
    Beiträge:
    918
    Zustimmungen:
    311
    Punkte für Erfolge:
    63
    Ort:
    127.0.0.1
    AW: Systemlaufwerks-schonende Backups mithilfe rsync

    Super Howto, dennoch ab ich ein kleines Problem. Hab mir jetzt via Serial in UDEV die Regel noch eingebunden, dennoch hab ich das Problem das ich das Image nicht mounten kann.Sprich es sieht wie folgt aus:

    Geb ich Ext4 oder Ext2 an gibt er mir folgendes aus:

    Wie kann ich jetzt das Image mounten? Steh gerade selber ein wenig am Schlauch.

    Mfg

    Edit:

    Und weil ich es gerade beim überfliegen sah, 98% werden/können nicht lesen sondern nur kopieren, daher sollte im Script der Pfad auch angepasst werden:

    ## Wheres the Imagefile to get mounted?
    IMAGE="/mnt/usbstick/BACKUP/rpi.img"
     
    Zuletzt bearbeitet: 23. Dezember 2013
    #3
  5. TaTuEe
    Offline

    TaTuEe Spezialist

    Registriert:
    10. Oktober 2012
    Beiträge:
    657
    Zustimmungen:
    503
    Punkte für Erfolge:
    93
    AW: Systemlaufwerks-schonende Backups mithilfe rsync

    Hast Du dein USB Stick formatiert? bzw. welches Format liegt vor, gib mal
    Code:
    sudo parted -s /dev/sda1 print
    
    folgende Ausgabe solltest Du erhalten: Achtung sda[COLOR=#ff0000]1[/COLOR] ist die Partition von deinem Stick, das muss du vorher auslesen, bei mir ist es sda1. 
    
    root@kdmedia:~# sudo parted -s /dev/sda[COLOR=#ff0000]1[/COLOR] print
    Model: Unknown (unknown)
    Disk /dev/sda1: 4003MB
    Sector size (logical/physical): 512B/512B
    Partition Table: loopNumber  Start  End     Size    File system  Flags
     1      0,00B  4003MB  4003MB  [COLOR=#ff0000]ext3
    [/COLOR]
     
    #4
  6. lokipoki
    Offline

    lokipoki Meister

    Registriert:
    5. August 2012
    Beiträge:
    918
    Zustimmungen:
    311
    Punkte für Erfolge:
    63
    Ort:
    127.0.0.1
    Ich habe alle meinen externen Medien mit Ext4 versehen da bei mir nur Linux zum Einsatz kommt. Selbst Ext2 / Ext3 lässt sich nicht mounten. Hab das ein bisschen Spät gelesen ;)

    Mfg
     
    #5

Diese Seite empfehlen