Ich habe einen Pool, der im Jahr 2011 mit erstellt wurde lzjb compression
, und erst ein paar Jahre später konnte ich die Komprimierung durch ein Upgrade auf einstellen lz4
. Ich schätze, dass mindestens 20% des Inhalts (nach Speicherplatz) auf dem Array vor 2013 erstellt wurden, was bedeutet, dass es immer noch mit komprimiert wird lzjb
.
Ich kann mir ein paar Optionen vorstellen, um dies zu beheben und (etwas) Platz zurückzugewinnen:
Sichern Sie und stellen Sie in einem neuen Pool wieder her. Nicht wirklich praktisch, da ich nicht genügend redundanten Speicherplatz habe, um die temporäre Kopie zu speichern. Für die Wiederherstellung muss der Pool auch mehrere Stunden offline sein.
Schreiben Sie ein Skript, um alle Dateien mit einem Zeitstempel, der älter als 2013 ist, erneut zu kopieren. Dies ist potenziell riskant, insbesondere, wenn Leerzeichen oder andere Sonderzeichen unterdrückt werden und der ursprüngliche Name beschädigt wird.
Gibt es eine Möglichkeit, ZFS dazu zu bringen, vorhandene Blöcke mit dem aktuellen Komprimierungsalgorithmus neu zu komprimieren? Ein bisschen wie ein Peeling, aber die Kompression heilen.
Eine verwandte Frage: Gibt es eine Möglichkeit, die Verwendung jeder Art von Komprimierungsalgorithmus zu erkennen? zdb zeigt nur die Gesamtkomprimierungsstatistik an, anstatt sie in einzelne Algorithmen aufzuteilen.
export LC_ALL=C
an den Anfang des Skripts hinzu, und alle Nicht-ASCII-Sonderzeichen in Dateinamen bleiben erhalten. Es ist schwieriger, Leerzeichen und Bindestrich intakt zu halten. Verwenden Sie doppelte Anführungszeichen und--
zcp -- "$SOURCE" "$TARGET"
.--
) nicht als "kniffliger" bezeichnen. Das ist genauso wichtig wie beispielsweise die Vermeidung von SQL-Injection.Antworten:
Sie müssen die Daten (vollständig oder teilweise) erneut kopieren oder zfs sendet / empfängt die Daten an einen neuen Pool oder ein neues ZFS-Dateisystem.
Es gibt keine anderen Optionen.
quelle