Gibt es in BTRFS eine Möglichkeit, die Komprimierung dauerhaft einzustellen?

Ich habe eine USB-Festplatte.

Ich möchte es mit aktivierter Komprimierung bereitstellen. Ich kann in der fstab meines Systems oder sogar mit udev-Regeln tun. Das Problem ist, dass ich meine USB-Festplatte nicht nur auf meinem Computer mounten kann. Bisher habe ich jedes Mal, wenn ich sie mounte, ein Terminal ausgelöst.

Dann habe ich . Dies funktioniert sehr gut aber Ich möchte LZO anstelle von ZLIB verwenden. Gibt es eine Möglichkeit Um genauer zu sein und den Komprimierungsalgorithmus ein für allemal zu definieren?

Antwort

btrfs komprimiert jede Datei, die seit dem Mounten geändert wurde Wenn Sie Folgendes verwenden:

mount -o compress-force=lzo /dev/btrfsdev /mnt/btrfsmnt 

Wenn Sie sicherstellen möchten, dass ALLE Dateien auf diese Weise komprimiert werden, habe ich ein kleines Skript, das ich dazu geschrieben habe …

du -ht +$((1024*1024)) "$HOME" |\ sed -rn "s/^[^/]*(.*)/btrfs fi defrag -fvclzo "\1"/p" |\ sudo sh -n 

Das Obige funktioniert nur in meinem $HOME -Verzeichnis – aber Sie können es für alles oder jedes verwenden, wie Sie möchten. Es wird auch der Operand -n an sh weitergeleitet Sie können selbst sehen, was sh derzeit not vor dem Entfernen, um es anzuweisen.

Wie auch immer, zuerst wird du für Dateien im human-readable -Format (hier wahrscheinlich überflüssig, da wir dies im nächsten Schritt entfernen sowieso) , die größer als 1MB oder $((1024*1024)).

Es |pipes seine Informationen an sed welche Streifen Aus allem, bevor der führende /, "quotes" Dateiname den Befehl btrfs filesystem defragment -verbose -flush-to-disk -compress-lzo \filename und erstellt übergibt es an ein |pipe an sudo sh , um es auszuführen.

Wiederum wird es nichts tun, solange sh --no-execute in Kraft ist.

Ich denke, einige sehr aktuelle btrfs User-Space-Tool-Builds defragmentieren ganze Verzeichnisse rekursiv, aber wenn ja, ist es eine ziemlich neue Sache, also habe ich musste immer solche Sachen machen.

Kommentare

  • Das ' ist eine sehr schöne Antwort. Dies ist jedoch das, was ich bereits getan habe (dies ist das, was ich durch " impliziert habe. Bisher habe ich jedes Mal, wenn ich es gemountet habe, ein Terminal ausgelöst. "). Ich ' möchte wissen, ob es eine Möglichkeit gibt, dem FS Standard-Mounting-Flags zuzuordnen. Wenn Sie ' kein Root haben, funktioniert nichts davon.
  • Standard-Mounting-Flags? Nun, Sie können definitiv fstab verwenden. Und mit btrfs können Sie auch nach Subvolume mounten, sodass Sie, wie Sie sagen, ein Subvolume bestimmten Mount-Optionen zuordnen und es mit der Option user = mount dem Benutzer geben können. Sie fragen sich vielleicht – aber wie mache ich aus den Dateien, die ich bereits habe, ein Subvolume? Wenn Sie ein leeres Subvolume erstellen, dann cp –flink alles, was Sie wollen, um den Job zu erledigen.
  • Auch der obige Defragmentierungsjob könnte ein Cron-Job sein …
  • compress=lzo ist ausreichend, Sie müssen ' komprimierte Binärdateien wie PNG nicht erneut komprimieren.

Antwort

Nach dem, was ich gelesen habe, können Sie die Eigenschaft compression im Stammverzeichnis des Subvolumes auf setzen Erreichen Sie dies [0, 1]:

sudo btrfs property set /mnt/your-subvolume compression lzo 

Nachdem Sie Ihre Btrfs-Subvolumen-UUID mit sudo btrfs filesystem show /mnt/your-subvolume abgerufen haben, können Sie dies dann tun Überprüfen Sie, ob die LZO-Komprimierungsfunktion derzeit aktiviert ist mit:

cat /sys/fs/btrfs/<UUID>/features/compress_lzo 

Sie sollte 1 zurückgeben, wenn sie aktiviert ist.

[0] https://btrfs.wiki.kernel.org/index.php/Compression

[1] https://www.berthon.eu/2016/setting-shared-folder-compression-on-synology-nas-btrfs/

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.