HOME会社概況業務内容開発分野開発事例CANモジュールソフテックだよりお問い合わせ
HOME > ソフテックだより > 第249号(2016年1月6日発行) 技術レポート「Enhanced Write Filter使用時の注意点」

「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。

ソフテックだより(発行日順)のページへ
ソフテックだより(技術分野別)のページへ
ソフテックだより(シーン別)のページへ


ソフテックだより 第249号(2016年1月6日発行)

技術レポート

「Enhanced Write Filter使用時の注意点」

1. はじめに

私はソフテックへ入社して2年の社員で、主にWindowsアプリケーションの開発に携わっています。ある案件でWindows Embedded Standard 7で動作するアプリケーションを開発する機会がありました。
今回のソフテックだよりでは、Windows Embeddedの機能の1つであるEnhanced Write Filterについてご紹介させていただきます。

2. Enhanced Write Filterの概要について

Windows Embeddedは組み込み機器を対象にしたOSで、私が携わった案件ではPLCとPCの通信を中継するアプリケーションを起動する環境として使用しました。突然の停電やオペレーションミスによるHDDやSSDなどのストレージへのファイル書き込み中の電源断によって、ファイルが破損したり、OSが起動しなくなると困るため、突発的な電源断への対策が必要になります。この問題への対策として、Windows EmbeddedにはEnhanced Write Filter(EWF)という機能が提供されています。
EWFは、保護するように指定したドライブに対して書き込みが発生した場合に、RAMや別のドライブに書き込み先を変更するリダイレクトをすることにより、指定したドライブへの物理的な書き込みを抑止する機能です。物理的な書き込みが発生しないため、強制的な電源断にも対応することができます。保護ドライブに対して、物理的に書き込む必要がある場合は、コミット処理というメモリや別ドライブに書き込んだデータを反映する処理を実行する必要があります。
また、その他にも以下の様なメリットがあります。

(1)
CompactFlashやSSDなどの書き込み回数に制限があるメディアを使用する場合に、物理的な書き込みの抑止によりメディアの寿命が伸びる。
(2)
書き込みをリダイレクトするため、CD-ROMやフラッシュなどの読み取り専用メディアからOSを起動することができる。

EWFの構造
図1. EWFの構造

3. Enhanced Write Filterの構成について

EWFはEWFオーバーレイとEWFボリュームの2つの要素で構成されています。

3.1 EWFオーバーレイ

EWFオーバーレイとは、EWFで指定したドライブに書き込みが発生した場合に、書き込み情報がリダイレクトされる領域です。EWFオーバーレイには、EWFで指定されていないドライブやRAMなどが使用されます。

3.2 EWFボリューム

EWFボリュームとは、EWFで保護されているボリュームの数、サイズ、EWFオーバーレイ情報などのEWFに関する構成情報を保存する領域です。EWFボリュームは1つのみ作成されます。EWFによって保護するボリュームが複数ある場合でもEWFボリュームは1つのみとなります。

4. Enhanced Write Filterの動作モードについて

EWFには、上記のEWFオーバーレイとEWFボリュームの2つの要素の配置について、3つの異なるモードが有ります。

4.1 Diskモード

Diskモードでは、保護ドライブとは別のドライブをEWFオーバーレイとし、このドライブの初めにEWFボリュームが保存されます。保護ドライブに対する書き込みは、別のドライブに対して書き込まれるため、再起動後も書き込み情報は保持されています。ストレージに余裕があり、書き込み情報を保存したい場合に使用されます。

Diskモードの構成
図2. Diskモードの構成

4.2 RAMモード

RAMモードでは、RAMをEWFオーバーレイとし、保護ドライブと同じディスク上に別ドライブとしてEWFボリュームを保存します。保護ドライブに対する書き込みは、RAMに書き込まれるため、再起動時に書き込み情報は破棄されてしまいます。ストレージの容量が制限されている場合や読み書きの回数に制限がある場合、書き込み情報を保存したくない場合などに使用されます。

RAMモードの構成
図3. RAMモードの構成

4.3 RAM Regモード

RAM Regモードでは、RAMをEWFボリュームとし、システムのレジストリにEWFボリュームを保存します。保護ドライブに対する書き込みは、RAMに書き込まれるため、再起動時に書き込み情報は破棄されてしまいます。機能的にはRAMモードとほぼ同じですが、対象ストレージがパーティション分割できないCompactFlashなどの場合にも使用することができます。

RAM Regモードの構成
図4. RAM Regモードの構成

5. Enhanced Write Filter使用時の注意点について

私が携わった案件では、使用するPCのストレージがSSDで容量も少なかったため、EWFはRAMモードで使用していました。このため、保護ドライブに対する書き込みはRAMにリダイレクトされており、長期稼動時にWindowsのイベントログの書き込みなどにより、メモリの使用量が増加してしまいました。
上記問題に対して、PCのメモリ使用量削減のため、Microsoft Developer Network(MSDN)(※1)で紹介されていた情報などを元に、下記の対策を行いました。

5.1 イベントログ等の出力先の変更

Windowsのイベントログやシステムのページファイル、一時ファイルなどの出力先が保護ドライブになっている場合は、出力先を保護ドライブ以外に設定すること、もしくは出力しないようにすることで、RAMへリダイレクトを抑止し、メモリの使用量を削減することができました。

5.2 ディスク最適化の無効化

ディスクの最適化サービスが有効になっている場合、ディスク上のデータが再編成され、連続したデータのセクションが作成されます。これによってデバイスの起動時間は短縮されますが、不要な情報がEWFオーバーレイに追加されてしまいます。RAMへのリダイレクトを抑止するため、ディスク最適化を無効化することにしました。

5.3 前回アクセス時のタイムスタンプの無効化

ファイルシステムにNTFSを使用している場合は、4GB以上のファイルを扱うことができる、ファイルの暗号化や圧縮ができるなどのメリットが有ります。ただし、NTFSではファイルにアクセスするたびに、アクセス日時を更新する機能が有効になっている場合があり、更新のたびにRAMにリダイレクトされてしまうため、前回アクセス時のタイムスタンプを無効化することにしました。

5.4 プリフェッチの無効化

プリフェッチが有効になっている場合、利用したプログラムなどのデータを蓄積し、事前にメモリにデータを読み込んでおくことで、アプリケーションの起動などを高速化することができます。ただし、起動ドライブを保護ドライブとしている場合、再起動した際に、プリフェッチで蓄積したデータを保持しておくことができませんし、RAMにリダイレクトされてしまうため、メモリの使用量も増えてしまいます。このため、プリフェッチを無効化しました。

5.5 システムの復元の無効化

システムの復元が有効になっている場合、復元ポイントがRAMにリダイレクトされてしまうため、システムの復元の機能を無効化しました。

6. おわりに

今回はEWFの機能の概要と使用する上での注意点について紹介させていただきました。
Windows Embeddedは「組込み機器を扱う特定の業種のみで使用するOS」のようなイメージが有るかもしれませんが、情報漏えい対策を目的に、シンクライアント端末として利用するケースが増えてきています。シンクライアント端末とは、実際の処理はサーバーに実行させ、自身は最低限の機能のみ持っているクライアント端末のことで、セキュリティ上の理由からローカルのストレージにデータを残さないようにすることが要求されます。通常のWindows OSでこの条件を満たすことは難しいですが、Windows EmbeddedのEWF機能ならば容易にこの条件を満たすことができます。
今回紹介した内容がWindows Embeddedを使用する際の参考になれば幸いです。

(Y.O.)

[参考]
・『MSDN EWFのパフォーマンスに関する考慮事項』※1
https://msdn.microsoft.com/ja-jp/library/bb521645.aspx
・『MSDN EWFの概要』
https://msdn.microsoft.com/ja-JP/library/bb521577.aspx

関連ページへのリンク

関連するソフテックだより