Hi XPUser,
greifen da evtl. noch andere Dienste auf die Datasets zu? Ich denke da an DNLA/UPnP oder iTunes/DAAP.
Der Datentransfer zwischen Haupt- und Backup-Server ist recht einfach durchzuführen.
Dabei sind die Parameter für den Erstabgleich und den nachfolgenden Abgleichen etwas unterschiedlich.
Vorarbeiten:
Auf dem Backupserver ist ein Datenpool anzulegen, der idealerweise genau so wie der Pool auf dem Hauptserver heißt. Ich verwende hier den Pool-Namen "Daten".
Achte auf die korrekte 4k-Konfiguration bei den Festplatten!
Auf dem Backupserver sollten keine Dienste außer SSH aktiviert sein.
Haupt- und Backup-Server sollten so wie hier beschrieben konfiguriert sein:
viewtopic.php?p=32277#p32277
Beim Backupserver geht es vor allem um die Einstellungen in System|Advanced|loader.conf und System|Advanced
Auf beiden Servern sollten keine automatischen Shutdown-Skripte aktiv sein. Daher "System|Advanced|Command scripts" kontrollieren, und dortige Kommandos ggfs. durch ein vorangestelltes # einfach deaktivieren (Neustart nicht vergessen).
Wichtig!: Während der Abgleich läuft, dürfen keine Snapshots gelöscht werden! Das ist besonders dann relevant, wenn Autosnapshots eingerichtet wurden.
Erstabgleich:
Auf dem
Backup-Server ist direkt auf der Console der Punkt
6) Shell zu wählen.
Dann gibt man
Code: Select all
# nc -l 9000 | zfs receive -vF Daten
ein. Damit wartet das NAS auf eingehende Daten.
(
Edit 25.09.2014: Optionen von "-vFd" auf "-vF -d" geändert. Der Parameter -d muß einzeln angegeben werden, und kann nicht mit den anderen Parametern zusammengefaßt werden. Eine Auswirkung auf dieses Szenario hat das aber nicht.)
(
Edit 28.09.2014: Parameter -d entfernt.)
Hint: In der Console gibt es nur die englische Tastaturbelegung:
- z und y sind vertauscht.
- Das - Zeichen bekommst du über den Ziffernblock
- Das | Zeichen ist Shift-#
- Das @ Zeichen ist Shift-2
Das #-Zeichen am Anfang der Zeile gibt man nicht mit ein (ist nur ein Hinweis, daß es um die Kommandozeile geht).
Weiterer Hint: Unter NAS4Free 9.2 gibt es Funktionen, bei denen man das nicht mehr direkt über die Konsolen eingeben muß. Die Erklärung dazu würde aber jetzt die Anleitung verkomplizieren, und da du eh eigene Bildschirme und Tastaturen an den NAS'en hast, übergehe ich das einfach
Auf dem Haupt-Server erzeugt man zuerst einen rekursiven Snapshot auf den Daten-Pool:
Code: Select all
# zfs snapshot -r Daten@2014-09-08
Was man nach dem @ schreibt ist übrigens völlig egal, aber das aktuelle Datum ist eigentlich immer ganz passend.
Jetzt kann man den Transfer schon starten:
Code: Select all
# zfs send -vR Daten@2014-09-08 | nc $IP-Backupserver 9000
Für $IP-Backupserver mußt du natürlich die IP-Adresse des Backupservers eintragen.
Nach dem Ende der Übertragung ggfs. die Skripte in "System|Advanced|Command scripts" wieder aktivieren.
Nachfolgende Abgleiche:
Auf dem Backup-Server wird das gleiche Kommando wie oben eingegeben.
Auf dem Haupt-Server wird ein neuer Snapshot angelegt:
Code: Select all
# zfs snapshot -r Daten@2014-09-10
Wenn man möchte, kann man sich jetzt die zu übertragende Datenmenge
anzeigen lassen:
Code: Select all
# zfs send -vnRI Daten@2014-09-08 Daten@2014-09-10
Nun wird die Differenz zwischen den beiden Snapshots inkrementell
übertragen:
Code: Select all
# zfs send -vRI Daten@2014-09-08 Daten@2014-09-10 | nc $IP-Backupserver 9000
Weiteres Vorgehen:
Die weiteren Abgleiche brauchst du nicht mehr direkt über die NAS-Konsolen machen, die kannst das auch von deinem Rechner mit zwei Terminalfenstern (putty oder so) machen, da diese Abgleiche recht wenig Zeit benötigen.
Diese Abgleiche bewegen sich i.d.R. im Minuten-Bereich. Sollten sie sich aber im Stunden-Bereich bewegen, dann sollte sich das mal genauer ansehen. Meist gibt es da Optimierungsmöglichkeiten.
Beide Systeme
müssen immer über mindestens einen gemeinsamen Snapshot verbunden bleiben. In der Regel ist das der letzte Snapshot, mit dem ein erfolgreicher Abgleich durchgeführt wurde.
Falls du ein neues Dataset anlegen möchtest, dann mach nach dem Anlegen, und bevor du dort Daten ablegst, unbedingt einen rekursiven Snapshot des Pools!
Du kannst jederzeit einen rekursiven Snapshot deines Datenpools machen, ohne daß du danach gleich einen Abgleich machen musst.
Du kannst mit
Code: Select all
# zfs destroy -r Daten@$SNAPSHOTNAME
einen
alten Snapshot löschen. Das sollte aber keinesfalls ein Snapshot sein, der die letzte Verbindung zu deinem Backup darstellt!
Am Besten ist es, wenn du alte Snapshots erst dann löschst, wenn du gerade einen Abgleich durchgeführt hast.
Es ist ratsam, eine ganze Reihe von Snapshots auf dem Haupt-Server aufzuheben, denn nur damit kannst du veränderte, oder gelöschte Dateien zurückholen. Der Backup-Server ist insofern kein Backup-Archiv, sondern eine rein technische Absicherung des Haupt-NAS.
Snapshots, welche auf dem Haupt-NAS gelöscht wurden, werden beim Abgleich auch auf dem Backup-NAS gelöscht.
Bei dem zfs send Befehl ist
der
erste Snapshot-Parameter der Snapshot, mit dem der letzte erfolgreiche Abgleich durchgeführt wurde,
der
zweite Snapshot-Parameter der Snapshot, den du zuletzt gemacht hast.
Sämtliche Snapshots, welche du zwischendurch gemacht hast, werden dabei mit übertragen.
Nützliches:
Anzeige der Snapshots auf den Servern:
Dabei werden aber auch alle Untersnapshots mit angezeigt.
Praktikabler ist daher:
Falls dir eine Festplatte im Haupt-NAS ausfällt, und dein Pool dadurch degraded ist: Mach erst ein inkrementelles Backup, bevor du die kaputte Platte tauschst.
Dieses Backup wird auf jeden Fall schneller ausgeführt, als der Resilvering-Vorgang dauert.
Somit hast du im Backup einen validen Stand, und es kann dir egal sein, ob beim Resilvering etwas Unangenehmes passiert.
Übertragungszeit:
Die kann man ohne Kenntnis der Datenmenge, der Datenarten, sowie diverser zusätzlicher Faktoren kaum verlässlich bestimmen.
Als ein ganz grober Richtwert kann die Laufzeit eines Scrubs auf den zu übertragenden Pool dienen.
Der Erstabgleich wird sich in ähnlichen Dimensionen bewegen, evtl. ein paar Stunden länger.
Im Normalfall wird sich die Übertragungsrate zwischen 80 und 100 MB/s bewegen.
Einfach die Status-Anzeige beim Backup-NAS beobachten. Wenn dort 10% der zu übertragenden Datenmenge angekommen ist, kann man die Restzeit recht verläßlich hochrechnen.
Defragmentierung:
Achtung! Die nachfolgenden Schritte sollte man nur machen, wenn man die oben beschriebenen Schritte nicht nur ausgeführt, sondern auch tatsächlich kapiert hat!
Die beschriebene Methode taugt durchaus auch zur Defragmentierung der Dateien, wenn man sie im Ping-Pong Verfahren anwendet.
Dazu löscht man zuerst den Datenpool auf dem Backup-NAS, legt ihn neu an, und führt einen Erstabgleich durch.
Danach löscht man den Datenpool auf dem Haupt-NAS, legt ihn neu an, und führt eine Erstabgleich vom Backup-NAS auf das Haupt-NAS durch.
Das ist aber keine Sache, welche man ständig machen sollte. Ich führe das alle paar Jahre durch, und die daraus folgende Optimierung ist durchaus in der Praxis spürbar (z.B. große Verzeichnisse bauen sich schneller auf).
Abschluss:
Du wolltest das so detailliert wie möglich beschrieben haben. Ich habe hier hoffentlich keine Fehler eingebaut, aber ich kann auch nicht sämtliche Ausnahmesituationen kennen. Die typischen Fälle habe ich nach meiner Kenntnis behandelt.
So, wie es beschrieben habe, arbeite ich seit Jahren mit NAS4Free. Die Methode ist robust, schnell und wirklich sehr zuverlässig.
Die Sache mit den Snapshots muß man halt lernen und kapieren.
Grüße
Princo