Komprimiert btrfs vorhandene Dateien automatisch, wenn die Komprimierung aktiviert ist?

26

Ich habe btrfs als Format für mein /Dateisystem im Ubuntu 12.04 LTS-Installationsprogramm ausgewählt. Nach Abschluss der Installation habe ich compress=lzodie Mount-Optionen in hinzugefügt /etc/fstabund neu gestartet.

Werden die vorhandenen Dateien jetzt automatisch komprimiert, oder muss ich explizit etwas tun, damit dies geschieht?

ændrük
quelle
1
Sie müssen nicht sudo mount -o remount /neu starten , Sie könnten einfach und die neuen fstab-Optionen werden wirksam.
16.
Hinweis: Möglicherweise müssen Sie die Komprimierungsoption verwenden, oder einige Dateien bleiben unkomprimiert, egal was Sie tun ...
Rogerdpack
Ein Hinweis zur Druckkraft. Normale Komprimierung hat die Eigenschaft, dass, wenn festgestellt wird, dass die Komprimierung wenig oder gar keinen Nutzen hat, die Komprimierung für diese bestimmte Datei nicht fortgesetzt werden muss (wodurch verschwendete CPU gespart wird). Durch die Verwendung von Compress-Force wird trotzdem eine nutzlose Komprimierung versucht. Gute Beispiele, bei denen dies zutrifft, sind Dateien, die bereits komprimiert sind (Multimedia, Zip-Dateien usw.). Mit anderen Worten, Druckkraft ist im Allgemeinen eine schlechte Idee. ;)
zaTricky

Antworten:

27

Sie müssen ausführen btrfs fi defragment, um die Neukomprimierung vorhandener Daten zu erzwingen. Andernfalls werden nur neue Daten komprimiert.

Aus den FAQ :

... überlegen Sie -o compress, ob Sie eine erneute Bereitstellung für bestimmte Dateien durchführen und diese entweder direkt neu schreiben oder ausführen möchten , um alle Dateien erneut btrfs fi defragmentzu komprimieren. Das kann eine Weile dauern.

Norbert Fabritius
quelle
btrfs fi defragmentieren -r-clzo / path / to / fs
David Goodwin
2
Was ist mit der autodefragMount-Option? Komprimiert es auch zuvor nicht komprimierte Dateien, wenn es automatisch defragmentiert?
Geremia
1
Stellen Sie sicher, dass Sie das rekursive Flag "-r" zum Komprimieren in Verzeichnissen verwenden.
Salami
10

Ich habe das gemacht, was Norbert Fabritius gesagt hat, aber ich habe keine Komprimierung in den vorhandenen Dateien bemerkt - df -h / before btrfs fi defragment = 658MB | df -h / after btrfs fi defragment = 658MB. Neue Dateien sind in Ordnung. Wenn Sie ein wenig suchen, bringen Sie mir dieses Zitat:

Laufen diese:

# btrfs filesystem defragment ~/stuff

defragmentiert den Inhalt des Verzeichnisses nicht.

Dies ist beabsichtigt. btrfs fi defrag bearbeitet das einzelne Dateisystemobjekt, das an> es übergeben wurde. Dies bedeutet, dass der Befehl nur die Metadaten defragmentiert, die im Verzeichnis> object enthalten sind, und nicht den Inhalt des Verzeichnisses. Wenn Sie den Inhalt> des Verzeichnisses defragmentieren möchten, ist Folgendes sinnvoller:

# find -xdev -type f -exec btrfs fi defrag '{}' \;

Danach ist meine 656MB - nichts riesiges, aber sicherlich gibt es Komprimierung.

Quelle: https://btrfs.wiki.kernel.org/index.php/Problem_FAQ#Defragmenting_a_directory_doesn.27t_work

Ich hoffe das hilft.

Entschuldigung, mein Englisch.

J. Neto
quelle
1
1. Verwenden oder vertrauen Sie df nicht, wenn Sie btrfs verwenden . 2. Für ein besseres Komprimierungsverhältnis verwenden Sie zlib (allerdings langsamer)
Ignis
3
Sollte Ihre Befehlszeile nicht defrag -clzooder defrag -czlibstattdessen nur enthalten defrag, wenn Sie die Dinge tatsächlich komprimieren möchten?
jbo5112
5
Es gibt ein "-r" rekursives Flag, so dass Sie dies jetzt tun können:btrfs fi defrag -r -czlib ~/stuff
Salami
8

Gemäß der Oracle-Dokumentation können Sie vorhandene Dateien in einem vorhandenen Online-Dateisystem komprimieren, indem Sie jede darin enthaltene Datei mit den Optionen -c, -clzo oder -czlib defragmentieren. LZO wird für die Geschwindigkeit empfohlen.

find / -xdev \( -type f -o -type d \) -exec btrfs filesystem defragment -v -clzo -- {} +

Dies verwendet den Befehl find, um den btrfs-Defragmentierer für jede Datei im Root-Dateisystem auszuführen (angegeben durch den Schrägstrich direkt nach dem Befehl "find" am Anfang). Wenn Sie über andere Subvolumes verfügen, können Sie diese erneut mit dem Pfad eines Subvolumes (z. B. I have one at / home) anstelle des einzelnen Schrägstrichs verwenden.

Hierfür benötigen Sie Root-Rechte. Fügen Sie ggf. sudo an der Vorderseite hinzu.

Sehen:

Geoff
quelle
3

Laut https://btrfs.wiki.kernel.org/index.php/Mount_options#List_of_options stehen folgende Komprimierungsalgorithmen zur Verfügung:


compress,compress-force
Enable compression. Starting with kernel 2.6.38 you can choose the algorithm for compression:

 - compress=zlib - Better compression ratio. It's the default and safe for olders kernels.
 - compress=lzo - Faster compression.
 - compress=no - Disables compression (starting with kernel 3.6). 

compress-force= - Enable compression even for files that don't compress well, like videos and dd images of disks. The options compress-force=zlib and compress-force=lzo works for kernels >2.6.38.

Note that old (before 2012) btrfs-progs versions will probably fail some operations (e.g. fsck) on filesystems with LZO compression. 

Hinweis: Dieser Beitrag ist die Antwort auf die zusätzliche Frage, welche Art von Komprimierungsalgorithmen verfügbar sind, die unten gestellt wurde. Geben Sie mir also bitte keine Schuld.

Rostislav Stribrny
quelle
2

Laut ArchWiki :

Tipp: Die Komprimierung kann auch pro Datei aktiviert werden, ohne die compressMount-Option zu verwenden. einfach chattr +cauf die datei anwenden . Wenn es auf Verzeichnisse angewendet wird, werden neue Dateien automatisch komprimiert, sobald sie kommen.

Sehr schön! Gott segne BTRFS!

Auch aus dem BTRFS-Wiki :

Kann ich eine Komprimierung für eine Datei erzwingen, ohne die Option zum Komprimieren des Ladevorgangs zu verwenden?

Ja. Das Dienstprogramm chattrunterstützt das Festlegen des Dateiattributs c, das den Inode zum Komprimieren neu geschriebener Daten kennzeichnet.

Geremia
quelle
-9

Die Komprimierung ist in Btrfs standardmäßig aktiviert. Sofern Sie sie nicht ausdrücklich deaktiviert haben, sollte sie komprimiert werden.

Diego
quelle
11
Nicht wahr, Sie müssen compression="Ihren bevorzugten Komprimierungsalgorithmus" in fstab übergeben, um ihn zu aktivieren.
Turbo
@turbo Welche Kompressionsalgorithmen gibt es?
ζ--
Anscheinend
rogerdpack