5

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

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

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

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

4

1 回答 1

4

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

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

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

wait

但我认为,您可能会受到 i/o 限制。此外,如果您有很多顶级目录,那么这种方法可能......嗯......相当繁重,因为它没有任何类型的最大进程数控制。

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

ls -d */ | parallel du -s 

...这会好得多。 parallel有很多不错的功能,比如对输出进行分组,管理最大进程等......你也可以传入一些参数来调整它(虽然,就像我之前提到的,你会受到 i/o 限制,所以更多的进程并不是更好,实际上少于默认值可能更可取)。

我对此唯一的另一个想法是,disk quotas如果这真的是你想要做的事情的话,也许可以使用。如果您想阅读它,这里有一个很好的教程。

于 2014-06-16T01:03:24.043 回答