第十章:SMART

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

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

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

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

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

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

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

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


自我监控分析和报告技术(Self-Monitoring Analysis and Reporting Technology, SMART)是一种用于监控硬盘的系统,可以在硬盘发生故障之前检测错误。SMART允许您在预定的维护窗口内更换硬盘,而不是在硬盘随机损坏时更换。监控硬盘并不能保证你会提前收到故障通知,但这肯定比盲目等待崩溃要好。SMART不是FreeBSD特有的技术,而是 smartmontools 的实现(http://www.smartmontools.org)在FreeBSD上运行良好。Smartmontools可在 sysutils/Smartmontools port或软件包中获得。

每种型号的硬盘都有自己的怪癖、功能、功能错误和暴行。更糟糕的是,每种硬盘型号的SMART协议实现可能略有不同。smartmontools报告的一些错误来自制造商偏离标准的决定,而不是硬件故障。例如,SMART协议规定磁盘应以小时为单位报告其运行寿命,但一些制造商报告的是分钟。我在这本书中没有列出这些错误,因为smartmontools包括一个硬盘型号及其个人怪癖的数据库。当smartmontools报告错误时,请在更换硬件之前查看其网站上的smartmontools FAQ,看看这是否是特定于供应商的问题。

Smartmontools有两个主要组件:交互式 smartctl(8) 和监控守护进程 smartd(8)

第十章:SMARTsmartctl(8)SMART 属性Read_Error_Rate(1)Spin_Retry_Count(10)Spin-Up Time(3)Reallocated_Sector_Ct(5)Temperature_Celsius(194)SMART 测试执行器测试测试在运行吗?获取测试结果smartd配置 smartd通知启用smartd

smartctl(8)

smartctl(8) 程序允许配置和查询SMART设备。首先,使用 -i 选项获取特定硬盘上的信息。每个 smartctl 命令都需要驱动器设备节点作为其最终参数。下例中,我查询驱动器da3:

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

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

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

行号 3 标记是否启用SMART。在对任何信息采取行动之前,应先检查此项。大多数现代磁盘都启用了SMART,但总有例外。当磁盘SMART被禁用时, smartctl 可以从磁盘中提取信息,但不能做太多其他事情。要启用SMART,可以使用 -d 选项设置 on

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

使用 -d off 可以禁用SMART。我不知道有什么理由这样做,但你可以。

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

SMART 属性

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

每一行输出代表驱动器的一个属性,如 Raw_Read_Error_RateStart_Stop_Count 。每一列都包含该属性的信息。

因为每个制造商都可以创建自己的属性,并按照自己的意愿进行解释,所以列出所有SMART属性没有意义。smartctl 作者做了大量工作来跟踪供应商属性并将其集成到 smartmontools 中。以下是一些常见和有用的。观察任何带有 P 标志的属性,这些标志会在驱动器即将失效时提出警告。

Read_Error_Rate(1)

读取错误率(read error rate)描述了驱动器在尝试从磁盘读取数据时报告错误的频率。每个供应商对此有不同的解释。所有驱动器都会出现一些读取错误,但一些供应商不会全部报告。能报告错误的驱动器是更值得选择的。

我更喜欢报告错误的驱动器,如果我有这样的驱动器的话。我的驱动器都是骗人的卑鄙小人。幸运的是,我的技术评审人员比我有更诚实的驱动力。

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

Spin_Retry_Count(10)

机械硬盘必须旋转(spin)其驱动器盘片才能读取和写入数据。一个无法使磁盘加速的驱动器正在消亡。此属性显示驱动器尝试使其盘片达到运行速度但失败的次数。

Spin-Up Time(3)

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

Reallocated_Sector_Ct(5)

大件事。磁盘扇区可能因为频繁使用或制造不善而发生故障。许多磁盘会自动用好扇区替换坏扇区。如果一个扇区坏了,磁盘控制器可以用一个空的、未使用的块替换它。硬盘驱动器有额外的块用于此目的。一个利用这一储备的硬盘已经开始死亡。

尽快更换此驱动。

Temperature_Celsius(194)

此属性不会给出实际温度(尽管温度可能出现在 RAW_VALUE 字段中)。它指示温度是否在可接受的参数范围内。在特别凉爽的环境中,这个属性也可能会超过100。

SMART 测试

SMART有测试例程,但它们实际上并没有测试整个驱动器。适当的测试会从磁盘上的每个扇区读取和写入数据,但这会破坏磁盘上的数据。相反,SMART测试检查驱动器的电子设备、机制和从磁盘读取的能力。这更像是一个数据收集操作,而不是磁盘测试。SMART包括长测试和短测试。

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

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

执行器测试

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

测试正在进行中,以离线模式运行(行首有 1 的那一行)。离线模式不会使驱动器离线。与"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信息,并将结果发送到系统上的某些内容,如文件、日志或电子邮件。FreeBSD的 smartmontools 软件包包括 smartd

世界上有许多不同类型的磁盘,smartd 支持其中的大多数。我可以用 smartdsmartctl 写一本书,但没有人愿意读。相反,我们将介绍基本配置。运行 smartd 后,请参阅示例配置和 smard.conf(5) 手册页对其进行调整。

配置 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(8) 记录到守护进程syslog设施。在FreeBSD上,这会将日志消息添加到 /var/log/messages 中。(您可以使用命令行选项更改 smartd 日志功能。)如果您查看日志,这就足够了,但您可能不会。大多数人只在东西死后才看日志。SMART的全部意义在于提前通知您。

【“监测日志”与“健康饮食”和“锻炼”在同一个列表上——每个人都知道他们应该这样做,但大多数人从来没有完全做到这一点。】

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

虽然FreeBSD的日常邮件足以满足我的目的,但你也可以让 smartd 在检测到错误后立即自行发送电子邮件。为每个受监控的硬盘使用 -m 指令和收件人的电子邮件地址。我的小型服务器的 smartd.conf 现在看起来是这样的。

发送电子邮件的监视器程序的一个问题是,您无法确定监视器是否真的可以发送邮件。添加 -M test 指令,使 smartd 在启动时发送邮件。如果您还设置了 -m ,则只能使用 -M test

启用smartd

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

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

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

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