Btrfs 可实现最大压缩

Btrfs 可实现最大压缩

我一直在玩 Btrfs。我能够实现的最大压缩比是 30:1,文件如下:

yes foo | head -c 10G > file

命令行zstd将以10000:1的比例压缩文件,所以我对30:1有点失望。

显然,如果手动完成,文件会压缩很多,但是 Btrfs 可以做到的最大压缩比是多少?使用哪种 Btrfs 压缩算法以及压缩效果如此良好的文件是什么样的?

(速度不是问题)。

答案1

https://lore.kernel.org/linux-btrfs/[电子邮件受保护]/让我们接近答案:

对于压缩数据,btrfs 对数据范围有大小限制,为 128K。该数字是为了平衡 CoWed 范围的压缩率和额外解压缩。

另一方面,btrfs(任何 fs)具有其最小块大小,对于 x86_64 为 4K。

所以你可以获得的上限是128K / 4K = 32。

解决方法是将多个压缩 btrfses 堆叠在一起:

#!/bin/bash

lvl1=$1
lvl2=$2
lvl3=$3

# Die on first error
set -e
rm -f btrfs-lvl1.img

# make level 1
truncate -s 1T btrfs-lvl1.img
mkfs.btrfs btrfs-lvl1.img
mkdir -p btrfs-lvl1
sudo mount -o compress=zstd:$lvl1 btrfs-lvl1.img btrfs-lvl1
sudo chown $(whoami) btrfs-lvl1

# make level 2
truncate -s 1T btrfs-lvl1/btrfs-lvl2.img
mkfs.btrfs btrfs-lvl1/btrfs-lvl2.img
mkdir -p btrfs-lvl2
sudo mount -o compress=zstd:$lvl2 btrfs-lvl1/btrfs-lvl2.img btrfs-lvl2
sudo chown $(whoami) btrfs-lvl2

# make level 3
truncate -s 1T btrfs-lvl2/btrfs-lvl3.img
mkfs.btrfs btrfs-lvl2/btrfs-lvl3.img
mkdir -p btrfs-lvl3
sudo mount -o compress=zstd:$lvl3 btrfs-lvl2/btrfs-lvl3.img btrfs-lvl3
sudo chown $(whoami) btrfs-lvl3

# Now use btrfs-lvl3/ for highly compressible data
head -c 10G /dev/zero > btrfs-lvl3/zero
du btrfs-lvl2/btrfs-lvl3.img btrfs-lvl1/btrfs-lvl2.img btrfs-lvl1.img

# Unmount (order is important)
sudo umount btrfs-lvl3 btrfs-lvl2 btrfs-lvl1

压缩比第一层:24-33,第二层:9-17,第三层:0.7-1.8。最大总压缩比 854:1。

这是有道理的,每一层的比率都会变得更差,并且在第 3 层,某些值的大小甚至会增加(比率 < 1)。

针对 lvl1-3 的压缩级别 1-9 运行上面的脚本,显示这些值对于 lvl1-3 来说是良好的值(这些值在每次运行时略有不同):1 1 1 (713:1)、9 8 5 (713: 1)、7 3 6 (715:1)、4 4 8 (716:1)、1 1 2 (720:1)、2 1 4 (720:1)、5 6 7 (720:1)、4 4 1 (722:1)、1 8 3 (722:1)、2 7 5 (723:1)、7 8 9 (723:1)、1 5 1 (724:1)、1 6 8 (724:1) )、8 9 2 (726:1)、9 2 4 (726:1)、7 8 1 (726:1)、2 9 9 (728:1)、7 7 9 (728:1)、9 9 4 (731:1)、2 6 6 (732:1)、1 6 3 (733:1)、7 5 5 (734:1)、3 4 5 (735:1)、2 5 1 (736:1) 、3 6 2 (738:1)、7 8 6 (738:1)、1 6 6 (742:1)、1 8 1 (742:1)、6 4 7 (742:1)、9 8 9 ( 743:1)、9 5 2 (744:1)、1 3 5 (746:1)、8 3 5 (747:1)、4 1 5 (751:1)、8 6 2 (755:1)、 5 9 6 (755:1)、9 8 6 (763:1)、8 1 5 (765:1)、2 9 2 (765:1)、1 8 5 (772:1)、7 6 3 (775) :1)、1 9 6 (781:1)、7 7 6 (787:1)、8 9 8 (788:1)、3 9 2 (790:1)、4 2 8 (792:1)、7 4 7 (795:1)、4 9 6 (800:1)、6 5 8 (802:1)、7 7 5 (806:1)、1 5 6 (811:1)、5 6 9 (821: 1)、3 5 2 (853:1)、7 5 8 (854:1)

我认为这没有任何规律,而且 1 1 1 既快速又容易记住,所以我可能会使用它。

相关内容