Erzwingt „btrfs filesystem defrag -c“ (Komprimierungsoption) die Komprimierung?

Erzwingt „btrfs filesystem defrag -c“ (Komprimierungsoption) die Komprimierung?

BTRFS mit aktivierter Komprimierung verwendet eine Heuristik, um Dateien, die nicht gut komprimierbar sind, nicht zu komprimieren. Wird beim Komprimieren vorhandener Dateien mit „btrfs filesystem defrag -c“ ebenfalls die Heuristik verwendet, oder werden alle Dateien komprimiert, auch wenn sie nicht gut komprimierbar sind?

Antwort1

btrfs filesystem defrag -cscheint die Komprimierung zu erzwingen und kennzeichnet eine Datei letztendlich nur dann als nicht komprimierbar, wenn anfängliche Komprimierungsversuche nicht erfolgreich waren und das Dateisystem nicht mit gemountet wurde compress-force.

Um das zu beweisen, habe ich eine Datei mit zunächst 1 MB inkomprimierbaren Daten erstellt, gefolgt von 128 KB komprimierbaren Daten (also einer Textdatei). Die Datei wurde in /tmpeinem Btrfs-Mount-Punkt mit verschiedenen Optionen gespeichert und dorthin kopiert:

# compress=lzo: no actual compression
root@debian12:~# mount /dev/zvol/tank/vol1 /mnt/ -o compress=lzo
root@debian12:~# cp /tmp/random.img /mnt/
root@debian12:~# sync
root@debian12:~# compsize /mnt/random.img
Processed 1 file, 1 regular extents (1 refs), 0 inline.
Type       Perc     Disk Usage   Uncompressed Referenced
TOTAL      100%      1.1M         1.1M         1.1M
none       100%      1.1M         1.1M         1.1M

# compress=lzo + defrag: compressed, but 'm' (incompressible) flag set
root@debian12:~# btrfs filesystem defrag -c -r /mnt/
root@debian12:~# sync
root@debian12:~# compsize /mnt/random.img
Processed 1 file, 3 regular extents (3 refs), 0 inline.
Type       Perc     Disk Usage   Uncompressed Referenced
TOTAL       90%      1.0M         1.1M         1.1M
none       100%      1.0M         1.0M         1.0M
zlib        15%       20K         128K         128K
root@debian12:~# lsattr /mnt/random.img
---------------------m /mnt/random.img

# compress-force=lzo: some limited compression 
root@debian12:~# mount /dev/zvol/tank/vol1 /mnt/ -o compress-force=lzo
root@debian12:~# cp /tmp/random.img /mnt/
root@debian12:~# sync
root@debian12:~# compsize /mnt/random.img
Processed 1 file, 3 regular extents (3 refs), 0 inline.
Type       Perc     Disk Usage   Uncompressed Referenced
TOTAL       96%      1.0M         1.1M         1.1M
none       100%      1.0M         1.0M         1.0M
lzo         68%       88K         128K         128K

# compress-force=lzo + defrag: better compression and no 'm' flag
root@debian12:~# compsize /mnt/random.img
Processed 1 file, 3 regular extents (3 refs), 0 inline.
Type       Perc     Disk Usage   Uncompressed Referenced
TOTAL       90%      1.0M         1.1M         1.1M
none       100%      1.0M         1.0M         1.0M
zlib        15%       20K         128K         128K
root@debian12:~# lsattr /mnt/random.img
---------------------- /mnt/random.img

verwandte Informationen