在 Linux/BSD 上快速了解目录实际大小的方法

在 Linux/BSD 上快速了解目录实际大小的方法

计算实际目录大小的最快方法是什么?不知怎的,我发现自己很需要这个。

只需这样做:

# du -hs /目录

太慢了。是否有任何服务可以定期计算目录大小并缓存以供日后参考?(类似于定位数据库)

答案1

遗憾的是我不知道有什么,但写一个应该不难。每晚运行一次

# 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。

答案2

我曾经有一个 cron 任务,可以重定向‘du-htX--最大深度=3’或者类似的东西,已经好几年了) 到文本文件。然后我让 munin 使用该文件作为输入创建一个 rrdtool 图表。这有点儿老套,但它让我一目了然地了解了我们的备份使用了多少空间,以及某种细粒度目录层次结构的存储趋势。

如果你的电脑上有桌面环境,文件光太棒了。它相当快,允许您深入目录树,然后只在需要获取更新视图时重新扫描该子树。您可以每天运行一次完整扫描,然后整天打开程序而不进行任何更新。

答案3

如果要使用 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 来构建目录中的文件大小列表,并将其存储到平面文件或文件数据库中(如果您计划同时处理大量目录)

最后一种方法是使用 find 定期获取文件列表,修改时间比上次运行更新,本质上将文件大小“同步”到数据库结构……显然,这完全取决于你试图通过问题实现什么

相关内容