本帖最后由 tonyliu2ca 于 16-3-28 11:12 编辑
这个问题要是写出来有时一个大块文章,咱们这里简单说说。
现代的硬磁盘技术已经相当成熟和智能,成熟并不是说就不是好就是坏,磁盘的状态可能是健康、好、可能坏、变好了、正在变坏,坏了等等。之所以不是我们所想象的非好即坏,是其智能话的结果,也就是S.M.A.R.T.技术,也简写SMART。
检查一个硬盘状态,有两个基本操作:表面扫描和检查SMART状态、让SMART检测并报告。
下载
然而问题是,OSX只支持最简单的SMART检测,要想使用上面的两个操作,需要第三方程序。放心我们这里介绍的是开源的,不要钱。如果你不差钱,那就使用商业软件如TechTool Pro等。第三方开源软件是Linux版,传统方法需要使用MacPort等软件来在本地编译以形成本地可执行的OSX版本。不过对于,大多数用户来说,我提取了其中的最最核心的部分,供大家直接下载安装,主要是第一个,第二个的用法后面有解释:
badblocks_1_42.dmg下载:链接:http://pan.baidu.com/s/1Zx5oi 密码:z85t
OS-X-SAT-SMART-Driver-master.zip链接:http://pan.baidu.com/s/1gebVfgR 密码:gtsn
具体使用,要想讲清楚也很麻烦,我们只简单说说.
磁盘表面扫描:
首先使用命令:$ diskutil list来找到所要检测目标盘/分区的设备名,比如/dev/disk1s2
然后卸载该盘/分区: $ diskutil unmount disk1s2
这是就可以检测了:$ badblock -ns /dev/disk1s2碰上坏扇区,它会显示
检查SMART状态:
注意,应为OSX内置的USB等外置设备不支持SMART数据传输,所以需要使用第三方的驱动,也就是上面第二个下载。
SMART状态时针对整个硬盘的,它不管什么分区。
获得目标硬盘的SMART信息:$ smartctl -i disk1
读取重要的SMART的计数器信息:$ smartctl -A disk1
读取更详细的SMART信息:$ smartctl -a disk1
我们最关心的计数器是下面几个:
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,否则说明此硬盘的磁盘表面或者机械可能出现问题。
我们还可以让硬盘内的固件程序进行自检:
比如:$ smartctl -t long disk1
或者:$ smartctl -t short disk1
一个坏盘的例子:
下面的WHEN_FAILED中的FALLING_NOW说明磁盘需要换了
$ smartctl -A disk2
smartctl 6.4 2015-06-04 r4109 [x86_64-apple-darwin14.4.0] (local build)
Copyright (C) 2002-15, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 10
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x000e 107 086 006 Old_age Always - 189521545
3 Spin_Up_Time 0x0003 100 099 000 Pre-fail Always - 0
4 Start_Stop_Count 0x0032 097 097 020 Old_age Always - 3299
5 Reallocated_Sector_Ct 0x0033 026 026 036 Pre-fail Always FAILING_NOW 1521
7 Seek_Error_Rate 0x000f 076 060 030 Pre-fail Always - 49575918
9 Power_On_Hours 0x0032 099 099 000 Old_age Always - 1637
10 Spin_Retry_Count 0x0013 100 100 097 Pre-fail Always - 0
12 Power_Cycle_Count 0x0032 097 097 020 Old_age Always - 3241
184 End-to-End_Error 0x0032 100 100 099 Old_age Always - 0
187 Reported_Uncorrect 0x0032 001 001 000 Old_age Always - 3036
188 Command_Timeout 0x0032 100 099 000 Old_age Always - 64425492496
189 High_Fly_Writes 0x003a 100 100 000 Old_age Always - 0
190 Airflow_Temperature_Cel 0x0022 079 059 045 Old_age Always - 21 (Min/Max 21/21)
191 G-Sense_Error_Rate 0x0032 100 100 000 Old_age Always - 538
192 Power-Off_Retract_Count 0x0032 098 098 000 Old_age Always - 4798
193 Load_Cycle_Count 0x0032 065 065 000 Old_age Always - 70066
194 Temperature_Celsius 0x0022 021 041 000 Old_age Always - 21 (243 52 0 0 0)
195 Hardware_ECC_Recovered 0x001a 054 049 000 Old_age Always - 189521545
197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 5
198 Offline_Uncorrectable 0x0010 100 100 000 Old_age Offline - 5
199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0254 Free_Fall_Sensor 0x0032 001 001 000 Old_age Always - 2927
买个关子回复可看,详细的看知乎文章: