目前我有一个像这样的结构的btrfs挂载点:#
/mountpoint/month/day/hourAs24/
每个叶子目录包含5,000到20,000个小文件。 在那里我保存了两个月的文件。 我每天用这个命令删除60天以前的目录
rm -R /mountpoint/month/day/
该命令需要很长时间才能运行,并且在命令运行时服务器上的负载非常高。
每天在/mountpoint/month/下创buildbtrfs子卷是否会更好,然后在一个命令中清除子卷?
有没有其他快速和轻量级的解决scheme来摆脱一个命令下的一个btrfs目录下的文件?
编辑:澄清的情况。 在结构中,文件夹month , day和hourAs24是由当前date时间的对应值replace的variables。
解决scheme后编辑:在我的testing机器上顺利运行。 以下所有的作品都与安装的挂载点一起使用! 首先我为每个月创build正常的目录
mkdir /mountpoint/month
然后我创buildbtrfs子卷每月的每一天
btrfs subvolume create /mountpoint/month/day
然后我用一天的每个小时创build正常的目录
mkdir /mountpoint/month/day/hourAs24
60天后,我可以轻松清除当天的目录
btrfs subvolume delete /mountpoint/month/day
(现在我必须等待60天才能看到生产服务器上的性能)
我会去自己的子卷路线。 你不能以速度来打败它,如果你倾斜头部并眯起一点,你甚至可以说它看起来像存储文件的“正确”方式。
卸载然后删除一个文件系统,然后创build一个新的文件系统并挂载它,将比在单个文件系统中移除数千个对象快得多。 删除所需的元数据操作比批量删除所需的I / O操作高几个数量级,然后重新创build一个。
LVM足够灵活来处理这类事情。
或者,如果这是不可能的,你可以在BTRFS文件系统中创build大的环回文件,然后将其格式化为BTRFS并挂载到目录中。 不如LVM方法那样快,但仍然明显快于(或应该)比解除链接所有这些文件。 IIRC,BTRFS也支持稀疏文件,如果你去那里,这可能是这条路线的一个不错的select。
find也许更快:
find /mountpoint -mtime +60 -delete