You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单SSH连接的Shell for循环中并行执行存储卷查询命令

并行查询存储卷容量实现方案

方案一:基于系统自带xargs实现(无额外依赖)

不需要安装第三方工具,利用Linux系统默认自带的xargs命令的并行能力即可实现,核心是通过-P参数控制并发数,-n 1保证每次只传入1个卷名适配查询命令的参数要求。
基础版本脚本:

#!/bin/bash
# 可根据服务器负载调整并发数
CONCURRENCY=10
STORAGE_HOST="storageServer01"
VOL_FILE="myTotalVol"

cat "$VOL_FILE" | xargs -I {} -P $CONCURRENCY -n 1 bash -c '
vol="{}"
echo -n "$vol "
ssh '"$STORAGE_HOST"' "row 0; set -unit MB; vol show-footprint \"$vol\" -fields volume-blocks-footprint,volume-blocks-footprint-bin0,volume-blocks-footprint-bin1"
'

性能优化点:默认每次SSH查询都会新建TCP连接、完成认证,开销较大,可开启SSH连接复用进一步提速,脚本修改如下:

#!/bin/bash
CONCURRENCY=10
STORAGE_HOST="storageServer01"
VOL_FILE="myTotalVol"
# SSH复用套接字路径
SSH_SOCK="/tmp/ssh_storage_sock_%r@%h:%p"

# 提前建立常驻SSH连接,后续查询全部复用该连接
ssh -o ControlMaster=yes -o ControlPath="$SSH_SOCK" -o ControlPersist=10m -Nf "$STORAGE_HOST"

cat "$VOL_FILE" | xargs -I {} -P $CONCURRENCY -n 1 bash -c '
vol="{}"
echo -n "$vol "
ssh -o ControlPath='"$SSH_SOCK"' '"$STORAGE_HOST"' "row 0; set -unit MB; vol show-footprint \"$vol\" -fields volume-blocks-footprint,volume-blocks-footprint-bin0,volume-blocks-footprint-bin1"
'

# 全部查询完成后关闭常驻SSH连接
ssh -o ControlPath="$SSH_SOCK" -O exit "$STORAGE_HOST"

开启连接复用后,可减少90%以上的SSH连接建立开销,整体执行速度提升明显。

方案二:基于GNU Parallel实现(功能更完善)

如果环境允许安装GNU Parallel(专业并行任务调度工具),可以获得更稳定的输出控制、进度展示、失败重试能力,适合批量任务场景。

  • CentOS/RHEL安装:yum install parallel
  • Debian/Ubuntu安装:apt install parallel
    脚本示例:
#!/bin/bash
CONCURRENCY=10
STORAGE_HOST="storageServer01"
VOL_FILE="myTotalVol"
SSH_SOCK="/tmp/ssh_storage_sock_%r@%h:%p"

# 建立SSH复用连接
ssh -o ControlMaster=yes -o ControlPath="$SSH_SOCK" -o ControlPersist=10m -Nf "$STORAGE_HOST"

# 执行并行查询
cat "$VOL_FILE" | parallel -j $CONCURRENCY --group --bar '
echo -n "{} "
ssh -o ControlPath='"$SSH_SOCK"' '"$STORAGE_HOST"' "row 0; set -unit MB; vol show-footprint {} -fields volume-blocks-footprint,volume-blocks-footprint-bin0,volume-blocks-footprint-bin1"
'

# 关闭SSH连接
ssh -o ControlPath="$SSH_SOCK" -O exit "$STORAGE_HOST"

该方案的核心优势:

  • --group参数会缓存单个卷查询的全部输出,等任务完成后一次性打印,完全避免多任务并行导致的输出交叉、行混乱问题
  • --bar参数可实时展示全量任务的执行进度、已完成数量、剩余预计时间
  • 增加--retries 3参数可对查询失败的卷自动重试3次,规避临时网络波动、存储端临时繁忙导致的查询失败

运行注意事项

  • 并发数建议从10开始测试,观察存储服务器管理接口的CPU、连接数负载,再逐步调整,不建议设置超过20的并发,避免打挂存储管理服务
  • 先取10个左右的测试卷验证脚本输出和原有串行脚本结果一致,再跑全量3000个卷
  • 如需保存结果,直接在脚本执行命令后追加 > vol_capacity_result.txt即可,并行执行不会打乱结果格式

内容的提问来源于stack exchange,提问作者user294110

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 22:42:18