2009-05-11 22 views
0

私と私の同僚は、組み込み機器の破損したファイルから回復するための仕組みを実装しようとしています。壊れたファイルから回復する方法は?

これは、特定の状況で発生する可能性があります。ユーザはファイル書き込み中にバッテリを取り外す。

ORZが、今私たちはただ一つの考えている:

  • が重複バックアップファイルを作成し、危険なファイルは、I/Oが正常に終了していない場合は戻ってそれらをコピーします。

これは、バックアップファイルも壊れているかのように、愚かなものです。私たちはただ死んでいます。

これに関する提案や良い記事がありますか?

ありがとうございます。

答えて

0

OSなどに依存しますが、ほとんどの場合、一時ファイル名にコピーし、最後の最後のステップとしてファイル名を正しい名前に変更します。

これは、Opertunity of Potential S **** pの(WOOPS)ウィンドウが、名前変更が行われる間隔に限定されることを意味します。

OSがすばらしいディレクトリ構造をサポートしていて、ファイルをインテリジェントにレイアウトする場合は、新しいファイルを一時ディレクトリにコピーし、ディレクトリ名を変更することでさらに細かく調整できます.WOOPSは、 「ターゲットからターゲットへの名前を変更する」。

これは、OSがソフトリンクディレクトリをサポートしていれば、 "ln -s target temp"にすることができます。ソフトリンクを置き換えているほとんどのOSでは、「アトミック(atomic)」操作になります。この操作は、途方もなく途切れることなく動作します。

これらのオプションはすべて、ファイルシステム上に完全な古いコピーと新しいコピーを保持するのに十分なストレージがあるかどうかによって異なります。

+0

申し訳ありませんが、私は2番目のオプションをよく理解していません。ディレクトリの名前を変更しています。プロとは何ですか?間隔が最初のものよりも長いようです。 – tingyu

+0

2つ目のオプションでは、1つまたは2つのディレクトリで変更される可能性のあるファイルをグループ化することをお勧めします。ファイルよりもディレクトリが少なくなるので、これはより速くなるはずです。 –

1

データベースのログとデータベースのジャーナルファイルを読み上げてください。

データベース(Oracleなど)は、非常に堅牢なファイル書き込み機能を備えています。実際にOracleを使用しないでください。そのデザインパターンを使用します。デザインパターンは、このようなものになります。実際の製品を使わずにこれらのアイデアを借りることができます。

  1. あなたのトランザクション(すなわち、挿入)は、更新するブロックをフェッチします。通常、これはメモリキャッシュにあり、そうでなければ、ディスクからメモリキャッシュに読み込まれます。

  2. "イメージの前"(またはロールバックセグメント)のコピーは、書き込みしようとしているブロックで作成されます。

  3. キャッシュコピーを変更し、仕訳入力を書き、DB書き込みをキューに入れます。

  4. 変更をコミットすると、キャッシュの変更が他のトランザクションから見えるようになります。

  5. ある時点で、DBライターはDBファイルの変更を確定します。

ジャーナルは単純な循環キューファイルです。レコードは単なる構造の変更の履歴です。複数のデバイスに複製することができます。

DBファイルは、より複雑な構造です。彼らは "取引番号"を持っています - 全体的な取引の単純な連続カウント。これは、ブロック(2つの異なる方法)でエンコードされ、制御ファイルに書き込まれます。

優れたDBAは、制御ファイルが複数のデバイスにまたがって複製されることを保証します。

Oracleは起動時に、制御ファイルをチェックして、どちらが正しい可能性が高いかを調べます。その他は壊れている可能性があります。 OracleはDBファイルをチェックして、制御ファイルと一致するものを確認します。ジャーナルをチェックして、ファイルを正しいトランザクション番号まで取得するためにトランザクションを適用する必要があるかどうかを確認します。

もちろん、すべてのジャーナルコピーを書き込んでいる間にクラッシュすると、そのトランザクションは失われます。ただし、ジャーナルエントリが書き込まれた後にクラッシュすると、おそらく問題なく正常に回復します。

メディアを失ってバックアップを回復すると、回復したバックアップファイルにジャーナルファイルを適用して最新の状態にすることができます。それ以外の場合は、古いジャーナルファイルを再生して最新の状態に戻す必要があります。

+0

組み込みデバイスでORACLEが実行されることはほとんどありません:-)しかし、sqliteは、その無料版のように見える価値があり、小さなフットプリントを持ち、一般的には優れたソフトウェアです。 –

+0

ポイントはOracleを使用しないことです。ポイントは、信頼性のためにデザインパターンを借りることです。 –

+0

sqliteのやり方 - http://sqlite.org/atomiccommit.html – tingyu

関連する問題