フラッシュファイルシステム「Fugue」 - 技術情報 フラッシュ・メモリの基礎と電源障害に強いファイル・システムの構築 - 電源瞬断による破損
|
|
top >
技術情報 >
「Interface」 2004年12月号
|
電源瞬断による破損
|
ファイル・システムの変更操作はおおむね下記のとおりです
●ファイル,ディレクトリ作成
●ファイル,ディレクトリ削除
●ファイル追加書き込み
●ファイル上書き書き込み
それぞれの場合について,電源瞬断による破損の内容を見てみましょう.
|
|
|
作成処理は,親ディレクトリのクラスタに新たなディレクトリ・エントリを追加することです.以下の場合が考えられます.
|
● |
親ディレクトリのクラスタにまだ未使用または再利用可能なディレクトリ・エントリがある場合は,
そのディレクトリにファイル名などのデータを書き込むだけで処理が完了します.この場合,クラスタのみを更新すればよいのです. |
● |
親ディレクトリのクラスタに使用できるディレクトリ・エントリがない場合は,
新たにクラスタを設けなければならないので,クラスタの新規書き込みおよびFATの更新が必要になります. |
● |
新設するディレクトリ・エントリがロング・エントリ(ファイル名称が長く 32バイトのディレクトリ・エントリに収まらない場合,
連続したディレクトリ・エントリを使ってファイル名称を格納するためのもの)で,親ディレクトリのクラスタをまたがってしまう場合は,
クラスタ更新(または新設)が2回必要です.さらに,クラスタ新設が必要な場合は,FATも更新しなければなりません. |
| | |
このように,ファイルやディレクトリを作成するとき,NAND型フラッシュへの書き込みが複数回にわたって実行されることがわかります.
フラッシュのドライバが,一回の書き込みに対して,耐電源障害性を保証するだけでは,複数回の書き込みの間に電源瞬断が発生すると,
論理構造が崩れる可能性があります.
|
|
ファイルやディレクトリ削除の場合は,ディレクトリ・エントリに削除マークを入れることのみで済みます.したがって,通常の場合,
所属するクラスタの1回のみの更新で処理が完了します.ただし,たとえば一度にたくさんファイルを作成し,親ディレクトリのクラスタ数が二つ以上になったとき,
ファイルを削除処理においてディレクトリ・エントリに削除マークを入れるだけでは,
すべてのディレクトリ・エントリが削除されたクラスタがむだな領域となってしまう恐れがあります.このようなクラスタを回収する処理は,FAT更新処理を含むため,
後述するように,書き込み単位でのデータの安全性を保障するドライバでは耐電源障害性を保つことが難しいのです.
|
|
|
この処理は,ファイルにデータを書き込むことです.以下の場合が考えられます. |
● |
書き込みデータ・サイズが十分小さく,新たにクラスタを用意しなくてもよい場合は,
データ・クラスタの更新とディレクトリ・エントリ内に書かれているサイズ情報を更新しなければなりません.
書き込みが複数回に渡るので,電源の瞬断でファイル・システムがダメージを受ける可能性があります. |
● |
新たなクラスタを用意しなければならない場合は,クラスタ更新,ディレクトリ・エントリ更新にFATの更新も必要になります.
ここもやはり,書き込みが複数回にわたるため,電源の瞬断への配慮が必要です. |
|
|
この処理は,ファイルの既存データに新たなデータを上書きすることです.上書きであるため,FAT更新も,
ディレクトリ・エントリ更新も必要ないのですが,電源瞬断への配慮が必要です.なぜなら,上書き範囲がクラスタをまたがる場合は,更新が複数回に渡ることになり,
すべてのクラスタ更新が完了しないうちに電源瞬断が発生すると,それまで更新されたクラスタは新しいデータを,
更新されていないクラスタは古いデータを持つことになり,いわゆる新旧データの混合状態になってしまいます.
|
|
|
FATを更新するときに,更新するエントリの数が2以上で,フラッシュへの書き込み回数が複数回にわたると,
更新が完了するまでの電源の瞬断でFATチェーンが切れてしまう可能性があります.
上述のように,FATファイル・システムにおいて,処理内容によって,フラッシュへの書き込みが複数回にわたることになり,
途中での電源の瞬断でファイル・システムの論理構造が崩れてしまいます.つぎに,これらの場合への電源瞬断対策について述べます.
|
|
|
|
|