|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@ | 空きクラスタにディレクトリ・エントリを作成 |
このタイミングで電源瞬断が発生しても,空きクラスタがゴミになるだけで,ファイル・システムへの影響はありません. |
A | FATチェーンを更新する.ただしチェーンの逆順に更新する |
たとえば既存のFATチェーンは,#10→ENDで,新たにクラスタ#11をつなごうとした場合, まず,FATエントリ#11にENDマーク書き込んだのち,エントリ#10に11の数字を書き込みます. かりに途中で電源瞬断が発生しても,チェーンの後半がゴミになるだけで,ファイル・システムには影響がおよびません. |
◆ファイル/ディレクトリの削除の場合 |
− | 使用済みディレクトリ・エントリのみが入っているクラスタが存在しない場合は, FAT更新が生じず,ディレクトリ・エントリの更新が一回で済むので,電源瞬断への特別な配慮が不要です. |
− | 使用済みクラスタが出てきた場合は,以下の手順でそのクラスタを回収します. |
既存のFATチェーンが,#10→#11→ENDの例を考えます.今,クラスタ#11にあるディレクトリ・エントリがすべて削除され,
これを回収したい場合, |
@ | FATエントリ#10にENDマークを格納.ここで電源瞬断が発生しても,更新前の状態であるか,FATエントリ#11が宙ぶらりんになる状態です. どれにしても,ファイル・システムへの影響はありません. |
◆データ追加書き込みの場合 |
− | 新たにクラスタを追加しなくてもよい場合は,末尾のクラスタ更新と, ディレクトリ・エントリの更新(ファイル・サイズが変わっているので,それを更新しなければならない)が必要です. 更新順番は以下のようにします. |
@ | 末尾のデータ更新.ここで,電源瞬断が発生しても,ファイル・サイズがまだ古いままのため, 後の書き込みなどで,書かれた部分を無効化することができます. |
A | ディレクトリ・エントリの更新.ここで,電源瞬断が発生しても,@の状態か更新完了の状態であるため, ファイル・システムがダメージを受けたとしても,@で述べたように修復可能です. |
− | 新たなクラスタを用意しなければならない場合は,クラスタ更新,ディレクトリ・エントリ更新にFATの更新も必要になります. 更新順番は以下のようにします. |
@ | クラスタにデータを書き込みます.ここで電源障害が発生してもクラスタがゴミになるだけで,ファイル・システムへの影響はありません. |
A | FATチェーンの逆順に従って,FATエントリを更新.既存FATチェーンにリンクする前に電源瞬断が発生した場合は, ファイル・システムへの影響はまったくありません.また,リンク完了した後に落ちた場合,ディレクトリ・エントリにファイル・サイズ情報がまだ残っているため, 後で修復できます. |
B | ディレクトリ・エントリを更新(ファイル・サイズ).更新完了する前に落ちても古いサイズが残っているので,修復可能です. |
◆データ上書きの場合 |
− | クラスタをまたがない上書きは,該当クラスタを更新するだけで処理が済むため,電源瞬断への配慮が不要です. |
− | クラスタをまたぐ場合は,古いクラスタをそのまま更新するのではなく, 新たなクラスタとFATチェーンを作成し,それができた時点で,旧FATチェーンにつなぎ換えます. |
つなぎ換え処理が完了する前に電源瞬断が発生しても旧FATチェーンおよび旧クラスタが何も変更されていないので,
ファイル・システムには影響がありません.つなぎ換え処理が完了したら,自動的に新しいクラスタも有効になるので,旧/新データは混じってしまうことはありません.
◆FAT更新の場合 FATチェーンを伸ばすときはチェーンの逆方向に,縮むときは順方向に行えばファイル・システムに影響が及ぶことはありません. このように,クラスタ書き込み単位でしかデータの安全性を保障しないシステムにおいても, ファイル・システムのがんばりで何とか耐電源障害性を実現することができます. |
電源瞬断による破損 << | >> おわりに |