[完全用 GNU/Linux 工作] 29. 檢測硬碟 S.M.A.R.T. 健康狀態
S.M.A.R.T. 是個用來檢測硬碟健康狀況的指標,雖然前文 (26. 使用 Clonezilla 打造不死的作業系統) 提供了軟體層面的備份方式,但硬體總有老舊、損壞的一天。而一台電腦中又以硬碟裡的資料最為重要,這裡凍仁將介紹 GNU/Linux 下檢測、監控的方法。
套件 smartmontools 包含了 smartctl, smartd,是個可以監控 ATA, SCSI 硬碟 (storage) SMART (Self-Monitoring, Analysis and Reporting Technology System) 狀態的工具。我們可以透過它來進階設定各種硬碟退化、錯誤警告的回報機制。
1.1. 安裝文字介面的檢測工具。
smartctl 主要是用來進行一次性、暫時性的硬碟掃描,以下為常見的使用方法。
2.1. 查看該媒體是否支援 SMART 檢測。
2.2. 若尚未啟用 SMART,可以使用 -s 參數開啟它。
2.3. 支援 SMART 後我們可以使用 -H 參數來手動檢查硬碟、隨身硬碟的建康狀態。
smartd 是個可以把 smartmontools 註冊成例行性服務 (Daemon) 並使用排程來監控的程式,以下為凍仁啟用的步驟。
3.1. 啟用 smartd。
3.2. 備份設定檔。
3.3. 編輯設定檔。
3.3. 啟用服務
3.4. 觀看記錄檔 (log)。
※ 若想讓 smartd 使用 Gmail 寄送通知件,可使用 sSMTP 來達成。如果能再搭上兩步驗證裡的專屬應用程式密碼會安全些。
當 SMART 亮起紅燈時,請儘速備份並更換硬碟。這時可以先拿先前淘汰的舊硬碟墊擋,否則就趕緊買顆新的補上了! (若您的硬碟還沒過保,那恭喜您可以換新硬碟了 :P)
1. 安裝 smartmontools
套件 smartmontools 包含了 smartctl, smartd,是個可以監控 ATA, SCSI 硬碟 (storage) SMART (Self-Monitoring, Analysis and Reporting Technology System) 狀態的工具。我們可以透過它來進階設定各種硬碟退化、錯誤警告的回報機制。
1.1. 安裝文字介面的檢測工具。
[ jonny@linux ~ ]
# Debian, Ubuntu
$ sudo aptitude install smartmontools Enter
# CentOS, RHEL, Fedora
$ sudo yum install smartmontools Enter
2. smartctl
smartctl 主要是用來進行一次性、暫時性的硬碟掃描,以下為常見的使用方法。
2.1. 查看該媒體是否支援 SMART 檢測。
[ jonny@linux ~ ]
# - 啟用 (Enabled)。 $ sudo smartctl -i /dev/sda Enter smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.8.0-31-generic] (local build) Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net === START OF INFORMATION SECTION === Device Model: ST3500413AS Serial Number: Z2AAMWCL LU WWN Device Id: 5 000c50 035f695b1 Firmware Version: JC45 User Capacity: 500,107,862,016 bytes [500 GB] Sector Size: 512 bytes logical/physical Device is: Not in smartctl database [for details use: -P showall] ATA Version is: 8 ATA Standard is: ATA-8-ACS revision 4 Local Time is: Wed Oct 16 21:04:44 2013 CST SMART support is: Available - device has SMART capability. # - 停用 (Disabled)。 $ sudo smartctl -i /dev/sda Enter smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.8.0-31-generic] (local build) Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net === START OF INFORMATION SECTION === Device Model: ST3500413AS Serial Number: Z2AAMWCL LU WWN Device Id: 5 000c50 035f695b1 Firmware Version: JC45 User Capacity: 500,107,862,016 bytes [500 GB] Sector Size: 512 bytes logical/physical Device is: Not in smartctl database [for details use: -P showall] ATA Version is: 8 ATA Standard is: ATA-8-ACS revision 4 Local Time is: Wed Oct 16 21:05:36 2013 CST SMART support is: Available - device has SMART capability. SMART support is: Disabled
2.2. 若尚未啟用 SMART,可以使用 -s 參數開啟它。
[ jonny@linux ~ ]
$ sudo smartctl -s on /dev/sda Enter smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.8.0-31-generic] (local build) Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net === START OF ENABLE/DISABLE COMMANDS SECTION === SMART Enabled.
2.3. 支援 SMART 後我們可以使用 -H 參數來手動檢查硬碟、隨身硬碟的建康狀態。
# - 通過 (passed)。 $ sudo smartctl -H /dev/sda Enter smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.8.0-31-generic] (local build) Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net === START OF READ SMART DATA SECTION === SMART overall-health self-assessment test result: PASSED # - 失敗 (failed)。 $ sudo smartctl -H /dev/sda Enter smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.8.0-31-generic] (local build) Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net === START OF READ SMART DATA SECTION === SMART overall-health self-assessment test result: FAILED! Drive failure expected in less than 24 hours. SAVE ALL DATA. Failed Attributes: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 5 Reallocated_Sector_Ct 0x0033 004 004 005 Pre-fail Always FAILING_NOW 1887
3. smartd
smartd 是個可以把 smartmontools 註冊成例行性服務 (Daemon) 並使用排程來監控的程式,以下為凍仁啟用的步驟。
3.1. 啟用 smartd。
[ jonny@linux ~ ]
$ sudo vim /etc/default/smartmontools Enter
...
start_smartd=yes
smartd_opts="--interval=1800"
3.2. 備份設定檔。
[ jonny@linux ~ ]
$ sudo cp /etc/smartd.conf /etc/smartd.conf.ori Enter
3.3. 編輯設定檔。
[ jonny@linux ~ ]
$ sudo vi /etc/smartd.conf Enter
......
# 掃描所有的 ATA/SCSI 設備並將報告寄送給 root。
DEVICESCAN -d removable -n standby -m root -M exec /usr/share/smartmontools/smartd-runner
# 每日 02:00 快速檢查 sda,每週六 03:00 完整檢查 sda。
/dev/sda -a -o on -S on -s (S/../.././02|L/../../6/03)
# 每日 04:00 快速檢查 sdb,每週六 05:00 完整檢查 sdb。
/dev/sdb -a -o on -S on -s (S/../.././04|L/../../6/05)
# 監控 SMART 狀態
/dev/sda -H -l error -l selftest -t -I 194
/dev/sdb -H -l error -l selftest -t -I 194
# 安靜的檢查,並只郵寄建康狀態給 admin@example.tw
/dev/sda -H -C 0 -U 0 -m admin@example.tw
/dev/sdb -H -C 0 -U 0 -m admin@example.tw
......
3.3. 啟用服務
[ jonny@linux ~ ]
$ sudo /etc/init.d/smartmontools start Enter
3.4. 觀看記錄檔 (log)。
[ jonny@linux ~ ]
$ sudo less /var/log/syslog Enter ...... 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) Oct 17 08:59:47 thinkpad-t410 smartd[11523]: Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net Oct 17 08:59:47 thinkpad-t410 smartd[11523]: Opened configuration file /etc/smartd.conf Oct 17 08:59:47 thinkpad-t410 smartd[11523]: Drive: DEVICESCAN, implied '-a' Directive on line 21 of file /etc/smartd.conf Oct 17 08:59:47 thinkpad-t410 smartd[11523]: Configuration file /etc/smartd.conf was parsed, found DEVICESCAN, scanning devices Oct 17 08:59:47 thinkpad-t410 smartd[11523]: Device: /dev/sda, type changed from 'scsi' to 'sat' Oct 17 08:59:47 thinkpad-t410 smartd[11523]: Device: /dev/sda [SAT], opened ...... Oct 17 08:59:47 thinkpad-t410 smartd[11523]: Device: /dev/sda [SAT], found in smartd database. Oct 17 08:59:48 thinkpad-t410 smartd[11523]: Device: /dev/sda [SAT], is SMART capable. Adding to "monitor" list. Oct 17 08:59:48 thinkpad-t410 smartd[11523]: Device: /dev/sda [SAT], state read from /var/lib/smartmontools/smartd.ST9320423AS-5VH55XKG.ata.state ...... Oct 17 08:59:48 thinkpad-t410 smartd[11525]: smartd has fork()ed into background mode. New PID=11525. Oct 17 08:59:48 thinkpad-t410 smartd[11525]: file /var/run/smartd.pid written containing PID 11525
※ 若想讓 smartd 使用 Gmail 寄送通知件,可使用 sSMTP 來達成。如果能再搭上兩步驗證裡的專屬應用程式密碼會安全些。
當 SMART 亮起紅燈時,請儘速備份並更換硬碟。這時可以先拿先前淘汰的舊硬碟墊擋,否則就趕緊買顆新的補上了! (若您的硬碟還沒過保,那恭喜您可以換新硬碟了 :P)
本文同步發佈於 iT 邦幫忙。
相關連結:
★ FourDollars Blog: 利用 ssmtp 透過 Gmail 在文字模式下寄信
★ SSMTP - ArchWiki
★ HDD Health – 硬碟健康狀況守護神,有問題馬上通知您!! | iThome Download
資料來源:
★ smartmontools
★ Setting up HDD’s SMART monitoring on Debian Squeeze | Kevin Deldycke
★ Smartmontools - Community Ubuntu Documentation
★ 不自量力 の Weithenn: Smartmontools-檢查測試硬碟壽命
★ [Linux] smartctl 使用smartmontools監控硬碟的健康狀態 | 70's Blog
★ UbuntuHelp:Smartmontools/zh - Ubuntu中文
昨日遇上 Passthrough HDD 給 VM 問題後,經同事提醒,才想起還可用 dmesg 來查看硬體是否有問題。
回覆刪除```
root@pve7:~# dmesg
...
[1127422.985708] sd 1:0:9:0: [sdl] tag#2505 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE cmd_age=0s
[1127422.986548] sd 1:0:9:0: [sdl] tag#2505 Sense Key : Medium Error [current]
[1127422.987643] sd 1:0:9:0: [sdl] tag#2505 Add. Sense: Unrecovered read error
[1127422.988512] sd 1:0:9:0: [sdl] tag#2505 CDB: Read(10) 28 00 00 00 00 00 00 00 01 00
[1127422.989367] blk_update_request: critical medium error, dev sdl, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[1127422.990177] Buffer I/O error on dev sdl, logical block 0, async page read
```