私たちは、OSおよびアプリケーション用の小型内部NANDデバイス(250-500Meg)とデータ用の8Gb SDHC SDカードを備えたSDカードを備えた小型組み込みLinuxシステム(2.6.35-ish)を開発しています。
いつでもデバイスの電源が切れることがあります。
システムはSDカードにデータを保存する必要があります。このデータは非常に重要です。システムの完全な目的です。これらのシステムは通常、リモートの場所にあるすべてのネットワークから完全に切断され、4〜8週間ごとにスリメネットを介してデータを取得します。
現在はSDカードにVFATを追加するだけです。これは主に最初のテスト顧客がWin7ノートブックに手動でデータを簡単にコピーできるようにするためです。
しかし、今間違った時間に停電が発生してデータが失われるのは時間問題に過ぎないという心配があります。
データの損失を防ぐために、これらのシステムを構成する最良の方法は何ですか? JFFS2は私が望むデータ作成方法のように聞こえますが(パフォーマンス要件はまったく高くありません)、block2mtdなどを使用するのはかなり面倒です。また、カードの摩耗レベリングがどのように相互作用するのかよくわかりません。
最良のアプローチは何ですか?
編集する
これで、ファイルシステムVFATをそのままにして、一度に1日のサイズのファイルを割り当て、0xFFでパディングして電源サイクルエラーのリスクを大幅に制限することを検討しています。その後、事前に生成されたブロックにレコードを追加し、SDカードが0xFF領域に削除/摩耗レベルを記録するほど愚かではないことを願っています。
noatimeを使用できますが、変更された時間フィールドの書き込みを防ぐための同等のVFAT nomtimeはありますか?新しい日のファイルが作成されるまでメタデータの更新を防ぐ方法が必要です。
編集2
Electronics Stack Exchangeの誰かがNANDにもECCデータがあるので、削除の必要性を防ぐ方法がないと思い出しました。
それでは、この場合、block2mtdを介したJFFS2は適切ですか?
編集3
思った以上に悪いです。私が持っているSDカードは、ディスクに同じ内容を書き込んでもデータブロックを消去します。消去ブロックは64KBで、完全に遅延された書き込みには大きすぎます。最大128 KBのデータをNANDフラッシュ(書き込み動作を制御できます)にログ形式で保存し、128 KBのブロックをSDカードのVFATパーティションにある128 KBのソートファイルに書き込みます(他のSDカードに128 KBがある場合)。ブロック削除)。
ベストアンサー1
したがって、この問題を解決する方法は、「いつでも停電が起こる可能性がある」という問題を解決することです。 1分でもバッテリーを補充できませんか?
あるいは、2枚のSDカードを使用することもできます。あるカードにデータを書き込み、同期し、別のカードに書き込みます。各データブロックにはチェックサムとブロック番号が必要ですが、非常に不幸な停電が発生した場合でも、カードの1つが正確でなければなりません。
あなたの基本的な質問はSDカードの摩耗の平準化です。私が知っている限り、カードベンダーによって異なります(バッチ処理でもいつでも変更できます)。停電を正しく処理できない可能性があります。それが何をするかに応じて、これは単に書き込んでいるブロックを損傷する以上の意味を持つかもしれません。
- カードが小さいとしましょう。つまり、3(フラッシュ)ブロックです。ブロック1は2〜3回以上の書き込みを受けました。物理ブロックを数値で、論理ブロックA、B、Cを文字で呼び出します。これでA = 1、B = 2、C = 3です。
- ブロックAへの書き込みを実行します。 SDカードはアハ!ここでは摩耗レベリングが必要です。それ以外の場合、ブロック1は2と3の前に磨耗します。ブロック1と2を交換することにしました。
- ブロック1をRAM位置i(システムRAMではなくSDカード)に読み込みます。変更したい部分が更新されます。
- ブロック2をRAM位置iiに読み込む。
- ブロック1をクリアします。
- RAM 位置 ii をブロック 1 に書き込みます。
- マッピングテーブルをB = 1に更新します。
- ブロック2をクリアします。
- RAM位置iをブロック2に書き込む。
- A = 2を表すようにマッピングテーブルを更新します。
もちろん、「マッピングテーブルの更新」は必ずしも単純ではありません。 5-10は順序が異なる場合があります(すべて完了すると問題になりません。もちろん、書き込み前に削除する必要があります)。ただし、停電が発生すると(予想どおり)、AだけでなくBも損傷する可能性があります。または、地図の更新中に停電が発生した場合、どのようなダメージが発生する可能性があるのか、誰が知っていますか?