本篇介紹如何在 Linux 系統中使用 badblocks 指令檢查磁碟的壞軌,並且配合 mkfs 等指令修復壞軌。
一般的硬碟、隨身碟或記憶卡等儲存設備,在使用久了之後,都有可能會出現部份的壞軌,當資料放在這些損壞的部位時,就會產生錯誤,而如果磁碟損壞的程度不嚴重,我們可以將損壞的部份排除,只使用良好的部份,靠著這樣的方式修復受損的磁碟。
badblocks 指令檢查磁碟的壞軌,以及使用 mkfs 或 fsck 指令修復壞軌的教學。
badblocks 指令支援好幾種測試模式,最普通的方式就是一般的讀寫測試(-w 參數),它預設會以 0xaa、0x55、0xff 與 0x00 這四個 patterns 進行寫入與讀取的測試,在這種測試模式之下,硬碟(或隨身碟、記憶卡等儲存設備)中的資料會被抹除,通常適用於新買來的儲存設備,也就是儲存設備裡面沒有任何資料的狀況。
# 檢查 /dev/sdb 是否有壞軌(抹除硬碟資料) sudo badblocks -wsv /dev/sdb
這裡我們另外加上 -s 與 -v 參數,作用是可以讓它顯示測試進度與詳細的測試結果。
測試結果的 errors 值若有出現不是 0 的數字,就代表硬碟應該是有問題了:
若要以亂數產生測試用的 pattern,可以使用 -t 參數將 pattern 指定為 random:
# 亂數產生測試 pattern sudo badblocks -wsv -t random /dev/sdb
如果想要對有資料的硬碟進行測試,可以使用 -n 參數以保留資料的模式進行壞軌測試,在這種模式之下,badblocks 會先將硬碟中原始的資料備份之後,再進行寫入與讀取的測試,測試完之後再將原來的資料放回去,適合用於一般正在使用中的儲存設備。
# 檢查 /dev/sdb 是否有壞軌(保留硬碟資料) sudo badblocks -nsv /dev/sdb
badblocks 在預設的狀況下,只要有發現壞軌的狀況,就會自動再增加測試的次數,直到儲存設備通過完整的一次測試,都沒有發現新的壞軌時,才會停止整個測試流程。
如果想要進行更嚴格的測試,可以加上 -p 參數,並指定通過測試的次數,例如若將通過測試次數指定為 3 的話,儲存設備就必須連續通過 3 次的完整測試才會停止:
# 通過 3 次測試才停止 sudo badblocks -wsv -p 3 /dev/sdb
若硬碟或隨身碟、記憶卡等儲存設備出現壞軌,而損壞的部份不多的話,可以將那些壞掉的部份排除不使用,這樣儲存設備就可以繼續正常使用。
修復壞軌有兩種方式,一種是以 badblocks 檢查壞軌,將壞軌資訊以 -o 參數輸出至檔案:
# 檢查壞軌 sudo badblocks -wsv -o badblocks.txt /dev/sdb1
接著再使用 mkfs 依據壞軌資訊建立新的檔案系統,而 mkfs 有一系列的指令,以 fat 檔案系統來說,可以使用 mkfs.fat:
# 排除壞軌,建立檔案系統 mkfs.fat -l badblocks.txt /dev/sdb1
這樣就完成修復壞軌的動作了。
另外一種方式是直接使用 mkfs 的 -c 參數,在建立檔案系統之前,自動檢查壞軌並且排除之:
# 排除壞軌,建立檔案系統 mkfs.fat -c /dev/sdb1
對於既有的檔案系統,可以嘗試使用 fsck 指令進行修復:
# 修復檔案系統
fsck.fat /dev/sdb1