du -csh /
上述操作将花费大量的时间来计算,有没有办法以较少的开销获得不太准确的结果?
更新
我想知道的是特定目录下的总大小。
答案1
至于更优化的版本du
,我还没听说过。我想到的是:
- 将这些文件存储在 RAM 磁盘或类似的东西上。
- 如果只有一个应用程序写入此文件夹及其子文件夹,则让该应用程序进行跟踪。
- 如果所有这些文件的大小都差不多,并且数量均匀分布在目录中,那么您只需计算子目录的数量,然后乘以每个目录的文件数,再乘以每个文件的大小即可。如果您只有一个目录深度结构 ( )
stat -c '%h'
- 2,那么只需使用目录的硬链接数即可快速完成此操作。 - 让所有这些文件归特定用户所有并使用配额机制。
- 使用专用分区并直接使用 df。虚拟文件系统(通过回送挂载的文件系统上的文件)也可以执行此操作。
在所有这些中,配额和专用分区选项可能是最简单和最有效的。
答案2
问题在于“du”必须枚举子树中的每个对象。这是一个元数据密集型操作,对于大多数 Linux 文件系统来说需要一段时间。有些文件系统(比如 NTFS 和 Novell 的 NSS)能够像这样跟踪目录大小在元数据中这使得此操作速度大大加快。通常,如果您的文件系统支持某种目录配额,它必须在内部跟踪此数据以执行,每次发生大小更改时都会沿目录树复制到配额点 (NTFS) 或每个目录 (NSS),因此获取目录树大小非常快。
不幸的是,没有办法让 du 运行得更快,只有变通办法。
- 以批处理模式运行“du”并实时显示非实时结果
- 创建一个新的文件系统并使用‘df’
- 创建一个可容纳目录的大文件,将其回送挂载、格式化,然后在新挂载点上使用“df”。如果您需要更多空间,请卸载回送挂载、扩展文件并重新挂载。
答案3
du -h --max-depth=1
为您提供当前工作目录中以 KB/MB/GB 格式显示的大小。