![“btrfs filesystem defrag -c”(压缩选项)是否强制压缩?](https://linux22.com/image/789216/%E2%80%9Cbtrfs%20filesystem%20defrag%20-c%E2%80%9D%EF%BC%88%E5%8E%8B%E7%BC%A9%E9%80%89%E9%A1%B9%EF%BC%89%E6%98%AF%E5%90%A6%E5%BC%BA%E5%88%B6%E5%8E%8B%E7%BC%A9%EF%BC%9F.png)
启用压缩的 BTRFS 使用启发式方法不压缩不易压缩的文件。使用“btrfs filesystem defrag -c”压缩现有文件是否也使用启发式方法,还是即使文件不易压缩也会压缩所有文件?
答案1
btrfs filesystem defrag -c
似乎强制压缩,仅当初始压缩尝试没有结果并且文件系统未挂载时,才会最终将文件标记为不可压缩compress-force
。
为了证明这一点,我创建了一个文件,其中第一个文件有 1M 不可压缩数据,后面跟着 128K 可压缩数据(即文本文件)。该文件存储在/tmp
btrfs 挂载点中,并复制到该挂载点,使用各种选项:
# 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