是否可以在btrfs文件系统上获取文件的压缩和未压缩大小?

gan*_*lf3 21 compression filesystems shell file filesize

是否可以确定启用透明压缩ls -lbtrfs文件系统上的压缩大小(我假设是列出的内容)和未压缩文件大小?

Ayu*_*ush 17

有第三方工具可以做到这一点.

https://github.com/kilobyte/compsize

用法:

ayush@devbox:/code/compsize$ sudo compsize /opt
Processed 54036 files, 42027 regular extents (42028 refs), 27150 inline.
Type       Perc     Disk Usage   Uncompressed Referenced  
Data        82%      5.3G         6.4G         6.4G       
none       100%      4.3G         4.3G         4.3G       
zlib        37%      427M         1.1G         1.1G       
lzo         56%      588M         1.0G         1.0G  
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案,即使它更多地参与运行.在SuSE Linux Leap 42.3上我必须安装libbtrfs-devel软件包才能让它编译,但是它运行得很好! (2认同)

mar*_*rcz 7

我无法逐个文件地回答,@ catlover2给出了文件系统的答案.但是你应该区分磁盘上的块大小和(虚拟)文件系统中的大小,ls并且du不能超出文件系统,因此它们不提供有关使用了多少磁盘块的信息,而@jiliagre --apparent-size在这里没用.

为了更好地说明这个问题,我用一个23G文件btrfs文件系统进行了测试; 首先是未压缩的,然后是lzo压缩的.示例文件是虚拟机映像,压缩级别仅为0.5.它只显示df,并且 btrfs filesystem df可以显示压缩.

$   lvcreate vg0 test_btrfs -L 30G
Logical volume "test_btrfs" created
$ mkfs.btrfs /dev/vg0/test_btrfs
...
fs created label (null) on /dev/vg0/test_btrfs
    nodesize 16384 leafsize 16384 sectorsize 4096 size 30.00GiB
$ mount /dev/vg0/test_btrfs /tmp/test_btrfs
$ btrfs filesystem df /tmp/test_btrfs
Data, single: total=8.00MiB, used=256.00KiB
System, DUP: total=8.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00
Metadata, DUP: total=1.00GiB, used=112.00KiB
Metadata, single: total=8.00MiB, used=0.00
$ cp bigfile /tmp/test_btrfs
$ btrfs filesystem df /tmp/test_btrfs
Data, single: total=24.01GiB, used=22.70GiB
System, DUP: total=8.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00
Metadata, DUP: total=1.00GiB, used=23.64MiB
Metadata, single: total=8.00MiB, used=0.00
$ btrfs filesystem df /tmp/test_btrfs
... unchanged!
$ cd /tmp/test_btrfs/
$ ls -l bigfile
-rw------- 1 root root 24367940096 May  4 15:03 bigfile
$ du -B1 --apparent-size bigfile
24367940096 bigfile
$ du -B1 bigfile
24367943680 bigfile
$ btrfs filesystem defragment -c bigfile
$ ls -l bigfile
-rw------- 1 root root 24367940096 May  4 15:03 bigfile
$ du -B1 --apparent-size bigfile
24367940096 bigfile
$ du -B1 bigfile
24367943680 bigfile
$ btrfs filesystem df /tmp/test_btrfs
Data, single: total=24.01GiB, used=12.90GiB
System, DUP: total=8.00MiB, used=16.00KiB
System, single: total=4.00MiB, used=0.00
Metadata, DUP: total=1.00GiB, used=39.19MiB
Metadata, single: total=8.00MiB, used=0.00
$ df -BG /tmp/test_btrfs
Filesystem                 1G-blocks  Used Available Use% Mounted on
/dev/mapper/vg0-test_btrfs       30G   13G       16G  47% /tmp/test_btrfs
Run Code Online (Sandbox Code Playgroud)

@ gandalf3的问题仍然没有答案,可能我们需要等待btrfs的开发(或帮助开发它!)以获得一个特殊文件的正确底层磁盘块 du.这将是非常有用的,当我用压缩(没有强制)安装btrfs fs时我发现非常令人沮丧,不知道我的文件是否被压缩以及在哪个级别.


Acc*_*man 6

在 Ubuntu-18 中

apt install btrfs-compsize
compsize /mnt/btrfs-partition
Run Code Online (Sandbox Code Playgroud)