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
    1. mkdir /root/sync
    2. 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
    1. cd /root
    2. scp root@nas:/root/rsync/backup-rsync.key.pub .


    Schlüssel aktivieren

    Code
    1. cd /root/.ssh
    2. touch authorized_keys
    3. chmod 600 authorized_keys
    4. cat ../backup-rsync.key.pub >> authorized_keys
    5. rm ../backup-rsync.key.pub


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

    Code
    1. apt-get install rsync


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

    Code
    1. apt-get install rsync


    1.3. Sicherung konfigurieren
    1.3.1. NAS
    zu sichernde Rechner festlegen

    Code
    1. cat > /root/rsync/hosts.backup << EOF
    2. vdr.fritz.box
    3. noch.ein.rechner
    4. 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
    1. 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
    1. mkdir /root/rsync
    2. cat > /root/rsync/backup.directories << EOF
    3. /etc
    4. /var/lib
    5. 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
    1. cat > /root/rsync/backup.excludes << EOF
    2. video
    3. video.00
    4. 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
    1. mkdir /srv/backup
    2. cd /srv/backup
    3. 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
    1. chmod +x /usr/sbin/backup


    3. Sichern
    3.1. Sicherung ausführen

    Code
    1. cd /srv/backup
    2. 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
    1. maxFirstLevel=9
    2. 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

    Files

    • backup.zip

      (2.31 kB, downloaded 112 times, last: )

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

  • 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,


    Quote

    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
    1. cd /srv/backup
    2. 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!

    The post was edited 1 time, last by geronimo ().