计算实际目录大小的最快方式是什么? 我不知何故就发现自己需要很多东西。
简单地做:
#du -hs / dir
太慢了。 有没有我可以运行的服务,它会周期性地计算目录大小并caching它们供以后参考? (就像一个定位数据库)
可悲的是我不知道,但写一个不应该太难。 一旦晚上跑步
# du -a / > /var/lib/filesizes.txt.
那么你只需要一个小脚本来总结这些。 就像是:
# perl -ne 'BEGIN { $total = 0 } if ($_ =~ m/(\d+)\s+\/var\/www\//) { $total+=$1;} END {print "$total\n";}' /var/lib/filesizes.txt
如果你想要多一点同步,那么你将不得不开始写一些使用inotify的东西,来找出文件系统何时改变和更新数据库,这可能是类似bdb的东西。
我曾经有一个cron的工作,将'du -htX –max-depth = 3' ( 或类似的,几年 )的输出redirect到一个文本文件。 然后我用munin创build一个rrdtoolgraphics作为input。 这是一件非常糟糕的事情,但它让我一目了然地知道我们备份的空间有多大,存储趋势是多less有点精细的目录层次结构。
如果你的盒子上有桌面环境, FileLight是非常棒的。 这很快,并允许您深入目录树,然后只需要重新扫描该子树,以获得更新的视图。 你可以很好地每天运行一次全面的扫描,然后把程序整天打开而不需要更新。
如果这是使用nagios风格检查一个目录大小,你可以做如下的事情
你可以有这个cron条目:
* / 5 * * * * root du -s / path / to / some / dir> /tmp/directory_usage.tmp && / bin / mv /tmp/directory_usage.tmp / tmp / directory_usage
然后,您可以使用脚本立即获取/ tmp / directory_usage的内容。
显然,如果目录开始变得很大,将会出现竞争状态。 (即du-s开始接近5分钟的标记。)
另一条路线是使用find在目录中build立文件大小列表,并将其存储到平面文件或文件数据库(如果您计划同时执行大量目录)
最后一种方法是使用find定期获取文件列表,修改时间比上次运行时间更新,并且基本上将文件大小“同步”到db结构中……显然这取决于您试图通过何种方式实现你的问题