第十章:SMART

SMART——Self-Monitoring Analysis and Reporting Technology,自监控分析和报告技术。详见 http://www.smartmontools.org

一种监控硬盘的系统,可以在硬盘发生故障之前检测错误。

smartmontools需要安装,可以从sysutils/smartmontools树或pkg安装。

每种型号的硬盘都有自己的怪癖、功能、功能错误和暴行。更糟糕的是,每种硬盘型号的SMART协议实现可能略有不同。

smartmontools报告的一些错误来自制造商偏离标准的决定,而不是硬件故障。

例如,SMART协议规定磁盘应以小时为单位报告其运行寿命,但一些制造商报告的是分钟。

当smartmontools报告错误时,请在更换硬件之前查看供应商网站上的常见问题解答,看看是否是特定于供应商的问题。

smartmontools有两个主要组件:交互式smartctl和监控守护进程smartd。

smartctl(8)

smartctl(8)程序允许配置和查询SMART设备。

首先,使用-i选项获取特定硬盘上的信息。每个smartctl命令都需要驱动器设备节点作为其最终参数:

大部分输出都是不言自明的,比如Serial Number(序列号)、Rotation Rate(转速)、Firmware Version(固件版本号)等等。但也有一些有趣的字段。

SMART协议可以要求驱动器提供其扇区大小(上例中的行号1)。这不一定比任何其他工具提供的扇区大小更准确,但这是从万股磁盘中窥探信息的另一种方法。

行号2给出SATA版本号以及最佳速度和当前速度。虽然磁盘可能具有高传输速度,但可能会受到许多因素的影响。此例中硬盘的标称速度是6GB/s,但已协商降至3GB/s。可能是线缆松动或故障,也可能是驱动器插入了3GB/s主板接口。

行号3标记是否启用SMART。大多数现代磁盘都启用了SMART,但总有例外。要启用SMART,可以使用-d选项设置on:

现在磁盘已经准好更多高级测试。

使用-d off可以禁用SMART。但强烈不建议这么做。

使用smartctl命令可以执行大多数SMART操作。

SMART 属性

运行smartctl -A可以查看供应商提供的有关磁盘的所有信息。使用-f brief(简短)可以得到更窄的显示效果以适应更小的终端。

每一行输出代表驱动器的一个属性,如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标志的属性,这些标志会在驱动器即将失效时提出警告。

Read_Error_Rate(1)

读取错误率描述了驱动器在尝试从磁盘读取数据时报告错误的频率。

每个供应商对此有不同的解释。所有驱动器都会出现一些读取错误,但一些供应商不会全部报告。能报告错误的驱动器是更值得选择的。

如果此值增加,则表明驱动器有故障。

Spin_Retry_Count(10)

机械硬盘必须旋转其驱动器盘片才能读取和写入数据。一个无法使磁盘加速的驱动器正在消亡。

此属性显示驱动器尝试使其盘片达到运行速度但失败的次数。

Spin-Up Time(3)

这显示了驱动器旋转盘片所需的平均时间。原始值通常以毫秒为单位,但该值和阈值可能表明存在问题。

Reallocated_Sector_Ct(5)

大件事。

磁盘扇区可能因为频繁使用或制造不善而发生故障。许多磁盘会自动用好扇区替换坏扇区。

如果一个扇区坏了,磁盘控制器可以用一个空的、未使用的块替换它。

硬盘驱动器有额外的块用于此目的。一个利用这一储备的硬盘已经开始死亡。

尽快更换此驱动。

Temperature_Celsius(194)

此属性不会给出实际温度(尽管温度可能出现在RAW_VALUE字段中)。

它指示温度是否在可接受的参数范围内。

在特别凉爽的环境中,这个属性也可能会超过100。

SMART 测试

SMART有测试例程,但它们实际上并没有测试整个驱动器。

适当的测试会从磁盘上的每个扇区读取和写入数据,但这会破坏磁盘上的数据。

相反,SMART测试检查驱动器的电子设备、机制和从磁盘读取的能力。这更像是一个数据收集操作,而不是磁盘测试。

SMART包括长测试和短测试。

长测试检查磁盘上的每个扇区,无论需要多长时间。短测试只检查磁盘的一部分,因此仅需要两分钟。

还有对联机和脱机模式的引用,但这在现代磁盘上无关紧要。

执行器测试

要使用smartctl运行测试,使用-t选项并指定short或long测试。

测试正在进行中,以离线模式运行。

离线模式不会使驱动器离线。与"test"一词非常相似,"off-line"在SMART测试中具有特殊含义。测试以高优先级运行,但如果操作系统需要访问磁盘,则会暂停。

要运行长时间测试,可使用-t long选项。这大概会需要数小时。

测试在运行吗?

SMART在系统上没有进程ID,所以无法运行pgrep smartctl命令查看是否正在执行测试。

硬盘驱动器控制器是一台计算机,测试在那里进行。(一些条线引脚构成了一个串口,用于驱动器的固件通信。)

要查看测试是否正在运行,可使用-c选项查看器SMART功能。此选项最初用于确定驱动器是否可以执行SMART。现代磁盘几乎总是支持所有SMART功能,因此现在这个选项的使用率不高,但它可以显示正在运行的测试的状态。

行号1显示驱动器的自测试还有60%要做,所以,它已经完成了40%。

对于短测试,大概只要一分钟内就能完成。对于长测试,可能需要一小时以上。

如果还不确定,等几分钟再试试运行以上命令。

获取测试结果

要使用smartctl从驱动器中提取测试结果,可以使用-l选项和关键字selftest:

如果测试失败,将看到类似以下情况:

测试结束了,但检测到故障,剩余90%的磁盘有待测试。如果你想了解更多细节,可以在磁盘上运行smartctl -A,但这里的重要教训时:磁盘正在耗尽,赶紧换。

现在,可以从磁盘中提取SMART数据并对其进行检查。但我们都知道,不可能每天都在每个磁盘上运行所有这些命令。真正需要的是一个小守护进程来监控SMART值。

smartd

SMART守护进程smartd(8)监视磁盘SMART信息,并将结果发送到系统上的某些内容,如文件、日志或电子邮件。

配置smartd

默认情况下,smartd扫描所有存储设备。

某些设备比如闪存盘、U盘不支持SMART,因此smartd会反复发出未启用设备的警告。

因此必须将smartd配置为仅扫描支持SMART的设备。

smartd的主配置文件为/usr/local/etc/smartd.conf。FreeBSD在安装smartmontools时会生成一个模板文件:/usr/local/etc/smartd.conf.sample,它包含了各种复杂的功能。但在大多数环境中,只需要为要监视的每个驱动器设置一行:

列出每一个想让smartd看护的设备。

通过在每个硬盘的条目中添加指令来调整smartd对单个硬盘的行为。

指令类似于命令行参数。smartd.conf手册页列出了所有指令,其中大部分仅适用于非常特定的环境或硬件。

通知

smartd记录守护进程到系统日志。在FreeBSD中,它会添加记录到/var/log/messages中。

可以用命令行修改smartd记录功能。

如果经常看日志,这就足够了,但是大多数人不会去看日志。

SMART的全部意义在于提前通知。

FreeBSD可以在器每日状态邮件中包含智能报告。在/etc/periodic.conf中添加要获取SMART报告的设备:

如果想让smartd在检测到错误后立即自行发送电子邮件,可以在smartd.conf文件中为每个受监控的硬盘后面使用-m选项指定一个电子邮箱:

可以使用-M test选项以确定smartd是否发送邮件:

启用smartd

在/etc/rc.conf中设置smartd_enable=YES以启用smartd,或者运行命令:

配置文件中的任何错误(比如不存在的驱动器或不响应SMART命令的驱动器)都会出现在/var/log/messages中。如果一切正常,将看到配置的任何测试通知。

这是对SMART的简要介绍。Smartmontools具有支持RAID控制器、机柜、专用驱动器、奇怪的硬盘驱动器和您希望永远不会再看到的硬件的功能。如果你有不寻常的硬件,你可能会在smartctl(8)和smartd(8)手册页中找到帮助。忽略物理磁盘会导致数据丢失;使用smartd!

现在,您可以完成普通系统管理员在FreeBSD上管理磁盘所需的一切。但您高于平均水平,所以让我们来看看一些技巧和特殊情况。