Verstandnisfrage: Warum snapshot vor Replizierung notwendig? Wie Kopie machen?

ThomasSH

Neuling
Thread Starter
Mitglied seit
09.02.2013
Beiträge
110
Hallo,

ich suche nun schon seit 2 Tagen nach einer Lösung, mein ZFS Pool von 2 4TB HDDs (hp N40L, Freenas 9.3) auf eine 8 TB zu kopieren (klonen, replizieren). Alle Anleitungen, die ich bisher gefunden habe beschreiben, das vor der Replizierung ein Snapshot gemacht werden muß. ABER WARUM??? Warum kann ich nicht vom Orginal eine Kopie machen, sondern muß über ein (wenn aktuell angelegt dann sogar noch leeres) Snapshot gehen? Da wird dann doch nur "nichts" kopiert???

Und wenn ich nach so einer anleitung vorgehe (hier mal chruetertee.ch :: ZFS Dateisystem replizieren weils gerade noch offen ist) dann bekomme ich eine Fehlermeldung, die ich nicht nachvollziehen kann.

Anhang anzeigen Bildschirmfoto 2015-05-08 um 20.37.59.pdf (Sorry wegen der beschissenen Bildqualität, aber die Webseite wollte kein gutes 165KB-PDF akzeptieren).

Oder anders gefragt: Wie bekomme ich innerhalb des NAS eine 100% Kopie von den Daten auf eine weitere HDD?

Thomas
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
...hier gibt es einen ZFS fred...da findest Du evtl. schneller Hilfe.

Du musst einen snapshot machen...ist bei ZFS einfach so...so kann man eine Sicherungskopie machen, während auf dem gleichen Pool bzw. Dateisystem schon weiter gearbeitet wird....zero-downtime, sozusagen.
Der snap erbraucht aber nur ein paar kb...auf eine zweite Platte bekommst Du den mittels zfs-send/-receive...einen Pool auf der zweiten Platte anlegen und den snap von Pool A senden und auf Pool B empfangen.
 
Bei einem CopyOnWrite Dateisystem bedeutet ein Snap, dass der bisherige Dateistand eingefroren wird d.h. dass bei Änderungen die ja immer neu angelegt werden, der Platz der alten Daten nicht freigegeben wird. Solange man keine Änderung an den Daten vornimmt, ist die "Größe" des Snapshots=0. Das bedeutet aber nur dass durch den Snapshot kein Poolplatz verloren geht.

Diesen eingefrorenen Datenstand kann man dann replizieren.
 
Zuletzt bearbeitet:
Danke für die Antwort, auch wenn ich das immer noch nicht nachvollziehen kann. Muß ich also einfach so hinnehmen.

Habt ihr das Bild betrachtet? Warum die Fehlermeldung? Wo kommt "home" und "now" her? Sind das feste Begriffe oder wahlfreie Variable?

Thomas
 
...mach mal ein "zfs list -t snap".

"home" ist das ZFS Filesystem.."@now" ist der Zeitstempel, der beim anlegen des snaps "aktuell" ist.
Du musst das auf Dein Setup - pool, zfs-filesystem und snap-maker/-tag anpassen.

Ich habe versucht, das nachzuvollziehen. Klappt nicht. also mal im Detail.

"home" im Beispiel ist das, was bei mir "Eigen_Daten" heisst? (Das ist der Eintrag nach zfs list, der mit "6,39 TB used" ist.) Aber was ist denn "tank" bei meiner Installation???

"@now" kann ich wohl so übernehmen. Oder?

(Aus dem BEispiel)
# zfs snapshot tank/home@now

müßte dann bei mir lauten

# zfs snapshot Eigene_Daten/home@now

Funktionier leider nicht, weil "home" irgendwie falsch ist. Und warum gibt es im BEispiel

# zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 1000M 66.0G 18K /tank
tank/home 1000M 66.0G 1000M /usr/home
tank2 110K 66.9G 18K /tank2

"tank" und "tank/home", wenn "tank" des zfs-Datenvolume ist? Ist "/home" dann ein Ordner? "tank2" ist ja offensichtlich das Zielvolume.

Thomas
 
...ich sagte ja, es sieht bei Dir komisch aus.....ich kenne FreeNAS zwar nicht, aber zfs sollte da gleich sein.

Das erste Element ist der pool (tank, oder bei Dir "Eigene_Daten"), dann erst kommen die ZFS-Filesysteme (und bei Dir ist da "nur" .system, was eben komisch ist).

Hast Du überhaupt schon ein Filesystem und snapshots angelegt?

Wie gesagt, Du solltest Dir das ZFS Konzept mal angucken...Pool, FS, snaps.
 
zfs list zeigt alle Dateisysteme, das sind lt Screenshot

Eigene_Daten, das ist der Name des ZFS Pools. Darunter liegen ZFS Dateisysteme
(Das ist sowas wie eine Partiion in anderen Systemen - ist im Gegensatz zu einer Partition in der Größe nicht festgelegt)
In vielen Beispielem wird der Pool "tank" benannt

ZFS Dateisysteme sind also in deinem Fall z.B,
.system
.system/cores
.system/cores/samba4

wobei es unerheblich ist, ob eine solche Struktur als Dateisystem abzubilden eine gute Idee ist
In dem Beispiel wäre home ein Dateisystem

Wenn man jetzt einen Snapshot eines Dateisystems anlegen möchte, muss man das Dateisystem angeben also z.B
zfs snapshot Eigene_Daten/.system/cores/samba4@xx wobei xx ein beliebiger Name für den Snap sein kann

Diesen snapshot kann man dann mit zfs send irgendwohin kopieren - mit allen ZFS Eigenschaften
Insgesamt ist die Struktur und Benennung der Dateisysteme aber gelinde gesagt "ungewöhnlich".

- - - Updated - - -

# zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 1000M 66.0G 18K /tank
tank/home 1000M 66.0G 1000M /usr/home
tank2 110K 66.9G 18K /tank2

"tank" und "tank/home", wenn "tank" des zfs-Datenvolume ist? Ist "/home" dann ein Ordner? "tank2" ist ja offensichtlich das Zielvolume.

Thomas

In dem Beispiel gibt es zwei Datenpools tank und tank2
Auf dem Pool tank ist das Dateisystem home angelegt, das als /usr/home gemountet wird
 
Zuletzt bearbeitet:
Hallo Gea,

danke für die Mühe, aber ich komme immer noch nicht hinterher.

Das ich zum Kopieren meiner Daten ein Snapshot brauche habe ich inzwischen gelernt. Okay.

Bei mir bringt zfs list diese Ausgabe (gekürzt):

Eigene_Daten 6.39 (Used) 764G (Aval) 6.39 (Refer) /mnt/Eigene_daten
Eigene_Daten/.system 94.7 (Used) 764G (Aval) 57M (Refer) /mnt/Eigene_daten/.system

Nach deiner Aussage müßte "/.system" der Datenbestand sein, aber das kann nicht sein bei einer Größe von nur 97 GB.

Könnte es sein, das der gesamte Server, der sich mit "Speicher" meldet (benannt wurde), der Pool ist und "Eigene_Daten" Dateisystem? Denn ausser "Eigene_Daten" gibt es im "Speicher" auch noch "tes8" (sollte eigentlich Test8 sein, aber jetzt egal).

Thomas
 
Zum einfachen Kopieren braucht man keinen Snapshot.
Den braucht man für ZFS Replikation mit zfs send.

.system ist kein Datenbestand sondern zunächst ein Dateisystem (quasi eine Partition),
genau wie .system/samba ein Dateisystem ist, das momentan unterhalb von .system liegt.

Es gibt hier einfach zwei Ebenen.
1.) Den ZFS Pool und darauf angelegte ZFS Dateisysteme/Partitionen (manchmal auch dataset genannt)
Die können innerhalb des Pools frei verschoben werden

2.) Das Dateisystem des Rechners mit normalen Ordnern und
Mountpoints (das sind "Ordner" die aber keine einfachen Ordner sind sondern ZFS Dateisysteme die hier eingeblendet werden)

Speicher wird vermutlich der Name des Servers sein (Ausgabe des CLI Befehls "hostname")
 
Zuletzt bearbeitet:
Ich sehe immer noch nicht klarer. Was ist denn nun was (im folgendem Bild):
Anhang anzeigen Bildschirmfoto 2015-05-09 um 12.38.46.pdf

Speicher ist: (Name des Server?)
Datenträger ist: (Partion?)
/mnt/Eigen_Daten: (Pool oder dataset?)


Thomas

- - - Updated - - -

...ich sagte ja, es sieht bei Dir komisch aus.....ich kenne FreeNAS zwar nicht, aber zfs sollte da gleich sein.

Das erste Element ist der pool (tank, oder bei Dir "Eigene_Daten"), dann erst kommen die ZFS-Filesysteme (und bei Dir ist da "nur" .system, was eben komisch ist).

Hast Du überhaupt schon ein Filesystem und snapshots angelegt?

Wie gesagt, Du solltest Dir das ZFS Konzept mal angucken...Pool, FS, snaps.

Snapshot per GUI im Webbrowser, die werden aber bei zfs list nicht angezeigt. Wie sollten sie auch, ich konnte im GUI ja keine BEzeichnung eingeben.

Und ein Filesystem? Mal ganz doof gefragt: Wozu brauche ich das? Ich bin 2 JAhre ohne ausgekommen, haben Terabyteweise Daten auf den Server geschoben und auch wieder lesen können. Vemutung: Das hat Freenas automatisch gemacht, wie ich den Pool angelegt habe (in der Hoffnung, jetzt keine Bezeichnungen zu verwechseln).

Thomas

- - - Updated - - -

Zum einfachen Kopieren braucht man keinen Snapshot.

Dann sage mir doch einfach mal, wie ich meine Daten aus dem Pool "Eigene_Daten" (besteh aus 2 HDDs mit je 4 TB) auf eine neue HDD (8TB) bekomme ohne den Umweg alles per Leitung über einen Klienten zu kopieren. Ich habe in allen (deutschen) Anleitungen immer nur den Weg über Shapshot gefunden.


---------------

So, jetzt komme ich auch per ssh auf den Server. Hier noch mal die Ausgabe in Textform:


[root@Speicher] ~# hostname
Speicher.local

[root@Speicher] ~# zfs list
NAME USED AVAIL REFER MOUNTPOINT
Eigene_Daten 6.39T 764G 6.39T /mnt/Eigene_Daten
Eigene_Daten/.system 98.2M 764G 57.0M /mnt/Eigene_Daten/.system
Eigene_Daten/.system/cores 23.9M 764G 23.8M /mnt/Eigene_Daten/.system/cores
Eigene_Daten/.system/rrd-9e3dcd77be42478dac156d6a01ac8dc6 152K 764G 144K /mnt/Eigene_Daten/.system/rrd-9e3dcd77be42478dac156d6a01ac8dc6
Eigene_Daten/.system/rrd-d196e215585c45ac9d941df5877964d8 152K 764G 144K /mnt/Eigene_Daten/.system/rrd-d196e215585c45ac9d941df5877964d8
Eigene_Daten/.system/rrd-f6da24756e2f4dee86c3a9c9fb75829f 144K 764G 144K /mnt/Eigene_Daten/.system/rrd-f6da24756e2f4dee86c3a9c9fb75829f
Eigene_Daten/.system/samba4 3.73M 764G 3.37M /mnt/Eigene_Daten/.system/samba4
Eigene_Daten/.system/syslog-9e3dcd77be42478dac156d6a01ac8dc6 9.29M 764G 9.28M /mnt/Eigene_Daten/.system/syslog-9e3dcd77be42478dac156d6a01ac8dc6
Eigene_Daten/.system/syslog-d196e215585c45ac9d941df5877964d8 444K 764G 436K /mnt/Eigene_Daten/.system/syslog-d196e215585c45ac9d941df5877964d8
Eigene_Daten/.system/syslog-f6da24756e2f4dee86c3a9c9fb75829f 3.36M 764G 392K /mnt/Eigene_Daten/.system/syslog-f6da24756e2f4dee86c3a9c9fb75829f
tes8 668K 7.14T 260K /mnt/tes8
[root@Speicher] ~#

Thomas
 
Zuletzt bearbeitet:
Ich sehe immer noch nicht klarer. Was ist denn nun was (im folgendem Bild):
Anhang anzeigen 322843

Speicher ist: (Name des Server?)
Datenträger ist: (Partion?)
/mnt/Eigen_Daten: (Pool oder dataset?)


Thomas

- - - Updated - - -



Snapshot per GUI im Webbrowser, die werden aber bei zfs list nicht angezeigt. Wie sollten sie auch, ich konnte im GUI ja keine BEzeichnung eingeben.

Und ein Filesystem? Mal ganz doof gefragt: Wozu brauche ich das? Ich bin 2 JAhre ohne ausgekommen, haben Terabyteweise Daten auf den Server geschoben und auch wieder lesen können. Vemutung: Das hat Freenas automatisch gemacht, wie ich den Pool angelegt habe (in der Hoffnung, jetzt keine Bezeichnungen zu verwechseln).

Thomas

- - - Updated - - -



Dann sage mir doch einfach mal, wie ich meine Daten aus dem Pool "Eigene_Daten" (besteh aus 2 HDDs mit je 4 TB) auf eine neue HDD (8TB) bekomme ohne den Umweg alles per Leitung über einen Klienten zu kopieren. Ich habe in allen (deutschen) Anleitungen immer nur den Weg über Shapshot gefunden.


---------------

So, jetzt komme ich auch per ssh auf den Server. Hier noch mal die Ausgabe in Textform:


[root@Speicher] ~# hostname
Speicher.local

[root@Speicher] ~# zfs list
NAME USED AVAIL REFER MOUNTPOINT
Eigene_Daten 6.39T 764G 6.39T /mnt/Eigene_Daten
Eigene_Daten/.system 98.2M 764G 57.0M /mnt/Eigene_Daten/.system
Eigene_Daten/.system/cores 23.9M 764G 23.8M /mnt/Eigene_Daten/.system/cores
Eigene_Daten/.system/rrd-9e3dcd77be42478dac156d6a01ac8dc6 152K 764G 144K /mnt/Eigene_Daten/.system/rrd-9e3dcd77be42478dac156d6a01ac8dc6
Eigene_Daten/.system/rrd-d196e215585c45ac9d941df5877964d8 152K 764G 144K /mnt/Eigene_Daten/.system/rrd-d196e215585c45ac9d941df5877964d8
Eigene_Daten/.system/rrd-f6da24756e2f4dee86c3a9c9fb75829f 144K 764G 144K /mnt/Eigene_Daten/.system/rrd-f6da24756e2f4dee86c3a9c9fb75829f
Eigene_Daten/.system/samba4 3.73M 764G 3.37M /mnt/Eigene_Daten/.system/samba4
Eigene_Daten/.system/syslog-9e3dcd77be42478dac156d6a01ac8dc6 9.29M 764G 9.28M /mnt/Eigene_Daten/.system/syslog-9e3dcd77be42478dac156d6a01ac8dc6
Eigene_Daten/.system/syslog-d196e215585c45ac9d941df5877964d8 444K 764G 436K /mnt/Eigene_Daten/.system/syslog-d196e215585c45ac9d941df5877964d8
Eigene_Daten/.system/syslog-f6da24756e2f4dee86c3a9c9fb75829f 3.36M 764G 392K /mnt/Eigene_Daten/.system/syslog-f6da24756e2f4dee86c3a9c9fb75829f
tes8 668K 7.14T 260K /mnt/tes8
[root@Speicher] ~#

Thomas


Speicher ist: Name des Server
Datenträger ist: Praktisch die oberste Hierarchie des Dateisystems=Root des Dateisystems oder /
/mnt/Eigen_Daten: (Pool oder dataset?): Weder noch sondern ein Mountpoint unter dem der ZFS Datenopool "Eigene_Daten" unter dem Datenträger / erscheint.

(Wobei ich aus nicht sagen würde, dass ich das so besonders übersichtlich finde.
ZFS Mountpouint=Poolstruktur wie bei Solaris üblich finde ich schon besser.
Dort würde der Pool Eigene_Daten auch normalerweise unter /Eigene_Daten liegen und nicht unter /mnt/Eigene_Daten)

Ansonsten
zfs send ist die schnellste Methode. Auch überträgt das die wichtigsten ZFS Eigenschaften gleich mit.
Es arbeitet nach dem ersten Lauf auch inkrementell - überträgt also nur geänderte Daten

Alternative: normales filecopy oder ein sync-tool wie robocopy oder rsync
 
Zuletzt bearbeitet:
Ansonsten
zfs send ist die schnellste Methode. Auch überträgt das die wichtigsten ZFS Eigenschaften gleich mit.


Mir ist wichtig, das ich eine lauffähige Kopie aller Daten bekomme. Dazu gehört, das alle Dateiattribute von Mac OS X (lange Dateinamen, Umlaute, Sonderzeichen, Flags & Tags, Resourcen (versteckte Dateien mit gleichem Namen)) 1 zu 1 kopiert werden. Wie das erreicht wird ist egal.

Es arbeitet nach dem ersten Lauf auch inkrementell - überträgt also nur geänderte Daten

Es wird keine geänderten Daten geben, da die Kopie (auf der neuen 8er Platte) das vorherige Original (2*4er Platten) Komplett ersetzten soll. Ich sag doch die ganze Zeit: Ich brauche eine KOPIE - keine Synchronisation.

Alternative: normales filecopy oder ein sync-tool wie robocopy oder rsync

Was ist für dich "normales filecopy"? Vom Klienten aus kopieren? Das klappt nicht, weil im Mittel nur 40MB/s erreicht werden und - aus welchem Grund auch immer - der Kopiervorgang nach einigen Stunden abbricht.
Darum der Versuch, im Server direkt umzukopieren.

Was ist "robocopy"? Kann rsync wirklich innerhalb eines Servers eine Kopie anlegen? Bisher habe ich dazu nur Anleitungen gefunden, von Server1 auf Server2 zu kopieren.

Thomas
 
...
Dann sage mir doch einfach mal, wie ich meine Daten aus dem Pool "Eigene_Daten" (besteh aus 2 HDDs mit je 4 TB) auf eine neue HDD (8TB) bekomme ohne den Umweg alles per Leitung über einen Klienten zu kopieren. Ich habe in allen (deutschen) Anleitungen immer nur den Weg über Shapshot gefunden.
...

So wie ich das sehe sollte Folgendes funktionieren:

(1) neue 8TB Platte in den Free-NAS-Rechner einsetzen
(2) Befehl "format" eingeben, dieser listet alle Platten, hier benötigst Du die Plattenbezeichnung der 8TB-Platte, wie z.B. "c0t0d0" für Schritt (4)
(3) format mit <Strg><c> abbrechen
(4) Befehl "zpool create newpool <Plattenbezeichnung der 8TB-Platte aus (2)>" (z.B. c0t0d0)
(5) Befehl "zfs snapshot -r Eigene_Daten@heute"
(6) Befehl "zfs send -R Eigene_Daten@heute | zfs receive -F -d newpool" (Das wird dann dauern bis der durch ist)

siehe auch: https://docs.oracle.com/cd/E18752_01/html/819-5461/gbchx.html

Einzige Frage für mich ist, ob (6) wie angegeben rekursiv ohne Umweg (über eine Zwischendatei etwa) klappt.

Damit sollten alle Dateien inlusive aller Attribute 1:1 auf newpool landen.

Korrigiert mich, wenn hier noch ein Denkfehler drinsteckt.
 
Alle Anleitungen, die ich bisher gefunden habe beschreiben, das vor der Replizierung ein Snapshot gemacht werden muß. ABER WARUM???

Der Snapshot definiert den Zustand aller Daten zu einem bestimmten Zeitpunkt. Und dieser Zustand kann dann genutzt werden, zum Beispiel für eine Replikation. Ansonsten würde die Replikation zu einem inkonsistenten Datenbestand führen, wenn während der Replikation, welche bei einigen Terabyte ja durchaus einige Zeit dauern kann, Daten geändert werden oder neue hinzukommen. Wenn Daten auf dem System 1 geändert werden würden, nachdem sie bereits auf System 2 repliziert wurden, bekäme System 2 in diesem Fall davon ja überhaupt nichts mit. Die Daten auf beiden Systemen würden sich also nach dem Replikationsvorgang unterscheiden. Um dies zu vermeiden, wird wie gesagt vorher ein Snapshot angelegt. Auch das Lesen von Daten kann je nach Konfiguration zu einer Änderung der Daten führen, nämlich einer Aktualisierung der Zeit des letzten Zugriffs.

Ich habe den ganzen Ablauf gerade mal schnell auf einer VM nachgestellt. Die Migration der Daten hat problemlos geklappt und ließ sich sogar gänzlich über die FreeNAS-Weboberfläche durchführen:
  1. Mit dem Volume-Manager ein Volume "Media" angelegt mit 2 x 40 GB im Stripe
  2. "Media" mit einigen Testdaten befüllt
  3. Mit dem Volume-Manager ein Volume "Media2" angelegt mit 1 x 80 GB im Stripe
  4. Anleitung zur Replikation befolgt: FreeNAS User Guide 9.3 - Storage Replication
  5. Nach erfolgreicher Replikation Snapshot-Task und Replikation-Task gelöscht
  6. "Media" gelöscht (destroy)

Für den Replikation-Task oben wird ein Snapshot-Task für "Media" angelegt und danach ein Replikation-Task von "Media" auf "Media2" mit localhost als Hostname. Steht alles in der Anleitung.
 
Zuletzt bearbeitet:
@Thomas, ZOS hatte es fast schon richtig. Bei ich denke fast allen Vorgängen in ZFS muss auch der Pool angegeben werden:

Nehmen wir an "tank" wäre dein Poolname, dann sollte ein

zfs send tank/Eigene_Daten@heute | zfs receive newpool

reichen. Optionale Parameter braucht es nur beim Überschreiben auf dem Ziel oder dem Übertragen weiterer Snapshot bzw. weiterer Datasets unterhalb von Eigene_Daten sofern angelegt als Beispiel. Das Ergebnis sollte dann ein newpool/Eigene_Daten einschließlich des Snapshot @heute sein.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh