在 Linux 上通过写零自动删除文件

在 Linux 上通过写零自动删除文件

我们运行精简配置的 Ubuntu VM,这些 VM 会执行大量文件写入和删除操作。虽然客户机上的磁盘使用量增长缓慢(净写入 - 删除),但主机上的虚拟磁盘大小增长得更快,因为主机无法知道许多块是释放的空间。

我们定期将每台虚拟机离线,并将零写入客户文件系统中的空闲块。这样我们就可以缩小主机上的虚拟磁盘。

我想知道是否有人知道我们可以在客户机上安装一个实用程序,每次删除文件时都会自动写入零。如果存在这样的实用程序,那么我们可以自动缩小主机上的虚拟磁盘,而无需在客户机中手动写入零覆盖已删除的文件。

我希望问题清楚,并提前感谢任何帮助

答案1

使用弗斯特里姆命令。

我使用一个简单的 cron 脚本对虚拟机和其他精简配置的文件系统、ZFS zvols 和基于 SSD 的存储执行此操作:

#!/bin/bash

for fs in $(lsblk -o MOUNTPOINT,DISC-MAX,FSTYPE | grep -E '^/.* [1-9]+.* ' | awk '{print $1}')
  do fstrim $fs > /dev/null 2>&1
done

答案2

我不知道有任何程序、实用程序或服务可以自动将已删除的文件清零。它需要挂接到系统调用或在内核中运行才能实现您所需的自动化。

有些实用程序可以通过以下方式删除文件首先将其归零。您没有说哪个程序正在创建和删除文件,但也许如果它是一个脚本或某种东西,您可以将其挂接到这些实用程序中?

否则,不,这不是一种简单且自动的方法。这就是精简配置的缺点。

答案3

fstrim 命令选项因发行版和版本而异,但-a, --all-v, --verbose选项的可用性似乎不错。检查您的手册页,但如果--all可用,它将节省一些麻烦。

fstrim --all --verbose

相关内容