用零清除未使用的空间 (btrfs)

Grz*_*cki 10 storage backup compression btrfs

如何用零清除未使用的空间?(我要求用于btrfs文件系统的工具)

我正在寻找比它更聪明的东西

cat /dev/zero > /mnt/X/big_zero ; sync; rm /mnt/X/big_zero
Run Code Online (Sandbox Code Playgroud)

就像FSArchiver正在寻找“已用空间”并忽略未使用但相反的站点。

目的:我想压缩分区图像,因此强烈建议用零填充未使用的空间。

顺便提一句。对于 ext3,ext4 :用零 (ext3,ext4) 清除未使用的空间。我在这里要求 btrfs

澄清“更智能的算法”:我看到“更智能的算法”会导致混淆,在这里我终于决定添加一行。亲爱的读者,请将文件系统视为数据结构。为简单起见,让我们想象一下自平衡红黑树持有映射,用作关联键->值数组,其中值是整数。目标是用零清除所有负值。“不智能”算法将迭代它并将键:值对添加到新映射(最终将负值更改为零)。智能算法只会检测存储负值的位置并就地清除它们。

Dus*_*olf 5

清除可用空间的正确和“智能”方法是使用:

fstrim /mountpoint
Run Code Online (Sandbox Code Playgroud)

在挂载的文件系统上使用它。

重要的是要注意这没有安全优势。如果您希望清除磁盘以确保安全,请备份您的文件,使用“shred”之类的命令将整个磁盘清零,然后恢复您的文件。

但是,如果您的磁盘是稀疏文件系统上的精简配置,并且您希望恢复未使用的空间,则该解决方案可以正常工作。


cas*_*cas 4

这是我对您上一个问题的回答的修改和扩展的重新发布:

sfillsecure-delete包装中可以做你想做的事。

与 Zerofree(仅适用于 ext2、ext3 和 ext4 文件系统)不同,sfill 可适用于任何文件系统。

例如

sfill -l -l -z /mnt/X
Run Code Online (Sandbox Code Playgroud)

sfill/secure-delete 主页现在似乎已经消失了,但它是为 debian 和 ubuntu 打包的。可能还有其他发行版。如果您需要源代码,如果您在其他地方找不到,可以在 debian 档案中找到。

注意:sfill 仅适用于已安装的文件系统。如果您从主机系统而不是虚拟机内对映像文件进行零填充,则需要在主机上挂载 fs 映像。确切的方法取决于图像文件的类型(例如 qcow2 或 raw)。

安装“原始”图像既简单又直接。只需kpartx在映像文件上使用即可创建环回设备,然后可以单独安装每个分区的 /dev/mapper/ 条目。

这是根据我用来挂载网络可引导 freedos 硬盘映像的脚本片段修改的部分脚本(用于 flashrom 无法工作的机器上的 BIOS 更新):

sfill -l -l -z /mnt/X
Run Code Online (Sandbox Code Playgroud)

注意:它假设映像中的每个分区都是可安装的。在我的用例中是正确的(带有一个分区的 freedos 高清图像)。如果其中一个分区是交换空间,则不正确。检测此类分区并使用 dd 将交换分区归零作为读者的练习:)

此方法或其变体也应该适用于 LVM 卷。

如果您的映像是 qcow,那么您可以使用包qemu-nbd中的工具qemu-utils,它将映像文件及其分区呈现为网络块设备 - 例如 /dev/nbd0 /dev/ndb0p1 - 可以以与 / 类似的方式使用上面的开发/映射器设备。

使用从 qcow 转换为 raw 可能更容易、更少麻烦(但更耗时)qemu-img,使用上面的 raw 方法,然后将修改后的原始图像转换回压缩的 qcow2。这可能会导致图像比使用 qemu-nbd 稍小,因为您将在创建新的 qcow2 图像时对其进行压缩。

  • 一方面,对于您的需求来说,这已经足够了 - 所以我的问题已经包含此解决方案的代码片段 - 所以您的答案没有提供任何新内容。另一方面,我的需求需要我指定的内容,因为我想用零擦除未使用的空间而不修改内部结构(例如重新平衡“跳舞 B 树”或其他类型的数据结构(例如用于分析和重复数据删除)目的) (2认同)
  • @cas - 我认为您忽略了这样一个事实:零填充是在虚拟机中压缩虚拟硬盘驱动器之前的一个重要步骤。如果您有一个 500 GB 的扩展磁盘,其中有 10 GB 的文件和 10 GB 的“空”空间(即已删除的文件),则运行简单的“巨型零文件”方法将花费更长的时间,并且需要 VHD 膨胀到完整的 500 GB。我敢打赌,OP **假设**该实用程序也必须是特定于 FS 的。 (2认同)
  • 该解决方案对压缩文件系统不起作用。 (2认同)