Linux检测硬盘坏道与I/O性能

Linux检测硬盘坏道


1.使用SMART检测硬盘
查看是否启用SMART功能:
实例:
[root@test20130628 ~]# smartctl -i /dev/sda
smartctl 5.39.1 2010-01-28 r3054 [x86_64-unknown-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net


=== START OF INFORMATION SECTION ===
Device Model:     TOSHIBA MG03ACA100
Serial Number:    23DDK40VF
Firmware Version: FL1A
User Capacity:    1,000,204,886,016 bytes
Device is:        Not in smartctl database [for details use: -P showall]
ATA Version is:   8
ATA Standard is:  Exact ATA specification draft version not indicated
Local Time is:    Thu Jul  4 01:04:11 2013 PDT
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
现在硬盘的SMART功能已经被打开,执行如下命令查看硬盘的健康状况:


[root@test20130628 ~]# smartctl -H /dev/sda
smartctl 5.39.1 2010-01-28 r3054 [x86_64-unknown-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net


=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
请注意result后边的结果:PASSED,这表示硬盘健康状态良好;如果这里显示Failure,那么最好立刻给服务器更换硬盘。
如果想查看更详细参数,可以执行smartctl -A /dev/sda
实例:
[root@test20130628 ~]# smartctl -A /dev/sda
smartctl 5.39.1 2010-01-28 r3054 [x86_64-unknown-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net


=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000b   100   100   050    Pre-fail  Always       -       0
  2 Throughput_Performance  0x0005   100   100   050    Pre-fail  Offline      -       0
  3 Spin_Up_Time            0x0027   100   100   001    Pre-fail  Always       -       4449
  4 Start_Stop_Count        0x0032   100   100   000    Old_age   Always       -       6
  5 Reallocated_Sector_Ct   0x0033   100   100   050    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000b   100   100   050    Pre-fail  Always       -       0
  8 Seek_Time_Performance   0x0005   100   100   050    Pre-fail  Offline      -       0
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       127
 10 Spin_Retry_Count        0x0033   100   100   030    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       6
191 G-Sense_Error_Rate      0x0032   100   100   000    Old_age   Always       -       0
192 Power-Off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       4
193 Load_Cycle_Count        0x0032   100   100   000    Old_age   Always       -       7
194 Temperature_Celsius     0x0022   100   100   000    Old_age   Always       -       26 (Lifetime Min/Max 18/28)
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0032   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0030   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       0
220 Disk_Shift              0x0002   100   100   000    Old_age   Always       -       0
222 Loaded_Hours            0x0032   100   100   000    Old_age   Always       -       121
223 Load_Retry_Count        0x0032   100   100   000    Old_age   Always       -       0
224 Load_Friction           0x0022   100   100   000    Old_age   Always       -       0
226 Load-in_Time            0x0026   100   100   000    Old_age   Always       -       109
240 Head_Flying_Hours       0x0001   100   100   001    Pre-fail  Offline      -       0




2.badblocks检测磁盘坏块:
badblocks -s//显示进度 -v//显示执行详细情况 /dev/sda //检查的磁盘
实例:
#badblocks -s -v /dev/sda1
[root@test20130628 ~]# badblocks -s -v /dev/sda1
Checking blocks 0 to 255999
Checking for bad blocks (read-only test): done
Pass completed, 0 bad blocks found.
[root@test20130628 ~]# badblocks -s -v /dev/sda
Checking blocks 0 to 976762583
Checking for bad blocks (read-only test):   5.71% done, 6:11 elapsed




Linux硬盘I/O性能(速度)测试


1.使用hdparm测试:
实例:
[root@test20130628 ~]# hdparm -tT /dev/sda1
/dev/sda1:
 Timing cached reads:   28326 MB in  2.00 seconds = 14188.29 MB/sec
 Timing buffered disk reads:  250 MB in  1.76 seconds = 142.26 MB/sec


[root@test20130628 ~]# hdparm -tT /dev/sda
/dev/sda:
 Timing cached reads:   28302 MB in  2.00 seconds = 14175.83 MB/sec
 Timing buffered disk reads:  444 MB in  3.00 seconds = 147.81 MB/sec


其中两参数含义:-T perform cache read timings显示了不存取磁盘直接从Linux缓存读取数据的速度. 测量实际上标示了被测系统的处理器,缓存和内存的吞吐量.
-t perform device read timings显示了不使用预先的数据缓冲, 标示了Linux下没有任何文件系统开销时磁盘可以支持多快的连续数据读取.


hdparm相关命令:
 
hdparm -tT /dev/hda 测试硬盘速度
hdparm -A 1 /dev/hda 开启硬盘预读取功能
hdparm -c 3 /dev/hda 开启硬盘32位
hdparm -d 1 /dev/hda 开启DMA
-d 和 -A 参数对IDE硬盘读写性能影响最大(尤 -d)


关闭与开启硬盘预读取功能速度对比:
关闭预读取测试实例(即关闭缓存作用):
[root@test20130628 ~]# hdparm -A 0 /dev/sda


/dev/sda:
 setting drive read-lookahead to 0 (off)
 look-ahead    =  0 (off)
[root@test20130628 ~]# hdparm -Tt /dev/sda


/dev/sda:
 Timing cached reads:   26134 MB in  2.00 seconds = 13088.33 MB/sec
 Timing buffered disk reads:   42 MB in  3.10 seconds =  13.57 MB/sec


开启预读取测试实例(即开启缓存作用)
[root@test20130628 ~]# hdparm -A 1 /dev/sda


/dev/sda:
 setting drive read-lookahead to 1 (on)
 look-ahead    =  1 (on)
[root@test20130628 ~]# hdparm -Tt /dev/sda


/dev/sda:
 Timing cached reads:   27444 MB in  2.00 seconds = 13745.22 MB/sec
 Timing buffered disk reads:  444 MB in  3.00 seconds = 147.75 MB/sec




2.当用top或者iostat查看发现iowait比较高时说明有io瓶颈,iostat检测实例:
[root@test20130628 ~]# iostat -kdx 2
Linux 2.6.32-220.el6.x86_64 (test20130628)      07/04/2013      _x86_64_        (8 CPU)


Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               2.04     0.08    2.48    0.13   158.37     0.73   122.04     0.00    0.80   0.77   0.20
dm-0              0.00     0.00    0.04    0.18     0.42     0.72    10.43     0.00    6.30   4.48   0.10
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     8.00     0.00    2.13   1.19   0.00
dm-2              0.00     0.00    0.00    0.00     0.00     0.01     7.98     0.00    3.39   0.90   0.00


Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-2              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00


Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-2              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
参数说明:
rrqm/s:每秒进行merge的读操作数目。即delta(rmerge)/s
wrqm/s:每秒进行merge的写操作数目。即delta(wmerge)/s
r/s:每秒完成的读I/O设备次数。即delta(rio)/s
w/s:每秒完成的写I/O设备次数。即delta(wio)/s
rsec/s:每秒读扇区数。即delta(rsect)/s
wsec/s:每秒写扇区数。即delta(wsect)/s
rkB/s:每秒读K字节数。是rsect/s的一半,因为每扇区大小为512字节。(需要计算)
wkB/s:每秒写K字节数。是wsect/s的一半。(需要计算)
avgrq-sz:平均每次设备I/O操作的数据大小(扇区)。delta(rsect+wsect)/delta(rio+wio)
avgqu-sz:平均I/O队列长度。即delta(aveq)/s/1000(因为aveq的单位为毫秒)。
await:平均每次设备I/O操作的等待时间(毫秒)。即delta(ruse+wuse)/delta(rio+wio)
svctm:平均每次设备I/O操作的服务时间(毫秒)。即delta(use)/delta(rio+wio)
%util:一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O队列是非空的。即delta(use)/s/1000(因为use的单位为毫秒)
如果%util接近100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘
能存在瓶颈;idle小于70%IO压力就较大了,一般读取速度有较多的wait.
同时可以结合vmstat查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)
从以上实例说明当前该服务器io性能良好。
另外还可以参考
一般:svctm
svctm的大小一般和磁盘性能有关:CPU/内存的负荷也会对其有影响,请求过多也会间接导致svctm的增加。
await:await的大小一般取决于服务时间(svctm)以及I/O队列的长度和I/O请求的发出模式。
如果svctm比较接近await,说明I/O几乎没有等待时间;
如果await远大于svctm,说明I/O队列太长,应用得到的响应时间变慢
如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核elevator算法,优化应用,或者升级CPU.
队列长度(avgqu-sz)也可作为衡量系统I/O负荷的指标,但由于avgqu-sz是按照单位时间的平均值,所以不能反映瞬间的I/O洪水。


你可能感兴趣的:(Linux检测硬盘坏道与I/O性能)