Home
Packages
Forums
Wiki
GitLab
Security
AUR
Download
コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
目次
コミュニティに貢献
最近の出来事
おまかせ表示
特別ページ
交流
ヘルプ
貢献
最近の更新
最近の議論
新しいページ
統計
リクエスト
ArchWiki
検索
検索
表示
アカウント作成
ログイン
個人用ツール
アカウント作成
ログイン
Badblocksのソースを表示
ページ
議論
日本語
閲覧
ソースを閲覧
履歴を表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
ソースを閲覧
履歴を表示
全般
リンク元
関連ページの更新状況
ページ情報
表示
サイドバーに移動
非表示
←
Badblocks
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
{{lowercase title}} [[Category:ハードウェア検出とトラブルシューティング]] [[Category:コマンド]] [[en:Badblocks]] badblocks はストレージデバイスの不良ブロックをテストするプログラムです。 HDD の場合は全ての不良セクタを退避させる必要があります。セクタはストレージデバイスのトラックの一部分のことをいい、故障が発生してセクタが使用できなくなるとセクタは不良セクタになります。不良セクタが発生するとテキストファイルの文字が変わってしまったりバイナリプログラムがセグメンテーション違反を起こすようになったりします。 [[S.M.A.R.T.]] (Self-Monitoring, Analysis, and Reporting Technology) は今日のほとんど全ての HDD に搭載されているハードウェアの機能で、自動的にセクタを退避させます。ただし badblocks がデバイスの全てのブロックにパターンを書き込んで問題のある領域がないかチェックするのに対して、S.M.A.R.T. は受動的にエラーが発生するのを待つだけです。 badblocks によるテストには破壊的な書き込みモード (デバイスを全て[[ディスクの完全消去|消去]]します) と、非破壊的な読み書きモードと読み込みモードが存在します。 == インストール == badblocks は {{Pkg|e2fsprogs}} パッケージに含まれています。 == ストレージデバイスの忠実度 == 明確な規則はありませんが、新しいドライブには不良セクタがゼロであるべきであると考えるのが一般的です。時間の経過とともに不良セクタが発生します。不良セクタをファイルシステムに定義して回避することはできますが、ドライブを継続的に使用すると、通常、さらに不良セクタが形成され、それは最終的にドライブが停止する前兆となります。デバイスの交換をお勧めします。 == 他のプログラムとの比較 == ストレージデバイスの不良セクタをテストするための一般的な推奨方法は、メーカーのテストプログラムを使用することです。ほとんどのメーカーがこのプログラムを用意しています。その主な理由は、メーカーが通常、ドライブの交換が必要かどうかを判断する基準をテストプログラムに組み込んでいるからです。ここでの注意点は、一部のメーカーのテストプログラムでは、完全なテスト結果が得られず、合格か不合格かだけを言って不良セクタの数を許可していることです。しかし、メーカーのプログラムは一般的に ''badblocks'' よりも早く、時にはかなり早い場合もあります。 == 不良セクタのテスト == Linux で不良セクタをテストするには、通常、プログラム badblocks が使用されます。badblocks には、不良セクタを検出できるいくつかの異なるモードがあります。 === 読み書きテスト (破壊的) === 新しいドライブを試験するためのテストです。デバイスの全てのブロックにパターンが書き込まれるため、事実上、デバイスの中身は [[ディスクの完全消去|完全に消去]] されます。デフォルトでは4つの異なるパターンを使用して広範囲にテストが行われます: 0xaa (10101010), 0x55 (01010101), 0xff (11111111), 0x00 (00000000) デバイスによってはテスト完了まで数日かかります。 {{hc|# 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)}} 上記のコマンドで使用しているオプション: ; {{ic|-w}}: 破壊的な書き込みテストを実行 ; {{ic|-s}}: プログレスバーを表示 ; {{ic|-v}}: 標準出力に検出された不良セクタを出力 他のオプション: ; {{ic|-b ''number''}}: ハードディスクのブロックサイズを指定することで、テスト時間を大幅に改善できます。root ユーザーとして ({{ic|tune2fs -l ''partition'' {{!}} grep 'Block size'}}) ; {{ic|-p ''number''}}: 指定された回数だけテストを実行 ; {{ic|-o ''/path/to/output-file''}}: 不良セクタを標準出力ではなく <output-file> に出力 ; {{ic|-t ''test_pattern''}}: パターンを指定。{{ic|-t random}} オプションでランダムなパターンを書き込むことができます ==== 特定のテストパターンを定義する ==== '''manpageより:''' "''test_pattern'' には 0 から ULONG_MAX-1 までの数値を指定することができます [...]" ===== ランダムパターン ===== {{ic|-t random}} オプションを使用すると、''Badblocks'' に単一の ''ランダムパターン'' を繰り返し書き込むことができます。 {{hc|# badblocks -wsv -t random /dev/''device''| Checking for bad blocks in read-write mode From block 0 to 488386583 Testing with '''random pattern''': done Reading and comparing: done Pass completed, 0 bad blocks found. (0/0/0 errors)}} {{Warning|badblocks は [[乱数生成#/dev/urandom|urandom]] のようにエントロピーを利用するのではなく、特定の ''ランダムパターン'' を繰り返すだけなので、[[ディスクの完全消去#ブロックデバイス暗号化の準備|ブロックデバイス暗号化]] のように真にランダムなデータを必要とする場合は使用しないでください。}} === 読み書きテスト (非破壊的) === 既にデータが存在するデバイス用のテストです。非破壊的な読み書きテストはセクタの元のデータをバックアップしてからパターンを書き込んでテストし、その後はバックアップから中身を元に戻します。メンテナンステストとして有用です。 {{hc|# 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)}} {{ic|-n}} オプションによって非破壊的な読み書きテストが実行されます。 === ファイルシステムから不良セクタ情報を使う === 不良セクタを使用しないようにするにはファイルシステムに知らせる必要があります。 ==== ファイルシステムのチェック時 ==== ファイルシステムのチェックユーティリティ ({{ic|fsck}}) によってチェック時に ''badblocks'' を使うことができます。読み書きテスト (非破壊的) を実行してファイルシステムに不良セクタの場所を記録させるには: # fsck -vcck /dev/<device-PARTITION> {{ic|-cc}} オプションによって非破壊的なテストモードで {{ic|fsck}} が実行され、{{ic|-v}} によって出力が表示され、{{ic|-k}} オプションによって前の不良セクタ情報も維持されます。 読み込みテストを実行するには (非推奨): # fsck -vck /dev/<device-PARTITION> === ファイルシステムの作成前 === ファイルシステムを作成する前に実行することもできます。 {{ic|-o}} オプションを指定せずに ''badblocks'' を実行すると、不良セクタは stdout にのみ出力されます。 ディスクの先頭での読み取りエラーの出力例: {{hc|# badblocks -wsv /dev/''drive''| [...] Testing with pattern '''0xff''': done Reading and comparing: [...] 37584 37585 0.84% done, 7:31:08 elapsed. (0/0/527405 errors) 37586 [...] done Testing with pattern '''0x00''': Reading and comparing: [...] 37584 37585 [...] done Pass completed, 527405 bad blocks found. (0/0/527405 errors)}} ''badblocks'' エラー出力をファイルシステムに快適に渡すには、エラー出力をファイルに書き込む必要があります。 {{hc|# 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)}} 次に、次の情報を使用してファイルシステムを (再) 作成します: # mke2fs -t ''filesystem-type'' '''-l''' /root/''badblocks.txt'' /dev/''device'' {{Note|{{ic|0/0/527405}} エラーの意味は、''読み取りエラー数'' / ''書き込みエラー数'' / ''破損エラー数です''}} ==== Ext4 ==== {{man|8|mke2fs}} マニュアルページから: : 不良ブロックリスト内のブロック番号は、''mke2fs'' で使用されるのと同じブロックサイズを使用して生成される必要があることに注意してください。その結果、''mke2fs'' の {{ic|-c}} オプションは、ディスクをフォーマットする前に不良ブロックがないかチェックします、これは、はるかに簡単でエラーが発生しにくい方法です。 したがって、推奨される方法は次のとおりです: # mkfs.ext4 -c /dev/''device'' {{ic|-cc}} を使用して、読み取り/書き込み不良ブロックテストを実行します。 ==== ブロックサイズ ==== まず、ファイルシステムの '''ブロックサイズ''' を見つけます。たとえば、ext# ファイルシステムの場合は次のようになります。 # dumpe2fs /dev/''device-PARTITION'' | grep 'Block size' これを ''badblocks'' にフィードします: # badblocks -b ''block size'' == 不良セクタを見つける == badblock を使用して不良セクタを見つけることができます。''badblocks'' ではセクターを ''ブロック'' と呼ぶことに注意してください。いくつかのスキャンモードをサポートしています。最も精度の低い読み取り専用モード (デフォルト) があります。破壊的書き込みモード ({{ic|-w}} オプション) これは最も正確ですが、時間がかかり、ドライブ上のすべてのデータが (明らかに) 破壊されるため、セクターとファイルの照合にはまったく役に立ちません。最後に、非破壊読み取り/書き込みモードが登場しました。これはおそらく破壊モードと同じくらい正確ですが、おそらく最も遅いという唯一の本当の欠点があります。ただし、ドライブに障害が発生していることがわかっている場合は、おそらく読み取り専用モードが最も安全です。 詳細 ({{ic|-v}} オプション)、読み取り専用スキャンを実行するには、次のコマンドのいずれかを実行します ({{ic|x}} はドライブ文字、{{ic|y}} はスキャンしたいパーティション番号): ディスク全体のスキャン: # badblocks -v /dev/sdx 単一パーティションのスキャン: # badblocks -v /dev/sdxy ドライブ全体をスキャンする場合の欠点は、各ファイルシステムが、そのファイルシステムが存在するパーティションを基準にしてブロック数を開始することです。これは、たとえば 2 番目のパーティション上に不良ブロックがあり、そのパーティションがブロック 1000 から始まる場合、必要な番号を取得するにはブロック番号から 1000 を減算する必要があることを意味します。したがって、ディスクの先頭からのスキャンの結果、ブロック番号 1005 が不良であることが判明した場合、実際に使用されるのは 2 番目のパーティションのブロック 5 になります。 それ以外の場合、フルスキャンの実行後に不良ブロックが見つかった場合は、ブロックの計算を行うことなく、単純にそれらが存在するパーティションを特定し、それらを再スキャンしてブロック番号を取得できます。 もう 1 つ注意すべき点は、badblock のデフォルトは 1024 バイトブロックであるため、ファイルシステムと一致させるために {{ic|-b}} オプションを使用してデフォルトサイズを変更するか、後でブロック番号を手動で変換する必要があることです。 パーティションの始まりと終わりを知る必要がある場合は、[[fdisk]] を実行してください。[[fdisk]] が使っているブロックサイズをメモしておけば、スキャンに合わせてブロック数を変換できます。 {{hc|# fdisk -l /dev/sdx|2= Disk /dev/sdx: 149.05 GiB, 160041885696 bytes, 312581808 sectors '''Units = sectors of 1 * 512 = 512 bytes''' Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes }} これで、不良ブロックのブロック番号と、そのブロックが存在するパーティションとの相対関係がわかるはずです。 == 再マッピングとの相互作用 == SMART を搭載した HDD コントローラーは、一般的に不良セクタの再マッピングが可能です。それでも、不良セクタでの読み出しの再試行には時間を浪費しますが、書き込みでは、(エラーが "ソフト" な場合、つまり ECC 故障の場合) 何とか修正するか、予備セクタが枯渇していない限り、予備セクタに再マッピングします。 * 非破壊 RW モードでは、不良ブロックは最初にセクタの読み取りを試みます。その結果、"ソフト" と "ハード" 両方の不良セクタが不良とみなされ、それ以上のテストは行われません。SMART では、保留数が変わらないか増加していることがわかります。 * 破壊的 RW モードでは、badblocks が最初に書き込みを行います。その結果、再マップがトリガーされ、セクターがアクセス可能になるという点で "修正" される必要があります。SMART では保留中のセクター数が減少する一方で、再割り当てされた数は変化しないまま ("ソフト" の場合)、または増加する ("ハード" の場合) ことがわかります。badblocks は、セクターが本来の設計どおりにデータを忠実に保持しているかどうかのテストを続けます。 非破壊テストの不良ブロックリストを使用して書き込みを強制することができます。LBA 範囲を計算し、{{ic|hdparm --read-sector}} を使用して単一セクターに絞り込み、最後に {{ic|hdparm --write-sector}} [https://serverfault.com/a/641135/] を使用して書き込みをトリガーします。このセクターでの今後の再試行は諦めることになりますが、少なくとも読み取りハングはもう発生しません。 == 代替案 == badblocks はもともとフロッピーディスクを検証するために作成されたため、その設計は最新の HDD 用に解釈されていません。18 TB ドライブなどのサイズでは、-b 4096 [https://www.reddit.com/r/DataHoarder/comments/fbst8m/alternative_to_badblocks/] を使用するという通常のヒントも役に立ちません。これは代替案です: # デバイスの上の暗号化レイヤーをスパンする: {{ic|cryptsetup open /dev/''device'' ''name'' --type plain --cipher aes-xts-plain64}} # 現在開かれている復号化されたレイヤーにゼロを入力し、暗号化データとして書き込まれます: {{ic|shred -v -n 0 -z /dev/mapper/''name''}} # 新しいゼロを復号化されたレイヤーと比較します: {{ic|cmp -b /dev/zero /dev/mapper/''name''}} ファイルの終わりに関するメッセージが表示されて停止するだけであれば、ドライブは正常です。この方法は、1 回のパスでも Badblock よりもはるかに高速です。コマンドが完全な書き込みを実行すると、(ディスクコントローラに認識されている) も除去されるはずです。 btrfs と ZFS では、設計者はフロッピー時代の不良ブロックリストはもう必要ないと判断しました。欠陥を上書きする限り、通常は正しいものになります (上記を参照) 再試行しても読み取りがハングします。昔のように不良ブロックを "分離" したい場合は、パーティション分割またはLVMによる下位レベルのソリューションを使用してください。 最新の回転ドライブでは、{{ic|smartctl -t long /dev/''device''}} ([[SMART]] を参照) は完全な読み取り専用テストを実行します。障害が見つかるとすぐに停止し、''LBA_of_first_error'' データエントリとして記録します。その後、hdparm で上書きできます (上記を参照) フォローアップの選択テストで失敗をスキップできます。 == 参照 == * [http://www.pcguide.com/ts/x/comp/hdd/errorsBadSectors-c.html My hard disk has bad sectors or is developing bad sectors over time]
このページで使用されているテンプレート:
テンプレート:Hc
(
ソースを閲覧
)
テンプレート:Ic
(
ソースを閲覧
)
テンプレート:Lowercase title
(
ソースを閲覧
)
テンプレート:Man
(
ソースを閲覧
)
テンプレート:Note
(
ソースを閲覧
)
テンプレート:Pkg
(
ソースを閲覧
)
テンプレート:Warning
(
ソースを閲覧
)
Badblocks
に戻る。
検索
検索
Badblocksのソースを表示
話題を追加