删除 btrfs 文件系统上数千个文件的最快方法是什么?

删除 btrfs 文件系统上数千个文件的最快方法是什么?

目前我有一个 btrfs 挂载点,其结构如下:#

/mountpoint/month/day/hourAs24/

每个叶目录包含 5,000 到 20,000 个小文件。我会将文件保存两个月。每天我都会使用以下命令删除超过 60 天的目录

rm -R /mountpoint/month/day/

此命令需要很长时间才能运行,并且命令运行时服务器上的负载极高。

/mountpoint/month/每天创建 btrfs 子卷,然后用一个命令清除子卷,这样会更好吗?

还有其他快速轻量的解决方案可以通过单个命令删除一个 btrfs 目录下的文件吗?

编辑: 为了澄清情况。在结构中,文件夹monthdayhourAs24是被当前日期时间的对应值替换的变量。

解决后编辑: 它在我的测试机器上运行顺利。以下所有操作均在挂载点挂载后正常运行!首先,我使用以下方法为每个月创建普通目录:

mkdir /mountpoint/month

然后我使用以下命令为每月的每一天创建 btrfs 子卷

btrfs subvolume create /mountpoint/month/day

然后我使用以下方法为每天的每个小时创建正常目录

mkdir /mountpoint/month/day/hourAs24

60 天后,我可以轻松清除当天的目录

btrfs subvolume delete /mountpoint/month/day

(现在我必须等待 60 天才能看到生产服务器上的性能)

答案1

我自己会选择子卷方式。它的速度无与伦比,如果你歪着头眯着眼睛看,你甚至可以说它看起来是存储文件的“正确”方式……

答案2

卸载然后删除文件系统,然后创建新的文件系统并挂载它,这比删除单个文件系统中的数千个对象要快得多。删除所需的元数据操作比批量删除然后重新创建新文件系统所需的 I/O 操作高出几个数量级。

LVM 足够灵活,可以处理这类事情。

或者,如果这不可能,您可以选择在 BTRFS 文件系统中创建大型回送文件,然后将其格式化为 BTRFS 并挂载到您的目录中。速度不如 LVM 方法快,但仍然明显比取消链接所有这些文件快(或应该快)。如果我没记错的话,BTRFS 还支持稀疏文件,如果您选择这种方式,这可能是一个不错的选择。

答案3

find可能更快:

find /mountpoint -mtime +60 -delete

相关内容