badblocks

提供: ArchWiki
2023年12月29日 (金) 10:10時点におけるKgx (トーク | 投稿記録)による版 (他のプログラムとの比較を翻訳して追加)
ナビゲーションに移動 検索に移動

badblocks はストレージデバイスの不良ブロックをテストするプログラムです。

HDD の場合は全ての不良セクタを退避させる必要があります。セクタはストレージデバイスのトラックの一部分のことをいい、故障が発生してセクタが使用できなくなるとセクタは不良セクタになります。不良セクタが発生するとテキストファイルの文字が変わってしまったりバイナリプログラムがセグメンテーション違反を起こすようになったりします。

S.M.A.R.T. (Self-Monitoring, Analysis, and Reporting Technology) は今日のほとんど全ての HDD に搭載されているハードウェアの機能で、自動的にセクタを退避させます。ただし badblocks がデバイスの全てのブロックにパターンを書き込んで問題のある領域がないかチェックするのに対して、S.M.A.R.T. は受動的にエラーが発生するのを待つだけです。

badblocks によるテストには破壊的な書き込みモード (デバイスを全て消去します) と、非破壊的な読み書きモードと読み込みモードが存在します。

インストール

badblocks は e2fsprogs パッケージに含まれています。

ストレージデバイスの忠実度

明確な規則はありませんが、新しいドライブには不良セクタがゼロであるべきであると考えるのが一般的です。時間の経過とともに不良セクタが発生します。不良セクタをファイルシステムに定義して回避することはできますが、ドライブを継続的に使用すると、通常、さらに不良セクタが形成され、それは最終的にドライブが停止する前兆となります。デバイスの交換をお勧めします。

他のプログラムとの比較

ストレージデバイスの不良セクタをテストするための一般的な推奨方法は、メーカーのテストプログラムを使用することです。ほとんどのメーカーがこのプログラムを用意しています。その主な理由は、メーカーが通常、ドライブの交換が必要かどうかを判断する基準をテストプログラムに組み込んでいるからです。ここでの注意点は、一部のメーカーのテストプログラムでは、完全なテスト結果が得られず、合格か不合格かだけを言って不良セクタの数を許可していることです。しかし、メーカーのプログラムは一般的に badblocks よりも早く、時にはかなり早い場合もあります。

使用方法

不良セクタのテスト

badblocks には不良セクタを検出するための複数のモードが存在します。

読み書きテスト (破壊的)

新しいドライブを試験するためのテストです。デバイスの全てのブロックにパターンが書き込まれるため、事実上、デバイスの中身は完全に消去されます。デフォルトでは4つの異なるパターンを使用して広範囲にテストが行われます: 0xaa (10101010), 0x55 (01010101), 0xff (11111111), 0x00 (00000000)。デバイスによってはテスト完了まで数日かかります。

# badblocks -wsv /dev/<device>
Checking for bad blocks in read-write mode
From block 0 to 488386583
Testing with pattern 0xaa: done
Reading and comparing: done
Testing with pattern 0x55: done
Reading and comparing: done
Testing with pattern 0xff: 22.93% done, 4:09:55 elapsed. (0/0/0 errors)
[...]
Testing with pattern 0x00: done
Reading and comparing: done
Pass completed, 0 bad blocks found. (0/0/0 errors)

上記のコマンドで使用しているオプション:

-w
破壊的な書き込みテストを実行
-s
プログレスバーを表示
-v
標準出力に検出された不良セクタを出力

他のオプション:

-p <number>
指定された回数だけテストを実行
-o </path/to/output-file>
不良セクタを標準出力ではなく <output-file> に出力
-t <test_pattern>
パターンを指定。-t random オプションでランダムなパターンを書き込むことができます。
警告: badblocks は urandom のようにエントロピーを利用するのではなく、特定の「ランダムパターン」を繰り返すだけなので、ブロックデバイス暗号化のように真にランダムなデータを必要とする場合は使用しないでください。

読み書きテスト (非破壊的)

既にデータが存在するデバイス用のテストです。非破壊的な読み書きテストはセクタの元のデータをバックアップしてからパターンを書き込んでテストし、その後はバックアップから中身を元に戻します。メンテナンステストとして有用です。

# badblocks -nsv /dev/<device>
Checking for bad blocks in non-destructive read-write mode
From block 0 to 488386583
Checking for bad blocks (non-destructive read-write test)
Testing with random pattern: done                                                 
Pass completed, 0 bad blocks found. (0/0/0 errors)

-n オプションによって非破壊的な読み書きテストが実行されます。

ファイルシステムから不良セクタ情報を使う

不良セクタを使用しないようにするにはファイルシステムに知らせる必要があります。

ファイルシステムのチェック時

ファイルシステムのチェックユーティリティ (fsck) によってチェック時に badblocks を使うことができます。読み書きテスト (非破壊的) を実行してファイルシステムに不良セクタの場所を記録させるには:

# fsck -vcck /dev/<device-PARTITION>

-cc オプションによって非破壊的なテストモードで fsck が実行され、-v によって出力が表示され、-k オプションによって前の不良セクタ情報も維持されます。

読み込みテストを実行するには (非推奨):

# fsck -vck /dev/<device-PARTITION>

ファイルシステムの作成前

ファイルシステムを作成する前に実行することもできます。

badblocks のエラー出力をファイルシステムに渡すために、不良セクタ情報をファイルに書き出してください:

# badblocks -wsv -o /root/<badblocks.txt> /dev/<device>
Checking for bad blocks in read-write mode
From block 0 to 488386583
Testing with pattern 0xaa: done
Reading and comparing:   6.36% done, 0:51 elapsed. (0/0/14713 errors)
[...]
Testing with pattern 0x00: done
Reading and comparing: done
Pass completed, 527405 bad blocks found. (0/0/527405 errors)

作成された情報を使ってファイルシステムを作成:

# mkfs.<filesystem-type> -l /root/<badblocks.txt> /dev/<device>
ノート: 0/0/527405 は「読み取りエラー/書き込みエラー/破損エラー」を意味しています。

参照