这个问题要是写出来有时一个大块文章,咱们这里简单说说。

现代的硬磁盘技术已经相当成熟和智能,成熟并不是说就不是好就是坏,磁盘的状态可能是健康、好、可能坏、变好了、正在变坏,坏了等等。之所以不是我们所想象的非好即坏,是其智能话的结果,也就是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

买个关子回复可看,详细的看知乎文章: