本篇介紹如何在 Linux 系統中使用 badblocks 指令檢查磁碟的壞軌,並且配合 mkfs 等指令修復壞軌。

一般的硬碟、隨身碟或記憶卡等儲存設備,在使用久了之後,都有可能會出現部份的壞軌,當資料放在這些損壞的部位時,就會產生錯誤,而如果磁碟損壞的程度不嚴重,我們可以將損壞的部份排除,只使用良好的部份,靠著這樣的方式修復受損的磁碟。


以下是在 Linux 中使用 badblocks 指令檢查磁碟的壞軌,以及使用 mkfsfsck 指令修復壞軌的教學。

讀寫測試(抹除資料)

badblocks 指令支援好幾種測試模式,最普通的方式就是一般的讀寫測試(-w 參數),它預設會以 0xaa0x550xff0x00 這四個 patterns 進行寫入與讀取的測試,在這種測試模式之下,硬碟(或隨身碟、記憶卡等儲存設備)中的資料會被抹除,通常適用於新買來的儲存設備,也就是儲存設備裡面沒有任何資料的狀況。

# 檢查 /dev/sdb 是否有壞軌(抹除硬碟資料)
sudo badblocks -wsv /dev/sdb

這裡我們另外加上 -s-v 參數,作用是可以讓它顯示測試進度與詳細的測試結果。

測試結果的 errors 值若有出現不是 0 的數字,就代表硬碟應該是有問題了:

測試結果

亂數 Pattern

若要以亂數產生測試用的 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

參考資料:ArchWikiTecmint