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