SMART测试有什么作用,如何工作?


27

man smartctl 州(为简便起见,已摘录):

第一类,称为“在线”测试。在第二类测试被称为“离线”的测试。通常,磁盘将在进行磁盘访问时挂起离线测试,然后在磁盘空闲时自动恢复它。在第三类测试(和其'testing'实在是一个合适的选择单词的唯一类别)是“自我”测试。

启用或禁用SMART自动脱机测试,该测试每四个小时扫描一次驱动器是否有磁盘缺陷。该命令可以在系统正常运行时给出。

谁运行测试-驱动器固件?这些测试是什么样的-固件是否读/写到磁盘-到底发生了什么?在操作系统(linux)中调用测试是安全的,还是可以在BIOS提示符下重新引导操作系统(“脱机测试”)时安排测试稍后进行-如何进行?结果显示在哪里-SMART日志?

Answers:


38
  1. 驱动器固件将运行测试。

  2. 有关测试的详细信息,请参见例如www.t13.org/Documents/UploadedDocuments/technical/e01137r0.pdf,其中总结了短期和长期测试的内容:

    1. 电气部分,驱动器测试其自身的电子设备。该部分中的特定测试是特定于供应商的,但例如:该部分可能包括诸如缓冲区RAM测试,读/写电路测试和/或读/写磁头元件的测试。

    2. 搜索/伺服段,其中驱动器测试其查找和跟踪数据磁道的能力。此测试中使用的特定方法也是特定于供应商的。

    3. 读取/验证扫描段,其中驱动器对磁盘表面的某些部分执行读取扫描。扫描表面的数量和位置取决于完成时间限制,并且取决于供应商。

    4. 扩展自我测试的标准与简短自我测试相同,但有两个例外:扩展自我测试的第(3)节应是对所有用户数据区域的读/验证扫描,并且不存在驱动器执行测试的最大时间限制。

  3. 尽管操作系统可能会影响性能,但在操作系统运行时执行非破坏性测试是安全的。正如smartctl手册页针对-t short和所述-t long

可以在正常系统操作中给出此命令(除非以强制方式运行)

如果您使用调用强制模式-C,则smartctl假定驱动器可以忙于不可用。这应该不是操作系统使用的驱动器上进行。

正如手册页中所建议的那样,离线测试(仅意味着定期进行背景测试)并不可靠,并且从未正式成为ATA规范的一部分。我是从cron跑过来的;这样我就知道何时该发生,如果需要我可以停止。

  1. 结果可以在smartctl输出中看到。这是一个正在运行的测试:
[root @ risby图片]#smartctl -a / dev / sdb
smartctl 6.4 2015-06-04 r4109 [x86_64-linux-4.1.6-201.fc22.x86_64](本地版本)
Bruce Allen,Christian Franke,版权所有(C)2002-15,www.smartmontools.org
[...]
SMART自检日志结构修订号1
Num Test_Description状态剩余寿命(小时)LBA_of_first_error
#1扩展脱机已完成且无错误00%20567-
#2扩展离线脱机已完成,没有错误00%486-

SMART选择性自检日志数据结构修订号0
注意:修订号不是1表示没有进行过选择性的自检
SPAN MIN_LBA MAX_LBA CURRENT_TEST_STATUS
   1 0 0 Self_test_in_progress [剩余90%](0-65535)
   2 0 0未测试
   3 0 0未测试
   4 0 0未测试
   5 0 0未测试

注意之前完成的两项测试(分别在486和20567小时上电)和当前正在运行的一项(完成10%)。


1
还要注意的是,如果使用smartmontools,smartd守护程序可以处理定期测试,而无需进行cronjob。它也将处理驱动器问题的报告,尽管可能需要主动监视。
GnP

8

SMART实现取决于制造商,有时可通过smart -a命令获得大量日志。这是我从日立(Hitachi)获得的自我加密驱动器之一:

SMART Error Log Version: 1
ATA Error Count: 3

Error 3 occurred at disk power-on lifetime: 2543 hours (105 days + 23 hours)
When the command that caused the error occurred, the device was active or idle.

After command completion occurred, registers were:
ER ST SC SN CL CH DH
-- -- -- -- -- -- --
10 51 08 00 08 00 00  Error: IDNF at LBA = 0x00000800 = 2048

Commands leading to the command that caused the error were:
CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
-- -- -- -- -- -- -- --  ----------------  --------------------
60 08 68 00 08 00 40 00      00:00:06.139  READ FPDMA QUEUED
27 00 00 00 00 00 e0 00      00:00:06.126  READ NATIVE MAX ADDRESS EXT
ec 00 00 00 00 00 a0 00      00:00:06.125  IDENTIFY DEVICE
ef 03 46 00 00 00 a0 00      00:00:06.125  SET FEATURES [Set transfer mode]
27 00 00 00 00 00 e0 00      00:00:06.125  READ NATIVE MAX ADDRESS EXT
...

本白皮书为日志中出现的错误代码提供了一些启示。常见的错误缩写是:

  • AMNF-找不到地址标记
  • TONF-找不到音轨0
  • ABRT-命令中止
  • IDNF-找不到扇区ID
  • UNC-无法更正的数据
  • BBK-坏块标记

就我而言,IDNF错误(未找到ID)可以追溯到通过USB到SATA适配器插入驱动器且电源不足而导致的故障,从而无法正常查找。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.