我有一个以前从未见过的奇怪问题。我有一个 ZFS 卷,它报告它的大小约为 1.7Gb,快照也是如此。如果我然后尝试为备份目的进行 zfs 发送,我会得到一个巨大的文件 - 我的自动备份 gzip 后生成一个 12Gb 的文件,当我刚刚进行测试时(没有 gzip)我在文件增长到后中止了66Gb - 这表明有很多重复数据。这里发生了什么?碎片化?如果是这样,该怎么办?
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
lxd 476G 64.8G 411G - 60% 13% 1.00x ONLINE -
体积:
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
lxd 64.8G 396G 24K none
...
lxd/containers/cdinspector 993M 1.32G 1.68G /var/snap/lxd/common/lxd/storage-pools/lxd/containers/cdinspector
快照:
# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
lxd/containers/cdinspector@test 1.39M - 1.68G -
列表-r
# zfs list -r lxd/containers/cdinspector
NAME USED AVAIL REFER MOUNTPOINT
lxd/containers/cdinspector 1.05G 1.31G 1.69G /var/snap/lxd/common/lxd/storage-pools/lxd/containers/cdinspector
用于流式传输卷的命令:
# zfs send lxd/containers/cdinspector@test | /usr/bin/mbuffer -m 500M > /backup/test
问题的根源在于 ZFS 压缩。有问题的客户端在其容器中运行了一个僵尸 vim 进程,该进程不断将重复数据写入 swp 文件。
ZFS 压缩确实有效!事实证明,消耗的逻辑空间约为 2.4Tb,压缩比高达 1700 倍,然后 ZFS 将其减少到约 1.7Gb 物理空间。
有关准确描述该问题的文章,请参阅:
https://utcc.utoronto.ca/~cks/space/blog/solaris/ZFSCompressionAndQuotas
我们现在也在考虑禁用 zfs 压缩,因为由于我们设计事物的方式,这是对我们进行潜在 DOS 攻击的途径(尽管这是一种非常缓慢、相当隐蔽的攻击,需要我们不要注意)。