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

标签 bash ssh centos dd

首先让我说“我不是程序员”。

我有一个脚本,我执行该脚本以在测试期间在存储阵列上创建可用空间。该脚本按设计工作,但我在监控进度时遇到问题。我从主机(主机)执行脚本。主机在后台对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/

相关文章:

linux - 在文件名中调用时 Shell 变量为空,但在回显或在其他地方调用时则不是

linux - rsync 错误权限被拒绝

linux - 如何将多个二进制文件通过管道传输到从标准输入读取的应用程序

linux - centos如何写脚本文件每天半夜重启tomcat

bash - 尝试在Linux系统上安装hadoop,在编辑.bashrc文件时出错

Git Pre-Commit 使用sed 动态注入(inject)分支名

linux - 在创建文件时执行 bash 脚本

适用于 Mac 的 Oracle 图形用户界面

linux - 关于 nohup ssh 的内部结构

Drupal 与 nginx : 500 Internal Server Error