badblocksユーティリティは、「最後のブロックが無効です」と報告し続けます。

badblocksユーティリティは、「最後のブロックが無効です」と報告し続けます。

badblocks単一のパーティションを持つドライブで実行しようとしています。このドライブにはFreeBSDファイルシステムが含まれています。

LinuxライブUSBドライブから起動します。ドライブがマウント解除されました。出力はfdisk -l次のとおりです

   Device  Boot     Start          End    Id     System
/dev/sda1     *        63   976773167+    a5     FreeBSD

だから私は次を実行します。

# badblocks -v /dev/sda1

それは言う:

badblocks: invalid last block - /dev/sda1

これに関する有用な情報が見つかりません。badblocksここでユーティリティを正しく使用していますか?それともドライブに問題があることを意味しますか?

答え1

いいえ、これはドライブに問題があることを示していません。このエラーが発生する理由は、badblocksが/ dev / sda1をデバイスとして受け入れるのではなく、最後のブロックパラメータとして受け入れるためです。

あなたの質問に構文が正しいようです。デバイスの後に最後のブロックパラメータを指定してみてください。
badblocks -v /dev/sda1 976773167

それでも機能しない場合は、最初のブロックも追加してみてください。
badblocks -v /dev/sda1 976773167 63

これがドライブに問題があることを示していないことを確認するために、無効な最後のブロックパラメータ「nope」を追加したときの出力は次のとおりです。

sudo badblocks -v /dev/sdb1 いいえ
badblocks: 最後のブロックが無効です。 - いいえ


これは私が最後にbadblockを使用したbash履歴の例です(私のシステムからこれらのドライブにアクセスするにはsudoアクセスが必要です)。
sudo badblocks -v /dev/sdb1

出力:


不良ブロックを確認するには、ブロック0〜976751967を確認してください(読み取り専用テスト)。

Ctrl + Cを使用して一定時間が経過した後にプロセスをキャンセルすると、出力は次のようになります。

ブロック7470720で中断

プロセスを再開する構文は次のとおりです(参考資料を参照man badblocks)。
badblocks -v デバイス [最後のブロック] [最初のブロック]

「最後のブロック」はデバイスから読み取る最後のブロックであり、「最初のブロック」は読み取りを開始する必要がある場所です。例:
sudo badblocks -v /dev/sdb1 976751967 7470720

出力:

ブロック7470720〜976751967を確認してください。不良ブロックの確認(読み取り専用テスト):

答え2

今日、最新のディスクドライブハードウェアのbadblocksコマンドは、努力する価値がほとんどありません。これは、ドライブコントローラボードが内部で不良ブロックを識別し、自動交換のために最初に割り当てられた「スペア」ブロックでそれを交換するためです。これらのスペアブロックが不足していて不良ブロックの問題がある場合は、ハードウェアが不良になるため、ディスクを交換することをお勧めします。

ドライブの状態を知りたい場合は、ほとんどの最新のドライブがSMARTドライブインタフェースをサポートしてディスクの状態を報告します。ディスクの状態を表示し、ディスクの状態に関する情報を提供するための多くのユーティリティがあります。次のいずれかを試してください。

答え3

Webページからコマンドをコピーしました。 -v のダッシュは他のダッシュ文字に置き換えられます。 (通常のダッシュより少し長くなります。)コマンドを入力するか、何とか修正してください。

答え4

正しい構文を使用したにもかかわらず、このエラーが発生し、大きなディスク(数TB)と小さなブロックサイズ(512バイトなど)を使用している場合、badblocks32ビットブロック番号の使用に制限がある可能性があります。 。

回避策として、より大きなチャンクを使用できます。badblocks使用可能な最小ブロックサイズを見つけるには、badblocks異なる値(-b開始/終了ブロックの有無にかかわらず)を使用して実行します。このようなエラーが発生した場合

badblocks:定義されたデータ型と比較して値が大きすぎます。無効な終了ブロック:32ビット値でなければなりません。

次に、機能するまでブロックサイズを増やします(例:-b 512または-b 1024)。-b 2048これにより、利用可能ないくつかのソリューションがありますが、何もないよりも優れています。

ddrescueこれを使用するか、管理者に連絡して、次のbadblocksバージョンで問題を解決することもできます。

関連情報