如何比仅使用“du”更快地收集存储系统上的磁盘使用情况?

Tom*_*mmy 5 linux storage capacity du synology

我操作 Synology NAS 设备,该设备包含 600 多个用户数据。

用户备份数据为税务会计数据。因此,大约一个用户的文件夹有 200,000 个文件。

我必须向每个用户提供他们的备份数据使用信息,但是由于目录和文件du太多,命令执行时间太长。

有人可以为我提供一种以更快的方式检查每个用户的磁盘使用情况的方法吗?

woo*_*oot 7

没有魔法。为了收集磁盘使用情况,您必须遍历文件系统。如果您正在寻找一种仅在文件系统级别执行此操作的方法,那将很容易(仅df -h作为示例)...但听起来您希望它在安装点内的目录级别。

您也许可以在每个目录上并行运行作业。例如在 bash 中:

for D in `ls -d */`
do
    du -s $D &
done

wait
Run Code Online (Sandbox Code Playgroud)

但我认为你可能会受到 I/O 限制。另外,如果您有很多顶级目录,则此方法可能......嗯......相当繁重,因为它没有对最大进程数进行任何类型的管理。

如果您安装了GNU Parallel,您可以执行以下操作:

ls -d */ | parallel du -s 
Run Code Online (Sandbox Code Playgroud)

……这样会好很多。 parallel有很多不错的功能,例如对输出进行分组、管理最大进程等...并且您还可以传入一些参数来对其进行一些调整(尽管,就像我之前提到的,您将受到 I/O 限制,所以更多进程并不是更好,事实上少于默认值可能更好)。

我对此唯一的其他想法是,disk quotas如果这确实是您想要做的事情的重点,那么也许可以使用。如果您想阅读的话,这里有一个很好的教程。

  • 如果数据存储在旋转介质上,并行运行多个请求是对性能最糟糕的事情之一。查找速度很慢,同时请求会导致大量额外的查找。 (3认同)