监控远程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
然后最终结果是消息:正在为快照测试准备阵列,最后有一个旋转的光标。
让我先说 "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
然后最终结果是消息:正在为快照测试准备阵列,最后有一个旋转的光标。