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

Linux 如何比仅使用“磁盘”更快地收集存储系统上的磁盘使用情况;杜;?,linux,storage,capacity,synology,du,Linux,Storage,Capacity,Synology,Du,我操作一台Synology NAS设备,该设备包含600多个用户的数据 用户备份数据为税务会计数据。 因此,大约一个用户的文件夹有200000个文件 我必须向每个用户提供他们的备份数据使用情况信息,但由于目录和文件太多,du命令执行时间太长 有人能给我一种更快地检查每个用户磁盘使用情况的方法吗?没有魔法。为了收集磁盘使用情况,您必须遍历文件系统。如果您正在寻找一种仅在文件系统级别执行此操作的方法,那么这将很容易(例如,df-h)。。。但听起来您希望它位于装入点内的目录级别 您可能可以在每个目录上

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

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

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


有人能给我一种更快地检查每个用户磁盘使用情况的方法吗?

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

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

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

wait
但我认为,您可能会受到i/o限制。此外,如果您有许多顶级目录,此方法可能是。。。好。。。因为它没有任何类型的最大进程数的控制,所以它相当繁重

如果已安装,则可以执行以下操作:

ls -d */ | parallel du -s 
…那就更好了
parallel
有很多很好的特性,比如对输出进行分组、管理max进程等。。。您还可以传入一些参数对其进行一些调整(尽管,正如我前面提到的,您将受到I/o限制,因此更多进程并不更好,事实上,小于默认值可能更好)


关于这一点,我唯一的另一个想法是,如果您真正想做的是使用
磁盘配额
。如果您想了解它,有一个很好的教程。

如果数据存储在旋转媒体上,并行运行多个请求是性能最差的事情之一。寻找很慢,同时的请求会导致大量额外的寻找。是的,这取决于你的情况。我读过一个群集NAS,事实上,在这种情况下,当您有很多文件要读时,parallel确实有很大帮助。就像任何事情一样,你不应该盲目地实施它。测试它,看看它是否真的有用,然后再投入生产使用。人们可能会认为,要获得文件系统子树(不包括链接)的总使用率,需要维护某种摘要信息,并有效地访问这些信息。这与分区级别的情况类似:
df
立即返回可用空间。可能更容易在分区级别实现,因为它只是关于维护已使用块的计数。在文件系统级别,这也是可行的,但取决于实现。也许出于性能原因,它被排除在常见的文件系统实现之外?