いつでも電源が切れても安全にSDカードを使用する


10

私たちは、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の消去ブロックがある場合)。


1
「うまくいけば、SDカードはそれほど愚かではない…」<--- ROFLOL。ありそうもない!
derobert、

問題の完全な解決策が見つかるまでsync、SDカードに書き込むたびにコマンドを使用します。RAMに保存せずにビットを変更または作成した後、ビットを書き込みますので、少なくともカードに変更が反映されます。停電で消えることはありません。
ハナンN.

syncメタデータが更新中の時間の割合が増えるため、問題がさらに悪化する可能性があります。
Ben Voigt

回答:


5

これを修正する方法は、「いつでも電源を切ることができる」問題を修正することです。バッテリーの電力を1分でも追加することは不可能ですか?

あるいは、2つのSDカードを使用することもできます。1つのカードにデータを書き込み、同期し、もう1つのカードに書き込みます。データの各ブロックにはチェックサムとブロック番号が必要ですが、かなり不運な停電があったとしても、カードの1つは正しいはずです。

あなたの基本的な問題はSDカードの損耗平準化であり、これはAFAIKがカードベンダーに依存している(そしてバッチでさえ、それらはいつでも変更できる)。おそらく停電は正しく処理されません。そして、それが何をするかによっては、書き込み中のブロックを破壊するだけではないかもしれません。

  1. 非常に小さいカード、つまり3(フラッシュ)ブロックを想定します。ブロック1は2または3より多くの書き込みを受信しました。物理ブロックは番号で、論理ブロックA、B、Cは文字で呼びます。現在、A = 1、B = 2、C = 3です。
  2. ブロックAに書き込みを発行します。SDカードはアハみたい!ここではウェアレベリングが必要です。それ以外の場合、ブロック1は2と3の前に摩耗します。ブロック1と2を交換することにします。
  3. ブロック1をRAMの位置i(システムRAMではなくSDカード上)に読み込みます。変更したい部分を更新します。
  4. ブロック2をRAM位置iiに読み込みます。
  5. ブロック1を消します
  6. RAM位置iiをブロック1に書き込みます。
  7. B = 1となるようにマッピングテーブルを更新します
  8. ブロック2を消去します。
  9. RAM位置iをブロック2に書き込みます。
  10. マッピングテーブルを更新して、A = 2と表示します。

もちろん、「マッピングテーブルを更新する」ことは必ずしも簡単なことではありません。また、5〜10の順序は異なる場合があります(すべてが完了している場合は問題ありません。消去は書き込みの前に行う必要があります)。しかし、停電が発生すると、Aが(予想どおり)破損するだけでなく、Bも破損する可能性があります。または、マッピングの更新中に停電が発生した場合、どのような破損が発生するかは誰が知っていますか。


1
これらのユニットは、長年にわたって比較的過酷な環境に置かれている必要があり、取り付けられると、バッテリーを認定する必要がないさまざまな国に出荷されます。バッテリーを使用する前に、MMC / SDを落として独自のNANDフラッシュソリューションを構築することになるでしょう。
darron

さて、私たちの場合、「「いつでも電源を切ることができる」という解決策」の解決策は、「トラックの運転手が車輪の後ろで眠りに落ちて私たちのデバイスを運転するのを止める」ことになります。「トラックがそれに衝突した」というのは、実際には最も一般的な故障モードに関するものです。
SF。

1
1分のバッテリー電源は必要ありません。SDカードを安全にアンマウントするために必要な電力量は、コンデンサーが保存できる範囲内である必要があります。
Ben Voigt 2013年

4

同様のことがelectronics.stackexchange.comで説明されています予期しない電源障害からSDカードを保護するにはどうすればよいですか?

ソフトウェアソリューションと連携して機能する横向きの答えは、ハードウェアを調べることです(これについてもESEで質問がありましたが、今は見つかりません。SDカードについては厳密ではなく、デバイスの電源が失われたときについてのみです)これを検出して対処する方法)。

簡単な話ですが、バッテリーの電力がないかもしれませんが、電源には電源をスムーズにするためのかなり大きなコンデンサーがいくつかあります。基本的に、力はただ消えるだけではありません。電圧は徐々に低下します。電圧が特定のポイントを下回ると、組み込みシステムのRESET信号をアサートする電圧低下保護IC /回路がおそらくあります。PCマザーボードにもこれらがあり、PSUからの「POWEROK」信号に応答します。これは、電源が切れたときに、電圧が安全なレベルを下回る前に、コンピューターが数ミリ秒強制的に停止されることを意味しています。この間、SDカードなどの周辺機器はまだ電源が入っていますが、コンピューターからのトランザクションはありません。

SDカードの電源が切れる前に、ウェアレベリングを含む保留中のトランザクションを完了するのに十分な時間がSDカードにある可能性が非常に高いです。十分な大きさのコンデンサで電源を改善するか、SDカードの近くにあるコンデンサを使用すると、これを確実にできますが、いつでもプラットフォームをそのまま試すことができます。十分な時間パワーを保持している可能性が高いです。

問題のハードウェアの側面に問題がない場合は、ソフトウェアのみの問題を解決できます。derobertの冗長性のために2つのカードを使用するという考えは悪くありません。VFATのような標準ファイルシステムを使用すると、カードの損耗均等化アルゴリズムを混乱させるリスクが少なくなります。

とにかく、それはあなたがそれほど多くの問題を抱えることはないでしょう。カードのブロックが100回の書き込みに耐えることができると仮定して(控えめですが、高品質のカードを入手するようにしてください!)、8 GBのカードを使用すると、最初のブロックが終了するまでに800 GBが書き込まれます(もちろん、統計的には)。


電源オフのイベントでSDカードが大規模に破損しているため、質問が始まりました。かなり頻繁に、実際に。おそらく、20回に1回の停電イベントは壊滅的であり、おそらく4回に1回は少なくともいくつかの損傷がありました。最終的には、1日分のデータを内部NANDフラッシュに保存し、真夜中にSDにコピーするように変更しました(1秒程度の操作)。将来的には改善したいと思っています。私はすでにレールに400uF相当のキャップを持っています...十分ではないようです...どうやら...おそらく電圧低下は適切に処理されていません。
ダロン

それはかなり高い発生率です!オシロスコープのプローブを入手して、実際の動作を確認する時間です。ソフトウェアで回避できる可能性が高いですが、電力消費の観点からは、ハードウェアの不具合が発生しないようにすることが最善の方法です。多分あなたはあなたの賭けをヘッジし、electronics.stackexchange.comにも尋ねることができますか?
Alexios

@ darron、SDカードのストレージの問題に対してどのような解決策をとりましたか?まだNANDFlashに書き込んでいて、1日1回コピーしていますか?SDカードをメインのRFS(個別のNANDFlashなし)として設計していて、突然の電源障害状態の有無にかかわらず、データ破損の問題が発生しています。
フレッドバセット、2014

4

SDに問題があり、予期しない電源障害でext2ルートファイルシステムが破損しています。まず、読み取り専用のルートマウントでシステムを実行します。書き込み可能なストレージが必要だったため(ただし、データロギングではなかった)、2番目のパーティションを書き込み可能として設定しました。予期しない電源障害によるFSの損傷を最小限に抑えるために、これをext3パーティションにしましたが、これにより、カードへの物理的な書き込みが少なくとも2倍になります。この組み合わせ(ただし、2番目のパーティションの書き込みはデータロガーと比較して頻度が低いことは認めています)は問題なく実行されているようです。これまでのところ。(専門施設に約30ヶ月設置されたシステム)


3

停電の可能性がある環境でのデータセキュリティと全体的なデータセキュリティについては、さらに多くのポイントを考慮する必要があります。

ストレージにMLCセルを使用しないでください。SLCのみが十分なデータ保持時間を持っています。次に、これらのSLCカードはスマートファームウェアを搭載できます。一部の状態では、電力損失によって破損することはありません。彼らは、最後のブロックが完全に書かれていることを測定して保証することにより、電力カットを認識します。

これらのカードは、MLCセルよりも高価で少し遅いです。カードについては、スイスビットのようなベンダーをご覧ください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.