Linux 硬碟壞軌測試 (badblocks)

由 Derek 發表於 十一月 21, 2011 / 2 則評論

 

一、 badblocks介紹

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

 

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

 

詳細介紹可參考 維基百科

 

二、 badblocks 測試說明

1. badblocks實作測試

1.1 badblocks語法說明

[root@localhost ~]# badblocks  [-svwnf]  [-b block-size] [-c blocks_at_once] [-i input_file] [-o output_file] [-p num_passes] [-t test_pattern ] device [last-block] [start-block]

 

1.2 測試硬碟是否有壞軌

[root@localhost ~]# badblocks -nsv /dev/sdc 

Checking for bad blocks in non-destructive read-write mode

From block 0 to 584843264

Checking for bad blocks (non-destructive read-write test)

Testing with random pattern: done

Pass completed, 0 bad blocks found.  #測試完成後會在這邊顯示有無壞軌數

用此方式測試因為沒有設定重覆測試的次數,預設16次。若是硬碟較大的情況下會測試的比較久。

 

1.3 限制測試次數

為了怕硬碟過大,又要重覆16次會佔去很多時間。所以在參數部份加入-c

[root@localhost ~]# badblocks -nsv -c 5 /dev/sdc 

#加入參數-c,且在-c的後面加上要一次掃描區塊數量 。

 

1.4 將測試的結果記錄下來

[root@localhost ~]# badblocks -nsv -c 5 /dev/sdc -o sdc-badblocks-list 

#加入參數-o,且在-o後面加上檔案名稱就行了。

[root@localhost ~]# cat sdc-badblocks-list   #查看測試內容

 

1.5 針對某磁區範圍內測試 (假設為50000-55000)

[root@localhost ~]# badblocks -nsv -c 5 /dev/sdc  -o sdc-badblocks-list 55000 50000 

#50000為開始磁區,55000為結束磁區。

 

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

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

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

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

#參數說明:

fsck.ext3 為修復硬碟的格式

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

/dev/sdc  為要修復的硬碟

 

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

以下兩種方式選一種使用

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

或是使用

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

#參數說明:

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

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

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

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

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

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

    /dev/sdc  為要修復的硬碟

 

2. badblocks參數說明

#參數說明: 

-b blocksize

指定硬碟的磁區大小,單位為字元,預設值為“block 4K”(4K/block)

 

-c blocksize

每個磁區檢查的次數,預設值是16次

 

-f

強制在一個已經掛載的設備上執行讀寫或非破壞性的寫入測試操作

(建議先umount設備,然後再進行壞軌檢測。僅當/etc/mtab出現設備報錯掛載錯誤時可以

使用該選項)

 

-i file

跳過已經顯示在file文件中的壞軌,而不進行檢測(可以避免重複檢測)

 

-o file

把檢測結果輸出到file文件

 

-p number

重複搜尋設備,直到在指定通過次數內都沒有找到新的壞軌位置,預設次數為0

 

-s

在螢幕上顯示檢查進度

 

-t pattern

通過按指定的模式讀寫來檢測磁區。可以指定一個0到ULONG_MAX-1的十進制正數值,或使

用random(隨機)。如果指定多個模式,badblocks將使用第一個模式檢測所有的磁區,然後

再使用下一個模式檢測所有的磁區。Read-only方式只接受一個模式,不能接受random模式。

 

-v

執行時在螢幕上顯示詳細的訊息

 

-w

使用寫入的方式來測試,建議不要使用此一參數,尤其是待檢查的裝置已有檔案時

 

[device]

指定要檢查的硬碟裝置。

 

[last-block]

指定硬碟裝置的磁區總數。

 

[start-block]

指定要從哪個磁區開始檢查

 

 

 

 

 

關於作者

一個半路殺出來的傻小子,憑著一股傻勁努力的學習、嘗試、分享。希望能用自己微薄之力,替IT界和資訊界盡一點心力。單憑一己之力始終還是有限,歡迎和我有相同理念的夥伴一同加入一同努力。

評論

  1. WP4F 說: 2021/05/05

    謝謝你的心得教學 但是-c這個指令有點錯誤
    它代表的是一次掃描區塊數量 不是次數
    所以設定過大或過小都會造成異常
    “增加這個數目可以增加檢測壞塊的效率可同時也會增加記憶體的耗費”
    以上去官方提供的解釋 供您參考參考 謝謝!

    • Derek 說: 2022/03/27

      感謝分享 已更正

發表評論至 Derek

*