網頁

搜尋此網誌

2014年6月25日 星期三

自我監控分析報告技術 監控工具 smartmontools

現代的磁碟機都有自我監控分析報告技術 (Self-Monitoring, Analysis and Reporting Technology, 簡稱 SMART),利用 SMART 的資訊我們可以取得磁碟衰退 (degradation) 和故障 (failure) 的警告,提早更換有問題的磁碟機以避免資料損毀。

在 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 資訊。
smartctl 和 smartd 的使用方法可以參考說明文件,沒有什麼困難的地方。比較需要注意的是 SMART 中有三種測試,這些「測試」的意義和我們認知不太一樣!(下面的 device 是指你的磁碟機位置,例如 /dev/sda )
  • 線上測試 (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 查看檢查結果。
嚴格來說,SMART 的線上測試離線測試不能稱為「測試」,線上和離線測試事實上只是更新磁碟 SMART 屬性的數值,因此應該稱為資料收集 (data collection) 較為貼切,在 smartctl 的說明文件提到使用「測試」一詞是個不幸,容易讓人們混淆。在 smartctl 的「Test」一詞都是指離線測試,而「Self-Test」 則是指自我測試。

如果要使用 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 和 UPDATED 欄位。
  • 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,所以有些屬性不會在硬碟上出現。

###

1 則留言:

  1. Looks good. :)
    This tool makes me associate with my project.

    回覆刪除

熱門文章