Linux下hdparm硬盘测速



在Linux下可以使用hdparm对硬盘进行测试或者查看硬盘的相关信息。这样你就知道了硬盘读写速度。

hdparm
参数:

-a 表示是否关闭磁盘预读取功能。对于大文件读取,这个显然能提高性能。

-A设置硬盘驱动器缓存读取特性。可能就是硬盘缓存开关

-g 显示硬盘的磁轨,磁头,磁区等参数。

-i 显示硬盘的硬件规格信息,这些信息是在开机时由硬盘本身所提供。

-I 直接读取硬盘所提供的硬件规格信息。

-p 设定硬盘的PIO模式。

-Tt 评估硬盘的读取效率和硬盘快取的读取效率。

-u; 在硬盘存取时,允许其他中断要求同时执行。

-v 显示硬盘的相关设定。

例子:
1)直接硬盘读测试

[root@apktv ~]# hdparm -tT --direct /dev/sda1
/dev/sda1:
Timing O_DIRECT cached reads: 704 MB in 2.00 seconds = 351.50 MB/sec
HDIO_DRIVE_CMD(null) (wait for flush complete) failed: Inappropriate ioctl for device
Timing O_DIRECT disk reads: 546 MB in 3.01 seconds = 181.43 MB/sec
HDIO_DRIVE_CMD(null) (wait for flush complete) failed: Inappropriate ioctl for device

使用DMA方式传输数据可以占用更少的CPU资源,因此与其它操作系统一样,Linux支持硬盘以DMA方式转输数据,但在安装Red Hat7.0时关于DMA的默认选项是Disable的,当然你可以在安装时就enable它。

hdparm -t /dev/hda 查看IDE的磁盘,Sata或scsi的为:hdparm -t /dev/sda
一硬盘using_dma 为off,读取速度慢;而另一硬盘using_dma 为on,读取速度快。


查看与开启DMA支持执行命令如下:

[root@RJ-RMS root]# hdparm -cdt /dev/hda
/dev/hda:
IO_support   =  0 (default 16-bit)
using_dma    =  0 (off)
Timing buffered disk reads:  64 MB in 20.84 seconds =  3.07 MB/sec

[root@RJ-RMS root]# hdparm -d1 /dev/hda
/dev/hda:
setting using_dma to 1 (on)
using_dma    =  1 (on)
[root@RJ-RMS root]# hdparm -cdt /dev/hda
/dev/hda:
IO_support   =  0 (default 16-bit)
using_dma    =  1 (on)
Timing buffered disk reads:  64 MB in  1.09 seconds = 58.72 MB/sec


hdparm的改变是个临时的状态,下次再次启动Linux系统的时候hdparm将会消失。所以要想永久的保存修改后的信息,就必须把修改后的参数和数据写入/etc/rc.d/rc.local或/etc/rc.local文档,甚至比启动过程要早运行的程式中。

坏道修复

检查: smartctl -l selftest /dev/sda


卸载: umount /dev/sda*


修复: badblocks /dev/sda





显示硬盘的柱面、磁头、扇区数
#hdparm -g /dev/sda
/dev/sda:

geometry      = 35539[柱面数]/255[磁头数]/63[扇区数], sectors = 570949632[总扇区数], start = 0[起始扇区数]

评估硬盘的读取效率(停止所有服务,多测几次)

root@ubuntu:~# hdparm -T /dev/sda

/dev/sda:
Timing cached reads:   7540 MB in  2.00 seconds = 3771.50 MB/sec

root@ubuntu:~# hdparm -t /dev/sda

/dev/sda:
Timing buffered disk reads:  226 MB in  3.04 seconds =  74.36 MB/sec

root@ubuntu:~# hdparm -Tt /dev/sda

/dev/sda:
Timing cached reads:   7750 MB in  2.00 seconds = 3876.91 MB/sec
Timing buffered disk reads:  270 MB in  3.00 seconds =  89.99 MB/sec

-T
用于以基准测试和比较为目的的缓存读取计时.要得到有意义的结果, 应该在内存不少于2M,系统没有其它活动(没有其它活动的程序) 的条件下,重复操作2-3次.它显示了不存取磁盘直接从Linux缓存 读取数据的速度.这项测量实际上标示了被测系统的处理器,缓存 和内存的吞吐量. 如果标志 -t 也被指定,那么一个基于 -T 输出结果的修正量将被综合到 -t 操作报告的结果中.
-t
用于以基准测试和比较为目的的缓存读取计时.要得到有意义的结果, 应该在内存不少于2M,系统没有其它活动(没有其它活动的程序) 的条件下,重复操作2-3次.它显示了不使用预先的数据缓冲从磁盘 这项测量标示了Linux下没有任何文件系统开销时磁盘可以支持多快的连续数据读取.为确保测量的精确,缓存在 -t 的过程中通过BLKFLSBUF控制被刷新. 如果标志 -T 也被指定,那么一个基于 -T 数促结果的修正量将被综合到 -t 操作报告的结果中.








hdparm(hard disk parameters)

功能说明:显示与设定硬盘的参数。

语  法:hdp[url=http://www.linuxso.com/%22http://embed.chinaitlab.com//%22]arm[/url] [-CfghiIqtTvyYZ][-a <快取分区>][-A <0或1>][-c <I/O模式>][-d <0或1>][-k <0或1>][-K <0或1>][-m <分区数>][-n <0或1>][-p <PIO模式>][-P <分区数>][-r <0或1>][-S <时间>][-u <0或1>][-W <0或1>][-X <传输模式>][设备]

补充说明:hdp[url=http://www.linuxso.com/%22http://embed.chinaitlab.com//%22]arm[/url]可检测,显示与设定IDE或SCSI硬盘的参数。

参  数:
-a<快取分区> 设定读取文件时,预先存入块区的分区数,若不加上<快取分区>选项,则显示目前的设定。
-A<0或1> 启动或关闭读取文件时的快取功能。
-c<I/O模式> 设定IDE32位I/O模式。
-C 检测IDE硬盘的电源管理模式。
-d<0或1> 设定磁盘的DMA模式。
-f 将内存缓冲区的数据写入硬盘,并清楚缓冲区。
-g 显示硬盘的磁轨,磁头,磁区等参数。
-h 显示帮助。
-i 显示硬盘的硬件规格信息,这些信息是在开机时由硬盘本身所提供。
-I 直接读取硬盘所提供的硬件规格信息。
-k<0或1> 重设硬盘时,保留-dmu参数的设定。
-K<0或1> 重设硬盘时,保留-APSWXZ参数的设定。
-m<磁区数> 设定硬盘多重分区存取的分区数。
-n<0或1> 忽略硬盘写入时所发生的错误。
-p<PIO模式> 设定硬盘的PIO模式。
-P<磁区数> 设定硬盘内部快取的分区数。
-q 在执行后续的参数时,不在屏幕上显示任何信息。
-r<0或1> 设定硬盘的读写模式。
-S<时间> 设定硬盘进入省电模式前的等待时间。
-t 评估硬盘的读取效率。
-T 平谷硬盘快取的读取效率。
-u<0或1> 在硬盘存取时,允许其他中断要求同时执行。
-v 显示硬盘的相关设定。
-W<0或1> 设定硬盘的写入快取。
-X<传输模式> 设定硬盘的传输模式。
-y 使IDE硬盘进入省电模式。
-Y 使IDE硬盘进入睡眠模式。
-Z 关闭某些Seagate硬盘的自动省电功能。

hdparm命令 显示与设置硬盘参数 
------------------------------------------------------------------------

.显示硬盘的相关设置
[[email protected] ~]# hdparm /dev/sda
/dev/sda:
IO_support = 0 (default 16-bit)
readonly = 0 (off)
readahead = 256 (on)
geometry = 19929[柱面数]/255[磁头数]/63[扇区数], sectors = 320173056[总扇区数], start = 0[起始扇区数]

.显示硬盘的柱面、磁头、扇区数
[[email protected] ~]# hdparm -g /dev/sda
/dev/sda:
geometry = 19929[柱面数]/255[磁头数]/63[扇区数], sectors = 320173056[总扇区数], start = 0[起始扇区数]

.评估硬盘的读取效率
[[email protected] ~]# hdparm -t /dev/sda
/dev/sda:
Timing buffered disk reads: 166 MB in 3.03 seconds = 54.85 MB/sec
[[email protected] ~]# hdparm -t /dev/sda
/dev/sda:
Timing buffered disk reads: 160 MB in 3.01 seconds = 53.11 MB/sec
[[email protected] ~]# hdparm -t /dev/sda
/dev/sda:
Timing buffered disk reads: 166 MB in 3.00 seconds = 55.31 MB/sec

.评估硬盘快取的读取效率
[[email protected] ~]# hdparm -T /dev/sda
/dev/sda:
Timing cached reads: 3784 MB in 2.00 seconds = 1894.60 MB/sec
[[email protected] ~]# hdparm -T /dev/sda
/dev/sda:
Timing cached reads: 3816 MB in 2.00 seconds = 1909.06 MB/sec
[[email protected] ~]# hdparm -T /dev/sda
/dev/sda:
Timing cached reads: 3728 MB in 2.00 seconds = 1866.29 MB/sec

.检测IDE硬盘的电源管理模式
[[email protected] ~]# hdparm -C /dev/sda
/dev/sda:
drive state is: standby [省电模式]http://www.linuxso.com/command/hdparm.html








badblocks命令详解

功能说明:检查磁盘装置中损坏的区块。

语  法:badblocks [-svw][-b <区块大小>][-o <输出文件>][磁盘装置][磁盘区块数][启始区块]

补充说明:执行指令时须指定所要检查的磁盘装置,及此装置的磁盘区块数。

    硬盘是一个损耗设备,当使用一段时间后可能会出现坏道等物理故障。电脑硬盘出现坏道后,如果不及时更换或进行技术处理,坏道就会越来越多,并会造成频繁死机和数据丢失。最好的处理方式是更换磁盘,但在临时的情况下,应及时屏蔽坏道部分的扇区,不要触动它们。badblocks就是一个检查坏道位置的工具。
一、命令参数
badblocks使用格式为:

引用
badblocks  [  -svwnf  ]  [  -b block-size ] [ -c blocks_at_once ] [ -i
      input_file ] [ -o output_file ] [ -p num_passes ] [ -t test_pattern  ]
      device [ last-block ] [ start-block ]

参数含义是:
引用
-b blocksize 
指定磁盘的区块大小,单位为字节,默认值为“block 4K ”(4K/block)
-c blocksize 
每个区块检查的次数,默认是16次
-f
强制在一个已经挂载的设备上执行读写或非破坏性的写测试操作
(我们建议先umount设备,然后再进行坏道检测。仅当/etc/mtab出现误报设备挂载错误的时候可以使用该选项)
-i file
跳过已经显示在file文件中的坏道,而不进行检测(可以避免重复检测)
-o file 
把检测结果输出到file文件
-p number
重复搜寻设备,直到在指定通过次数内都没有找到新的坏块位置,默认次数为0 
-s
在检查时显示进度
-t pattern 
通过按指定的模式读写来检测区块。你可以指定一个0到ULONG_MAX-1的十进制正值,或使用random(随机)。
如果你指定多个模式,badblocks将使用第一个模式检测所有的区块,然后再使用下一个模式检测所有的区块。
Read-only方式仅接受一个模式,它不能接受random模式的。
-v
执行时显示详细的信息
-w
对每个区块都先写入,然后再从它读取信息
[device]
指定要检查的磁盘装置。
[last-block]
指定磁盘装置的区块总数。
[start-block]
指定要从哪个区块开始检查

二、示例
badblocks以4096的一个block,每一个block检查16次,将结果输出到“hda-badblocks-list”文件里


# badblocks -b 4096 -c 16 /dev/hda1 -o hda-badblocks-list

hda-badblocks-list”是个文本文件,内容如下:
引用
cat hda-badblocks-list 
51249 
51250 
51251 
51253 
51254 
……
61245 
……

可以针对可疑的区块多做几次操作。下面,badblocks以4096字节为一个“block”,每一个“block”检查1次, 将结果输出到“hda-badblocks-list.1”文件中,由第51000 block开始,到63000 block结束

# badblocks -b 4096 -c 1 /dev/hda1 -o hda-badblocks-list.1 63000 51000

这次花费的时间比较短,硬盘在指定的情况下在很短的时间就产生“嘎嘎嘎嘎”的响声。由于检查条件的不同,其输出的结果也不完全是相同的。重复几次同样的操作,因条件多少都有些不同,所以结果也有所不同。进行多次操作后,直到产生最后的hda-badblock-list.final文件。
三、其他
1、fsck使用badblocks的信息
badblocks只会在日志文件中标记出坏道的信息,但若希望在检测磁盘时也能跳过这些坏块不检测,可以使用fsck的-l参数:

# fsck.ext3 -l /tmp/hda-badblock-list.final /dev/hda1
2、在创建文件系统前检测坏道
badblocks可以随e2fsckmke2fs的-c删除一起运行(对ext3文件系统也一样),在创建文件系统前就先检测坏道信息:


mkfs.ext3 -c /dev/hda1



标签: linux

相关文章

评论已关闭