我有一个很大的存储盘(16T)。我想在上面运行'du‘来计算每个子目录的开销。然而,这需要很长时间。幸运的是,我有一群电脑可供我支配。因此,我可以并行地运行'du‘,每个作业在一个单独的子目录上运行,并编写一个简单的脚本。是不是已经有这样的事情了,还是必须我自己来写?
发布于 2014-07-26 17:45:58
使用GNU并行操作很简单:
parallel du ::: */*发布于 2014-07-07 08:18:42
从您的问题中还不清楚您的存储是如何设计的(RAID数组、NAS、NFS或其他东西)。
但是,几乎不管实际技术如何,并行运行du可能不是一个好主意--它很可能实际上会减慢速度。
磁盘阵列的IOPS容量有限,多个du线程都将从该池中取出。更糟糕的是,即使du进程不消耗大量磁盘吞吐量,单个du也会多次减缓任何其他IO操作。
相比之下,如果您只有一个CPU,运行并行make (make -j N)将减慢构建过程,因为进程切换有相当大的开销。
同样的原理也适用于磁盘,尤其是旋转盘。只有当N个驱动器安装在独立的目录中(比如/mnt/disk1、/mnt/disk2、.、/mnt/diskN)时,才能获得相当大的速度增长。在这种情况下,您应该在N个线程中运行du,每个磁盘一个线程。
提高du速度的一个常见改进是使用noatime标志挂载磁盘。如果没有此标志,大量磁盘扫描会创建大量的写入活动来更新访问时间。如果使用noatime标志,则可以避免编写活动,而du的工作速度要快得多。
发布于 2017-11-16 16:27:51
https://stackoverflow.com/questions/24605656
复制相似问题