SMARTtesting做了什么,它是如何工作的?

man smartctl国家(简写为嗤之以鼻):

第一类称为“在线”testing。 第二类testing称为“离线”testing。 通常情况下,磁盘将在磁盘访问发生时挂起脱机testing,然后在磁盘空闲时自动恢复。 第三类testing(以及“testing”这个词真是一个合适的select)是“自我”testing。

启用或禁用SMART自动脱机testing,该testing每四小时对磁盘缺陷进行一次扫描。 该命令可以在正常的系统操作期间给出。

谁运行testing驱动器固件? 什么样的testing是这样的 – 固件读取/写入磁盘 – 究竟发生了什么? 在操作系统(linux)中调用testing是否安全或者是否可以在以后安排testing – 这是如何发生的 – 当您在BIOS提示符('脱机testing')重新启动操作系统时? 结果在哪里显示 – SMART日志?

    1. 驱动器固件运行testing。

    2. testing的细节可以在例如http://www.t10.org/t13/technical/e01137r0.pdf中读取,其总结了短期和长期testing的要素:

      1. 其中驱动器testing其自己的电子器件的电气部分。 这部分的具体testing是供应商特定的,但是作为例子:这个部分可能包括诸如缓冲RAMtesting,读/写电路testing和/或读/写头元件testing的testing。

      2. 一个寻道/伺服段,其中的驱动器testing它的能力来寻找和伺服数据轨道。 此testing中使用的特定方法也是供应商特定的。

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

      4. 扩展自检的标准与短程自检相同,但有两个例外:扩展自检的第(3)部分应为所有用户数据区域的读取/validation扫描,并且不存在驱动器执行testing的最大时间限制。

    3. 在操作系统运行时进行无损检测是安全的,尽pipe可能会有一些性能影响。 正如smartctl手册页所述,对于-t short-t long

    该命令可以在正常的系统操作中给出(除非在捕获模式下运行)

    如果您使用-C调用捕获模式,则smartctl认为驱动器可能会忙于无法使用。 这应该在操作系统正在使用的驱动器上完成。

    正如手册页中所暗示的那样,离线testing(简单的说就是周期性的后台testing)是不可靠的,从未正式成为ATA规范的一部分。 我从cron运行我的,而不是; 这样我知道他们什么时候该发生,如果我需要,我可以阻止它。

    1. 结果可以在smartctl输出中看到。 这里有一个testing运行:
     [root @ risby images]#smartctl -a / dev / sdb
     smartctl 6.4 2015-06-04 r4109 [x86_64-linux-4.1.6-201.fc22.x86_64](本地构build)
     Copyright(C)2002-15,Bruce Allen,Christian Franke,www.smartmontools.org
     [...]
     SMART自检日志结构修订版本号1
    数量Test_Description状态剩余使用期限(小时)LBA_of_first_error
     #1扩展离线完成,没有错误00%20567  - 
     #2扩展脱机完成无误00%486  - 
    
     SMARTselect性自检日志数据结构修订号0
    注意:修订号不是1意味着没有select性的自检已经运行
     SPAN MIN_LBA MAX_LBA CURRENT_TEST_STATUS
        1 0 0 Self_test_in_progress [还剩90%](0-65535)
        2 0 0 Not_testing
        3 0 0 Not_testing
        4 0 0 Not_testing
        5 0 0 Not_testing
    

    注意两个先前完成的testing(分别在开机486和20567小时)和当前正在运行的一个(完成10%)。

    SMART实现依赖于制造商,有时通过smart -a命令可以获得相当广泛的日志。 下面是我从日立公司的一个自encryption驱动器上得到的结果:

     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 Not Found)可以追溯到通过USB-to-SATA适配器插入驱动器时发生的事件,并且碰巧发生动力不足,从而无法正确查找。