
1、先熟悉两个特殊的设备:
(1)/dev/null:回收站、无底洞。
(2)/dev/zero:产生字符。
2、测试磁盘写能力
代码如下:
time dd if=/dev/zero of=/testw.dbf bs=4k count=100000
因为/dev//zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力。命令结尾添加oflag=direct将跳过内存缓存,添加oflag=sync将跳过hdd缓存。
3、测试磁盘读能力
代码如下:
time dd if=/dev/sdb of=/dev/null bs=4k
因为/dev/sdb是一个物理分区,对它的读取会产生IO,/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,所以,这个命令的IO只发生在/dev/sdb上,也相当于测试磁盘的读能力。(Ctrl+c终止测试)
4、测试同时读写能力
代码如下:
time dd if=/dev/sdb of=/testrw.dbf bs=4k
在这个命令下,一个是物理分区,一个是实际的文件,对它们的读写都会产生IO(对/dev/sdb是读,对/testrw.dbf是写),假设它们都在一个磁盘中,这个命令就相当于测试磁盘的同时读写能力。
读写失败时dd的返回值分别是多少一直查不到,而如果这个没法弄明白的话,校验的对错就没什么意义了(根本不知道是dd出的错还是md5sum出的错),算了,你将就一下吧,查到后改一下就好了。#!
/bin/bash
infile="$1"
cycle=0
copy=0
err=0
if
[
"$#"
-ne
1
]
||
[
!
-f
"$1"
]
then
echo
"用法:test
<infile>"
exit
1
fi
echo
-e
"<>警告<>:本测试程序对磁盘有较大损害,请您谨慎运行。"
echo
-e
"
按Crtl+C键终止测试"
echo
-e
"开始测试?(y/n)y:c"
while
read
-r
answer
</dev/tty
do
if
[
"$answer"
==
'n'
]
||
[
"$answer"
==
'N'
]
then
echo
"结果:$cycle
轮共
$copy
次复制,读/写错误
$err
次"
rm
-f
${infile}_*
exit
0
fi
let
cycle++
echo
"=========================
第
$cycle
轮
==========================="
rm
-f
"$infile"_*
sync
let
copy++
#方便起见,选第一分区爆之
while
[
"$(df
-k|sed
-n
'3q2s/
*/
/g2p'|cut
-d
'
'
-f
4)"
-gt
1
]
do
echo
"===========
副本
$copy
==========="
outfile="${infile}_${copy}"
dd
if="$infile"
of="$outfile"
#关于dd命令如果遭遇读失败或写失败的返回码无据可查,但肯定不是0,
另一种实现方法是用md5sum
--status检验,但这种方法看起来多此一举反而导致读写比变>为3:1
if
[
"$?"
-ne
0
]
then
let
err++
fi
let
copy++
echo
&&
sync
trap
"echo
'结果:'
$cycle
'轮共'
$copy
'次复制,读/写错误'
$err
'次'
&&
rm
-f
${infile}_*
&&
exit"
1
2
3
15
done
echo
-e
"磁盘已满,删除测试文件后继续?(y/n)y:c"
done
在Linux中可以用 hdparm 命令来测试硬盘速度。
为了检测更精准,这个 *** 作应该 重复2-3次 。这显示了无需访问磁盘,直接从 Linux 缓冲区缓存中读取的速度。这个测量实际上是被测系统的处理器、高速缓存和存储器的吞吐量的指标。这是一个 for 循环的例子,连续运行测试 5 次:
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)