监控磁盘使用情况变化以推断下载速度

监控磁盘使用情况变化以推断下载速度

我正在测试各种下载大型数据集的解决方案,这些下载可能需要数周时间,并且需要多次重启。我不想监控网络速度,而是想使用磁盘使用率的变化来推断下载速度,因为这样可以避免测量失败传输的重新传输。有没有工具可以做到这一点,还是我应该自己动手做 bash 解决方案?

答案1

Coreutils 非常适合处理这种事情。这里有一个快速解决方案,它还可以保存日期和时间。

$ echo -e "$(date)\t$(df | awk '$1 == "/dev/sda1" {print $2}')" > df_1
<wait a while>
$ echo -e "$(date)\t$(df | awk '$1 == "/dev/sda1" {print $2}')" > df_2
$ echo "$(( $(awk '{print $2}' FS='\t' df_2) - $(awk '{print $2}' FS='\t' df_1) )) K increase from $(awk '{print $1}' FS='\t' df_1) to $(awk '{print $1}' FS='\t' df_2)"
12 K increase from Wed Nov 20 21:22:07 EST 2013 to Wed Nov 20 21:23:13 EST 2013

我不确定你是否需要这个,但要解释一下它的作用:

  • 首先,将当前日期和时间 ( date) 以及“已用”磁盘空间 ( awk '$1 == "/dev/sda1" {print $2}') 保存到文件 中df_1。您可能需要用特定文件系统来代替/dev/sda1df单独使用可获得列表。
  • 其次,稍后再重复。
  • 最后,打印出存储在每个文件的第一个字段中的“已用”磁盘空间之间的差值$((...)),并打印出日期(来自第二个字段)。

答案2

Sparhawk 抢先了一步,但这是我自己的解决方案,我打算将其作为 cron 任务来运行

#!/bin/bash
timestamp1=$(cat du-prev.txt | cut -f 2)
timestamp2=$(date +"%s")
timediff=$(echo "${timestamp2}-${timestamp1}" | bc)

current=$(du -s | cut -f 1)
previous=$(cat du-prev.txt | cut -f 1)
spacediff=$(echo "${current}-${previous}" | bc)

speed=$(echo "scale=2; ((${spacediff}/${timediff})*8)/1024" | bc)

echo "timediff   : ${timediff} sec"
echo "spacediff  : ${spacediff} KB"
echo "speed      : ${speed} Mb/s"
echo -e "${current}\t${timestamp2}" > du-prev.txt
echo -e "${speed}\t${timestamp2}" >> logs/speedlog.txt

相关内容