如何测试Linux磁盘的读写速度

首先要了解两个特殊的设备:

/dev/null:回收站、无底洞

/dev/zero:产生字符

Ø 测试磁盘写能力

1
time dd if=/dev/zero of=/test.dbf bs=64k count=16k

因为/dev/zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力。

这个很不准确的,因为命令结束的时候数据还没有真正写到磁盘上去。

1
time dd if=/dev/zero of=/test.dbf bs=64k count=16k conv=fsync

这个还算准确,数据已经写入磁盘。

1
time dd if=/dev/zero of=/test.dbf bs=64k count=4k oflag=dsync

这个可以当成是模拟数据库插入操作,所以很慢。

Ø 测试磁盘读能力

1
time dd if=/dev/sdb1 of=/dev/null bs=8k

因为/dev/sdb1是一个物理分区,对它的读取会产生IO,/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,所以,这个命令的IO只发生在/dev/sdb1上,也相当于测试磁盘的读能力。

Ø 测试同时读写能力

1
time dd if=/dev/sdb1 of=/test1.dbf bs=8k

这个命令下,一个是物理分区,一个是实际的文件,对它们的读写都会产生IO(对/dev/sdb1是读,对/test1.dbf是写),假设他们都在一个磁盘中,这个命令就相当于测试磁盘的同时读写能力

附加信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
1.DD 的主要选项:
指定数字的地方若以下列字符结尾乘以相应的数字:
b=512, c=1, k=1024, w=2, xm=number m
if=file      输入文件名,缺省为标准输入。
of=file      输出文件名,缺省为标准输出。
ibs=bytes    一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。
obs=bytes    一次写 bytes 个字节(即一个块大小为 bytes 个字节)。
bs=bytes     同时设置读写块的大小为 bytes ,可代替 ibs 和 obs 。
cbs=bytes    一次转换 bytes 个字节,即转换缓冲区大小。
skip=blocks  从输入文件开头跳过 blocks 个块后再开始复制。
seek=blocks  从输出文件开头跳过 blocks 个块后再开始复制。
              (通常只有当输出文件是磁盘或磁带时才有效)。
count=blocks 仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数。
conv=conversion[,conversion...] 用指定的参数转换文件。
 
转换参数:
ascii 转换 EBCDIC 为 ASCII。
ebcdic 转换 ASCII 为 EBCDIC。
ibm 转换 ASCII 为 alternate EBCDIC.
block 把每一行转换为长度为 cbs 的记录,不足部分用空格填充。
unblock 使每一行的长度都为 cbs ,不足部分用空格填充。
lcase 把大写字符转换为小写字符。
ucase 把小写字符转换为大写字符。
swab 交换输入的每对字节。
noerror 出错时不停止。
notrunc 不截短输出文件。
sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
 
2.实例分析
 
2.1.数据备份与恢复
 
2.1.1整盘数据备份与恢复
 
备份:
 
dd if=/dev/hdx of=/dev/hdy
 
将本地的/dev/hdx整盘备份到/dev/hdy
 
dd if=/dev/hdx of=/path/to/image
 
将/dev/hdx全盘数据备份到指定路径的image文件
 
dd if=/dev/hdx | gzip > /path/to/image.gz
 
备份/dev/hdx全盘数据,并利用gzip工具进行压缩,保存到指定路径
 
恢复:
 
dd if=/path/to/image of=/dev/hdx
 
将备份文件恢复到指定盘
 
gzip -dc /path/to/image.gz | dd of=/dev/hdx
 
将压缩的备份文件恢复到指定盘
 
2.1.2.利用netcat远程备份
 
dd if=/dev/hda bs=16065b | netcat < targethost-IP > 1234
 
在源主机上执行此命令备份/dev/hda
 
netcat -l -p 1234 | dd of=/dev/hdc bs=16065b
 
在目的主机上执行此命令来接收数据并写入/dev/hdc
 
netcat -l -p 1234 | bzip2 > partition.img
 
netcat -l -p 1234 | gzip > partition.img
 
以上两条指令是目的主机指令的变化分别采用bzip2、gzip对数据进行压缩,
并将备份文件保存在当前目录。
 
2.1.3.备份MBR
 
备份:
 
dd if=/dev/hdx of=/path/to/image count=1 bs=512
 
备份磁盘开始的512Byte大小的MBR信息到指定文件
 
恢复:
 
dd if=/path/to/image of=/dev/hdx
 
将备份的MBR信息写到磁盘开始部分
 
2.1.4.备份软盘
 
dd if=/dev/fd0 of=disk.img count=1 bs=1440k
 
将软驱数据备份到当前目录的disk.img文件
 
2.1.5.拷贝内存资料到硬盘
 
dd if=/dev/mem of=/root/mem.bin bs=1024
 
将内存里的数据拷贝到root目录下的mem.bin文件
 
2.1.6.从光盘拷贝iso镜像
 
dd if=/dev/cdrom of=/root/cd.iso
 
拷贝光盘数据到root文件夹下,并保存为cd.iso文件
 
2.2.增加Swap分区文件大小
 
dd if=/dev/zero of=/swapfile bs=1024 count=262144
 
创建一个足够大的文件(此处为256M)
 
mkswap /swapfile
 
把这个文件变成swap文件
 
swapon /swapfile
 
启用这个swap文件
 
/swapfile swap swap defaults 0 0
 
在每次开机的时候自动加载swap文件, 需要在 /etc/fstab 文件中增加一行
 
2.3.销毁磁盘数据
 
dd if=/dev/urandom of=/dev/hda1
 
利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。
执行此操作以后,/dev/hda1将无法挂载,创建和拷贝操作无法执行。
 
2.4磁盘管理
 
2.4.1.得到最恰当的block size
 
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
 
dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
 
dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
 
dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
 
通过比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的block size大小
 
2.4.2测试硬盘读写速度
 
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
 
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
 
通过上两个命令输出的执行时间,可以计算出测试硬盘的读/写速度
 
2.4.3.修复硬盘
 
dd if=/dev/sda of=/dev/sda
 
当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生magnetic flux point。
当磁头读到这些区域时会遇到困难,并可能导致I/O错误。
当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。
上边的命令有可能使这些数据起死回生。
且这个过程是安全,高效的。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值