磁盘检测
http://netpro.blog.51cto.com/961206/515141
盘坏道的检测及修复
磁盘坏道,是所有人都不希望遇到的事情……
磁盘坏道,轻则磁盘性能下降,重则系统启动失败,数据丢失。所以我们要时刻关注磁盘健康状况,及时备份重要数据。
什么是S.M.A.R.T?
全称为 Self-Monitoring Analysis and Report Technology ,用于磁盘自我检测,并向用户报告磁盘状态。这项技术需要主板支持,且检测结果不一定准确。
linux上可以使用gnome-disk-utility查看磁盘的S.M.A.R.T相关信息。
您也可以安装
sudo pacman -S libatasmart smartmontools gsmartcontrol
启用smart图形化界面(gsmartcontrol)/cli工具(smartctl)进行查看。
-
温彻斯特磁盘:(硬盘原理)
大致原理就是非工作时间磁头停留在landing zone;需要读取数据时,磁头离开landing zone,依靠盘片的旋转产生升力悬浮在盘片表面读取数据。
因为盘片旋转速度非常快,且磁头与盘片距离非常近(头发丝的千分之一),如果剧烈震动或者外力冲击,甚至电压不稳,均有可能导致磁头与高速旋转的盘片产生物理接触,造成不可修复性物理损坏。
当您的磁盘:
- 在读取某一文件或运行某一程序时,硬盘反复读盘且出错,提示文件损坏等信息,或者要经过很长时间才能成功;有时甚至会出现死机;
- io wait 无故增高或居高不下;
- 硬盘声音突然由原来正常的摩擦音变成了怪音;
- 系统无法正常启动,出现“IO error”等提示信息;
- mkfs时,到某一进度停止不前,最后报错,无法完成;
- 每次系统开机都会自动运行fsck扫描磁盘错误;
- 对硬盘执行FDISK时,到某一进度会反复进进退退;
如果您的磁盘出现如上状况,您就需要及时对磁盘进行坏道检测以测试磁盘可用性,并立即备份数据。
-
磁盘坏道检测
(我的原帖)
建议使用livecd或者liveusb对本地磁盘进行检测。如果是对移动存储设备进行检测,请umount后再进行检测,以免数据受损。
umount /dev/sd*
对磁盘进行read-only检测:
sudo badblocks -s -v /dev/sd*
因为需要对磁盘进行检测,所以速度非常缓慢,在检测过程中注意不要断电,不要对硬盘进行任何操作,不要移除硬盘,不要物理损伤,不要震动等。
检测过程可以中途终止,也可以指定区块重新开始。
sudo badblock -s -v /dev/sd* last start
|
如果您检测完成后看到 |
Pass completed, 0 bad blocks found.
那么恭喜,此磁盘通过测试,没有坏道(坏块)。您可以放心使用。
但是,如果您检测过程中再某一个区块停滞不前,而后报告中提示有坏块,那么杯具了……您的磁盘有坏道了。
不论是什么类型的坏道,均建议您首先进行数据备份!把重要数据进行备份然后再尝试修复。如果您有重要数据却无法读取(磁盘出现异常),那么请立即停止使用此磁盘并找专业人员进行修复。
-
坏道的修复/屏蔽
常见坏道分为以下几种类型:
-
- 逻辑坏道
- 0磁道损坏
- 物理坏道
坏道一般以单独或者组合形式出现。
-
逻辑坏道修复:
-
fsck -a /dev/sd*
-
就这么简单。
更多fsck用法您可以查看这里或者查看man手册。
-
0磁道损坏修复:
使用1磁道代替零磁道(操作危险需谨慎)
大致流程就是全盘格式化,然后重新分区,编辑分区表使用1磁道,从而复活硬盘。
-
物理坏道
物理坏道没有修复可能性,只能进行屏蔽。
如果您已经进行了坏道检测,那么您肯定已经知道坏道(坏块)大致位置以及坏块大小,您需要:
- 备份硬盘数据
- 删除所有硬盘分区
- 根据坏块位置以及大小,估算出所占空间(例如共100个区块,磁盘大小为100g,20-30损坏,则坏块在20-30g这个区间)
- 进行分区(接上:分区应为 0-15|15-35|35-100,中间的15-35g为有坏道的分区。要对有坏道的分区进行扩容处理,数值不要过小,以免坏道被分到其他分区。)
- 隔离15-35g这个分区(即不挂载,不读写,不操作)
- 您的磁盘可用空间减少,但是剩余空间均可用(坏道已经屏蔽)
由于物理坏道具有扩散性,所以建议尽早让磁盘“退休”才是……
-
分区表修复工具
如果您的分区表已经被损坏,建议使用testdisk进行修复。他可以快速回复分区表,真的非常好用(修复我的硬盘n次!利器也~)
安装
sudo pacman -S testdisk
-
珍爱磁盘,爱护数据
磁盘有价,数据无价
不要等磁盘出现问题了才想到数据还没有备份;不到等论文丢了才想起来明天就要交;不要等rm了才想起来把重要文件删除了。备份数据并不是多么困难,也不需要多少时间,所以请您及时备份,保护无价的数据吧!
转自:https://www.deleak.com/blog/2010/06/07/hard-disk-scan/
http://mycnarms.blog.51cto.com/614646/787586
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洪水。