![在 Linux/BSD 上快速了解目录实际大小的方法](https://linux22.com/image/485312/%E5%9C%A8%20Linux%2FBSD%20%E4%B8%8A%E5%BF%AB%E9%80%9F%E4%BA%86%E8%A7%A3%E7%9B%AE%E5%BD%95%E5%AE%9E%E9%99%85%E5%A4%A7%E5%B0%8F%E7%9A%84%E6%96%B9%E6%B3%95.png)
计算实际目录大小的最快方法是什么?不知怎的,我发现自己很需要这个。
只需这样做:
# 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 定期获取文件列表,修改时间比上次运行更新,本质上将文件大小“同步”到数据库结构……显然,这完全取决于你试图通过问题实现什么