如何用零填充 btrfs 文件系统映像的未使用部分?

如何用零填充 btrfs 文件系统映像的未使用部分?

这适用于 VMware Workstation 下的来宾 Linux。

我尝试了vmware-toolbox-cmd disk shrink /安装为 的 btrfs compress=zstd,noatime,nodiratime,space_cache,ssd,discard。但是,图像只是扩展到最大尺寸,无法缩小。

看来压缩的 btrfs 不会将零文件写为零。

我发现有一些关于零填充的 ioctl 补丁https://lwn.net/ml/linux-btrfs/aed736d257f7e91cf3b0cf4d1fdfc247212d8bf7.1524233244.git.dsterba@suse.com/

如何BTRFS_CLEAR_OP_ZERO_NOUNMAP从访客 Linux 进行呼叫?

答案1

据我所知,没有直接的方法可以用零填充 Btrfs 文件系统的未使用空间。但是,您可以通过仅用零填充文件填充文件系统然后删除它们来实现相同的目的, sfill 是做到这一点的一种方法:sfill -llz \dev\X。 Sfill 是安全删除工具包的一部分:https://github.com/GIJack/secure_delete

但正如您所指出的,这不适用于启用文件系统压缩的情况,因为没有什么比一堆零更容易压缩的了。您必须在没有 compress=zstd 挂载选项的情况下重新挂载文件系统才能使其正常工作。或者使用 向 Btrfs 文件系统的根目录设置无压缩标志btrfs property set <object> compression "",如果您的系统位于 Btrfs 子卷上,则必须首先挂载文件系统根目录。目前只能使用 删除该标志chattr -c

VMWare 映像不会自动缩小,但有一些方法可以缩小它们。

答案2

我将添加我的答案这里

mkdir -p btrfs-zero
btrfs property set btrfs-zero compression none
cat /dev/zero > btrfs-zero/zero
rm btrfs-zero/zero

相关内容