最近有台服务器的负载一直很高总是报警,使用top命令没有找到哪个程序的CPU使用率特别高,大事发现iowait 占用CPU一直在15% 以上,怀疑磁盘有问题了,于是就找了几个检测硬盘的软件。

hdparm(hard disk parameters)

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

语  法:hdparm [-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 <传输模式>][设备] 补充说明:hdparm可检测,显示与设定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很强大,功能很多这里我们主要用到的有 -t 这个参数。 -t这个参数就是用来测试你这个硬盘的读取速度

我悲剧的硬盘
[root@localhost ~]# hdparm -t /dev/sda /dev/sda:  Timing buffered disk reads:    2 MB in  4.46 seconds = 459.31 kB/sec

这速度岂止是坑爹啊,简直是坑爹!看来要换硬盘了。

-I 这个参数可以获得对应硬盘的信息。把信息复制出来换硬盘的时候对照这找硬盘,防止换错硬盘。

[root@localhost ~]# hdparm -I /dev/sda /dev/sda: ATA device, with non-removable media  Model Number:       WDC WD5000AAKX-001CA0                    Serial Number:      WD-WMAYUD681142  Firmware Revision:  15.01H15 Transport: Serial, SATA 1.0a, SATA II Extensions, SATA Rev 2.5 Standards:  Supported: 8 7 6 5  Likely used: 8 Configuration:  Logical  max current  cylinders 16383 16383  heads  16 16  sectors/track 63 63  --  CHS current addressable sectors:   16514064  LBA    user addressable sectors:  268435455  LBA48  user addressable sectors:  976773168  device size with M = 1024*1024:      476940 MBytes  device size with M = 1000*1000:      500107 MBytes (500 GB) Capabilities: ......后面省略N个字

------------------------------我是分割线------------------------------ 下面介绍一个查询设备坏区块的软件

badblocks - 查 询 设 备 的 坏 区 块

语 法 ( SYNPSIS) badblocks [ -svwnf ] --[ -b block-size ] [ -c blocks_at_once ] [ -i input_file ] [ -o output_file ] [ -p num_passes ] device [ blocks-count ] [ start-block ]

( 描 述 ) DESCRIPTION

badblocks 被用来在设备( 通常是磁碟分区) 中检测坏区块。 device 参数是设备的名字(例如/dev/hdc1). blocks-count 参数是设备上总的区块数目; 如果没有指定这个参数, 预设值就是设备的容量大小。 start-block参数是一个可选参数, 它指定从多少区块号开始进行检测。因此, 检测允许从磁碟的中间部分开始。

选 项 ( OPTIONS) -b block-size 以字节为单位, 指定区块的大小。 -c number of blocks 每 一 次 检 测 区 块 的 数 目 。预 设 值 是 16。增加这个数目可以增加检测坏块的效率可同时也会增加记忆体的耗费。 Badblocks 命令在只读模式下需要花费与每一次检测的区块相同数目的记忆体容量。在读写模式下, 这个比例是两倍而在非破坏性的读写模式下, 这个比例是三倍。如果你将参数「 num-of-blocks」 设置太大的话, badblocks 将会在分派缓存时会因为一个记忆体溢出错误而立即退出。当然如果你在非破坏性的读写模式下将该值设置得过低, 那么在一个不稳定的磁碟上的有问题的区块也许会因为磁碟的磁道缓冲的作用而不被检测出来。 -f 正常情况下, badblocks命令不会在一个已经激活的设备上读写模式或者是非破坏性的读写模式的检测, 因为这可能会导致系统的崩溃。使用-f 标志可以使这种情况强制执行, 但是最好不要在正常的情况下使用它。如果/etc/mtab档案发生了错误, 而设备实际上并没有被激活的时候, 这个参数才会是安全的。 -i input_file 读 入 一 个 已 知 的 坏 块 列 表 。 Badblocks 命令将会跳过对这些已知是坏块的区块检查。如果input_file 参数是「 -」 , 则列表从标准输入读入。在这个列表中列举出的区块也会在新的坏道记录档案或者坏道记录输出时被忽略掉。 dumpe2fs(8) 的-b 选项能够在一个已有的档案系统中得到被标记为坏块的列表, 而且已经做成了符合这个选项的格式。 -o output_file 将坏块的列表写到指定的档案中。如果没有这个选项, badblocks 命令会在标准输出中输出这个列表。其格式是与e2fsck(8) 或者mke2fs(8). 的-l 选项的要求相适应的。 -p num_passes 重复的扫描磁碟, 直到重复「 num_passes」 遍磁碟扫描后也没有发现新的区块后结束。预 设 值 是 0。表示badblocks 命令成功执行一遍扫描后就会结束。 -n 使 用 非 破 坏 性 的 读 写 模 式 。预设值是非破坏性的只读模式测试。这个选项不能与-w 选项一起使用, 因为它们是互斥的。 -s 通过输出正在被检测的区块的号码以表示检测进程。 -v 混 杂 模 式 检 测 。 -w 使 用 写 模 式 测 试 。通过使用这个选项badblocks 通过往每个区块上写入一些特定的字符( 0xaa, 0x55, 0xff, 0x00) , 读出来后再比较其内容, 决定是否为坏块。这个选项不能与-n 选项一起使用, 因为它们是互斥的。

警 告 ( WARNING) 千万不要将-w 选项用在一个已经包含了档案系统的设备上。这个选项会删除掉原有的数据!如果你想要在已经有档案系统的设备上执行读写模式检测, 请使用-n 选项。虽然慢点, 可是它能够保护你的数据不受伤害。

正常的硬盘
[root@localhost ~]# badblocks -sv /dev/sda Checking blocks 0 to 488386584 Checking for bad blocks (read-only test):          139840/      488386584 会这样一直跑完,然后告诉你你的硬盘没问题

 

有问题的的硬盘
[root@localhost ~]# badblocks -sv /dev/sda Checking blocks 0 to 488386584 Checking for bad blocks (read-only test): 61568     61568/      488386584 61572     61572/      488386584 61573     61573/      488386584 61574     61574/      488386584 61575     61575/      488386584 61576     61576/      488386584 61577     61577/      488386584 61578     61578/      488386584 有问题的硬盘检查到有问题的地方就会给出信息

 

这篇文章是写给自己做备份记录的,各位看官不要笑话.

 我用 菊子曰写的这篇文章!你也试试?