web-dev-qa-db-ja.com

SDカードの破損防止

私の組み込みLinuxデバイスは、特定の診断データを保存するためにSDカードを使用していますが、内部フラッシュには多すぎます。

問題は、デバイスが予期せずオフになっている場合、カードのファイルシステム(FAT32)が破損していることです。

予期しない停電やユーザーがそのように電源を切るのを防ぐ方法はありません。デバイスは比較的メンテナンスフリーである必要があります。さらに悪いことに、データは継続的に書き込まれるため、破損が非常に頻繁に発生し、Linuxは障害を検出するとFSは、データを読み取り専用でサイレントに再マウントします。

これを軽減するためにどのような方法を提案しますか?起動時にfsck.vfatを自動的に実行するだけで十分ですか?

さらに詳しい情報:

  • カードはユーザーが取り外し可能とは見なされません。内蔵ディスクと考えてください。そこに保存されているすべてのデータは、ネットワーク経由またはUSBドライブにダウンロードしてアクセスでき、システムは最も古いエントリを自動的に削除します。つまり、平均的なPCで読み取り可能である必要はありません。
  • システムは現在、FAT、yaffs、およびjffs2をサポートしています。カーネルに他のファイルシステムを追加することは可能ですが、他の方法が存在する場合は、それらを最初に使用することをお勧めします。
  • データを失うことなく、数分間でもオンデマンドで書き込みを中断できます。
  • 部分的なデータ損失または軽微な破損は許容されます。ロギングの完全な停止はそうではありません。
  • ほとんどの場合、電源オフイベントは完全に予測不可能です。
  • システムはARM9、200MHZ、64MB RAM、32MB内部フラッシュで実行されており、その主要な役割のためにCPUパワーのほとんどを消費します。派手なリソースを大量に消費するソリューションを考えるときは、これを考慮に入れてください。
11
SF.

block2mtdドライバーを使用して、SDカードの他の場所で使用していると思われるトランザクションjffs2またはyaffs(2)ファイルシステムを使用できます。これにより、電源オフ時のデータ損失またはファイルシステム破損の問題が解決されます。

ただし、そうすると他の問題が発生する可能性があります。 SDカードには、ウェアレベリングとセクターの再マッピングのための独自のメカニズムがある可能性が高いため、これらはjffs2とyaffsの実装を妨害して、SDカードの寿命やパフォーマンスを低下させる可能性があります。これが問題ではない場合は、試す価値があります。

8
the-wabbit

使用しているカーネルがvfatのフラッシュや同期フラグをサポートしているかどうかを確認します(一部のバージョンでは無視されているようです。注意してください)。

または、ファイルシステムを完全に廃止するすべてを1つのファイル(生のログストリームの場合のように!)またはいくつかの固定サイズのファイル(パーティションを使用;)に入れることができる場合

5
rackandboneman