在 Linux 平台上,我們可以使用 smartmontools 套件讀取磁碟的 SMART 資訊,
Ubuntu 上安裝的指令是 sudo apt-get -y install smartmontools,
以下說明皆以 Ubuntu distribution 為主。在smartmontools 套件中包含兩個公用程式 (utility programs):
- smartctl
控制和讀取磁碟的 SMART 資訊,與執行 SMART 的測試,指令的最後一個引數是裝置名稱 (例如 /dev/sda ),記得執行 smartctl 需要 root 的權限。 - smartd
監控 (monitor) SMART 磁碟的服務程式 (daemon),smartd設定檔位於 /etc/smartd.conf,預設是每1800秒 (30分鐘) 檢查磁碟的 SMART 資訊。
- 線上測試 (online-testing)
磁碟的 SMART 功能開啟時就會進行的「測試」,對效能沒有影響,利用 smartctl -s on device 指令可以開啟線上測試功能。 - 離線測試 (offline-testing)
每隔4小時進行的「測試」,若磁碟忙碌中則延後執行,對效能可能有影響,利用 smartctl -o on device 指令可以開啟自動離線測試的功能,或是使用 smartctl -t offline device 立即執行離線測試。 - 自我測試 (self-testing)
分成簡短自我測試 (short self-test) 和擴充自我測試 (extended self-test) 兩種,擴充自我測試也稱為完整自我測試 (long self-test) ,自我測試需要花費數分鐘至數百分鐘進行,其測試結果會在 SMART 日誌 (Log) 上顯示。使用 smartctl -t short device 或 smartctl -t long device 執行自我測試,再使用 smartctl -l selftest device 查看檢查結果。
如果要使用 smartd 當我們監控磁碟狀態,建議安裝 smartmontools 套件執行 sudo service smartd start 啟動服務程式,另外執行 sudo update-rc.d smartd defaults 讓系統啟動時執行 smartd 服務程式。
最後說明 SMART 的屬性 (Attributes), 每個屬性有個 ID 和名稱,ID 是從 1 至 253 的整數。屬性有 3 個重要的數值:
- RAW_VALUE
屬性的原始數值 - VALUE
正規化 (Normalized) 的數值,各磁碟製造商利用自家的演算法將 RAW_VALUE 轉換成 1 至 254 的整數 - THRESH
門檻 (Threshold) 值,範圍從 0 至 255 的整數。當 VALUE 小於或等於 THRESH 則代表故障 (failure)。
- TYPE 代表屬性的意義,有兩種類型:
- Pre-failure
預先故障的屬性,當VALUE 低於 THRESH 表示磁碟即將故障。 - Old age
已使用的屬性,當VALUE 低於 THRESH 表示磁碟超出使用期限與設計的耗損次數。 - UPDATED 代表屬性的更新方式,有兩種類型:
- Always
正常運作下,或是執行離線測試時都會更新數值。 - Offline
只有在離線測試時才會更新數值。
講了這麼多,不如直接看執行的結果會比較清楚,在我的電腦上執行 sudo smartctl -A /dev/sda,得到下列的屬性結果。
smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.11.0-24-generic] (local build) Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net === START OF READ SMART DATA SECTION === SMART Attributes Data Structure revision number: 10 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x0033 120 120 050 Pre-fail Always - 0 5 Reallocated_Sector_Ct 0x0033 100 100 003 Pre-fail Always - 0 9 Power_On_Hours 0x0032 099 099 000 Old_age Always - 132766029055628 12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 249 171 Unknown_Attribute 0x000a 000 000 000 Old_age Always - 0 172 Unknown_Attribute 0x0032 000 000 000 Old_age Always - 0 174 Unknown_Attribute 0x0030 000 000 000 Old_age Offline - 23 177 Wear_Leveling_Count 0x0000 000 000 000 Old_age Offline - 0 181 Program_Fail_Cnt_Total 0x000a 000 000 000 Old_age Always - 0 182 Erase_Fail_Count_Total 0x0032 000 000 000 Old_age Always - 0 187 Reported_Uncorrect 0x0012 100 100 000 Old_age Always - 0 194 Temperature_Celsius 0x0022 038 089 000 Old_age Always - 38 (Min/Max 15/89) 195 Hardware_ECC_Recovered 0x001c 120 120 000 Old_age Offline - 0 196 Reallocated_Event_Count 0x0033 100 100 003 Pre-fail Always - 0 201 Soft_Read_Error_Rate 0x001c 120 120 000 Old_age Offline - 0 204 Soft_ECC_Correction 0x001c 120 120 000 Old_age Offline - 0 230 Head_Amplitude 0x0013 100 100 000 Pre-fail Always - 100 231 Temperature_Celsius 0x0013 100 100 010 Pre-fail Always - 0 233 Media_Wearout_Indicator 0x0032 000 000 000 Old_age Always - 1010 234 Unknown_Attribute 0x0032 000 000 000 Old_age Always - 569 241 Total_LBAs_Written 0x0032 000 000 000 Old_age Always - 569 242 Total_LBAs_Read 0x0032 000 000 000 Old_age Always - 472
補充說明,這個 /dev/sda 是 SSD,所以有些屬性不會在硬碟上出現。
###
Looks good. :)
回覆刪除This tool makes me associate with my project.