Linux OSでSDカードをフォーマットし、すべての問題を魔法のように解決するには?
FreeRTOSとFAT-FSを実行するSTM32があります。
私のSDカードが破損し、FAT-FSがこれに対して何もすることができなかったとき、Linuxを介してSDカードをフォーマットすると、すべてが再び機能し始めました。
LinuxでSDカードをフォーマットするには?
FAT-FSは物理エラー(ドライバレベルのエラーであるため、デフォルトではSD内部のUCが期待どおりに応答しない)を意味します。
ベストアンサー1
私は古い携帯電話を持っています。 SDカードに書き込んでおくと、バッドセクタが記録されることがあります。バッテリーが不足しており、携帯電話がSDカードの標準的な電気要件を満たすことができないため、これが起こると思われます。
最新のブロックデバイスでは、誤った論理ブロックが繰り返し読み込まれない可能性があります(チェックサムの不一致)、新しいコンテンツが正常に記録されると「修正」されます。携帯電話でSDカードが破損したときにやるべきことは、カードを再フォーマットすることだけでした。すべてのブロックを書き換える必要はありません(「フルフォーマット」とも呼ばれます)。再フォーマット中および後にファイルシステムはまだ書き込まれていないブロックを読みません(そうする理由はまったくありません)。
このアプローチにはいくつかのリスクがあります。デバイスが実際に永久に破損する可能性があり、フォーマット後一定時間が経過すると問題が再び発生します。これが問題の場合、最も安全な方法は、デバイスまたはパーティションをフォーマットする前に何らかの方法でテストすることです。 (歴史的にはこれを使うべきbadblocks
ですが、今はどれほど良いのかわかりません。)
ファイルブロックが破損している場合は、ファイルを削除または上書きして復元できます。問題は、ファイルシステムの内部構造に不良ブロックがある場合です。通常、ファイルシステムにはデフォルトの初期状態にリセットするコードは含まれていません。データが自動的に失われる危険性が高すぎます。したがって、エラーが持続します。一部のファイルシステムチェッカーは、不良ブロックをリセットするかどうかを尋ねるメッセージを表示する場合があります。
(注:特にLinuxでファイルシステムを削除し、特定の種類のリカバリを実装していないと述べたいくつかのファイルfsck.vfat
システムがありました。Windowsバージョンのファイルシステムはより包括的なものと思われます。)
一部のファイルシステムは、特定の構造をリセットすることなく復元するための冗長コピーの使用をサポートする場合があります。 FATファイルシステムは、たとえばLinuxで回復に使用できる2つの冗長FATで実行される傾向がありますfsck.vfat
。 Ext4は重複した「スーパーブロック」を大量に維持する傾向があります。
私は、btrfsやZFSなどのファイルシステムが、他のデバイス上のすべてのメタデータの重複コピーを維持し、実行中に回復するように構成できることを理解しています。
[このコメントから拡張:カーネルトレースでエラーが発生したSDカードの状態を定義しますか?]