badblocks 指令檢測損壞磁區

badblocks介紹

badblocks是Unix-like作業系統下用來檢查類似於磁碟分區這樣的設備上是否存在壞道的命令行程序,其功能類似於Microsoft Windows或DOS作業系統中的SCANDISK或CHKDSK。運行後badblocks會給出一份設備上存在問題的區塊(block)列表。

badblocks在大多數情況下需要配合e2fsck或mke2fs使用,此時需要專門指定合適的“-b”參數,也就是badblock所讀取的區塊大小(block-size)。因此,用戶應該通過執行e2fsck或mke2fs時加上“-c”參數來調用badblocks,而不是直接使用badblocks。

#read 檢查 1.5TB 約15hr

badblocks -sv -c 2 /dev/sdb -o sdb-badblocks-list

#read write 檢查 1.5TB 約15days

badblocks -nsv -c 2 /dev/sdb -o sdb-badblocks-list

fsck 使用badblocks的方式(fsck為修復硬碟)

在fsck時使用badblocks來略過已經檢查到的壞軌磁區。請用-l這個參數。

也就可以跳過這些壞軌不檢測了。

[root@localhost ~]# fsck.ext3 -l /opt/ sdb-badblocks-list /dev/sdb

#參數說明:

fsck.ext3 為修復硬碟的格式

-l 後面接已測試好磁區標記的檔案,表示當在fsck時會略過該檔內的磁區不檢查

/dev/sdb 為要修復的硬碟

在格式話硬碟時檢查是否有壞軌

以下兩種方式選一種使用

[root@localhost ~]# mkfs.ext3 -c /dev/sdb

或是使用

[root@localhost ~]# mke2fs -j -l sdb-badblocks-list /dev/sdb

#參數說明:

-c 在格式化之前先檢查硬碟。使用此參數操作,清楚地告知可以採用“mkfs.ext3 -c”

選項用“read-only”方式檢查硬碟。這個命令會在格式化硬碟時檢查硬盤,並標出

錯誤的硬碟“block”。用這個方法格式化硬碟,需要有相當的時間,因為命令運行

後,會一個個用讀的方式檢查硬盤。

-j 將硬碟格式轉化成 ext3 journal 格式。

-l 後面接已測試好磁區標記的檔案,表示當在fsck時會略過該檔內的磁區不檢查

/dev/sdb 為要修復的硬碟

(P.S. 讀寫次數龐大,常用會損害硬碟壽命)

語法:

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

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