hdparm检查3到16个驱动器

时间:2014-04-14 19:12:11

标签: bash

我正在使用命令恢复读取MB / s。

hdparm -t /dev/sda | awk '/seconds/{print $11}'

从我读到的内容来看,测试三次是一个好主意。向上添加这些值,然后除以平均值3。

有时我会有3到16个驱动器,所以我想创建一个问题,询问我安装了多少驱动器。然后在每个驱动器上执行hdparm ...想知道是否有一种简单的方法可以将SDA一直更改为SDB,SDC,SDD等,而无需多次输入该命令...

谢谢

2 个答案:

答案 0 :(得分:1)

Bash可以轻松枚举所有驱动器:

$ echo /dev/sd{a..h}
/dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh

然后你说你想平均时序输出,所以让我们定义一个函数:

perform_timing() {
    for i in {1..3}; do hdparm -t "$1"; done |
        awk '/seconds/ { total += $11; count++ } END { print (total / count) }'
}

然后你可以在所有驱动器上运行它:

for drive in /dev/sd{a..h}; do
    printf '%s: %s\n' "$drive" "$(perform_timing "$drive")"
done

击败它

perform_timing函数执行两项操作:1)运行hdparm三次,然后2)平均输出。您可以通过手动运行来了解第一部分的工作原理:

# for i in {1..3}; do hdparm -t "/dev/sdc"; done

/dev/sdc:
 Timing buffered disk reads: 1536 MB in  3.00 seconds = 511.55 MB/sec

/dev/sdc:
 Timing buffered disk reads: 1536 MB in  3.00 seconds = 511.97 MB/sec

/dev/sdc:
 Timing buffered disk reads: 1538 MB in  3.00 seconds = 512.24 MB/sec

第二部分将您的awk代码与逻辑相结合,以平均所有行,而不是单独打印它们。您可以通过简单的awk示例了解平均值的工作原理:

$ printf '1\n4\n5\n'
1
4
5
$ printf '1\n4\n5\n' | awk '{ total += $1; count++ } END { print (total / count) }'
3.33333

我们将所有逻辑包装在一个名为perform_timing的函数中作为一个很好的编程实践。这让我们称它为任何其他命令:

# perform_timing /dev/sdc
512.303

最后,而不是写:

perform_timing /dev/sda
perform_timing /dev/sdb
...

我们将它全部包装在一个循环中,这个简化的循环应该有助于解释:

# for drive in /dev/sd{a..c}; do printf '%s\n' "$drive"; done
/dev/sda
/dev/sdb
/dev/sdc

答案 1 :(得分:0)

只使用没有任何循环:

#hdparm -i /dev/sd{a..d}