我有一个非常大的存储磁盘(16T)。我想在它上面运行“du”来计算每个子目录需要多少。然而,这需要很长时间。幸运的是,我有一组计算机可供使用。因此,我可以并行运行“du”,每个作业都在单独的子目录中运行,并编写一个简单的脚本来执行此操作。已经有这样的东西还是我必须自己写?
问问题
3432 次
3 回答
10
使用 GNU Parallel 很简单:
parallel du ::: */*
于 2014-07-26T17:45:58.363 回答
3
于 2017-11-16T16:27:51.883 回答
2
从您的问题中不清楚您的存储是如何设计的(RAID 阵列、NAS、NFS 或其他)。
但是,几乎不管实际技术如何,du
并行运行毕竟可能不是一个好主意——它实际上很可能会减慢速度。
磁盘阵列的 IOPS 容量有限,多个du
线程都将从该池中获取。更糟糕的是du
,即使 du 进程不会消耗大量磁盘吞吐量,通常也会多次减慢任何其他 IO 操作。
相比之下,如果你只有一个 CPU,运行并行 make( make -j N
) 会减慢构建过程,因为进程切换有相当大的开销。
同样的原理也适用于磁盘,尤其是旋转磁盘。您将获得显着速度提高的唯一情况是当您将 N 个驱动器安装在独立目录中时(例如/mnt/disk1
, /mnt/disk2
, ..., /mnt/diskN
)。在这种情况下,您应该du
在 N 个线程中运行,每个磁盘 1 个。
提高 du 速度的一项常见改进是使用noatime
标志安装磁盘。如果没有此标志,大规模磁盘扫描会创建大量写入活动来更新访问时间。如果您使用noatime
标志,则可以避免写入活动,并且 du 工作得更快。
于 2014-07-07T08:18:42.540 回答