【发布时间】:2026-01-23 05:05:02
【问题描述】:
我使用 Synology NAS 设备,该设备包含 600 多个用户数据。
用户备份数据为税务会计数据。 因此,大约一个用户的文件夹有 200,000 个文件。
我必须向每个用户提供他们的备份数据使用信息,但是由于目录和文件太多,du 命令执行时间太长。
有人可以提供一种方法来更快地检查每个用户的磁盘使用情况吗?
【问题讨论】:
标签: linux storage capacity synology du
我使用 Synology NAS 设备,该设备包含 600 多个用户数据。
用户备份数据为税务会计数据。 因此,大约一个用户的文件夹有 200,000 个文件。
我必须向每个用户提供他们的备份数据使用信息,但是由于目录和文件太多,du 命令执行时间太长。
有人可以提供一种方法来更快地检查每个用户的磁盘使用情况吗?
【问题讨论】:
标签: linux storage capacity synology du
没有魔法。为了收集磁盘使用情况,您必须遍历文件系统。如果您正在寻找一种仅在文件系统级别执行此操作的方法,那将很容易(例如 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,如果这真的是你想要做的事情的话。如果你想了解它,有一个很好的教程here。
【讨论】:
df 立即返回可用空间。在分区级别可能更容易实现,因为它只是维护已用块的数量。在文件系统级别,这也是可行的,但取决于实现。也许出于性能原因,它被排除在常见的文件系统实现之外?