如何用 smartctl 與 dd 檢查與修復硬碟壞軌
回覆此文章 | 引用列表 (0) | 切換為遞減排序  
第 1 頁.共 1 頁 (1 - 2 of 2)
發表人 文章內容
Tiberius
張貼時間: 2012-04-01 19:26
1. 安裝 smartmontools (內含 smartctl)
這是 Gentoo 的作法,其他 distribution 請自己找用哪個工具、套件叫什麼 (爆)

# emerge smartmontools

2. 檢查硬碟資訊 (假設要看的是 /dev/sda)

# smartctl -a /dev/sda

其中可能會有一些有趣的數字 ...

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0033   199   199   140    Pre-fail  Always       -       9
    (已經有 9 個磁區重新配置過了)
197 Current_Pending_Sector  0x0012   200   200   000    Old_age   Always       -       15
    (有 15 個磁區讀取時發生錯誤,等待下次寫入的時候重新檢查/重新配置)

甚至紀錄到曾經有某個磁區讀取錯誤 ...

Error 487 occurred at disk power-on lifetime: 6733 hours (280 days + 13 hours)
  When the command that caused the error occurred, the device was doing SMART Offline or Self-test.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 51 10 5a 52 90 eb  Error: UNC 16 sectors at LBA = 0x0b90525a = 194007642

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  c8 00 10 53 52 90 0b 00      09:47:00.950  READ DMA
  ca 00 80 6f 8f a5 03 00      09:47:00.950  WRITE DMA
  ca 00 80 ef 8e a5 03 00      09:47:00.950  WRITE DMA
  ca 00 80 6f 8e a5 03 00      09:47:00.950  WRITE DMA
  ca 00 80 ef 8d a5 03 00      09:47:00.950  WRITE DMA

3. 要硬碟自己跑 (純讀取) 自我測試, 掃描整顆硬碟範圍
這個步驟會非常久, 他寫 134 minutes = 兩小時十四分, 這不是開玩笑的

# smartctl -t long /dev/sda
 .
 .
 .
=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Extended self-test routine immediately in off-line mode".
Drive command "Execute SMART Extended self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 134 minutes for test to complete.
Test will complete after Sun Apr 01 21:28:13 2012

4. 不知道什麼時候跑完, 所以丟個 terminal 在旁邊每五秒看一次紀錄, 比較容易瞄到跑完 or 遇到錯誤

# watch -n 5 'smartctl -l selftest /dev/sda'

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Self-test routine in progress 90%     17346         -
# 2  Short offline       Completed without error       00%      3532         -

如果跑到 Completed without error, 那恭喜, 沒有壞區, exit;

如果讀到壞軌的話, 最後的 LBA_of_first_error 會是一個磁區數字

5. 假如很不幸有壞區, 假設是上面標示的 194007642 好了

先看看能不能讀出來

# dd if=/dev/sda of=/tmp/sect iflag=direct bs=512 skip=194007642 count=1
# smartctl -a /dev/sda
  (看看 Current_Pending_Sector 跟 Reallocated_Sector_Ct 有沒有因為讀取而改變; 看 error log 有沒有改變)
# vim /tmp/sect
  (看這塊磁區的內容是什麼)

如果有壞軌的話, dd 會卡很久
這時就把這個磁區清空看看, 強制硬碟重新嘗試寫入 or 重新配置
※會直接寫入硬碟,極端危險,請先備份或做好心理準備※

# dd if=/dev/zero of=/dev/sda oflag=direct bs=512 seek=194007642 count=1
# smartctl -a /dev/sda
  (看看 Current_Pending_Sector 跟 Reallocated_Sector_Ct 有沒有因為讀取而改變; 看 error log 有沒有改變)

6. 如果 Current_Pending_Sector 減少, 就完工了; 如果 Reallocated_Sector_Ct 上升, 就代表那區真的壞了, 如果沒上升, 就代表只是之前寫入有錯

7. 繼續檢查第一個故障區之後的空間 ...

# smartctl -t select,194007642-max /dev/sda
  (若有支援 selective self test, 恭喜, 不用從頭測起)
# watch -n 5 'smartctl -l selective /dev/sda'
  (要看的 log 不一樣, 我忘記 selftest log 會不會一併紀錄了, 應該是會)

# smartctl -t long /dev/sda
  (若沒有 ... 那就再等一次吧)

goto 4;


[ 本文於 2012-04-01 20:28Tiberius 編輯第 1 次 ]
 作者資料
cAt
本作者未註冊
張貼時間: 2012-04-01 19:28
(worship)
 作者資料

回覆此文章  
第 1 頁.共 1 頁 (1 - 2 of 2)
您擁有的權限: 閱讀文章 , 回覆主題
前往:

[Validated with XHTML 1.0] tBoard Development (© 2002-2004 by Tiberius Teng)
Queries: 17 Reuses: 1 Time: 0.02
[Images provided by ForumImages]