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:
x# smartctl -i /dev/da3=== START OF INFORMATION SECTION ===Device Model: WDC WD1003FBYZ-010FB0Serial Number: WD-WCAW36477062LU WWN Device Id: 5 0014ee 2090bb6deFirmware Version: 01.01V03User Capacity: 1,000,204,886,016 bytes [1.00 TB]1 Sector Size: 512 bytes logical/physicalRotation Rate: 7200 rpmDevice 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 EDTSMART support is: Available - device has SMART capability.3 SMART support is: Enabled大部分输出都是不言自明的,比如 Serial Number(序列号)、Rotation Rate(转速)、Firmware Version(固件版本号)等等。但也有一些有趣的字段。
SMART协议可以要求驱动器提供其扇区大小(上例中的行号 1)。这不一定比任何其他工具提供的扇区大小更准确,但这是从万股磁盘中窥探信息的另一种方法。
行号 2 从SAMRT获取最佳速度和当前速度。虽然磁盘可能具有高传输速度,但可能会受到许多因素的影响。此例中硬盘的标称速度是6GB/s,但已协商降至3GB/s。可能是线缆松动或故障,也可能是驱动器插入了3GB/s主板接口。
行号 3 标记是否启用SMART。在对任何信息采取行动之前,应先检查此项。大多数现代磁盘都启用了SMART,但总有例外。当磁盘SMART被禁用时, smartctl 可以从磁盘中提取信息,但不能做太多其他事情。要启用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: 16Vendor Specific SMART Attributes with Thresholds:ID# ATTRIBUTE_NAME FLAGS VALUE WORST THRESH FAIL RAW_VALUE1 Raw_Read_Error_Rate POSR-K 100 253 051 - 03 Spin_Up_Time POS--K 173 172 021 - 43164 Start_Stop_Count -O--CK 100 100 000 - 29…每一行输出代表驱动器的一个属性,如 Raw_Read_Error_Rate 和 Start_Stop_Count 。每一列都包含该属性的信息。
ID#)是属性的ID号码。范围从1到255。属性编号没有统一含义,由厂家自行定义。ATTRIBUTE_NAME)是属性的友好名称。这些属性名称大多在制造商之间相当标准化,但有些制造商会自己命名和/或稍微调整属性的定义。第三列(FLAGS)使用六个字母的代码显示这是什么类型的属性。根据属性类型,属性可以设置或不设置这些标志中的任何一个。
P(prefailure warning)标志标识这是故障前的属性。如果此属性的得分降至临界阈值以下,SMART将宣布驱动器即将发生故障,需要立即更换。O(updated online)标志表示驱动器几乎实时更新此属性。驱动器属性(比如“此驱动器运行了多长时间”和“此驱动器通电了多少次”)会定期更改,SMART会根据需要更新这些值。其他属性只能在离线测试期间更新。S(speed/performance)标志的属性与速度和性能有关。R(error rate)标志标识此属性是错误率,类似于读取错误或查找错误。这些属性的更改表示正在发生的错误。C(event count)标志标识该属性是一个事件计数器,它用于温度和功率循环等属性。K(auto-keep)标识的属性即使在电源循环后也会自动保留其值。VALUE)的内容很有趣。对于大多数属性,这表示驱动器运行状况。每个属性的最大值为100或200,表示完全健康。当SMART检测到错误时,值会降至0。对于温度等属性,该值表示可接受的工作范围,可以超过100。WORST——最差)显示了此属性在此驱动器上记录的最坏(most bad)值。通常这是一个较低的数字,但对于温度等属性,它可能会很高。THRESH)给出了属性的最小阈值。如果故障前属性的值低于此阈值,SMART将宣布驱动器发生故障,需要尽快更换驱动器。非关键属性通常使用阈值0,因此属性不会低于该阈值。FAIL)显示了驱动器使用后属性失败的小时数。RAW_VALUE)给出了驱动器的原始数据。根据驱动器制造商以及制造商工程部门在任何一天的情绪,该字段可能与任何现实世界的价值有任何关系,也可能没有任何关系。因为每个制造商都可以创建自己的属性,并按照自己的意愿进行解释,所以列出所有SMART属性没有意义。smartctl 作者做了大量工作来跟踪供应商属性并将其集成到 smartmontools 中。以下是一些常见和有用的。观察任何带有 P 标志的属性,这些标志会在驱动器即将失效时提出警告。
读取错误率(read error rate)描述了驱动器在尝试从磁盘读取数据时报告错误的频率。每个供应商对此有不同的解释。所有驱动器都会出现一些读取错误,但一些供应商不会全部报告。能报告错误的驱动器是更值得选择的。
我更喜欢报告错误的驱动器,如果我有这样的驱动器的话。我的驱动器都是骗人的卑鄙小人。幸运的是,我的技术评审人员比我有更诚实的驱动力。
如果此值增加,则表明驱动器有故障。
机械硬盘必须旋转(spin)其驱动器盘片才能读取和写入数据。一个无法使磁盘加速的驱动器正在消亡。此属性显示驱动器尝试使其盘片达到运行速度但失败的次数。
这显示了驱动器旋转盘片所需的平均时间。原始值通常以毫秒为单位,但该值和阈值可能表明存在问题。
大件事。磁盘扇区可能因为频繁使用或制造不善而发生故障。许多磁盘会自动用好扇区替换坏扇区。如果一个扇区坏了,磁盘控制器可以用一个空的、未使用的块替换它。硬盘驱动器有额外的块用于此目的。一个利用这一储备的硬盘已经开始死亡。
尽快更换此驱动。
此属性不会给出实际温度(尽管温度可能出现在 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 in1 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 2014Use smartctl -X to abort test.测试正在进行中,以离线模式运行(行首有 1 的那一行)。离线模式不会使驱动器离线。与"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 routinerecommended polling time: ( 2) minutes.Extended self-test routinerecommended polling time: ( 165) minutes.…行号 1 显示驱动器的自测试还有60%要做,所以,它已经完成了40%。对于短测试,大概只要一分钟内就能完成。对于长测试,可能需要一小时以上。如果还不确定,等几分钟再试试运行以上命令。
要使用 smartctl 从驱动器中提取测试结果,可以使用 -l 选项和关键字 selftest :
xxxxxxxxxx# smartctl -l selftest /dev/da3Here 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 -…Num)是测试编号,编号1是最新的。Test_Description)是测试方法,可以是 short offline 或 long offline 。Status)是状态,描述是否找到错误。Remaining)是剩余百分比,这有点误导,它不会显示当前运行的测试还剩多少要运行,而是显示测试失败的地方。如果剩余百分比为零,表示测试完成。LifeTime)显示测试运行时磁盘运行了多少小时。LBA_of_first_error)显示了第一个检测到的错误的逻辑块地址(Logical Block Address,LBA)。如果测试失败,将看到类似以下情况:
xxxxxxxxxx# 1 Short offline Completed: read failure 90% 1691 180430668测试结束了,但检测到故障,剩余90%的磁盘有待测试。如果你想了解更多细节,可以在磁盘上运行 smartctl -A ,但这里的重要教训时:磁盘正在死去,赶紧换。
现在,可以从磁盘中提取SMART数据并对其进行检查。但我们都知道,不可能每天都在每个磁盘上运行所有这些命令。真正需要的是一个小守护进程来监控SMART值。
smartdSMART守护进程 smartd(8) 监视磁盘SMART信息,并将结果发送到系统上的某些内容,如文件、日志或电子邮件。FreeBSD的 smartmontools 软件包包括 smartd 。
世界上有许多不同类型的磁盘,smartd 支持其中的大多数。我可以用 smartd 和 smartctl 写一本书,但没有人愿意读。相反,我们将介绍基本配置。运行 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 ,它包含了各种复杂的功能。但在大多数环境中,只需要为要监视的每个驱动器设置一行:
xxxxxxxxxx/dev/da0/dev/da1列出每一个想让smartd看护的设备。
通过在每个硬盘的条目中添加指令来调整 smartd 对单个硬盘的行为。指令类似于命令行参数。smartd.conf 手册页列出了所有指令,其中大部分仅适用于非常特定的环境或硬件。我们将在下一节中看到使用指令的示例。
smartd(8) 记录到守护进程syslog设施。在FreeBSD上,这会将日志消息添加到 /var/log/messages 中。(您可以使用命令行选项更改 smartd 日志功能。)如果您查看日志,这就足够了,但您可能不会。大多数人只在东西死后才看日志。SMART的全部意义在于提前通知您。
【“监测日志”与“健康饮食”和“锻炼”在同一个列表上——每个人都知道他们应该这样做,但大多数人从来没有完全做到这一点。】
FreeBSD可以在其每日状态邮件中包含 smartd 报告。在 /etc/periodic.conf 中添加要获取SMART报告的设备。
xxxxxxxxxxdaily_status_smart_devices=”/dev/da0 /dev/da1”虽然FreeBSD的日常邮件足以满足我的目的,但你也可以让 smartd 在检测到错误后立即自行发送电子邮件。为每个受监控的硬盘使用 -m 指令和收件人的电子邮件地址。我的小型服务器的 smartd.conf 现在看起来是这样的。
xxxxxxxxxx/dev/da0 -m mwlucas@mwlucas.org/dev/da1 -m mwlucas@mwlucas.org发送电子邮件的监视器程序的一个问题是,您无法确定监视器是否真的可以发送邮件。添加 -M test 指令,使 smartd 在启动时发送邮件。如果您还设置了 -m ,则只能使用 -M test 。
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=YESsmartd_enable: -> YES然后启动 smartd 。配置文件中的任何错误(比如不存在的驱动器或不响应SMART命令的驱动器)都会出现在 /var/log/messages 中。如果一切正常,将看到配置的任何测试通知。
这是对SMART的简要介绍。Smartmontools具有支持RAID控制器、机柜、专用驱动器、奇怪的硬盘驱动器和您希望永远不会再看到的硬件的功能。如果你有不寻常的硬件,你可能会在 smartctl(8) 和 smartd(8) 手册页中找到帮助。忽略物理磁盘会导致数据丢失;使用 smartd !
现在,您可以完成普通系统管理员在FreeBSD上管理磁盘所需的一切。但您高于平均水平,所以让我们来看看一些技巧和特殊情况。