mkfs -cはどのように機能するか

mkfs -cはどのように機能するか

故障した 3 TB ドライブがあります。不良ブロックがたくさんありますが、まだ 2.6 TB ほどの使用可能なスペースがあり、それをゴミの保存場所 (音楽、ビデオなど) として利用したいと思っています。最初に、ある人のマニュアルを見つけました。その人はディスクをいくつかのパーティションに分割し、JBOD (just batch of disks) RAID を作成しました (興味があれば、リンクがあります (ロシア語): https://habr.com/ru/post/252211)。しかし、その記事のコメントで、mkfs 自体で '-c' キーを使用して同じことができると誰かが言っていました。それで、私はそれがどのように機能するのか疑問に思いました。はい、man ページがあり、次のように説明しています。

-c ファイルシステムを作成する前に、デバイスに不良ブロックがないかチェックします。このオプションを 2 回指定すると、高速な読み取り専用テストではなく、低速の読み取り/書き込みテストが使用されます。

ほぼ同じことを述べている Arch Wiki の記事があります。デバイスの不良ブロックをチェックして、その後はどうなりますか? インターネットのあちこちで、不良ブロックをマークして OS が使用しないと言う人がいます。どうすれば確認できますか? マークされたブロックを今後の使用 (将来のパーティション作成など) のために表示するユーティリティはありますか?

答え1

確かに、man mkfs.ext4man 8 mke2fs)はあなたが引用したことを言っています:

-c
ファイル システムを作成する前に、デバイスに不良ブロックがないか確認します。このオプションを 2 回指定すると、高速な読み取り専用テストではなく、低速の読み取り/書き込みテストが使用されます。

しかし、次のようなこともあります-l:

-l filename
ファイル名から不良ブロック リストを読み取ります。不良ブロック リスト内のブロック番号は、で使用されるのと同じブロック サイズを使用して生成する必要があることに注意してくださいmke2fs。その結果、-cオプションは、mke2fsディスクをフォーマットする前に不良ブロックをチェックする方法として、はるかにシンプルでエラーが発生しにくくなります。 は、プログラムmke2fsに正しいパラメータを自動的に渡しますbadblocks

それでは調査してみましょうman 8 badblocks:

重要な注意: の出力がまたはプログラムbadblocksに供給される場合、生成されるブロック番号はファイルシステムで使用されているブロック サイズに大きく依存するため、ブロック サイズを適切に指定することが重要です。このため、 を直接実行するのではなく、およびプログラムのオプションを使用することを強くお勧めします。e2fsckmke2fsbadblocks-ce2fsckmke2fs

次のように記載されていますe2fsck( fsck.ext4ext4 の場合)。確認してみましょうman 8 e2fsck(強調は筆者による)。

-c
このオプションe2fsckにより、badblocks(8)プログラムはデバイスの読み取り専用スキャンを実行し、不良ブロックを検出します。不良ブロックが見つかった場合、ファイルまたはディレクトリに割り当てられないように、不良ブロック inode に追加されます。このオプションを 2 回指定すると、非破壊的な読み取り/書き込みテストを使用して不良ブロックのスキャンが実行されます。

そして、とはmke2fs同じe2fsckツールキットの一部なので、期待する -cmke2fs説明に明示的に記載されていないにもかかわらず、同じように動作するようです。

次に、ファイルシステムが認識している不良ブロックをチェックしますdumpe2fsman 8 dumpe2fs

-b
ファイルシステム内で不良として予約されているブロックを出力します。

(クレジットこの答え)。

情報を保存するのはファイルシステムであることに注意してください。将来のファイルシステムで使用するには、現在のファイルシステムを破棄する前に保存する必要があります。また、パーティション テーブルを変更したり、新しいファイルシステムに異なるブロック サイズを選択したりした場合は、数値を再計算する必要があります。

関連情報