Wenn am Beispiel eines gestreiften Spiegels (Raid 10) zwei Datenträger auf vier erweitert werden, wie können die Daten von den beiden Datenträgern zwischen den beiden Spiegeln "neu ausgeglichen" (verteilt) werden?
Das heißt, wie können die Dateien, die auf einen Spiegel geschrieben wurden, auf zwei Spiegel geschrieben werden, um die gestreiften Festplatten zu nutzen?
Antworten:
Nur neu geschriebene (angehängte) Daten werden auf alle derzeit aktiven vdevs aufgeteilt. In ZFS gibt es keine explizite Neuausgleichsoperation.
Zwei mögliche Lösungen:
Genauer gesagt würde ich die zweite Lösung wählen und jedes Dateisystem zu Zeiten mit geringer Systemlast (z. B. nachts) separat übertragen:
zfs snapshot -r
Machen Sie einen Schnappschuss ( ) eines Dateisystems mit angemessener Größe (und rezidivierender Dateisysteme mit rekursiver Größe).zfs send | zfs recv
Option mit den entsprechenden Optionen, um den Snapshot an ein neu erstelltes temporäres Dateisystem zu senden (kann sich im selben Pool befinden, wenn der Speicherplatz dies zulässt). Dieses Dateisystem sollte sich in der Hierarchie an derselben Stelle befinden wie das altezfs destroy
der alte Snapshot und das alte Dateisystem erstelltzfs rename
das temporäre System zum alten Namenzfs mount
die vorherige Situation für Ihr ersetztes Dateisystemquelle
mögliche dritte Lösung (wie durch SirMaster in dieser FreeNAS - Forum erwähnte Post ):
rm -rf original/
mv temp/ original/
Dies funktioniert, weil ZFS Schreibvorgänge proportional zu dem vdev platziert, der den meisten freien Speicherplatz hat, in diesem Fall zu den brandneuen Laufwerken, die leer waren. (Ab Version 0.7 bevorzugt zfs schnellere Laufwerke für Schreibvorgänge . Nehmen wir jedoch an, dass Ihre beiden neuen Laufwerke die gleiche oder eine höhere Leistung aufweisen als die ursprünglichen Laufwerke.)
Es ist wahrscheinlich langsamer als
zfs send | zfs recv
, aber einfacher, weil Sie keine Schnappschüsse erstellen / zerstören müssen.Sie können
zpool list -v
vorher und nachher ausführen, um jede vdev-Auslastung anzuzeigen.Außerdem wurde ein PHP- Skript gefunden , das die Prozedur zum Kopieren / Löschen / Umbenennen Datei für Datei ausführt. Dies wurde in einer Antwort auf eine ähnliche (aber zvol) Frage verknüpft, die einige Jahre älter war. (habe dieses Skript nicht persönlich getestet)
quelle