SMART——Self-Monitoring Analysis and Reporting Technology,自监控分析和报告技术。详见 http://www.smartmontools.org 。
一种监控硬盘的系统,可以在硬盘发生故障之前检测错误。
smartmontools需要安装,可以从sysutils/smartmontools树或pkg安装。
每种型号的硬盘都有自己的怪癖、功能、功能错误和暴行。更糟糕的是,每种硬盘型号的SMART协议实现可能略有不同。
smartmontools报告的一些错误来自制造商偏离标准的决定,而不是硬件故障。
例如,SMART协议规定磁盘应以小时为单位报告其运行寿命,但一些制造商报告的是分钟。
当smartmontools报告错误时,请在更换硬件之前查看供应商网站上的常见问题解答,看看是否是特定于供应商的问题。
smartmontools有两个主要组件:交互式smartctl和监控守护进程smartd。
smartctl(8)程序允许配置和查询SMART设备。
首先,使用-i选项获取特定硬盘上的信息。每个smartctl命令都需要驱动器设备节点作为其最终参数:
xxxxxxxxxx
# smartctl -i /dev/da3
=== START OF INFORMATION SECTION ===
Device Model: WDC WD1003FBYZ-010FB0
Serial Number: WD-WCAW36477062
LU WWN Device Id: 5 0014ee 2090bb6de
Firmware Version: 01.01V03
User Capacity: 1,000,204,886,016 bytes [1.00 TB]
1 Sector Size: 512 bytes logical/physical
Rotation Rate: 7200 rpm
Device is: Not in smartctl database [for details use: -P showall]
ATA Version is: ATA8-ACS (minor revision not indicated)
2 SATA Version is: SATA 3.0, 6.0 Gb/s (current: 3.0 Gb/s)
Local Time is: Tue Aug 26 13:38:48 2014 EDT
SMART support is: Available - device has SMART capability.
3 SMART support is: Enabled
大部分输出都是不言自明的,比如Serial Number(序列号)、Rotation Rate(转速)、Firmware Version(固件版本号)等等。但也有一些有趣的字段。
SMART协议可以要求驱动器提供其扇区大小(上例中的行号1)。这不一定比任何其他工具提供的扇区大小更准确,但这是从万股磁盘中窥探信息的另一种方法。
行号2给出SATA版本号以及最佳速度和当前速度。虽然磁盘可能具有高传输速度,但可能会受到许多因素的影响。此例中硬盘的标称速度是6GB/s,但已协商降至3GB/s。可能是线缆松动或故障,也可能是驱动器插入了3GB/s主板接口。
行号3标记是否启用SMART。大多数现代磁盘都启用了SMART,但总有例外。要启用SMART,可以使用-d选项设置on:
xxxxxxxxxx
# smartctl -d on /dev/da3
…
SMART Enabled.
现在磁盘已经准好更多高级测试。
使用-d off可以禁用SMART。但强烈不建议这么做。
使用smartctl命令可以执行大多数SMART操作。
运行smartctl -A可以查看供应商提供的有关磁盘的所有信息。使用-f brief(简短)可以得到更窄的显示效果以适应更小的终端。
xxxxxxxxxx
# smartctl –f brief -A /dev/da3
=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAGS VALUE WORST THRESH FAIL RAW_VALUE
1 Raw_Read_Error_Rate POSR-K 100 253 051 - 0
3 Spin_Up_Time POS--K 173 172 021 - 4316
4 Start_Stop_Count -O--CK 100 100 000 - 29
…
每一行输出代表驱动器的一个属性,如Raw_Read_Error_Rate和Start_Stop_Count。每一列都包含该属性的信息。
第一列(ID#)是属性的ID号码。范围从1到255。属性编号没有统一含义,由厂家自行定义。
第二列(ATTRIBUTE_NAME)是属性的友好名称。这些属性名称大多在制造商之间相当标准化,但有些制造商会自己命名和/或稍微调整属性的定义。
第三列(FLAGS)使用六个字母的代码显示这是什么类型的属性。根据属性类型,属性可以设置或不设置这些标志中的任何一个。
第四列(VALUE)的内容很有趣。对于大多数属性,这表示驱动器运行状况。每个属性的最大值为100或200,表示完全健康。当SMART检测到错误时,值会降至0。对于温度等属性,该值表示可接受的工作范围,可以超过100。
第五列(WORST——最差)显示了此属性在此驱动器上记录的最坏(most bad)值。通常这是一个较低的数字,但对于温度等属性,它可能会很高。
第六列(THRESH)给出了属性的最小阈值。如果故障前属性的值低于此阈值,SMART将宣布驱动器发生故障,需要尽快更换驱动器。非关键属性通常使用阈值0,因此属性不会低于该阈值。
第七列(FAIL)显示了驱动器使用后属性失败的小时数。
第八列(RAW_VALUE)给出了驱动器的原始数据。根据驱动器制造商以及制造商工程部门在任何一天的情绪,该字段可能与任何现实世界的价值有任何关系,也可能没有任何关系。
因为每个制造商都可以创建自己的属性,并按照自己的意愿进行解释,所以列出所有SMART属性没有意义。
smartctl作者做了大量工作来跟踪供应商属性并将其集成到smartmontools中。以下是一些常见和有用的。观察任何带有P标志的属性,这些标志会在驱动器即将失效时提出警告。
读取错误率描述了驱动器在尝试从磁盘读取数据时报告错误的频率。
每个供应商对此有不同的解释。所有驱动器都会出现一些读取错误,但一些供应商不会全部报告。能报告错误的驱动器是更值得选择的。
如果此值增加,则表明驱动器有故障。
机械硬盘必须旋转其驱动器盘片才能读取和写入数据。一个无法使磁盘加速的驱动器正在消亡。
此属性显示驱动器尝试使其盘片达到运行速度但失败的次数。
这显示了驱动器旋转盘片所需的平均时间。原始值通常以毫秒为单位,但该值和阈值可能表明存在问题。
大件事。
磁盘扇区可能因为频繁使用或制造不善而发生故障。许多磁盘会自动用好扇区替换坏扇区。
如果一个扇区坏了,磁盘控制器可以用一个空的、未使用的块替换它。
硬盘驱动器有额外的块用于此目的。一个利用这一储备的硬盘已经开始死亡。
尽快更换此驱动。
此属性不会给出实际温度(尽管温度可能出现在RAW_VALUE字段中)。
它指示温度是否在可接受的参数范围内。
在特别凉爽的环境中,这个属性也可能会超过100。
SMART有测试例程,但它们实际上并没有测试整个驱动器。
适当的测试会从磁盘上的每个扇区读取和写入数据,但这会破坏磁盘上的数据。
相反,SMART测试检查驱动器的电子设备、机制和从磁盘读取的能力。这更像是一个数据收集操作,而不是磁盘测试。
SMART包括长测试和短测试。
长测试检查磁盘上的每个扇区,无论需要多长时间。短测试只检查磁盘的一部分,因此仅需要两分钟。
还有对联机和脱机模式的引用,但这在现代磁盘上无关紧要。
要使用smartctl运行测试,使用-t选项并指定short或long测试。
xxxxxxxxxx
# smartctl -t short /dev/da3
…
=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Short self-test routine immediately in off-line mode
".
Drive command "Execute SMART Short self-test routine immediately in
1 off-line mode" successful.
Testing has begun.
Please wait 2 minutes for test to complete.
Test will complete after Tue Oct 7 13:28:07 2014
Use smartctl -X to abort test.
测试正在进行中,以离线模式运行。
离线模式不会使驱动器离线。与"test"一词非常相似,"off-line"在SMART测试中具有特殊含义。测试以高优先级运行,但如果操作系统需要访问磁盘,则会暂停。
要运行长时间测试,可使用-t long选项。这大概会需要数小时。
SMART在系统上没有进程ID,所以无法运行pgrep smartctl命令查看是否正在执行测试。
硬盘驱动器控制器是一台计算机,测试在那里进行。(一些条线引脚构成了一个串口,用于驱动器的固件通信。)
要查看测试是否正在运行,可使用-c选项查看器SMART功能。此选项最初用于确定驱动器是否可以执行SMART。现代磁盘几乎总是支持所有SMART功能,因此现在这个选项的使用率不高,但它可以显示正在运行的测试的状态。
xxxxxxxxxx
# smartctl -c /dev/da3
…
Self-test execution status: ( 246) Self-test routine in progress...
1 60% of test remaining.
…
Short self-test routine
recommended polling time: ( 2) minutes.
Extended self-test routine
recommended polling time: ( 165) minutes.
…
行号1显示驱动器的自测试还有60%要做,所以,它已经完成了40%。
对于短测试,大概只要一分钟内就能完成。对于长测试,可能需要一小时以上。
如果还不确定,等几分钟再试试运行以上命令。
要使用smartctl从驱动器中提取测试结果,可以使用-l选项和关键字selftest:
xxxxxxxxxx
# smartctl -l selftest /dev/da3
Here are the test results on a good disk.
…
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Short offline Completed without error 00% 3010 -
# 2 Short offline Completed without error 00% 2986 -
# 3 Short offline Completed without error 00% 2962 -
…
如果测试失败,将看到类似以下情况:
xxxxxxxxxx
# 1 Short offline Completed: read failure 90% 1691 180430668
测试结束了,但检测到故障,剩余90%的磁盘有待测试。如果你想了解更多细节,可以在磁盘上运行smartctl -A,但这里的重要教训时:磁盘正在耗尽,赶紧换。
现在,可以从磁盘中提取SMART数据并对其进行检查。但我们都知道,不可能每天都在每个磁盘上运行所有这些命令。真正需要的是一个小守护进程来监控SMART值。
SMART守护进程smartd(8)监视磁盘SMART信息,并将结果发送到系统上的某些内容,如文件、日志或电子邮件。
默认情况下,smartd扫描所有存储设备。
某些设备比如闪存盘、U盘不支持SMART,因此smartd会反复发出未启用设备的警告。
因此必须将smartd配置为仅扫描支持SMART的设备。
smartd的主配置文件为/usr/local/etc/smartd.conf。FreeBSD在安装smartmontools时会生成一个模板文件:/usr/local/etc/smartd.conf.sample,它包含了各种复杂的功能。但在大多数环境中,只需要为要监视的每个驱动器设置一行:
xxxxxxxxxx
/dev/da0
/dev/da1
列出每一个想让smartd看护的设备。
通过在每个硬盘的条目中添加指令来调整smartd对单个硬盘的行为。
指令类似于命令行参数。smartd.conf手册页列出了所有指令,其中大部分仅适用于非常特定的环境或硬件。
smartd记录守护进程到系统日志。在FreeBSD中,它会添加记录到/var/log/messages中。
可以用命令行修改smartd记录功能。
如果经常看日志,这就足够了,但是大多数人不会去看日志。
SMART的全部意义在于提前通知。
FreeBSD可以在器每日状态邮件中包含智能报告。在/etc/periodic.conf中添加要获取SMART报告的设备:
xxxxxxxxxx
daily_status_smart_devices=”/dev/da0 /dev/da1”
如果想让smartd在检测到错误后立即自行发送电子邮件,可以在smartd.conf文件中为每个受监控的硬盘后面使用-m选项指定一个电子邮箱:
xxxxxxxxxx
/dev/da0 -m mwlucas@mwlucas.org
/dev/da1 -m mwlucas@mwlucas.org
可以使用-M test选项以确定smartd是否发送邮件:
xxxxxxxxxx
/dev/da0 -m mwlucas@mwlucas.org -M test
/dev/da1 -m mwlucas@mwlucas.org
在/etc/rc.conf中设置smartd_enable=YES以启用smartd,或者运行命令:
xxxxxxxxxx
# sysrc smartd_enable=YES
smartd_enable: -> YES
配置文件中的任何错误(比如不存在的驱动器或不响应SMART命令的驱动器)都会出现在/var/log/messages中。如果一切正常,将看到配置的任何测试通知。
这是对SMART的简要介绍。Smartmontools具有支持RAID控制器、机柜、专用驱动器、奇怪的硬盘驱动器和您希望永远不会再看到的硬件的功能。如果你有不寻常的硬件,你可能会在smartctl(8)和smartd(8)手册页中找到帮助。忽略物理磁盘会导致数据丢失;使用smartd!
现在,您可以完成普通系统管理员在FreeBSD上管理磁盘所需的一切。但您高于平均水平,所以让我们来看看一些技巧和特殊情况。