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

7

Ich habe eine USB-Festplatte.

Ich möchte es mit aktivierter Komprimierung mounten. 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 montieren kann. Bisher habe ich jedes Mal, wenn ich es montierte, ein Terminal ausgelöst.

Dann entdeckte ich chattr +c. Das funktioniert sehr gut, aber ich möchte LZO anstelle von ZLIB verwenden. Gibt es eine Möglichkeit, genauer zu sein und den Komprimierungsalgorithmus ein für alle Mal zu definieren?

Gilles 'SO - hör auf böse zu sein'
quelle

Antworten:

4

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 dafür sorgen 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 $HOMEVerzeichnis - aber Sie können es für alles oder jedes verwenden, wie Sie möchten. Außerdem wird der -nOperand shso wie er ist eingespeist, sodass Sie selbst sehen können, was gerade shgeschieht not, bevor Sie ihn entfernen, um ihn anzuweisen, dies zu tun.

Wie auch immer, zuerst werden duDateien im human-readableFormat abgefragt (wahrscheinlich redundant hier, da wir das im nächsten Schritt sowieso entfernen) , die größer als 1MBoder sind$((1024*1024)).

Es ist |pipesseine Information, seddie alles abstreift, bevor der /, "quotes"Dateiname führt, den btrfs filesystem defragment -verbose -flush-to-disk -compress-lzo \filenameBefehl erstellt und ihm ein |pipeto sudo shzur Ausführung übergibt .

Auch hier wird es nichts tun, solange sh --no-executees in Kraft ist.

Ich denke , einige sehr bisherigen btrfsUser - Space - Tool baut rekursiv defragmentieren ganze Verzeichnisse tun, aber wenn so ist es eine ziemlich neue Sache, so dass ich immer Sachen wie diese zu tun gehabt haben.

mikeserv
quelle
Das ist eine sehr schöne Antwort. Dies ist jedoch das, was ich bereits getan habe (dies ist das, was ich mit "Bisher habe ich jedes Mal, wenn ich es montiert habe, ein Terminal ausgelöst" impliziert). Ich würde gerne wissen, ob es eine Möglichkeit gibt, dem FS Standard-Mounting-Flags zuzuordnen. Wenn Sie kein Root haben, funktioniert keines davon.
Standard-Montageflags? 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 die Arbeit zu erledigen.
Mikeserv
Auch der Defragmentierungsjob oben könnte ein Cron-Job sein ...
Mikeserv
compress=lzoist ausreichend, Sie müssen komprimierte Binärdateien wie PNG nicht erneut komprimieren.
Walf
0

compressionNach dem, was ich gelesen habe, können Sie die Eigenschaft auf die Wurzel des Subvolumes setzen, um dies zu erreichen [0, 1]:

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

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

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

Es sollte 1 zurückgeben, wenn es 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/

user30747
quelle