BTRFS con compresión habilitada utiliza una heurística para no comprimir archivos que no son bien comprimibles. ¿La compresión de archivos existentes con "btrfs filesystem defrag -c" también utiliza la heurística o comprime todos los archivos incluso si no son bien comprimibles?
Respuesta1
btrfs filesystem defrag -c
parece forzar la compresión, y eventualmente marca un archivo como no comprimible solo si los intentos iniciales de compresión no fueron fructíferos y el sistema de archivos no se montó con compress-force
.
Para demostrarlo, creé un archivo con un primer millón de datos incompresibles, seguido de 128 K de datos comprimibles (es decir, un archivo de texto). El archivo se almacenó /tmp
y se copió en un punto de montaje btrfs con varias opciones:
# 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