Automatisches Backup von FreeNAS/NAS4Free Freigaben

Verwendet man FreeNAS oder NAS4Free als Fileserver sind Sicherheitskopien der Datenverzeichnisse unverzichtbar. Gerne wird aus Bequemlichkeit darauf verzichtet. Dabei kann man mit Bordmittel Mehrgenerationen-Backups automatisch, z.B. täglich, erstellen lassen. Damit die tägliche Arbeit nicht durch die Sicherung beeinträchtigt wird, kann man die Datensicherung in die Nacht verlegen.

FreeNAS/NAS4Free verwendet RSYNC zur Datensicherung. Damit können mehrere Generationen eines Dateipools gesichert werden, ohne das sich der Speicherbedarf multipliziert! Es werden lediglich die geänderten Dateien gesichert. Im Dateisystem der Sicherung sieht es aber aufgrund von Links so aus, als wäre bei jeder Generation der komplette Dateipool gesichert worden (Schnappschuss-Sicherung). Das macht die Wiederherstellung auch für Laien einfach, da der Verzeichnisbaum der Sicherung genauso aussieht, wie der des Originals. Man kann Dateien oder Verzeichnisbäume einfach über den Dateimanager wieder herstellen bzw. kopieren.

Benötigt wird eine zweite Festplatte (kann auch eine USB-Festplatte sein) und das Skript rsync_snap_d2d.sh aus der Knowledgebase von FreeNAS. Im Skript kann man die Zeile 24:

i=9

verändern, wenn man mehr als 9 Generationen einer Sicherung benötigt. Bei i=9 werden 9 Datensicherungen gespeichert, bevor bei der zehnten Sicherung die erste überschrieben wird. Bei dieser Einstellung und bei täglicher Sicherung kann man so bis zu  9 Tage alte Dateien wieder herstellen.

Backup einrichten

Dieses How-To basiert auf FreeNAS 0.69.2 (Muad’Dib).

  1. Backup-Festplatte anschließen und ggf. FreeNAS neu starten.
  2. In der FreeNAS-Verwaltung „Festplatten|Management“ die Backup-Festplatte eintragen.
  3. In „Festplatten|Formatieren“ die Festplatte formatieren (UFS empfohlen).
  4. Einhängepunkt in „Festplatten|Einhängepunkt|Management“ festlegen:

    Backup-Festplatte einhängen

  5. Damit man später auf die gesicherten Daten zugreifen kann, muss unter „Dienste|CIFS/SMB|Freigabe“ durch klicken auf Pluseine neue Freigabe für die Backup-Festplatte erstellt werden. Vermeide Leerzeichen und Sonderzeichen in Freigabenamen.
    Freigabe der Backupfestplatte

    Freigabe der Backupfestplatte

    Wichtig ist hier, dass man den Schreibschutz einschaltet. Damit sind die Backupdaten für den Benutzer nur lesbar! Sonst besteht die Gefahr, dass man versehentlich in den Backupdaten weiterarbeitet und bei mehreren Generationen nicht mehr weiß, in welcher Instanz sich die zuletzt geänderte Datei befindet. Die anderen Einstellungen kann man in der Standardeinstellung belassen.

  6. Kopieren des Skripts rsync_snap_d2d.sh in eine Freigabe aufs FreeNAS/NAS4Free.

    Hinweis für Experten: Wenn du SSH zum Upload des Skripts verwendest und es in ein Verzeichnis außerhalb einer Freigabe speicherst, führt das bei einer embedded-Installation von FreeNAS/NAS4Free nach einem Neustart des Servers zu einem Verlust des Skripts. Der Grund ist, dass das Kern-Dateisystem nach dem Booten lediglich vom Betriebssystemdatenträger in einer RAM Disk abgelegt wird. Bei jedem Neustart wird die RAM Disk neu angelegt und das Kern-Dateisystem neu hinein kopiert. Nur die Freigaben unterhalb /mnt/ werden dauerhaft auf dem Datenträger gespeichert. Diese Einschränkung gilt nicht für eine Full-Installation!

  7. Damit das Backup regelmäßig ausgeführt wird, muss ein sogenannter Cronjob erstellt werden. In der FreeNAS-Verwaltung auf „System|Erweitert|Cron“ auf das  Plusklicken und den nachfolgenden Dialog ausfüllen, z.B.:
    Cronjob erstellen

    Cronjob erstellen

    Unter „Befehl“ trägt man die Befehlszeile:

    sh /pfad/der/freigabe/rsync_snap_d2d.sh /pfad/zur/freigabe/ /pfad/zum/backup-verzeichnis/

    z.B:

    sh /mnt/netzwerk/rsync_snap_d2d.sh /mnt/netzwerk/ /mnt/backup/

    ein. Der erste Ausdruck sh startet eine Shell, der zweite beschreibt den Pfad zum Skript mit dem Skriptnamen, der dritte Teil das zu sichernde Verzeichnis und der vierte Ausdruck das Verzeichnis in das gesichert werden soll. Im obigen Beispiel liegt das Skript in einer Freigabe im Verzeichnis /mnt/netzwerk und das Verzeichnis /mnt/netzwerk (Daten-Festplatte) wird auf /mnt/backup (Backup-Festplatte) gesichert. Die beiden letzten Ausdrücke sind die Einhängepunkte der Daten-Festplatte und der Backup-Festplatte.

    Da es sich bei FreeNAS/NAS4Free um UNIX-Systeme handelt, muss man bei Dateinamen und Pfadangaben auf Groß- und Kleinschreibung achten.

    Im obigen Screenshot wird jeden Tag um 5:00 Uhr das Skript ausgeführt und damit eine Backup geschrieben.

Wiederherstellung der Daten

Die Sicherungen befinden sich hier in der Freigabe „Backup“ – unter /mnt/backup –  in den Backup-Verzeichnissen „netzwerk_bak1“ (letztes Backup) bis „netzwerk_bak9“ (ältestes Backup). Jedes Backup-Verzeichnis enthält den kompletten Verzeichnisbaum inkl. aller Dateien der gesicherten Freigaben zur Zeit der Sicherung. Dateien oder Verzeichnisse können durch einfaches zurück kopieren ins Quellverzeichnis wieder hergestellt werden.

Verzeichnisstruktur des Backups

Verzeichnisstruktur des Backups

Am Änderungsdatum erkennt man, wann die Sicherung erstellt wurde und von welchem Tag bzw. welcher Zeit sie Daten enthält.

Havariefall

Wenn die Festplatte defekt ist und man eine komplette Sicherung auf die neue Festplatte kopieren muss, findet man in meinem Posting RSYNC Backups zurück kopieren eine Schritt für Schritt Anleitung.

Muss man schnell an seine Daten kommen, bevor man eine neue Festplatte eingebaut und die Daten zurück kopiert hat, kann man die externe USB-Festplatte an einen Arbeitsplatzrechner anschließen und diesen nach meinem Posting  FreeNAS Datenträger mounten einbinden.

Interessante Links

/mnt/name_der_freigabe/rsync_snap_d2d.sh /mnt/netzwerk/ /mnt/backup/

Bildnachweis

Titleimage:
Safe by Berto (CC BY-NC-SA 2.0)
BSD Daemon by Diavolo Qqta (CC BY-NC-SA 2.0)


31 Kommentare

  • Super How to.
    100% hilfreich 🙂
    Das Netzwerkkarten dillema konnte ich auch lösen.
    ( Neues Mb mit andrem Chip ) 😀
    Danke für Antwort.
    Grüße Felix

  • Gutes HowTo,

    ich habe nur das Problem, dass das Backup aus irgend einem Grund nur eine leere Datei erzeugt, als analog des Beispiels: „netzwerk_bak1“ mit 0kb
    Weiß leider nicht, woran das liegen könnte..vielleicht irgend eine Idee?

    Gruß
    Dennis

  • Aus der Ferne schwer zu sagen, Dennis.

    Hast du die Scriptbefehlszeile aus 8. mal manuell in der Shell (über SSH/Putty) angestoßen? Dann bekommt man ggf. Fehlermeldungen angezeigt.

    Alternativ über die FreeNAS-Weboberfläche: ERWEITERT->BEFEHL.

    Die Ausgabe kannst du mir mal mailen.

    Gruß Hani

  • Hallo,
    als erstes möchte ich für dieses How To danken :). Funktioniert super. Jede Stunde macht mein Freenas Server ein Backup auf eine USB HDD. Aber ich habe noch eine Frage. Kann man es vielleicht machen das,dass Script einen Piepton von sich gibt wenn das Backup fertig ist oder eine Txt Datei in dem Backup Ordner Speichert. Danke im Vorraus

    Gruß Patrick

    • Hallo Patrick,

      Um einen Beep auszugeben, kannst du

      printf "\a"

      oder

      printf '\007'

      versuchen. Bei mir klappte das aber nicht. Ich glaube da müssen bestimmte Kernelmodule geladen sein. Versuchen kannst du es bei dir ja trotzdem.

      Um eine leere Datei mit dem Namen „bak-fertig“ im Backupverzeichnis zu erstellen:

      touch /mnt/Pfad/zum/Backup-Verzeichnis/bak-fertig

      Setze das Kommando unten im Skript zwischen den Zeilen

      touch -t `date +%Y%m%d%H%M.%S` "$2"/"$DIR"1 # --- > Set ...

      und

      else

      Sinn macht es IMHO aber nicht, da die Datei beim zweiten Backup ja schon existiert. Besser wäre eine Log-Datei. Das ist aber ein bisschen aufwendiger zu programmieren, s.u.

      ACHTUNG NICHT GETESTET:


      if [-w bak.log]
      then
      echo `date` >> bak.log
      else
      touch bak.log
      echo `date` > bak.log
      fi

      Bitte achte darauf, dass die Ticks (`) die date umschließen auf der Taste links neben der BACKSPACE-Taste zusammen mit der UMSCHALT-Taste zu erreichen ist (deutsche Tastatur!). Den obigen Code an die gleiche Stelle im Skript wie oben kopieren.

      Zur Erklärung: Die erste Zeile prüft, ob die Log-Datei „bak.log“ existiert und beschreibbar ist. Wenn ja, hängt Zeile 3 jeweils ein Zeile mit aktuellen Datum und Zeitinformationen an das Ende der Datei „bak.log“ an. Wenn nicht, wird die Datei „bak.log“ erzeugt und die akt. Datums-/Zeitinformationen in die erste Zeile geschrieben.

      Du erhältst eine Logdatei im Textformat im gleichen Verzeichnis des Backupskripts, die in jeder Zeile das Datum und die Zeit beendeter Backups enthält.

      LG Hani

  • @Dennis: Hatte jetzt nach 2 Jahren reibungslosem Betrieb plötzlich das gleiche Problem. Das Ausführen des Scripts direkt auf dem NAS ergab die Fehlermeldung „destination must be a directory when copying more than 1 file“. Und tatsächlich: Es wurde kein Verzeichnis angelegt sondern eine Datei mit 0Kb. Nach dem Löschen dieser Datei als root auf dem NAS funktioniert es wieder.

    @Hani: Kann man erklären was da schiefläuft?

    Gruss Olios

    • Hallo Olios,

      bei mir ist der Fehler noch nie aufgetreten und wie es aussieht, ist er leider nicht reproduzierbar, oder?

      Das wäre nämlich die Voraussetzung für eine zeitlich sinnvolle Fehlersuche.

      Ansonsten kann man nur eine mehr oder weniger blinde Suchmaschinenrecherche nach dem allgemeinen Fehler durchführen. Evtl. ist im FreeNas/Nas4Free Forum was zu finden.

      Wenn du den Fehler reproduzieren kannst, lass es mich wissen.

      Gruß Hani

  • English translation of this article is now available!

    Have fun!

  • Hallo,

    vielen Dank für die Anleitung – wird auch bei freeNAS 9.1.0 einwandfrei ausgeführt.

    Beste Grüße
    Thomas

  • Nabend…

    Ich hab das Script und die ganzen Einstellungen so vorgenommen, wie es im Tutorial angegeben ist, jedoch wird mir, egal wie ich versuch das script auszuführen gesagt, dass er es nicht öffnen kann. Ich habs sowohl über „jetzt Ausführen“ unter Cron versucht, als auch manuell über Putty…

    Kann irgendwie keinen Fehler finden 🙁

  • Hat sich erledigt. Gross- Kleinschreibung scheint im gegensatz zu Windows sehr wichtig zu sein 😉

  • Ich hoffe, dass Du helfen kannst.
    Gibt es eine Lösung für eine Online-Datenspeicherung?

    Vielen Dank

    • Hallo Alice,
      der in meinem How-To beschriebene Weg nutzt RSYNC. Das ist auch über eine TCP/IP Leitung durch das Internet möglich, soweit die Infrastruktur auf der Serverseite (beim Dienstanbieter) vorhanden ist.

      AFAIK bietet z.B. einer der größten deutschen Hoster von Webspace für sein Onlinespeicher ein RSYNC Anbindung inkl. der nötigen Skripte und Datenverschlüsselung an. Ich habe mir das aber im Detail noch nicht angeschaut, da es für mich derzeit nicht in Frage kommt. Es ist auch schon mindestens zwei Jahre her, als ich das gelesen habe. Es wird sicher viele andere Anbieter geben, die dies auch anbieten.

      Auch sind andere Techniken jenseits von RSYNC möglich, je nach Datenmenge und Infrastruktur. Aber RSYNC wäre für mich der erste zu prüfende Weg, wenn ich diesen denn jetzt gehen wollte.

  • Hallo Hani,

    Du hast mir wirklich sehr geholfen – vielen Dank. Ich habe nicht gewusst, dass es Hoster gibt, die ein RSYNC Anbindung anbieten. Ich habe im Internet gesucht und es gibt z.B. rsync.net, die sich auf diese OnlineSpeicherung spezialisieren. Ich werde mich dort erkündigen.

  • Hallo Hani,

    erstmal herzlichen Dank hat perfekt geklappt 🙂

    Jetzt zu meiner Frage: und zwar fände ich es total super, wenn ich auf diese Weiße einen zweiten Nas (leider kein FreeNas/bzw Nas4free) auf dem Nas auf dem Nas4free läuft sichern kann. Ist so etwas möglich?

    Lg Tobias K:

    • Hallo Tobias, natürlich ist das möglich. RSYNC kann auch über das Netzwerk – z.B über SSH – sichern. Das Script aus meine How-To muss natürlich angepasst werden.

      Das ist aber nicht ganz so einfach. Schau erst mal hier nach: http://wiki.ubuntuusers.de/rsync und dann google mal weiter.

      Eine schlüsselfertige Lösung kann ich dir nicht anbieten.

      LG Hani

  • Hallo leute

    Erst mal danke für das Tutorial, es ist (für einen Unix Anfänger) sehr hilfreich…

    Jedoch macht in meinen Augen eine Datensicherung im selben Rechner nur bedingt sinn, daher meine Frage:

    Kann ich die von Ihnen beschriebene Sicherung auch so einstellen, das die Sicherungsdaten auf einen anderen NAS (in einem anderen Gebäude, aber selbes Netzwerk) überträgt?

    vielen Dank für die Auskunft

    DM

    • Hallo Dave,

      ja, das ist möglich. Du müsstest das Skript entsprechend anpassen, da das im Skript verwende Programm „rsync“ auch über das Netzwerk (sogar verschlüsselt) auf ein anderes NAS sichern kann.

      Für einen Unix-Anfänger ist das aber eher schwer bzw. zeitaufwendig mit einer extrem steilen Lernkurve umzusetzen. (siehe z.B.: http://wiki.nas-portal.org/index.php/RSYNC_zum_synchronisieren_ganzer_Verzeichnisse)

      Zu deiner Anmerkung bzgl. „Datensicherung am selben Ort“:
      Meine Sicherungen ist für den Homeserver-Einsatz gedacht. Eine Offsite-Sicherung halte ich persönlich da i.d. allermeisten Fällen nicht für erforderlich. Anders sieht das natürlich bei (unternehmens-)kritischen Daten aus. Hier ist eine Offsite-Sicherung dringend anzuraten, da hast du recht!

      Als Unix-Novize würde ich dann aber eher zu einer kommerziellen Lösung greifen, die solche Sicherungen schon integriert haben oder zumindest „zubuchbar“ anbieten oder mir professionellen Service für FreeNAS einkaufen.

      LG Hani

  • Guten Tag

    vielen Dank für diese Anleitung und das Script! Beides hat mir sehr weitergeholfen.

    Eine Frage habe ich allerdings:
    In meinem SOURCE Verzeichnis habe ich drei Ordner (a, b und c), die alle zu einer anderen Gruppe gehören (ga, gb und gc). Die Rechte sind so gesetzt, dass der Owner (root für alle) alles darf sowie auch die Gruppe; andere dürfen nichts.
    Wenn nun das Backup ausgeführt wird, werden alle diese Ordner und deren Inhalt korrekt nach TARGET kopiert. Für den Ordner a bleiben die Besitz- und Rechteverhältnisse die gleichen (d.h. root ist Besitzer, Gruppe ist ga, root und ga dürfen alles), für die anderen Ordner b und c haben sich im Backup die Rechte geändert (root ist Besitzer, wheel ist Gruppe, root darf alles, Gruppe darf nichts).
    Was könnte das Problem sein resp. wo muss ich schrauben?

    Danke und Gruss

    Michael

    • Hallo Michael, das ist komisch. Es sollten alle Ordner gleich behandelt werden. Das Skript behandelt alle Dateien und Verzeichnisse gleich. Aus der Ferne fällt mir jetzt keine Lösung ein.

      Wie unterscheiden sich die Verzeichnisse „b“ und „c“ von „a“. Irgendwo muss es einen Unterschied geben.

      • Habe das Script nochmals ausgeführt, und nun funktioniert es, d.h. die Rechte sind nun korrekt übernommen worden.

        Was mir aber aufgefallen ist ist, dass die Rechte für Ordner „a“ bereits beim Starten des Scripts korrekt gesetzt werden, diejenigen für die Ordner „b“ und „c“ erst gegen Ende der Abarbeitung des Scripts. Nach vollständiger Abarbeitung stimmen dann die Rechte für alle Ordner.

        Somit war beim 1. Versuch das Script wohl noch nicht ganz fertig ausgeführt.

  • Hallo…. ganz dringend ……wenn ich im Script die Backupanzahl von i=9 auf i=2 ändere dann führ er das Script nicht mehr aus . Wenn ich das Orginalscript wieder auf den Server kopiere funktioniert das ganze aber ich brauch keine 9 Backups.

  • Hallo Marcus, es kann nicht an „i=2“ liegen. Ich selbst hatte da 14 eingetragen.

    In welchem Programm hast du die Datei bearbeitet?

    Bist du sicher das die nicht die Endung „.txt“ hat. Der Standard-Editor von Windows (notpad.exe) fügt in den Standardeinstellung diese Endung an alle bearbeitete Dateien an. Wenn man dann noch das standardmäßige aktivierte Ausblenden bekannter Dateieendungen dazukommt, sieht man die Endung „txt“ nicht.

    Ich schicke dir das modifizierte Skript mit „i=2“ an deine angegebene E-Mail. Versuche es mal mit diesem Skript.

  • Mhh ich bin mir so ziemlich sicher das es keine txt Endung hat. Ich hatte die Datei mit dem Notepad bearbeitet. Ich hatte sogar zum Test mal den gesamten Inhalt rauskopiert habe eine Textdatei aufgemacht, das Script habe ich da rein kopiert und habe die Datei umbenannt ,habe die Datei umbenannt von . txt in .sh auch da kein Erfolg .Ich hab im Windows alle bekannten Dateiendungen einblenden lassen .Werde alles noch mal prüfen . Wenn du die Möglichkeit hast mir eine Datei zukommenzu lassen wäre ich die sehr verbunden.

    Danke und weiter so eine tolle Seite .

  • Danke dir. Die Datei funktioniert einwandfrei.
    Guten Rutsch

  • Freut mich, dass es funktioniert. Dir auch einen Guten Rutsch.

  • Hallo zusammen,

    ich bin auf diese Seite gestoßen da ich eine Lösung RDX im zusammenhang mit FreeNas suche. Ich nutze das FreeNAS als Backup Archiv vom HauptBackup Server. Also als zweite Kopie vom Backup. Nun würde ich gerne das Backup auslagern mit RDX damit immer eine komplette Woche ausserhalb lagert und immer mitgenommen werden kann. Ich nutze hierzu ein HP N40L, ist ein Tandberg Data RDX Internal drive 8782-RDX kompatibel zu FreeNAS per SATA? bzw wird dieses erkannt? Wie ist der Durchsatz? ich muss täglich ca 150GB neue Daten Sichern in einer Woche kommen knapp 1,2TB zusammen inkl Full Backup Sonntags.

    Grüße

    Rob4ik

  • Hallo Hani,

    wollte an dieser Stelle nur mal danke sagen 🙂

    Es funktioniert einwandfrei.

    LG

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert