如何在 bash 中以较少的开销查看磁盘使用情况?

apa*_*che 8 bash disk-space-utilization

du -csh /
Run Code Online (Sandbox Code Playgroud)

以上将花费大量时间来计算,有没有办法以更少的开销查看不太准确的结果?

更新

我想知道的是特定目录下的总大小。

Kyl*_*ndt 9

至于更优化的版本du,我不知道。想到的事情是:

  1. 将这些文件存储在 ram 磁盘或类似的东西上。
  2. 如果只有一个应用程序写入此文件夹及其子文件夹,则让该应用程序保持跟踪。
  3. 如果所有这些文件的大小大致相同,并且它们的数量均匀分布在目录中,则您只需计算子目录的数量,然后乘以每个目录的文件,然后再乘以每个文件的大小。如果只有一个目录深度结构 ( stat -c '%h') - 2,您可以通过仅使用目录的硬链接计数来快速完成此操作。
  4. 使所有这些文件归特定用户所有并使用配额机制。
  5. 使用专用分区,只需使用 df。虚拟文件系统(通过环回挂载的文件系统上的文件)也可以这样做。

在所有这些中,配额和专用分区选项可能是最简单和最有效的。


sys*_*138 6

问题是“du”必须枚举子树中的每个对象。这是一个元数据密集型操作,对于大多数 Linux 文件系统来说需要一段时间。一些文件系统、NTFS 和 Novell 的 NSS 能够在元数据中跟踪这样的目录大小这使得此操作大大加快。通常,如果您的文件系统支持某种目录配额,它必须在内部跟踪此数据以进行强制执行,每次大小更改都会沿目录树向上复制到配额点 (NTFS) 或每个目录 (NSS) ) 发生时,因此获取目录树大小非常快。

不幸的是,没有办法让 du run 更快,只有变通办法。

  • 以批处理模式运行“du”并使用非实时结果
  • 创建一个新的文件系统并使用“df”代替
  • 创建一个大文件来保存您的目录,回送挂载它,格式化它,然后在新的挂载点上使用“df”。如果需要更多空间,请卸载回送挂载,扩展文件,然后重新挂载。


Ant*_*oun 0

df -h 就可以了