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

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

上述操作将花费大量的时间来计算,有没有办法以较少的开销获得不太准确的结果?

更新

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

答案1

至于更优化的版本du,我还没听说过。我想到的是:

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

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

答案2

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

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

  • 以批处理模式运行“du”并实时显示非实时结果
  • 创建一个新的文件系统并使用‘df’
  • 创建一个可容纳目录的大文件,将其回送挂载、格式化,然后在新挂载点上使用“df”。如果您需要更多空间,请卸载回送挂载、扩展文件并重新挂载。

答案3

du -h --max-depth=1

为您提供当前工作目录中以 KB/MB/GB 格式显示的大小。

答案4

你可能会发现gt5有用。它存储最新的du信息,并在下次运行时对其进行比较。它使用文本模式浏览器显示其输出,例如links

相关内容