一、测试硬盘健康状态
安装相关工具:yum -y install smartmontools
SMART是一种磁盘自我分析检测技术,早在90年代末就基本得到了普及每一块硬盘(包括IDE、SCSI),在运行的时候都会将自身的若干参数记录下来,这些参数包括型号、容量、温度、密度、扇区、寻道时间、传输、误码率等。硬盘运行了几千小时后,很多内在的物理参数都会发生变化,某一参数超过报警阈值,则说明硬盘接近损坏,此时硬盘依然在工作,如果用户不理睬这个报警继续使用,那么硬盘将变得非常不可靠,随时可能故障。
启用SMART
SMART是和主板BIOS上相应功能配合的,要使用SMART,必须先进入到主板BIOS设置里边启动相关设置。一般从Pentium2级别起的主板,都支持SMART,BIOS启动以后,就是操作系统级别的事情了(Windows没有内置SMART相关工具,需要安装第三方工具软件),好在Linux上很早就有了SMART支持了,如果把Linux装在VMware等虚拟机上,在系统启动时候可以看到有个服务启动报错:smartd。这个服务器就是smart的daemon进程(因为vmware虚拟机的硬盘不支持SMART,所以报错)。smartd是一个守护进程(一个帮助程序),它能监视拥有自我监视,分析和汇报技术(Self-Monitoring, Analysis, and Reporting Technology - SMART)的硬盘。SMART体系使得硬盘能监视并汇报自己的运行状况.它的一个重要特性是能够预测失败,使得系统管理员能避免数据丢失。
1、smartctl -i <device> :显示设备的身份信息,检查硬盘是否打开了SMART支持。
看到有:
SMART support is: Enabled
说明硬盘支持SMART。
如果为Disabled,使用:
smartctl --smart=on --offlineauto=on --saveauto=on <device>
启用SMART。
2、smartctl -H <device> :查看硬盘的健康状况。
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
PASSED表示硬盘健康状态良好,如果为Failure那就要立刻更换硬盘。
3、smartctl -A <device> :显示设备SMART厂商属性和值。
我们关心的几个参数:
-
SMART 005(0x05) - Reallocated Sectors Count:是并被成功重新分配了的坏扇区计数。每个厂家的不同型号硬盘都可能会有一个保留扇区池,这个池中会有不同数量的扇区以供重分配,如果池中所有的都被使用了,那么再有坏扇区就无法分配。这个数值太大就会有问题。
-
SMART 187(0xBB) - Reported_Uncorrectable_Errors:对于读取的区块的硬件ECC校验错误的计数。一般应该为0,如果非零,就该考虑换硬盘了。
SMART 188(0xBC) - Command_Timeout:硬盘命令超时而放弃的计数。正常值应该是0,如果远大于0,那么可能是电源或者数据线有问题。 -
SMART 197(0xC5) - Current Pending Sector Count:这些“不稳定”扇区,有可能使用写操作使其恢复读写校验正常,这样他们就会被从这个技术中减去。如果写操作也失败,那么固件程序就可能会对其重分配。
-
SMART 198(0xC6) - Offline_Uncorrectable:读写扇区数据错误的总计数。正常值为0,否则说明此硬盘的磁盘表面或者机械可能出现问题。
4、smartctl -l error <device> :显示硬盘历史错误信息。
5、smartctl --test=TEST <device> :硬盘自测。
TEST可取值:offline, short, long, conveyance, select,M-N, pending,N, afterselect,[on|off], scttempint,N[,p]
此时可以用smartctl -X中断后台测试。
6、smartctl -l selftest <device> :显示硬盘测试信息。
7、smartctl -a <device> :显示硬盘SMART的全部信息。
二 、测试硬盘读写速度
安装相关工具:yum -y install hdparm
1、hdparm -Tt <device> :测试读取速度
其它测试读写速度方法:
测试写速度:dd if=/dev/zero bs=1k count=1000000 of=1Gb.file
测试读速度:dd if=1Gb.file bs=64k |dd of=/dev/null