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


8
du -csh /

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

更新

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

Answers:


9

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

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

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


6

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

不幸的是,没有一种方法可以使du更快地运行,而只有解决方法。

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

+1这是一个非常有用的答案。
理查德·霍洛威

4
du -h --max-depth=1

从您当前的工作目录中以人类KB / MB / GB格式提供大小。


我认为他们想知道为什么du会花这么长时间生成和回答问题。我认为Windows的行为也一样。如果右键单击目录,则必须等待它计算每个子目录的大小。这只是文件系统工作的方式。
Unix管理员

是的,除非他们运行索引服务之类的东西。
大卫·里克曼

3

使用标准工具,每次想知道总大小时,都必须获取目录中每个文件的大小。可能更有效的方法是使用“目录大小监视器”,它可以跟踪目录的当前大小。(我不知道)没有这种东西,但是您可以使用实现inotify。可能不使用bash(和inotify-tools),但是例如,您可以使用python和pyinotify。



2

另外,如果您这样做的话,请考虑du-“一个文件系统”上的-x选项

du -xh / --max-depth=1 

您只会在根分区上看到磁盘使用情况摘要,并且不会尝试添加/ proc,/ sys,/ dev等。


2

如果您只想为根文件系统使用磁盘,则

df -h /


1

否。您能否在cron作业中将du定期传输到文本文件中,以使其在夜间运行,因此您没有立即可用的最新数据?

请注意,在Windows下,测量包含大量文件的文件夹使用的磁盘空间同样会花费一些时间。




0

也许

df -h

因为简短而简洁的答案还不足以使serverfault认为我是人类。


但我需要知道特定目录下的总大小
apache 2010年

然后使用将需要使用du
Unix Janitor

但是在Windows中,我可以无开销地看到总使用空间,为什么在Linux中不能呢?
阿帕奇

你是认真的吗?ntfs不是ext3
Unix Janitor

1
@apache,哦,这有点麻烦,请尝试查看20GB文件夹的大小,其中包含10-20 MB的文件。def开销很大。
Zypher

0

要在该目录下找到空间,请列出而不是/。要查找目录foo和下的空间bar,请同时列出以下两者:

du -csh foo bar

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.