监控远程DD操作并显示进度

Monitor remote DD operation and display progress

让我先说 "I am not a programmer"。

我有一个脚本可以在测试期间在存储阵列上创建免费 space。该脚本按设计工作,但我在监控进度时遇到问题。我从主机(主机)执行脚本。主机在后台对worker执行DD命令。每个工作人员都定义了多个 SD。命令结构是这样的:

ssh root@worker1 dd if=/dev/zero of=/dev/sdb bs=1G count=256 &
ssh root@worker1 dd if=/dev/zero of=/dev/sdc bs=1G count=256 &
ssh root@worker2 dd if=/dev/zero of=/dev/sdb bs=1G count=256 &
ssh root@worker2 dd if=/dev/zero of=/dev/sdc bs=1G count=256 &
ssh root@worker3 dd if=/dev/zero of=/dev/sdb bs=1G count=256 &
ssh root@worker3 dd if=/dev/zero of=/dev/sdc bs=1G count=256 &
ssh root@worker4 dd if=/dev/zero of=/dev/sdb bs=1G count=256 &
ssh root@worker4 dd if=/dev/zero of=/dev/sdc bs=1G count=256 &

这种方法效果很好,我在后端存储上获得了出色的写入吞吐量。问题是我需要知道这些过程何时完成。当他们完成后,我需要执行下一阶段的测试。

理想情况下,我需要一种方法来持续监控工作人员的 DD 进程并提供进度。当它们全部完成时,脚本将退出,下一阶段的测试应该开始。

更新***

我从使用 DD 切换到现在使用 blkdiscard。对于我正在尝试做的事情来说要快得多。新的命令结构如下所示。

ssh root@worker1 blkdiscard -o 256G -l 256G -p 1G /dev/sdb &
ssh root@worker1 blkdiscard -o 256G -l 256G -p 1G /dev/sdc &

如果这对其他人有帮助。

如果您在命令末尾添加双符号,下一个写入的命令将在第一个命令完成后开始。

示例:

echo something && sleep 5 && echo anotherthing &

感谢@shellter 和我发现的另一个 post,我能够解决这个问题。我没有等待,而是使用了前一个 运行 命令的进程 ID。

#Execute blkdiscard on workers via remote SSH
ssh root@worker1 blkdiscard -o 256G -l 256G -p 1G /dev/sdb &
ssh root@worker1 blkdiscard -o 256G -l 256G -p 1G /dev/sdc &

# Process Id of the previous running command
pid=$!

# Spinning cursor string
spin='-\|/'

i=0
while kill -0 $pid 2>/dev/null
do
    # Progress message
    echo -ne "3[2K\rPreparing array for snapshot testing ";

    # Spinning cursor on same line
    i=$(( (i+1) %4 ))
    echo -ne "${spin:$i:1}"
    sleep .1
done

然后最终结果是消息:正在为快照测试准备阵列,最后有一个旋转的光标。