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/