本篇介紹如何在 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