文件系统加速 - 'find'命令

时间:2013-12-07 10:48:37

标签: linux find metadata fuse dir

我想加快查询速度,例如: find root_dir -atime -5 - 查找五天前访问过的文件。

我考虑在db中存储文件系统hieratchy和文件元数据。 你知道任何有用的解决方案吗? 也许存在可以做到这一点的融合文件系统?

3 个答案:

答案 0 :(得分:1)

这样的find命令将导致遍历的目录数据和inode位于文件系统缓存中,这就是为什么在第二次运行时,相同的命令通常要快得多。对于遍历文件系统的其他命令也是如此,例如du

请注意,数据库的建立也至少需要花费find的时间。更不用说同步运行以反映数据库中的文件系统更改。有机会完全重建数据库是最快的方法。

所以,我要做的是通过您感兴趣的文件系统部分运行find(可能是定期的cron作业)。这样,从某种意义上说,你构建了一个内存“数据库”和随后的finddu,这样的东西运行得更快。

答案 1 :(得分:1)

这样做没有“真正好”的解决方案。你可以每小时或每天运行一次cron脚本来创建像你这样的数据库,但如果你经常运行它,你将对文件系统施加很大的负担;如果你不经常运行它,你的结果将会过时。

另一种方法是使用内核机制来通知程序有关文件系统更改的信息。查看http://en.wikipedia.org/wiki/Inotify即可开始使用。但是,这是特定于Linux的,它允许您仅监视特定目录,而不是整个文件系统。

答案 2 :(得分:0)

updatedblocate(相同的包),但需要手动运行更新,并且似乎无法按文件戳进行搜索。如果你要编写自己的解决方案,它可能仍然是一个很好的起点。