仕 様
emFile Journalingは、ファイルシステムの最上位に位置し、ファイルシステム層をフェイルセーフにする追加コンポーネントです。ジャーナリングサポートを持たないファイルシステム(FATやEFSなど)は、フェールセーフではありません。ジャーナルとは、ファイルシステムがメインファイルシステムにコミットする前にすべての変更をジャーナルに記録し、ファイルシステムの一貫性を保証することを意味します。
・ 非フェールセーフなファイルシステムはフェイルセーフになります
・ 標準的なファイルシステム実装(FATなど)と完全に互換性があります。
・ すべてのストレージソリューションを使用できます。再フォーマットは必要ありません
・ 記憶媒体への複数の書込みアクセスは、ユーザアプリケーション
動作
〈操作理論〉
emFileは通常、FATやEFSなどのフェイルセーフではないファイルシステムで使用されます。データの損失は、ドライバ層またはファイルシステム層のいずれかで発生する可能性があります。通常、ドライバ層はフェイルセーフなので、通常のデータ損失の唯一の場所はファイルシステム層です。ファイルシステムは、電源障害やシステムクラッシュなどの中断された書き込みアクセスによって破損する可能性があります。これは、FATの設計によるものであり、どのベンダーの実装でも同様です。emFile Journalingアドオンは、ファイルシステム層にジャーナリングを追加します。
この追加層の目的は、予期しないリセット後に常に一貫した状態にあるファイルシステムを保証することです。ファイルシステム層に対する操作は、ほとんどがアトミックではありません。たとえば、FS_FWrite()の単一呼び出しは、 新しいファイルにデータを書き込むと、次の3つのストレージレイヤ操作が実行されます。
・ クラスタを割り当てて割り当てテーブルを更新する
・ ユーザーデータを書き込む
・ ディレクトリエントリを更新する
このプロセスで予期しないリセット(停電など)が発生すると、ファイルシステムが破損する可能性があります。このような破損を防ぐため、ジャーナリングアドオンはすべての書き込みアクセスをキャッシュして、ファイルシステムの常に一貫性のある状態を実現します。ファイルシステムに対するすべての変更は、ジャーナルファイルに保存されます。ジャーナルファイルに格納されたデータは、ファイルシステム層の動作が途切れることなく終了した場合にのみ、ファイルシステムにコピーされます。
この手順では、コピープロセスの中断によってデータが失われないため、ファイルシステムの常に一貫性のある状態が保証されます。中断されたコピープロセスは、ターゲットを再起動した後に再開されます。
〈エラーシナリオ〉
エラーの瞬間→ファイルシステムの状態→データ状態
・ ジャーナルは空です→一貫性のある→---
・ ジャーナルに書いている間→一貫性のある→失われた
・ ジャーナルの完成中→一貫性のある→失われた
・ ファイナライズ後→一貫性のある→獲得した
・ ジャーナルからファイルシステムにコピー中→一貫性のある→獲得した
・ コピー処理後、ジャーナルを無効にする前に→一貫性のある→獲得した
・ ジャーナルの無効化中→一貫性のある→獲得した
〈ジャーナリングの使い方〉
ジャーナリングを使用することは、ユーザーの観点からは非常に簡単です。
emFile構成でジャーナリングを有効にします。
ボリュームをフォーマットした後、FS_JOURNAL_Create()を呼び出します。
それでおしまい。他のすべては、emFile Journaling拡張によって行われます。
〈ドライバーのフェイルセーフ〉
ファイルシステム層(FATまたはEFS)またはデバイスドライバ層で予期しないリセットが発生した場合、データが失われる可能性があります。両方のレイヤがフェールセーフである場合にのみ、システム全体がフェールセーフです。ジャーナリングアドオンは、ファイルシステムレイヤがフェールセーフであることを確認します。