常用硬碟檢測方法



1. 若 BIOS 有支援 SMART 機能,可檢查 /var/log/messagessmartd 的訊息


輸入:
$less /var/log/messages

會打開系統訊息紀錄,直接輸入「/smartd」尋找有關 smartd 的訊息,按 n 找下一個。若是找到的訊息中有 “bad block”“bad sector” 等關鍵字就要馬上備份並更換硬碟。按 q 回到指令行畫面。


2. 使用 smartctl (BIOS與硬碟需支援SMART)
語法:
smartctl [options] device

通常步驟:
首先檢視裝置資訊,知道硬碟是否支援 SMART:
$smartctl -i /dev/sdb

裝置若不支援 SMART 基本上就到此為止。若有支援可以啟動 /dev/sdb 的 SMART 功能:
$smartctl -s on -d ata /dev/sdb

啟動後看這個硬碟支援哪些 self-test routine,通常有 shortconveyance long 三種 self-test:
$smartctl -c /dev/sdb

執行 self-test,建議使用 long self-test routine 能取得較正確的結果 (注意一次只能執行一個測試)
$smartctl -t long /dev/sdb

smartctl 不會顯示測試進度,但會回報這個測試要執行多久。等到時間差不多後就確認測試進度:
$smartctl -l selftest /dev/sdb

再看看測試結果
$smartctl -a /dev/sdb

並注意這一段:
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   200   200   051    Pre-fail  Always       -       0
  3 Spin_Up_Time            0x0027   253   253   021    Pre-fail  Always       -       1083
  4 Start_Stop_Count        0x0032   100   100   000    Old_age   Always       -       51
  5 Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x002e   200   200   000    Old_age   Always       -       0
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       328
 10 Spin_Retry_Count        0x0032   100   253   000    Old_age   Always       -       0
 11 Calibration_Retry_Count 0x0032   100   253   000    Old_age   Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       50
192 Power-Off_Retract_Count 0x0032   200   200   000    Old_age   Always       -       39
193 Load_Cycle_Count        0x0032   200   200   000    Old_age   Always       -       11
194 Temperature_Celsius     0x0022   108   101   000    Old_age   Always       -       42
196 Reallocated_Event_Count 0x0032   200   200   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0030   200   200   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x0008   200   200   000    Old_age   Offline      -       0

* 若
5、7、10、11、196~200 這幾個項目不為 0 且持續增加,應立即備分並更換硬碟。

* 其他包含在 -a 選項的資訊:

顯示 -a 選項結果中的健康狀況部分:
$smartctl -H /dev/sdb

顯示 -a 選項結果中的 error log 部分:
$smartctl -l error /dev/sdb


3. badblocks 指令檢測損壞磁區 (讀寫次數龐大,常用會損害硬碟壽命)
語法:
badblocks  [  -svwnf ] [ -b block-size ] [ -c blocks_at_once ] [ -e max_bad_blocks ] [ -d read_delay_factor ]
    [-i input_file ] [ -o output_file ] [ -p num_passes ] [ -t test_pattern ] device [ last-block ] [ first-block ]

常用選項:
(default)    non-destructive read-only mode 無損唯讀模式,較快。
-n    non-destructive read-write mode 無損讀寫模式,速度最慢。掛載中硬碟需加 -f 強制執行 (會有硬碟/檔案系統毀損的風險)
-w    destructive write test 毀滅性寫入測試。會將檔案全部抹銷!掛載中硬碟需加 -f 強制執行
-f    強制執行,與 -n-w 配合使用
-v    執行中回報進度
-s    將檢測出的壞磁區顯示在螢幕上
-i input_file    略過不檢測 input_file 裡的已知 badblocks,這些已知 badblocks 同樣不會顯示在檢測結果中。
-o output_file    將檢測出的 badblocks 寫在 output_file 上。

通常為求速度與資料安全,會使用預設的無損唯讀模式進行掃描。例如:
$badblocks -v /dev/sda -o badblocks.txt

即為對 /dev/sda 進行無損唯讀模式掃描,-v 選項令 badblocks 在執行中回報進度,並以 -o 選項將檢測出的損壞磁區寫在 badblocks.txt 檔案裡。


* 操作前需再次確認各指令 man page。

Comments