btrfs: how to calculate btrfs compression space savings?
I’ve enabled compression (mounted with compress=lzo
) for my btrfs partition and used it for a while.
I’m curious about how much benefit the compression brought me and am interested in the saved space value (sum of all file sizes) - (actual used space)
.
Is there any straightforward way to get this value, or would I have to write a script that sums up e.g. df
output and compres it to btrfs filesystem df
output?
Per the btrfs wiki, there’s no built-in support for this, but the compsize tool can measure compression on btrfs.
The df
output will be similar to btrfs fi df
in that it will report how much disk space is used, not the uncompressed size. The wiki says you can “kind of guess” by comparing df
output before and after compressing a file. Another option is using some program that will total up the actual data such as rsync --stats
on a dry run, which will report how much data is read.
In Debian/Ubuntu:
apt install btrfs-compsize
compsize /mnt/btrfs-partition
In Fedora:
dnf install compsize
compsize /mnt/btrfs-partition
output is like this:
Processed 123574 files, 1399139 regular extents (1399139 refs), 69614 inline.
Type Perc Disk Usage Uncompressed Referenced
TOTAL 73% 211G 289G 289G
none 100% 174G 174G 174G
lzo 32% 37G 115G 115G
It requires root (sudo
) to work at all (otherwise SEARCH_V2: Operation not permitted
).
It can be used on any directory (totalling the subtree), not just the whole filesystem from the mountpoint.
On a system with zstd, but some old files still compressed with lzo, there will be rows for each of them. (The Perc
column is the disk_size / uncompressed_size for that row, not how much of the total is compressed that way. Smaller is better.)