Heimnetz vom NAS aus sichern

  • Hallo,


    nachdem ich einige Sicherungs-Varianten ausprobiert habe und mit keiner so richtig zufrieden war, habe ich ein kleines Script geschrieben, welches meinen Vorstellungen vom Optimum schon sehr nahe kommt.


    was bietet die Sicherung:

    • Die Sicherung erfolgt vom NAS (oder Datei-Server) aus zentral, ohne menschliche Interaktion zu erfordern
    • schlafende Rechner können geweckt werden
    • Konfiguration erfolgt 2-stufig, bzw. dezentral, d.h.
      • auf dem NAS wird konfiguriert, welche Rechner gesichert werden sollen
      • auf jedem zu sichernden Rechner wird konfiguriert, was gesichert werden soll und was nicht
    • die Sicherung erfolgt platzsparend, d.h. incrementelle Sicherung
    • leichter Zugriff auf gesicherte Daten für Wiederherstellung
    • es werden mehrere Sicherungsgenerationen auf 2 Ebenen verwaltet
    • die Sicherungsgenerationen hängen in keinster Weise vom Kalender ab


    1. Einrichtung
    1.1. Anmeldung ohne Kennwort einrichten
    1.1.1. NAS
    Damit eine Anmeldung ohne Kennwort-Eingabe funktioniert, muss auf dem Ausgangsrechner ein Schlüssel erstellt werden, welcher dann auf alle in Frage kommenden Rechner verteilt und aktiviert wird.
    Schlüssel für ssh erstellen

    Code
    mkdir /root/sync
    ssh-keygen -t dsa -f /root/rsync/backup-rsync.key


    1.1.2. zu sichernder Rechner (z.B. vdr.fritz.box)
    öffentlichen Schlüssel für ssh kopieren

    Code
    cd /root
    scp root@nas:/root/rsync/backup-rsync.key.pub .


    Schlüssel aktivieren

    Code
    cd /root/.ssh
    touch authorized_keys
    chmod 600 authorized_keys
    cat ../backup-rsync.key.pub >> authorized_keys
    rm ../backup-rsync.key.pub


    1.2.Installation überprüfen
    1.2.1. NAS
    Installation überprüfen

    Code
    apt-get install rsync


    1.2.2. zu sichernder Rechner (z.B. vdr.fritz.box)
    Installation überprüfen

    Code
    apt-get install rsync


    1.3. Sicherung konfigurieren
    1.3.1. NAS
    zu sichernde Rechner festlegen

    Code
    cat > /root/rsync/hosts.backup << EOF
    vdr.fritz.box
    noch.ein.rechner
    EOF


    1.3.1.1 Varianten
    wenn der zu sichernde Rechner nicht 24/7 läuft und man das Aufwachen für die Sicherung in den Schicherungsprozess integrieren möchte, kann man den host-Eintrag statt dessen wie folgt erstellen:

    Code
    cat > /root/rsync/hosts.backup << EOFvdr.fritz.box     mac:adr:esse         123noch.ein.rechner  08:15:de:ad:be:af    65EOF

    Hierbei steht der Hostname als erstes in der Zeile, gefolgt von der Mac-Adresse des Rechners (kann per ipconfig auf dem Rechner ermittelt werden) und als letztes kann noch die Anzahl an Sekunden angegeben werden, die das NAS nach dem Aufwachbefehl warten soll, bevor es den Rechner sichert.


    Falls die Rechner durch das Backup-Script aufgeweckt werden sollen, muss das Script noch angepasst werden.
    Es gibt zwar schon die Funktion "wakeUpHost()" aber die entsprechenden Befehle sind noch auskommentiert.


    1.3.2. zu sichernder Rechner (z.B. vdr.fritz.box)
    festlegen, was gesichert werden soll

    Code
    mkdir /root/rsync
    cat > /root/rsync/backup.directories << EOF
    /etc
    /var/lib
    EOF


    Damit sind die beiden wichtigsten Verzeichnisse zum sichern festgelegt worden.
    Unter /var/lib liegt auf manchen VDR-Rechnern das Verzeichnis für die Aufnahmen video.00 sowie ein Vereinfachungslink video - und die sollen ja bitte nicht gesichert werden.
    festlegen, was nicht gesichert werden soll

    Code
    cat > /root/rsync/backup.excludes << EOF
    video
    video.00
    EOF


    2. Vorbereitung
    2.1. Sicherung vorbereiten
    2.1.1. Basisverzeichnis auf NAS einrichten
    Vor der ersten Sicherung muss noch ein Verzeichnis erstellt werden, in das gesichert werden soll

    Code
    mkdir /srv/backup
    cd /srv/backup
    ln -s /root/rsync/hosts.backup


    2.2.1. Skript auf NAS kopieren
    Das script aus dem Anhang wird auf das NAS kopiert. Am besten nach /usr/sbin wo es nur der Superuser ausführen darf.
    Nach dem Download kann das Ausführungskennzeichen verloren gegangen sein, also lieber sicher gehen:

    Code
    chmod +x /usr/sbin/backup


    3. Sichern
    3.1. Sicherung ausführen

    Code
    cd /srv/backup
    backup


    4. Schlusswort
    4.1. Zusammenfassung
    Die letzte Sicherung liegt immer unter /srv/backup/back.first.0.
    Wer mag, kann das Verzeichnis freigeben - wobei ...
    ... ich würde im Falle eines Falles lieber gezielt nach der Datei suchen, die ich wiederherstellen möchte. Eine einzelne Datei ist auch schnell per scp kopiert.
    So kann man sich davor schützen, "aus Versehen" von der Sicherung was zu löschen.


    Ich weiß, es gibt noch --delete Optionen für rsync. Die habe ich ganz bewusst nicht verwendet, denn ich will ja keine Spiegelung erstellen, sondern eine Sicherung.
    Die Sicherung soll auch für den Fall sein, dass ich in meiner Dämlichkeit eine falsche Datei gelöscht habe, von der ich keine lokale Kopie habe ...
    Wenn ich jetzt nicht zu schlampig war, dann müsste es noch eine in der Sicherung geben.


    Die Dateien, mit denen ich auf jedem zu sichernden Rechner festlege, was gesichert werden soll, werden vor jeder Sicherung auf das NAS kopiert, d.h. ich kann Änderungen am zu sichernden Rechner vornehmen ohne die Konfiguration auf dem NAS aktualisieren zu müssen.
    Das Script pflegt sich einen permanenten Sicherungszähler. Egal wie oft ich sichere und egal wie groß die Abstände zwischen den Sicherungen sind, bei jeder Sicherung wird der Zähler weiter gesetzt.
    Im Script gibt es 2 Variablen, über die die Generationen gepflegt werden:

    Code
    maxFirstLevel=9
    maxSecondLevel=4

    ist die Vorgabe, d.h. es gibt 10 Sicherungen im ersten Level und 5 Sicherungen im zweiten Level.
    Bei jeder Sicherung wird der erste Level um eins weiter gezählt. Wenn im ersten Level 10 Sicherungen durchgeführt wurden wird die letzte Sicherung vom ersten Level ins zweite Level kopiert.
    Bei der Sicherung wird sowohl von rsync aus, als auch beim Kopieren mit hardlinks gearbeitet. Das heißt, jede unveränderte Datei gibt es einmal, egal in wievielen Sicherungen sie vorkommt.
    Beim Wiederherstellen kann also immer auf die Dateien der letzten Sicherung zugegriffen werden.


    Gruß Gero

  • Hi,


    gute Idee mit dem Backup vom Server/NAS aus, gefällt mir sehr gut. Vielen Dank dass du dein Skript der Community bereit stellst.


    Hab jetzt nur mal schnell das Skript überflogen, (noch) nicht ausprobiert.


    Ich würde die Funktion wakeUpHost() noch um eine Abfrage erweitern, ob der Host evtl. doch schon an ist.
    Dass müsste sich doch ganz einfach mit einem Ping lösen lassen, oder?


    Mal sehen werde das wenn ich Zeit habe mal antesten.

  • Hi,


    Zitat

    Ich würde die Funktion wakeUpHost() noch um eine Abfrage erweitern, ob der Host evtl. doch schon an ist.
    Dass müsste sich doch ganz einfach mit einem Ping lösen lassen, oder?


    Klar geht das.


    Ich frag mich nur - was bringts?
    Wenn der Rechner schon läuft, tut ihm ein WOL-Paket doch nicht weh (oder fährt er dann runter?).
    Oder geht's Dir um die Sleep-Zeit?


    Die Kiste läuft doch eh um zu sichern und da ich an einem anderen Rechner arbeite, interessiert es mich doch nicht, wie lange eine Sicherung dauert.


    Nur mal als Größenordnung:
    Wenn ich 3 Rechner das erste Mal sichere, läuft das mehrere Stunden.
    Der gleiche Vorgang das zweite Mal ist in 5 Minuten erledigt - wenn keine großen Änderungen waren.
    Bei solchen Zeitschwankungen - bringt es das dann, ein paar Sekunden Zeit zu schinden? - Ich habe doch eh nix von der gesparten Zeit.
    Im Gegenteil - wenn, dann würde ich eher den Prozess und die Bandbreite noch limitieren, damit der Rest vom Netz unbehelligt weiter machen kann.


    Falls jemand den gleichen Gedanken hat ...:
    Die beiden Zeilen von Absatz 3.1. in ein eigenes Script packen.
    Mit nice -n 19 verpasst man dem Prozess die schlechteste CPU-Prio.
    Den Befehl kann man ganz einfach vor das backup setzen.


    Mit ionice -c 3 kann man dem Befehl die schlechtest IO-Prio verpassen.
    Auch diesen Befehl kann man voran stellen.


    Das Wrapperscript würde dann so aussehen (völlig ungetestet!:(

    Code
    cd /srv/backup
    nice -n 19 ionice -c 3 backup


    Das Wrapperscript könnte man dann bei cron und Co anmelden, um es regelmäßig ausführen zu lassen.
    Wenn das backup dann regelmäßig läuft, kann man auch selten benötigte Dateien eher löschen und bei Bedarf wieder aus der Sicherung holen ;)


    Gruß Gero

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

    Einmal editiert, zuletzt von geronimo ()

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!