Karolis T. Asked: 2009-06-15 01:51:12 +0800 CST2009-06-15 01:51:12 +0800 CST 2009-06-15 01:51:12 +0800 CST 在 linux/bsd 上了解真实目录大小的快速方法 772 计算实际目录大小的最快方法是什么?我不知何故发现自己需要那么多。 简单地做: # du -hs /目录 太慢了。有没有我可以运行的服务可以定期计算目录大小并缓存它们以供以后参考?(类似于定位数据库) linux directory bsd 3 个回答 Voted Best Answer David Pashley 2009-06-15T02:42:41+08:002009-06-15T02:42:41+08:00 可悲的是我不知道,但写一个应该不会太难。每晚跑一次 # 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。 Gazzonyx 2009-06-15T02:41:31+08:002009-06-15T02:41:31+08:00 我曾经有一个 cron 作业,它将“du -htX --max-depth=3”(或类似的东西,已经有几年了)的输出重定向到一个文本文件。然后我让 munin 使用该文件作为输入创建一个 rrdtool 图。这很 hacky,但它让我一目了然地了解了我们的备份使用了多少空间以及有点细化的目录层次结构的存储趋势。 如果您在有问题的盒子上有桌面环境,FileLight很棒。它相当快,并且允许您向下钻取目录树,然后仅在您想要获得更新的视图时重新扫描该子树。您可以每天运行一次完整扫描,然后让程序整天保持打开状态而无需进行更新。 Brendan 2009-06-15T02:31:46+08:002009-06-15T02:31:46+08:00 如果这是使用 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 在目录中构建文件大小列表并将其存储到平面文件或文件 db 中(如果您计划同时执行大量目录) 最后一种方法是使用 find 定期获取文件列表,这些文件的修改时间比上次运行的时间更近,并且基本上将文件大小“同步”到数据库结构......显然这一切都取决于你试图通过什么来实现你的问题
可悲的是我不知道,但写一个应该不会太难。每晚跑一次
然后你只需要一个小脚本来总结这些。就像是:
如果你想要一些更同步的东西,那么你将不得不开始编写一些使用 inotify 的东西,以找出文件系统何时更改并更新数据库,这可能类似于 bdb。
我曾经有一个 cron 作业,它将“du -htX --max-depth=3”(或类似的东西,已经有几年了)的输出重定向到一个文本文件。然后我让 munin 使用该文件作为输入创建一个 rrdtool 图。这很 hacky,但它让我一目了然地了解了我们的备份使用了多少空间以及有点细化的目录层次结构的存储趋势。
如果您在有问题的盒子上有桌面环境,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 在目录中构建文件大小列表并将其存储到平面文件或文件 db 中(如果您计划同时执行大量目录)
最后一种方法是使用 find 定期获取文件列表,这些文件的修改时间比上次运行的时间更近,并且基本上将文件大小“同步”到数据库结构......显然这一切都取决于你试图通过什么来实现你的问题