首先让我说“我不是程序员”。
我有一个脚本,我执行该脚本以在测试期间在存储阵列上创建可用空间。该脚本按设计工作,但我在监控进度时遇到问题。我从主机(主机)执行脚本。主机在后台对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 &
如果这对其他人有帮助。
最佳答案
感谢@shellter 和我发现的另一篇文章,我能够解决这个问题。我没有等待,而是使用上一个运行命令的进程 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 "\033[2K\rPreparing array for snapshot testing ";
# Spinning cursor on same line
i=$(( (i+1) %4 ))
echo -ne "${spin:$i:1}"
sleep .1
done
然后最终结果是消息:准备阵列以进行快照测试,最后带有旋转光标。
关于bash - 监控远程DD操作并显示进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35004924/