SmartMonTools:我怎么知道我的硬盘上是否正在运行任何 smartctl 测试?

Sop*_*rez 57 hard-disk smart smartctl

我正在使用SmartMonTools测试硬盘

测试前的硬盘状态(几天前仅进行了一次简短的测试):

$ sudo smartctl -l selftest /dev/sda
smartctl 6.2 2013-07-26 r3841 [i686-linux-3.16.0-30-generic] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed without error       00%      5167         -
Run Code Online (Sandbox Code Playgroud)

所以我开始了漫长的测试

$ sudo smartctl -t long /dev/sda
smartctl 6.2 2013-07-26 r3841 [i686-linux-3.16.0-30-generic] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Extended self-test routine immediately in off-line mode".
Drive command "Execute SMART Extended self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 130 minutes for test to complete.
Test will complete after Sat May  9 16:05:27 2015

Use smartctl -X to abort test.
Run Code Online (Sandbox Code Playgroud)

测试应该正在运行,但是如果我尝试查看它的进度:

$ sudo smartctl -l selftest /dev/sda
smartctl 6.2 2013-07-26 r3841 [i686-linux-3.16.0-30-generic] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed without error       00%      5167         -
Run Code Online (Sandbox Code Playgroud)

...我得到的只是相同的结果,就像现在没有运行/执行测试一样。
'-H' 参数没有提供更多信息:

$ sudo smartctl -H /dev/sda
smartctl 6.2 2013-07-26 r3841 [i686-linux-3.16.0-30-generic] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
Run Code Online (Sandbox Code Playgroud)

并且,只要没有进程在运行(这个测试是由硬盘控制器单独执行的),一些ps -e样式搜索也无济于事。

怎么知道现在是否有一些 SMART 自检正在运行

fro*_*utz 62

smartctl -a <device>寻找Self-test execution status

没有测试运行时的示例:

Self-test execution status:      (   0) The previous self-test routine completed
                                        without error or no self-test has ever
                                        been run.
Run Code Online (Sandbox Code Playgroud)

测试运行时的示例:

Self-test execution status:      ( 249) Self-test routine in progress...
                                        90% of test remaining.
Run Code Online (Sandbox Code Playgroud)

运行选择性自检 ( -t select) 时,此处还会显示进度:

SMART Selective self-test log data structure revision number 1
 SPAN  MIN_LBA    MAX_LBA  CURRENT_TEST_STATUS
    1        0  125045423  Self_test_in_progress [90% left] (2881512-2947047)
Run Code Online (Sandbox Code Playgroud)

  • 一个好主意。我建议你添加这条直线(通过 grepping)作为一种可能性:`smartctl -a /dev/sda | grep "progress" -i -A 1` ,以减少过多的信息打印输出。 (5认同)
  • @Ben 是的,有些驱动器似乎没有正确报告这些。您可以尝试选择性的“-t select,0-max”,而不是“-t long”。从技术上讲,这与“-t long”的作用完全相同,但它可能在选择性自检日志部分中有更准确的进度报告。就我个人而言,[我使用较小切片的选择性自测试](https://unix.stackexchange.com/a/92663/30851),这样我就可以运行简短的每日测试。长时间的测试运行只需要在 xx TB HDD 上花费很长时间,而且并不是每台机器都可以 24/7 运行来完成测试。 (3认同)
  • 不过,您需要大量的打印输出才能获得完整的图片。在脚本中 grep 可能没问题,但是习惯在命令行上“grep”所有内容的人(“dmesg | grep some”、“smartctl -a | grep ...”等),他们会错过一些东西。特别是对于“smartctl”,没有简单的命令可以告诉您一切正常......“smartctl -H”在这方面是一个错误的朋友。 (2认同)

小智 17

尝试 :

smartctl -c /dev/sda
Run Code Online (Sandbox Code Playgroud)

如果 /dev/sda 是您要检查的驱动器。