GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann man Daten in zfs neu ausbalancieren? (Stellen Sie sicher, dass die Daten auf alle Striped Mirrors verteilt sind)

Nur neu geschriebene (angehängte) Daten werden zwischen allen derzeit aktiven vdevs aufgeteilt, es gibt keinen expliziten Rebalance-Vorgang in ZFS.

Zwei mögliche Lösungen:

  1. Warten Sie, bis alle alten Daten neu geschrieben sind (wegen CoW kann dies sehr lange dauern, im schlimmsten Fall doppelt so lange wie es dauern würde, die Platte komplett zu beschreiben).
  2. Entfernen Sie alle Daten und schreiben Sie sie neu (zfs send/recv ist hilfreich, um alle Daten aus dem Pool und zurück zu bekommen, ohne etwas zu verlieren). Dies muss nicht auf einmal erfolgen, sondern kann im selben Pool erfolgen.

Genauer gesagt würde ich die zweite Lösung wählen und in Zeiten geringer Systemlast (z. B. nachts) jedes Dateisystem separat übertragen:

  • Machen Sie einen Schnappschuss (zfs snapshot -r ) eines anständig großen Dateisystems (und rekursiv nachfolgender Dateisysteme)
  • Verwenden Sie zfs send | zfs recv mit geeigneten Optionen zum Senden des Snapshots an ein neu erstelltes temporäres Dateisystem (kann sich im selben Pool befinden, wenn der Platz es zulässt); dieses Dateisystem sollte sich in der Hierarchie an derselben Stelle wie das alte befinden
  • Nachdem die Kopie fertig ist (kann einige Zeit dauern, da die Disketten lesen und schreiben müssen), zfs destroy der alte Snapshot und das alte Dateisystem
  • zfs rename das temporäre System auf den alten Namen
  • Überprüfen und ändern Sie die Einhängepunkte mit zfs mount , indem Sie die vorherige Situation für Ihr ersetztes Dateisystem neu anordnen
  • Wiederholen, bis alle Dateisysteme verschoben sind

mögliche 3. Lösung (wie von SirMaster in diesem FreeNAS-Forenbeitrag erwähnt):

  • neue Festplatte(n) zu zpool hinzufügen
  • Viele Dateien in ein anderes neues Verzeichnis /mnt/pool/temp/ kopieren
  • Originaldateien löschen:rm -rf original/
  • Verzeichnis umbenennen zurück:mv temp/ original/

Dies funktioniert, weil ZFS Schreibvorgänge proportional auf das vdev mit dem meisten freien Speicherplatz platziert, in diesem Fall auf die brandneuen Laufwerke, die leer waren. (ab 0.7 bevorzugt zfs schnellere Laufwerke für Schreibvorgänge, aber nehmen wir an, Ihre 2 neuen Laufwerke haben die gleiche oder eine höhere Leistung als die ursprünglichen Laufwerke)

Es ist wahrscheinlich langsamer als zfs send | zfs recv , aber einfacher, da Sie keine Snapshots erstellen/löschen müssen.

Sie können zpool list -v ausführen vor und nach, um jede vdev-Nutzung zu sehen.

Außerdem wurde ein PHP-Skript gefunden, das das Kopieren/Löschen/Umbenennen auf Dateibasis durchführt. Dies wurde in einer Antwort auf eine ähnliche (aber zvol) Frage einige Jahre älter verlinkt. (habe dieses Skript nicht persönlich getestet)


Linux
  1. Wie füge ich am Ende einer Datei einen Zeilenumbruch hinzu?

  2. Wie kann man sicher sein, dass ein Verzeichnis oder eine Datei tatsächlich gelöscht wird?

  3. Alle Dateien bis zum Match anzeigen?

  4. Wie macht man die Aktivitätsleiste der Gnome-Shell immer klein?

  5. Wie finde ich alle unterschiedlichen Dateierweiterungen in einer Ordnerhierarchie?

Wie man eine Datei unter Linux ausführbar macht

Wie kann ich tcpdump in eine Datei schreiben und die entsprechenden Daten standardmäßig ausgeben lassen?

Wie kann man ssh dazu bringen, sich als der richtige Benutzer anzumelden?

Wie kann ich alle Dateien bearbeiten, die von find in vi in ​​Linux zurückgegeben werden?

Wie finde ich den Standard-Dateimanager?

Wie mache ich eine Datei NICHT änderbar?