并行运行du

时间:2014-07-07 08:00:51

标签: bash parallel-processing csh du

我有一个非常大的存储磁盘(16T)。我想在它上运行'du'来计算每个子目录占用多少。但是,这需要很长时间。幸运的是,我拥有一组计算机。因此,我可以在并行运行'du',每个作业在一个单独的子目录上运行,并编写一个简单的脚本来执行该操作。是否已经存在这样的事情或者我必须自己编写吗?

3 个答案:

答案 0 :(得分:5)

使用GNU Parallel很简单:

parallel du ::: */*

答案 1 :(得分:3)

从您的问题中不清楚您的存储设计如何(RAID阵列,NAS,NFS或其他)。

但是,几乎不管实际技术如何,并行运行du可能并不是一个好主意 - 它实际上很可能会减慢速度。

磁盘阵列的IOPS容量有限,多个du个线程都将从该池中获取。 更糟糕的是,即使du进程不消耗大量磁盘吞吐量,单du通常会使任何其他IO操作多次减慢速度。

相比之下,如果你只有一个CPU,那么运行并行make(make -j N)将减慢构建过程,因为进程切换有相当大的开销。

同样的原则适用于磁盘,特别是旋转磁盘。当您将N个驱动器安装在独立目录中时(例如/mnt/disk1/mnt/disk2,...,/mnt/diskN),您将获得相当大的速度提升的唯一情况。在这种情况下,您应该在N个线程中运行du,每个磁盘运行1个。

提高速度的一个常见改进是使用noatime标志安装磁盘。 如果没有此标志,大量磁盘扫描会创建大量写入活动来更新访问时间。如果使用noatime标志,则可以避免写入活动,并且du工作得更快。

答案 2 :(得分:1)

  

有没有这样的事情,还是我必须自己写一下?

我为自己写了sn,但你也可能会感激。

sn p .

将为您提供当前目录中所有内容的大小。它并行运行,并且比大目录上的du更快。