私たちは、OSとアプリケーション(250-500Meg)用の小さめの内部NANDデバイスとデータ用の8Gb SDHC SDカードを備えたSDカードを備えた小さな組み込みLinuxシステム(2.6.35-ish)に取り組んでいます。
ユニットの電源はいつでも切ることができます。
システムはSDカードにデータを保存する必要があります。このデータはかなり重要です...それはシステムの全体的な目的です。システムは通常、遠隔地のネットワークから完全に切断されており、データは4〜8週間ごとにスニーカーネット経由で取得されます。
現在、SDカードにVFATが含まれています。これは主に、最初のテストクライアントが簡単に手動でWin7ラップトップにデータをコピーできるようにするためでした。
しかし、私は今、間違った時間に停電が発生してデータが失われるまでは時間の問題だと心配しています。
データの損失を防ぐためにそのようなシステムを構成する最良の方法は何ですか?JFFS2は、データの書き込み方法に関しては私が望んでいるように聞こえます(そして、パフォーマンスのニーズはまったく高くありません)が、block2mtdを使用するのはかなり慎重に聞こえます。それと。
これを行う最良の方法は何ですか?
編集
私は今、ファイルシステムVFATを残して、一度に0xFFで満たされた日サイズのファイルを割り当てることを考えています。これにより、電源サイクルの障害の発生を大幅に制限できます。その後、事前に作成されたブロック内のレコードのみを追加できます。SDカードがそれほど愚かではなく、0xFF領域への書き込み/消去レベルの書き込みができないことを願っています。
noatimeを使用できますが、変更された時間フィールドへの書き込みを防ぐための同等のVFAT nomtimeはありますか?新しい日のファイルが作成されるまで、メタデータの更新をまったく防止する方法が必要です。
編集2
電子スタック交換の誰かが、NANDにもECCデータがあることを思い出させたので、消去の必要性を防ぐ方法はありません。
それで、block2mtdを介したJFFS2はこの状況で適切でしょうか?
編集3
思ったよりひどい。私が持っているSDカードは、ディスクにまったく同じ内容を書き込んでも、データブロックを消去します。消去ブロックは64KBであり、大きすぎて書き込みを完全に遅延させることはできません。NANDフラッシュ(書き込み動作を制御できます)に最大128KBのデータを一種のジャーナルに保存し、SDカードのVFATパーティションにある128KBに整列したファイルに128KBブロックを書き込みます(他のSDカードに128KBの消去ブロックがある場合)。
sync
、SDカードに書き込むたびにコマンドを使用します。RAMに保存せずにビットを変更または作成した後、ビットを書き込みますので、少なくともカードに変更が反映されます。停電で消えることはありません。
sync
メタデータが更新中の時間の割合が増えるため、問題がさらに悪化する可能性があります。