我正在使用命令恢复读取MB / s。
hdparm -t /dev/sda | awk '/seconds/{print $11}'
从我读到的内容来看,测试三次是一个好主意。向上添加这些值,然后除以平均值3。
有时我会有3到16个驱动器,所以我想创建一个问题,询问我安装了多少驱动器。然后在每个驱动器上执行hdparm ...想知道是否有一种简单的方法可以将SDA一直更改为SDB,SDC,SDD等,而无需多次输入该命令...
谢谢
答案 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}