我在理解并行过程时遇到了一些困难。 Atm 我正在尝试批量擦除硬盘驱动器,因此创建了一个脚本,但它不会并行运行。
for i in "${!wipe[@]}"; do
dd if=/dev/zero of=/dev/${wipe[$i]} &
wait
dd 将磁盘清零,但它会一个接一个地执行此操作,因此在执行 8 个磁盘时,可能会非常耗时。谢谢
答案1
给定的脚本根本不应该运行,因为您缺少done
for 循环。这肯定是摘录,而您遗漏了重要部分。
假设缺失done
发生在该片段之后,则等待在 for 循环内,因此您dd
在后台启动 ,然后wait
在进入下一次迭代之前完成它。
基本上,您的缩进与显示的代码不匹配,并且这不是 python。与 python 不同,bash 忽略缩进。我确信缩进符合你想要的,但如果没有done
wait 之前的缩进,它就没有意义。
答案2
像这样的事情可能会起作用:
parallel -j0 --dryrun dd if=/dev/zero of=/dev/{} ::: "${!wipe[@]}"
--dryrun
当输出看起来正确时删除。
(还可以考虑用随机数据覆盖硬盘。您可以使用 https://gitlab.com/ole.tange/tangetools/-/tree/master/rand生成大量加密安全的伪随机数据)。