使用并行 dd 将大型块设备清零

使用并行 dd 将大型块设备清零

我们有一个 60 TB 的块设备,我们想使用 dd 将其清零。是否可以并行化此操作以减少所需的时间?

我试过运行以下命令,但这并不是我想要的:

seq 1 5 | parallel dd if=/dev/zero of=/dev/mapper/mydevice{} bs=10M count=10

答案1

seq 0 600000 | parallel dd if=/dev/zero of=/dev/mapper/my60device bs=10M count=10 seek={}0

您已经使用过if, of, bs, and count,所以我认为您知道它们的作用。

seekn在执行之前寻找块到输出文件中dd

您没有写出 60 TB 设备在主轴上的物理排列方式。这可能会产生巨大影响。因此,这可能会更快:

seq 0 60000 | parallel --shuf dd if=/dev/zero of=/dev/mapper/my60device bs=10M count=100 seek={}00

它写入 1 GB 的块并随机执行,这可能会根据物理布局加快或减慢。

答案2

或者你可以尝试我自制的并行数据写入工具普德 它在 NVMe 驱动器上运行良好。

答案3

除非底层设备驱动程序通过一些奇怪的东西支持同时调度两个 I/O 操作ioctl,否则您无法向设备发出明确的并行 I/O 操作。

dd无论如何都是错误的工具,因为它通过按顺序将数据写入文件或块设备来工作 - 您能做的最好的事情就是告诉它写入一个大的块大小,这可以让操作系统更好地优化顺序访问 - 这确实提高了写入磁带等操作的速度。

在单个块设备上旋转两个dd不会改变这样一个事实:大多数 I/O 设备(尤其是看起来像磁盘驱动器的设备)实际上只能同时执行一件事情或一小批事情 - 并且任何优化(即利用 NCQ)都是在设备驱动程序级别完成的。

相关内容