完全用 GNU/Linux 工作

29. 檢測硬碟 S.M.A.R.T. 健康狀態

S.M.A.R.T. 是個用來檢測硬碟健康狀況的指標,雖然前文 26. 使用 Clonezilla 打造不死的作業系統 提供了軟體層面的備份方式,但硬體總有老舊、損壞的一天。而一台電腦中又以硬碟裡的資料最為重要,這裡凍仁將介紹 GNU/Linux 下檢測、監控的方法。

2013-10-16-palimpsest-smart.png

▲ 在 GNOME 上我們可使用 磁碟公用程式 (GNOME Disks) [^1] 來檢測 SMART。

安裝 smartmontools

套件 smartmontools 包含了 smartctl, smartd,是個可以監控 ATA, SCSI 硬碟 (storage) SMART (Self-Monitoring, Analysis and Reporting Technology System) 狀態的工具。我們可以透過它來進階設定各種硬碟退化、錯誤警告的回報機制。

安裝文字介面的檢測工具 smartmontools。

  1. # Debian, Ubuntu
  2. $ sudo aptitude install smartmontools
  3. # CentOS, RHEL, Fedora
  4. $ sudo yum install smartmontools

smartctl

smartctl 主要是用來進行一次性、暫時性的硬碟掃描,以下為常見的使用方法。

  1. 查看該媒體是否支援 SMART 檢測。

    1. # - 啟用 (Enabled)。
    2. $ sudo smartctl -i /dev/sda
    3. smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.8.0-31-generic] (local build)
    4. Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net
    5. === START OF INFORMATION SECTION ===
    6. Device Model: ST3500413AS
    7. Serial Number: Z2AAMWCL
    8. LU WWN Device Id: 5 000c50 035f695b1
    9. Firmware Version: JC45
    10. User Capacity: 500,107,862,016 bytes [500 GB]
    11. Sector Size: 512 bytes logical/physical
    12. Device is: Not in smartctl database [for details use: -P showall]
    13. ATA Version is: 8
    14. ATA Standard is: ATA-8-ACS revision 4
    15. Local Time is: Wed Oct 16 21:04:44 2013 CST
    16. SMART support is: Available - device has SMART capability.
    17. SMART support is: Enabled
    18. # - 停用 (Disabled)。
    19. $ sudo smartctl -i /dev/sda
    20. smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.8.0-31-generic] (local build)
    21. Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net
    22. === START OF INFORMATION SECTION ===
    23. Device Model: ST3500413AS
    24. Serial Number: Z2AAMWCL
    25. LU WWN Device Id: 5 000c50 035f695b1
    26. Firmware Version: JC45
    27. User Capacity: 500,107,862,016 bytes [500 GB]
    28. Sector Size: 512 bytes logical/physical
    29. Device is: Not in smartctl database [for details use: -P showall]
    30. ATA Version is: 8
    31. ATA Standard is: ATA-8-ACS revision 4
    32. Local Time is: Wed Oct 16 21:05:36 2013 CST
    33. SMART support is: Available - device has SMART capability.
    34. SMART support is: Disabled
  2. 若尚未啟用 SMART,可以使用 -s 參數開啟它。

    1. $ sudo smartctl -s on /dev/sda
    2. smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.8.0-31-generic] (local build)
    3. Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net
    4. === START OF ENABLE/DISABLE COMMANDS SECTION ===
    5. SMART Enabled.
  3. 支援 SMART 後我們可以使用 -H 參數來手動檢查硬碟、隨身硬碟的建康狀態。

    1. # - 通過 (passed)。
    2. $ sudo smartctl -H /dev/sda
    3. smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.8.0-31-generic] (local build)
    4. Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net
    5. === START OF READ SMART DATA SECTION ===
    6. SMART overall-health self-assessment test result: PASSED
    7. # - 失敗 (failed)。
    8. $ sudo smartctl -H /dev/sda
    9. smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.8.0-31-generic] (local build)
    10. Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net
    11. === START OF READ SMART DATA SECTION ===
    12. SMART overall-health self-assessment test result: FAILED!
    13. Drive failure expected in less than 24 hours. SAVE ALL DATA.
    14. Failed Attributes:
    15. ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
    16. 5 Reallocated_Sector_Ct 0x0033 004 004 005 Pre-fail Always FAILING_NOW 1887

smartd

smartd 是個可以把 smartmontools 註冊成例行性服務 (Daemon) 並使用排程來監控的程式,以下為凍仁啟用的步驟。

  1. 啟用 smartd。

    1. $ sudo vim /etc/default/smartmontools
    2. ...
    3. start_smartd=yes
    4. smartd_opts="--interval=1800"
  2. 備份設定檔。

    1. $ sudo cp /etc/smartd.conf /etc/smartd.conf.ori
  3. 編輯設定檔。

    1. $ sudo vi /etc/smartd.conf
    2. ......
    3. # 掃描所有的 ATA/SCSI 設備並將報告寄送給 root。
    4. DEVICESCAN -d removable -n standby -m root -M exec /usr/share/smartmontools/smartd-runner
    5. # 每日 02:00 快速檢查 sda,每週六 03:00 完整檢查 sda。
    6. /dev/sda -a -o on -S on -s (S/../.././02|L/../../6/03)
    7. # 每日 04:00 快速檢查 sdb,每週六 05:00 完整檢查 sdb。
    8. /dev/sdb -a -o on -S on -s (S/../.././04|L/../../6/05)
    9. # 監控 SMART 狀態
    10. /dev/sda -H -l error -l selftest -t -I 194
    11. /dev/sdb -H -l error -l selftest -t -I 194
    12. # 安靜的檢查,並只郵寄建康狀態給 admin@example.tw
    13. /dev/sda -H -C 0 -U 0 -m admin@example.tw
    14. /dev/sdb -H -C 0 -U 0 -m admin@example.tw
    15. ......
  4. 啟用服務

    1. $ sudo /etc/init.d/smartmontools start
  5. 觀看記錄檔 (log)。

    1. $ less /var/log/syslog
    2. ......
    3. Oct 17 08:59:47 thinkpad-t410 smartd[11523]: smartd 5.41 2011-06-09 r3365 [x86_64-linux-3.2.0-4-amd64] (local build)
    4. Oct 17 08:59:47 thinkpad-t410 smartd[11523]: Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net
    5. Oct 17 08:59:47 thinkpad-t410 smartd[11523]: Opened configuration file /etc/smartd.conf
    6. Oct 17 08:59:47 thinkpad-t410 smartd[11523]: Drive: DEVICESCAN, implied '-a' Directive on line 21 of file /etc/smartd.conf
    7. Oct 17 08:59:47 thinkpad-t410 smartd[11523]: Configuration file /etc/smartd.conf was parsed, found DEVICESCAN, scanning devices
    8. Oct 17 08:59:47 thinkpad-t410 smartd[11523]: Device: /dev/sda, type changed from 'scsi' to 'sat'
    9. Oct 17 08:59:47 thinkpad-t410 smartd[11523]: Device: /dev/sda [SAT], opened
    10. ......
    11. Oct 17 08:59:47 thinkpad-t410 smartd[11523]: Device: /dev/sda [SAT], found in smartd database.
    12. Oct 17 08:59:48 thinkpad-t410 smartd[11523]: Device: /dev/sda [SAT], is SMART capable. Adding to "monitor" list.
    13. Oct 17 08:59:48 thinkpad-t410 smartd[11523]: Device: /dev/sda [SAT], state read from /var/lib/smartmontools/smartd.ST9320423AS-5VH55XKG.ata.state
    14. ......
    15. Oct 17 08:59:48 thinkpad-t410 smartd[11525]: smartd has fork()ed into background mode. New PID=11525.
    16. Oct 17 08:59:48 thinkpad-t410 smartd[11525]: file /var/run/smartd.pid written containing PID 11525

※ 若想讓 smartd 使用 Gmail 寄送通知件,可使用 sSMTP 來達成。如果能再搭上兩步驗證裡的專屬應用程式密碼會安全些。

當 SMART 亮起紅燈時,請儘速備份並更換硬碟。這時可以先拿先前淘汰的舊硬碟墊擋,否則就趕緊買顆新的補上了! (若您的硬碟保固還沒過,那您可以換新硬碟了,恭喜!)

資料來源


[^1]: GNOME Disks 原名為 gnome-disk-utility 和 Palimpsest。在部份的版本中需用 palimpsest 指令來啟用磁碟公用程式,例 Debian 7.8。