前段时间了解了软件并行:https://forums.servethehome.com/index.php?threads/mdadm-create-raid-0-quick-format.41161/#post-389210
现在我的目标与以前几乎相同,但我想尝试以不同的方式去做。
对于设置我有:
配备单端口 SAS2 HBA 的戴尔 SFF 台式机
总共 14 个 NetApp SAS3 磁盘架
每个磁盘架安装了 24 个 960GB 12G SAS SSD
驱动器运行 520 扇区大小
目标是在所有驱动器上运行 sg_format --format -e /dev/sgXX,最好使用并行。
它可以一项一项地完成,但我想使用并行来完成它,以了解它的功能,并可能为所有类似的未来项目更快地完成这项工作。
我使用 Ubuntu 23.10,添加了 Universe 存储库,并行使用了 apt update 和 apt install。 Parallel 以及 sg3-utils 和 smartmontools 现已安装。
我的 HBA 可以处理 128 个设备,其中设备 1(或 0)是 HBA 本身,因此我总共有 5 个磁盘架在链中运行,这意味着我连接了 120 个驱动器。它们从 /dev/sg2 开始,到 /dev/sg126 结束。
我使用的命令是:parallel sg_format --format -e ::: /dev/sg[2-126]
运行它时,终端会冻结几秒钟,我想这是可以预料的。
然而,实际上只有 /dev/sg2 和 /dev/sg6 正在运行,请参见下图。
所有驱动器都完全相同,但只有其中 2 个想要实际启动格式化。我没有收到任何错误或任何无法启动的原因。
我尝试“手动”启动驱动器,因此只需使用 sg_format 命令,所有驱动器都可以正常启动。
如果我运行命令
并行 sg_format --format -e ::: /dev/sg[2-10]
它在 /dev/sg2 上运行 sg_format,然后在 /dev/sg0 上运行,仅这两个。
当然,我在输入多个设备时遇到了问题。
有人知道吗?
答案1
那是因为你正在使用/dev/sg[2-126]
.不幸的是,范围不能处理多位数字。他们是特点范围,并且126
不是字符。因此,虽然您可以拥有[0-9]
,但您不能拥有,[0-10]
因为这意味着“从 0 到 1 的字符,然后是 0”。所以你的[2-126]
实际上意味着“2和1之间的数字”,这是没有意义的,因为2在1之后,然后是具体数字2
和6
。这就是为什么您只匹配sg2
和sg6
。
因此,您的第一个命令parallel sg_format --format -e ::: /dev/sg[2-126]
是在sg2
和上运行的sg6
。您的第二个命令在andparallel sg_format --format -e ::: /dev/sg[2-10]
上运行,因为被解释为单个字符,因为和之间没有其他字符,然后被视为其本身。/dev/sg2
/dev/sg0
[2-1]
2
2
1
0
你想要的是使用大括号扩展反而:
parallel sg_format --format -e ::: /dev/sg{2..126}
或者,要一次运行尽可能多的作业,请使用:
parallel -j0 sg_format --format -e ::: /dev/sg{2..126}