Fugue Kyoto Software Research, Inc.
製品概要
コンセプト
ユースケース
技術情報
Fugueだけではなく、フラッシュメモリやフラッシュファイルシステムについて解説などを掲載しています。
 はじめに
 フラッシュとは
 NAND型フラッシュの
 リードライトのパフォーマンス
 不良ブロックの処理
 ビット・エラーとECC
 メモリ・マッピング
 リクラメーション
 ウェア・レベリング
 フラッシュファイルシステムと
 FATファイル・システムの
 電源瞬断による破損
 電源瞬断対策
 おわりに
パートナ
お問合せ
top >  技術情報 >  「Interface」 2004年12月号
電源瞬断対策
   電源瞬断への対策として,以下の二つの方法を考えます.

フラッシュ・ドライバに,クラスタ単位ではなく,一連の書き込みに対してもデータの健全性を保障する機能を盛り込む方法

クラスタ単位書き込みのみでデータ健全性を保障し,ファイル・システムがダメージを受けても,破壊されないように更新手順を配慮する方法

  ■ 一連の書き込み保障方法
   この方法では,フラッシュ・ドライバが通常の書き込み処理機能以外に,それまでの書き込みを確定するAPIを提供します. この確定APIが呼ばれる前に電源瞬断が発生しても,それまでの書き込みは単なるゴミ扱いとされ,ファイル・システムが影響を受けません.フラッシュ・ドライバが, このAPIの実行中に電源瞬断が発生しても新旧の状態が識別できるように実装されれば,ファイル・システムの耐電源障害性が保障されます.

  ■ クラスタ単位書き込み保障方法
   この方法では,ドライバがクラスタ書き込み単位でのみデータの健全性を保障します.

   この場合,既述のようにファイル・システム変更操作は,記憶メディアに対して複数回にわたって書き込みを行うため, 処理中に電源瞬断が発生すると,論理構造が崩れてしまいます.以降,論理構造が崩れても, ファイル・システムへのダメージを最小限にする方法を紹介します.


◆ファイル/ディレクトリの作成の場合

   − 新たなクラスタを追加する必要がない場合は,一つのクラスタ更新で済むため,特別な配慮が不要です.

   − 新たなクラスタを追加する必要がある場合は,書き込み順番は以下のようにします.

      @ 空きクラスタにディレクトリ・エントリを作成

   このタイミングで電源瞬断が発生しても,空きクラスタがゴミになるだけで,ファイル・システムへの影響はありません.

      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チェーンを伸ばすときはチェーンの逆方向に,縮むときは順方向に行えばファイル・システムに影響が及ぶことはありません.

   このように,クラスタ書き込み単位でしかデータの安全性を保障しないシステムにおいても, ファイル・システムのがんばりで何とか耐電源障害性を実現することができます.
   
電源瞬断による破損 << >> おわりに