MD4Ram - Multi Device Driver for R.A.M. Version 1.02a edition #02
(C) Copyright 2005,2006, taro


1-1  概要

 MD4RamはDVD-RAMドライブ等のリムーバブルディスクやRAMディスク、イメージ ファイル等、様々なデバイスを組み合わせて利用できるWindows 2000/XP用 ソフトウェアRAIDドライバです。
 以前からLinuxではDVD-RAMドライブを使ったソフトウェアRAIDを使って いましたが、Windows上でも利用したいということから、このトライバを開発 しました。
 MD4Ramを使えば複数のDVD-RAMドライブを束ねて、1台の容量の大きなドライブ として使うことができます。DVD-RAMドライブが2台あれば約9Gバイト、4台あれば 約18Gバイトのストレージとして利用可能です。しかも、ストライピングにより読み 書きの速度も高速化されます。
 ハードディスクやネットワーク共有ドライブに格納したファイルを仮想ディスク として利用したり、RAMディスク、仮想CD/DVDドライブ機能も備えています。また、 これらのデバイスを組み合わせてRAID(JBOD/ストライピング/ミラーリング)を 構築することが可能です。
 たとえば、2層DVD等の4.7Gバイトを超えるISOイメージをDVD-RAMドライブを2台 使ったストライピング・ドライブに格納して、仮想CD/DVDドライブから利用すると いったことが可能です。MD4Ramの仮想CD/DVD機能は簡易的なものなので、別の仮想 CD/DVDソフトウェアと組み合わせて使うことも可能です。
 その他、以下のような機能・特長を備えています。

*1  いったんフォーマットしてしまえばNTFSが使える環境もありましたが。
*2  Panasonic/B.H.A. DVD-RAMドライバ。
 Windows 2000環境でDVD-RAMとMD4Ramを使うためにはDVD-RAMドライバは必須です。
*3  GUI版MD4Ram Managerはドキュメントが用意できていません。 ここではコマンドプロンプト用のMD4RCtlコマンドを使って説明しています。

 MD4Ramは使い方を誤るとディスクに格納されているファイルやデータを完全に消してしまいます。
 作者はこのプログラムを使用したことによって生じた損害はまったく保証できません。
 プログラムの動作や内容を十分理解した上で、自己責任の上でご利用ください。


  目次


1-2  ファイル構成

md4ram.htm 説明(本ファイル)
md4ram.reg ドライバ インストール用レジストリ登録エントリ
md4ram.sys ドライバ プログラム
md4rctl.exe 制御コマンド プログラム
md4rman.exe MD4Ram Manager GUI版制御プログラム
md4rman.htm MD4Ram Manager 簡易説明ファイル


1-3  実行環境


1-4  使用、転載、再配付について

 このプログラムの著作権は作者が保持しています。
 以下の条件に従って自由に使用してください。

  1.  著作権表示を変更しないこと。
  2.  このプログラムを使用したことによって生じた損害はまったく保証しない。
  3.  作者はこのプログラムに不備があっても、それを訂正する義務を負わない。
  4.  収録されているすべてのファイルを一括して配付すること。
 感想・障害報告等、作者への連絡は、

e-mail taro.kobayashi@nifty.com

まで、願いします。
 電子メールでのお問い合わせは返事が遅れたり、あるいは返信のメールが行かないこともありますので、予めご了承ください。
 転載、再配付については作者の許諾を得る必要はありません。


1-5  説明・表記について

 本ドキュメントでは、RAIDドライブを構成するDVD-RAMドライブ/イメージファイル/RAMディスク等を物理デバイス、または単にデバイス(device)と表記します。
 これらの物理デバイスから構成された、RAIDドライブはディスク アレイまたは単にアレイ(array)と表記します。

 コマンドプロンプトやコンソールでの実行例は次のように掲載しています。

C:\> md4rctl  start  array0  x:  --dev  c:\disk.img  --capacity  2G  --cache  ram  --capacity  10M
(省略)

 黄色の下線部分がユーザが入力した内容を表しています。表示の上では、複数行にわたっていても実際には改行せずに1行で入力してください。複数行として表示されている箇所ではスペース(空白)があるので、注意してください。
 入力部の最後に表示している水色の下矢印は、[Enter]キーを押すことを意味しています。この操作でコマンドが実行されます。

 入力内容の直前にあるプロンプトの部分(C:\>)は、環境によって内容は異なります。
 コマンドの実行結果や表示内容は省略することがあります。


2-1  インストール/アンインストール

ドライバのインストール手順

  1. ドライバ プログラムmd4ram.sysをWindowsフォルダ配下のSystem32\Driversディレクトリにコピーする。
  2. 登録エントリmd4ram.regを実行して、ドライバプログラムをレジストリに登録する。
  3. Windowsを再起動する。
 制御コマンドmd4rctl.exeはコマンド プロンプトから利用する、コマンド プログラムです。
 コマンドパスの通った適当なフォルダにコピーして格納してください。説明の意味がよくわからないという場合は、Windowsフォルダにコピーしてください。
 GUI版制御プログラムmd4rman.exeは適当なフォルダにコピーして実行してください。

ドライバのアップグレード・インストール手順(バージョンアップ)

 新しいバージョンのMD4Ramをインストールする場合は、アレイを停止・削除した状態でmd4ram.sysmd4rctl.exemd4rman.exeを上書きして、Windowsを再起動してください。

ドライバのアンインストール(削除)手順

 MD4Ramで作成したアレイを使用中の場合は停止・削除してから、アンインストールを行なってください。
  1. Windowsフォルダ配下のSystem32\Driversディレクトリにコピーしたドライバ プログラムmd4ram.sysを削除する
  2. レジストリ エディタ(regedit.exe)等を使って、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControleSet\Services\MD4Ram を削除する
  3. Windowsを再起動する。


2-2  バージョンアップ/アップグレードについての注意点

署名ブロックについて

 ver.1.01a#02 から署名ブロックのフォーマットが変更されました(本バージョン1.02a#02の1つ前からです)。
 以前のフォーマットは自動的に認識して利用できますが、アレイ作成時に新しいフォーマットに更新・書き換えします。新しいフォーマットで更新すると、以前のドライバでは署名ブロックは利用できなくなります。

暗号化パスワードについて

 ver.1.01a#02から暗号化のパスワードの仕様が変更されました(本バージョン1.02a#02の1つ前からです)。
 キーファイルによる暗号化は新しいバージョでもそのまま利用できますが、パスワードによる暗号化を使用している場合、新しいバージョンでは利用できません。
 以前のバージョンでパスワードによる暗号化を使用している場合は、アレイを作成し直して下さい。
 アレイの内容を移行するためには、いったん以前のバージョンを使ってアレイ内容をバックアップしてください。ドライバをアップグレードして新しいアレイを作成し、アレイ内容はバックアップから復旧してください。


2-4  あると便利なソフトウェア

 MD4Ramを使う際、以下のプログラム/ソフトウェアをそろえておくと便利かと思います。

 いずれも以下のWebページからダウンロードして入手できます。
http://www.runser.jp/softlib.html

 DVD4RAMには、DVD-RAMメディアを消去・初期化する機能があります。ディスク消去はMD4RamでDVD-RAMを使うには、必須ともいえる機能です。
 DevTestはコマンドプロンプト用のプログラムですが、ハードディスク、CD/DVDドライブ等の様々なドライブ情報を表示できます。
 たとえば、「devtest disk」として実行すれば、MD4RCtlに指定できる物理ドライブ番号(disk0等)が表示されます。
 ドライブの指定セクタのデータ内容をダンプ表示して確認することもできます。たとえば、「devtest C: --dump 0」とするとCドライブのMBR(マスターブートレコード)の内容が表示されます。


3-1  チュートリアル - MD4Ramの使い方

 MD4Ramの制御プログラムにはGUI版MD4Ram Managerとコマンドプロンプト用MD4RCtlがありますが、このチュートリアルではMD4RCtlを使って説明します。

 MD4Ramの制御コマンドMD4RCtlはコマンドプロンプトから操作します。
 MD4RCtlはコマンドプロンプト用のプログラムです。まずはコマンドプロンプトを開いてください。通常、[スタート]メニューから[すべてのプログラム](または「プログラム」)→[アクセサリ]→[コマンドプロンプト]を選択すると開きます。

※ 準備

 安全のため、MD4Ramドライバは自動的には開始しないように設定してあります。
 MD4Ramドライバサービスを開始するには、コマンドプロンプトから

C:\> net  start  md4ram

と入力して[Enter]キーを押してください。GUI版MD4Ram Managerを使う場合は、[Tool - ツール]メニューから[Driver service - ドライバ サービス]→[Start - 開始]を選択してドライバ サービスを開始できます。
 自動的にMD4Ramドライバを開始したい場合、レジストリの変更が必要です。収録している登録エントリmd4ram.reg 中に記述されている「"Start"=dword:00000003」という箇所を「"Start"=dword:00000001」に書き換えて、md4ram.regを実行してください。この変更により次回Windows起動時からMD4Ramドライバは自動的に開始されます。


  パート I:アレイディスクを作成する

●容量10MバイトのRAMディスクを作成する

 Xドライブに10MバイトのRAMディスクを作成します。
 次のように入力して最後に[Enter]キーを押してください。

ex.1.1/2-3
C:\> md4rctl  start  array0  x:  --dev  ram  --capacity  10M
 --capacityオプションの「10M」のメガを意味する M は大文字で指定してください。
md4rctlはアルファベットの大文字と小文字は同じものとして区別しませんが、
サイズ指定のK(キロ)、M(メガ)、G(キガ)は大文字と小文字で意味が異なります。

 「Continue (Y/N) ?」と尋ねてくるので、[Y]キーを押してください。
 これでRAMディスクは作成されましたが、フォーマットされていないので、このままではファイルの読み書きはできません。
 OSや環境によってはマイコンピュータやエクスプローラからフォーマットできないことがあります。その場合、コマンドプロンプトからWindows標準のFormatコマンドを使ってフォーマットしてください。
 Formatコマンドを使う場合は、たとえば次のようにします。
 NTFSを使いたい場合は「/fs:fat」のところを「/fs:ntfs」に変更してください。

ex.1.2/2-3
C:\> format  x:  /fs:fat

 Xドライブのアレイを削除する場合は、次のようにします。

ex.1.3/2-3
C:\> md4rctl  stop  x:

 RAMディスクはアレイを削除すると、ディスク内容は消えてしまい後から読むことはできません。

●イメージファイルを使った仮想ドライブを作成する

 MD4Ramではハードディスクなど任意のドライブ上にあるデータファイルを、ディスクドライブとして使うことができます。
 新しいイメージファイルからXドライブにアレイを作成したい場合には次のようにします。
 イメージファイルのパスはC:\disk.img、容量は100Mバイトとします。

ex.1.4/2-3
C:\> md4rctl  start  array0  x:  --createfile  --dev  c:\disk.img  --capacity  100M

 新しく作成したイメージファイルはRAMディスクと同じで、フォーマットされていません。
 formatコマンドを使ってNTFSでフォーマットするには次のようにします。

ex.1.5/2-3
C:\> format  x:  /fs:ntfs

 Xドライブのアレイを削除する場合は、次のようにします。

ex.1.6/2-3
C:\> md4rctl  stop  x:

 RAMディスクと異なり、アレイを削除してもイメージファイル(この例ではC:\disk.img)はそのまま残っていますので、再度アレイを作成すると以前の状態のまま使うことができます。
 もう一度、アレイを作成したいときは、次のようにします。

ex.1.7/2-3
C:\> md4rctl  start  array0  x:  --dev  c:\disk.img

 既存のイメージファイルからアレイを作成する場合は、--createfileオプションや--capacityオプションは必要ありません。
 また、以前にフォーマットしたアレイであれば、再度フォーマットを行なう必要はありません。

 これまで説明したようにMD4Ramの操作の基本的な手順は、次のようになります。

  1. md4rctl startでアレイを作成
  2. formatコマンドやマイコンピュータ/エクスプローラからFATやNTFSでフォーマット
  3. 不要になったアレイはmd4rctl stopで削除

  パート II:複数のデバイスを組み合わせたアレイディスクを作成する

●RAMディスクとイメージファイルでミラーリング

 MD4Ramは種類の異なるデバイスを組み合わせてアレイが作成できます。
 ここではRAMディスクとイメージファイルでミラーリングする方法を紹介します。
 通常、RAMディスクはアレイを削除したりWindowsを終了すると内容は消えてしまいますが、ハードディスク上のイメージファイルとミラーリングすることで、内容を保持することが可能となります。
 書き込みはRAMディスクとイメージファイルの両方に書き込みするので遅くなりますが、読み込みについてはRAMディスクを優先的に使うことで高速化できます。
 作成するアレイはXドライブ、容量10Mバイト、イメージファイルはC:\ramdisk.imgとして作成するものとします。

ex.2.1/2-3
C:\> md4rctl  start  array0  x:  --array  mirror  --dev  ram  --capacity  10M  --primary  --dev  c:\ramdisk.img  --createfile  --capacity  10M

 少しパラメータが長いですが、イメージファイルc:\ramdisk.imgが既に作成済みなら、次のようにできます。

ex.2.2/2-3
C:\> md4rctl  start  array0  x:  --array  mirror  --dev  ram  --capacity  10M  --primary  --dev  c:\ramdisk.img

 --primaryオプションは、優先的に読み込みを行なうデバイスを指定するものです。

 後は、パート Iでの説明と同じようにXドライブをFAT/NTFSでフォーマットしてから利用してください。

 誤ってアレイを削除したりPCの電源を切ってしまったときに、イメージファイルC:\ramdisk.imgからデータを取り出したいときは次のようにします。

ex.2.3/2-3
C:\> md4rctl  start  array1  y:  --dev  c:\ramdisk.img

 パート Iでの説明とまったく同じですが、ramdisk.imgをYドライブに割り当てアレイを作成します。これでYドライブからデータが読み取れます。

 補足ですが、RAMディスクはアレイ作成直後は必ず初期化されているので、再びramdisk.imgとミラーリングしてもフォーマットしてからでないと利用できません。つまりアレイを構成するデバイスにRAMディスクを加えるとフォーマットしてからでないと利用できないことになります。
 これでは不便ですが、再びRAMディスクにデータを戻す方法もあります。
 一番、安全で確実なのは、もうひとつアレイを作成してすべてのファイルをコピーする方法です。

 たとえば、ex.2-3/2.2 はデータ取り出し用にYドライブのアレイを作成しましたが、もう一度ex.2.1/2-3のようにXドライブを作成してYドライブからXドライブにファイルをすべてコピーすればいいわけです。
 ただし、同じイメージファイルc:\ramdisk.img を複数のアレイから使うことは危険なので、Xドライブには別個のイメージファイルramdisk2.imgを使います。
 たとえば、次のようにXドライブのアレイを作成します。
 Xドライブはarray0、Yドライブはarray1を指定している点に注意してください。

ex.2.4/2-3
C:\> md4rctl  start  array0  x:  --array  mirror  --dev  ram  --capacity  10M  --primary  --dev  c:\ramdisk2.img  --createfile  --capacity  10M

 これでXドライブが作成できるのでフォーマットした後に、先ほどのYドライブからXドライブにファイルをコピーしてください。

 md4rctlのWriteコマンドを使って、ダイレクトにイメージファイルの内容をアレイに書き戻す方法もあります。この方法ではYドライブのアレイは作成する必要はありません。
 ex.2.4/2-3でXドライブを作成した後に次のようにします(フォーマットの必要はありません)。

ex.2.5/2-3
C:\> md4rctl  write  x:  --readfile  c:\ramdisk.img

●複数のイメージファイルを連結したディスクアレイを作成する

 MD4RamではLINEAR/STRIPEモードを使うことで、複数デバイスをまとめて容量の大きい1つのドライブとして使うことができます。
 ファイルシステムにFAT32を使っている場合、ファイルサイズは4Gバイトまでという制限がありますが、MD4Ramでは2Gバイトのイメージファイルを4つまとめて、8Gバイトのアレイ ディスクを作成できます。また、アレイ ディスクをNTFSでフォーマットすることで、4Gバイトを超えるファイルも作成できます。
 最初からNTFSにしておけばそんな面倒なことをする必要はないのですが、これは応用例の紹介ですから気にしないように。

 基本的には、パート Iでのアレイの作成方法と同じです。
 2Gバイトのファイルを4つ用意してアレイを作成する場合、次のようにします。

ex.2.6/2-3
C:\> md4rctl  start  array0  x:  --array  linear  --createfile  --dev  c:\part1.img  --capacity  2G  --dev  c:\part2.img  --capacity  2G  --dev  c:\part3.img  --capacity  2G  --dev  c:\part4.img  --capacity  2G

 あとは、お決まりのフォーマットです。
 パラメータが多くて大変ですが、次回からはイメージファイル(今回の例ではpart1.img 〜 part4.img)は作成済みなので、次のように指定できます。

ex.2.7/2-3
C:\> md4rctl  start  array0  x:  --array  linear  --dev  c:\part1.img  --dev  c:\part2.img  --dev  c:\part3.img  --dev  c:\part4.img


  パート III:複数のDVD-RAMドライブを活用する

 MD4Ramを開発するきっかけは、複数のDVD-RAMドライブのストライピンクして使用したいというものでした。
 そういうわけで、ここが本命の機能ということになります。

 ここでは2台のDVD-RAMドライブを活用する方法を紹介しますが、もっとドライブが増えても使い方は変わりません。DVD-RAMドライブが1台しかなくても、ファイルシステムにNTFSが使えるというメリットもあります。
 また、DVD-RAMドライブ以外のリムーバブル ディスクでも同様に利用できます。

 DVD-RAMを使うといっても、これまでに紹介した方法と基本的には同じなのですが、ひとつ注意点があります。
 MD4Ramで使用するリムーバブル メディアは Windowsや標準ドライバからはファイルシステムとして使えないように論理フォーマット(FAT/UDF等)されていない状態のものを使ってください。
 通常の(MD4Ramではない)使用方法でFATやUDFでフォーマットしたメディアについては、先頭から100Kバイト程度ゼロクリアしてしておけば十分ですが、方法が分からない場合は拙作のDVD4RAM(*1)を使って「ディスク消去」してください。
 FATやUDFでフォーマットされたメディアをセットすると、Windowsがこのメディアを使おうとするためにMD4Ramと競合します。

*1 DVD4RAMについては「2-3 あると便利なソフトウェア」を参照してください。

■DVD-RAMドライブでの推奨設定

 DVD-RAMをFAT32フォーマットで使用する場合、MD4RCtlコマンドに--removableオプションを指定してリムーバブルディスクとして作成することをお勧めします。FAT32ではリムーバブルディスクとして扱ったほうが若干パフォーマンスが向上するようです。

 DVD-RAMをNTFSフォーマットで使用する場合、MD4Ramのディスクキャッシュを割り当てたほうがパフォーマンスが向上します。メモリ(RAM)から数10Mバイトから100Mバイト程度をキャッシュを割り当てておけば十分です。キャッシュについては「パート VI:ディスクキャッシュを活用する」を参照してください。

 NTFSはFATよりも強力なファイルシステムですが、読み書きの速度という点では劣ります。速度を優先する場合はFAT32を使ったほうが良いでしょう。
 セキュリティやファイルサイズの関係でNTFSを使用する必要がある場合、アクセス日時の更新を無効に設定しておくことを勧めします。
 通常、NTFSはファイルのアクセス日時を記録しており、読み込みのためファイルアクセスを行なった場合でも更新されます。ファイル数やフォルダ数が多いと、アクセス日時を更新するために全体のファイルアクセス性能が低下することがあります。
 アクセス日時の更新を無効にするにはレジストリ HKLM\System\CurrentControlSet\Control\FileSystem に エントリ NtfsDisableLastAccessUpdate を作成して、DWORD値を"1"を指定します。レジストリを変更後に再起動が必要です。

●DVD-RAMドライブを2台でストライピングしたディスク アレイを作成する

 ここではIドライブとJドライブがDVD-RAMドライブとし、2台でストライピング したXドライブとしてアレイを作成します。
 DVD-RAMドライブにDVD-RAMメディアをセットして、次のように入力します。

 DVD-RAMのアクセスを高速化したい場合、パートIVで紹介しているディスク キャッシュを使うことができます。PCのメモリに余裕がある場合、100Mバイト程 キャッシュに割り当てておくと効果があります。詳しくはパートVIの説明を 見ていただくとして、とりあえずパラメータの最後に --cache ram --capacity 100M と 追加しておけばキャッシュが有効になります。

ex.3.1/2-3
C:\> md4rctl  start  array0  x:  --array  stripe  --dev  i:  --dev  j:

 初めて使うときには、次のようなメッセージが表示されるはずです。


[N: New [I: Ignore error/warning [A: Abort : Push key ?

 これは署名ブロックを書き込むかどうかの確認です。[N]キーを押して、署名 ブロックを書き込むように指定します。

 実のところ操作はこれだけです。後はお決まりのパターンでフォーマットしてから 使ってください。
 ただし、DVD-RAMに対するフォーマットはRAMディスクやハードディスク上の イメージファイルと比較すると、かなり遅くて時間がかかるので、クイック フォーマットを使うことをお薦めします。
 formatコマンドでクイックフォーマットを行なう場合には/Qオプションを指定 して次のようにします。

ex.3.2/2-3
C:\> format  x:  /fs:ntfs  /q

 メディアを取り出したり交換したいときはアレイを削除する必要がありますが、これも今までと同じで次のようにしてください。

ex.3.3/2-3
C:\> md4rctl  stop  x:

■ストライプサイズについて
 ストライプサイズは特に指定のない場合は64Kバイトとします。
 ストライプサイズを指定・変更したい場合は、--chunkSizeオプションを使ってください。
  例:md4rctl start0 x: --array stripe --chunkSize 32K ・・・・
 ※ サイズ指定の単位(K)は大文字で指定してください。
 ちなみに、ストライプサイズは小さいとシーケンシャルアクセス性能が向上し、ランダムアクセス性能は低下します。
 逆にストライプサイズが大きいとランダムアクセス性能が向上し、シーケンシャルアクセス性能は低下します。
 ただし、キャッシュの影響とか、小さすぎてもシーケンシャルアクセスが遅くなるとか、原則どおりにならないこともあります。
 ハードディスクでの例ですが、理由や仕組みは以下のWebページに書いています。
http://www.runser.jp/doc/sata-raid-stripe-1.html
 ストライピングでは一度削除したアレイをもう一度使う場合、デバイスの順番を 一致させる必要があります。
 イメージファイルでアレイを作成する場合には、ファイル名に番号を付けるなど して順番をつけることができますが、DVD-RAMのようなリムーバブルディスクでは ラベルやタイトルを付けて管理をやっておかないと、アレイを構築したメディアが わからなくなります。
 このときに役に立つのが署名ブロックです。
 メディアにラベルやタイトルを付けてしっかり管理する必要があるのは変わり ませんが、セットしたメディアを間違えたときには署名が一致しないといった警告 が表示されます。
 署名ブロックの内容がすべて一致した場合には、自動的にアレイを再構成して くれます。今回の例であれば、IドライブとJドライブのメディアを反対にセット しても、自動的に順番が合うように再構成されます。

 署名ブロックのあるデバイスからアレイを作成した場合、次のようなメッセージが 表示されます。


[N: Renew [U: Updaet/Write [I: Ignore error/warning [A: Abort : Push key ?

 普通は[U]キーを押して署名ブロックを更新・書換してください。[N]キーを押しても 署名ブロックを書き込みしますが、これは新しい署名ブロックを作成します。
 正しいデバイスを選択してアレイが正常に動作している限り、[N]キーと[U]キーを 押したときの動作に違いはありません。
 他のアレイで使っていたデバイスから、新しい別のアレイを作成しようとすると、 署名ブロックの内容が一致しないのでエラー/警告がでます。こういう場合は、 [N]キーを押して新しい署名ブロックを作成します。

■署名ブロックが一致しない場合
 署名ブロックが一致しなかったり、一度署名ブロックを書き込んだデバイスを 別のアレイとして使おうとすると警告が表示され、次のような動作を選択できます。

[N: Renew [U: Update/Write [I: Ignore error/warning [A: Abort : Push key ?

[I: Ignore error/warning [A: Abort : Push key ?

 誤ったデバイスを指定してしまった場合には[A]キーを押して中断するか、 このまま新しいアレイを作成する場合には[N]キーを押してください。

 [N]キーを押すと新しい署名ブロックを書き込みます。これで、新しい署名ブロックが 作成され、エラーや警告は解消されるはずです。
 [U]キーを押しても署名ブロックを更新・書換しますが、アレイやデバイスの識別情報や 暗号化に関する情報など、一部の情報は変更しないでそのまま残します。
 [I]キーを押すとエラーや警告は無視して動作を続行します。この場合、署名ブロックの 内容に変更は加えません。
 [A]キーを押すと、中断してプログラムを終了します。

●DVD-RAMドライブでミラーリング

 DVD-RAMドライブ2台でミラーリングするのは簡単です。ex.3.1/2-3 で ストライピングを指定しましたが、ここの--array stripe を --array mirror に 変更するだけです。
 DVD-RAMでミラーリングしてもあまり意味はないと思いますが、同じ内容の複製を 作りたい場合には1回のファイルコピーで済みます。

 MD4Ramでのミラーリングは、読み書きの速いハードディスク上のイメージファイル を利用したほうがメリットがあります。この方法はノートパソコン等で1台のDVD-RAM ドライブを活用するのに役立ちます。書き込みは速くなることはありませんが、 読み込みはハードディスクを使うので高速です(ただし、この手の 高速化が目的なら、パートIVで紹介するディスクキャッシュを使ったほうがいいで しょう)

 IドライブのDVD-RAM 1台と、イメージファイルc:\dvdram.imgでミラーリングする 場合は次のようにします。

ex.3.4/2-3
C:\> md4rctl  start  array0  x:  --createfile  --array  mirror  --dev  i:  --dev  c:\dvdram.img  --primary  --blockSize  2048  --blockNumber  2236704

■イメージファイルのサイズについて
 標準設定ではDVD-RAMには自動的に署名ブロックを作成しますが、イメージファイルには署名ブロックは作成されません。このため、1ブロック(セクタ)分だけイメージファイルは小さくできます(この例では、--blockNumber 2236703 とできる)。
 DVD-RAMとイメージファイル内容を完全一致させたい場合には、DVD-RAMの署名ブロックを作成しないように指定するか、逆にイメージファイルにも署名ブロックを作成する必要があります。もし行なうなら後者のイメージファイルにも署名ブロックを作成する方法をお勧めします。その場合、イメージファイルのデバイス指定に「--dev c:\dvdram.img --signBlock 0 ・・・」と--signBlockオプションを追加します。署名ブロック付のイメージファイルを使用するむ場合、--signBlockオプションは常に必要です。
 --primaryオプションによって、読み込みはイメージファイルを優先的に使います。
 4.7GタイプDVD-RAMの容量はセクタサイズ2048バイト、総セタク数2236704個ですので(2048×2236704=4,580,769,792バイト)、これを--blockSizeと--blockNumberオプションで指定して、DVD-RAMとぴったり同じサイズのイメージファイルを作成します。

 既存のイメージファイルを利用する場合には次のように指定できます。、--createfileオプションや--blockNumberは省略できますが、--blockSize 2048の指定は常に必要です。

ex.3.5/2-3
C:\> md4rctl  start  array0  x:  --array  mirror  --dev  i:  --dev  c:\dvdram.img  --primary  --blockSize  2048

■ミラーリングの注意点
 ミラーリングの問題は、内容の一致しないデバイス同士でアレイを構成した場合です。
 MD4Ramではバックグラウンドで同期するような機能は備わっていませんし、内容の検証は特に行なっていないので注意が必要です。
 今回のDVD-RAMとイメージファイルでのミラーリンクでの例だと、最初はミラーリングしていたDVD-RAMを、後でミラーリングしないで単独で使用したとします。そういう使用方法は可能でそれ自体は問題ありませんが、内容に変更を加えた後で、再びイメージファイルとミラーリングするのは危険です。
 優先読み込みデバイスを指定すれば、どちらか一方しか読み込みしないので一見問題なく動きますが、内容が同期していないのでミラーリングとしては正常には機能していません。
 初めて使うときはフォーマットするのを忘れないでください。

 厳密にはミラーリングしたアレイを作成した直後に全領域についてデータ内容を同期させる必要がありますが、一度もデータを書いたことのない領域については読み込みりデータは不定という扱いで、とりあえずは論理フォーマットだけで動きます。


  パート IV:CD/DVDアレイを活用する

 MD4Ramはディスク アレイだけでなく、CD/DVDアレイを作成することができます。
 いわゆる仮想CD/DVDドライブと呼ばれている機能で、データファイルをCD/DVD-ROMドライブのように使うことができます。

 MD4Ramの仮想CD/DVDドライブとしての機能は貧弱なものでセクタサイズ2048バイトの一般的なデータCD/DVDしか扱うことはできませんが、ディスク アレイとまったく同じように複数のデバイスを組み合わせて使用できます。
 仮想CD/DVDドライブ機能についてはMD4Ramを使わなくても、他のソフトを使ったほうが便利だと思いますが、MD4Ramでは複数のデバイスを組み合わせてJOBDやストライピング、ミラーリングできるのが特長です。
 たとえば、2台のDVD-RAMドライブでストライピングしたCD/DVDアレイを作成して、容量9GバイトのCD/DVD-ROMドライブとして使うことができます。
 書き込みできないCD/DVDアレイではミラーリングは意味があるとは思えませんが、同じ内容のISOイメージファイルが2つあればストライピング同様に読み込みを高速化することが可能です。

●2層DVD-ROM用ISOイメージをDVD-RAMにストライピングして保存する

 たとえば、容量が8Gバイト程度ある2層DVD-ROM用のISOイメージファイルdvdrom.isoがあったとします。このISOイメージは2層DVD±RメディアがなければDVDメディアには保存できませんが、2台のDVD-RAMドライブてストライピングしたアレイには保存できます。
 まず、「パート III:複数のDVD-RAMドライブを活用する」で紹介したex.3.1/2-3の方法で、DVD-RAM2台でストライビングしたアレイをXドライブとして作成します。FAT32では4Gバイトを超えるファイルは格納できないので、フォーマットは必ずNTFSにしてください。
 dvdrom.isoをXドライブにコピーします。
 Xドライブにコピーしたdvdrom.isoをCD/DVDアレイ機能を使ってQドライブとして使うには次のようにします。

ex.4.1/2-3
C:\> md4rctl  start  array0  q:  --cd  --dev  x:\dvdrom.iso

 --cdオプションによってCD/DVDアレイを作成します。

 この方法ではMD4RamのCD/DVDアレイ機能は必須ではなく、Xドライブにdvdrom.isoをコピーした後は他の仮想CD/DVDドライブを使うことも可能です。
 ストライピングで高速化しているとはいえ数GバイトあるISOイメージファイルをコピーするには時間がかかります。しかし、リッピングでは直接ストライピングしたアレイに保存する方法もあります(その場合、DVD-RAMドライフ2台に加えて、もう一台リッピング用DVDドライブが必要ですが)
 DVD-RAMドライブは他のDVD系メディアと比較すると読み込み速度が遅いのですが、2台でストライピングしていればシーケシンャルアクセスでほぼ2倍の速度が期待できます。2倍速DVD-RAMなら4倍速、3倍速DVD-RAMなら6倍速、5倍速DVD-RAMなら10倍速相当の速度が期待できます(実際にはオーバーヘッドがあるので、そんなに速くはならないと思いますが)

●2層DVD-ROM用ISOイメージをDVD-RAMにストライピングして保存する(2)

 DVD1枚には収まらないISOイメージファイルをDVD-RAMに格納するのは、先ほど紹介したようにNTFSでフォーマットしたディスク アレイに格納した上で、仮想CD/DVDドライブとして利用するのがもっとも現実的で簡単な方法です。
 ここから先は実用性はなく趣味の領域ですが、こんなやり方もあるということで紹介しておきす。

 先ほどと同じように、IドライブとJドライブがDVD-RAMドライブで、9GバイトのISOイメージファイルがあるとします。
 まず、DVD-RAMドライブでストライビングしたディスク アレイを作成します。

ex.4.2/2-3
C:\> md4rctl  start  array0  x:  --array  stripe  --dev  i:  --dev  j:

 ここではFATやNTFSでフォーマットを行なう必要はありません。
 このディスクアレイに、md4rctlのWriteコマンドを使ってISOイメージファイルを直接書き込みます。

ex.4.3/2-3
C:\> md4rctl  write  x:  --readfile  c:\dvdrom.iso

 書き込みが終わったら「md4rctl stop x:」を実行してアレイをいったん削除してから、今度はQドライブにCD/DVDアレイとして作成します(実はディスク アレイ タイプのXドライブのままでWindowsは認識してしまうようですが、安全のためにCD/DVDアレイとして作成し直して下さい)
 ex.4.2/2-3に--cdオプションを追加してドイラブレターを変更しただけです。

ex.4.4/2-3
md4rctl  start  array0  q:  --cd  --array  stripe  --dev  i:  --dev  j:

 最初の方法だとXドライブとQドライブの2つを使用しますが、この方法だとQドライブだけで済みます。

●複数のメディアに保存できるようにイメージファイルを分割する

 MD4Ramのアレイは、任意のサイズのイメージファイルに分割するすることができます。
 これで何ができるかというとCD-RやDVD-R等にMD4Ramで使えるイメージファイルを分割した上で焼くことができ、分割した数だけCD/DVD-ROMドライブがあれば(ハードディスクに戻すことなく)CD/DVD-ROM上のイメージファイルからアレイが作成できます。
 もちろん、CD/DVD-ROMドライブは書き込みできないので読み込み専用になりますが、バックアップからの復元や再生用にはそれで十分です。

 8GバイトのDVD-ROM用ISOイメージファイルc:\dvdrom.isoがあったとして、これを4G+4Gバイトに2つに分割して、なおかつ2台のドライブでストライピングできるようにします、
 まず、元になるISOイメージファイルの正確なファルサイズを調べます。
 ここでは、dvdrom.isoのファイルサイズは8,258,011,136バイトとします。これをセクタサイズ2048で割ったブロック(セクタ)数を求めます。8258011136÷2048=4032232ブロックとなります。
 これを2つに分割しますが、ストライプサイズを考慮する必要があるため、単純に2で割っても格納できないことがあります。1ブロックでも不足するとダメですが、大きい分には分には問題ないので、正確に計算するのが面倒なときは半分に割ったブロックサイズにストライプサイズ64Kバイト分にあたる32ブロック(64×1024÷2048=32)を足しておくといいでしょう。4032232÷2+32=2016148ブロックとなります。
 このパラメータを使って、ストライピング用に分割したイメージファイルdvd1.img と dvd2.img をハードディスクに作成することにします(可能ならば各イメージファイルdvdrom.iso、dvd1.img、dvd2.imgは物理的に異なるドライブ上に格納・作成することをお勧めします。理由はやってみたらわかりますが、同一ドライブにあるイメージファイルでストライピングすると遅くなるだけです。ただ、目的は分割したイメージファイルを作成することなので、遅いだけで動作に問題はありません)
 まずは、dvd1.imgとdvd2.imgを使ったディスクアレイをXドライブとして作成します。

ex.4.5/2-3
C:\> md4rctl  start  array0  x:  --createfile  --array  stripe  --dev  c:\dvd1.img  --blockSize  2048  --blockNumber  2016148  --dev  c:\dvd2.img  --blockSize  2048  --blockNumber  2016148

 Xドライブのアレイを作成したら(フォーマットの必要はありません)、DVD-ROM用ISOイメージdvdrom.isoをmd4rctlのWriteコマンドを使って書き込みます。

ex.4.6/2-3
C:\> md4rctl  write  x:  --readfile  c:\dvdrom.iso

 この操作でdvdrom.isoの内容が、dvd1.imgとdvd2.imgの2つのイメージファイルに分割して保存されます。
 書き込みが終わったら、「md4rctl stop x:」でいったんアレイを削除します。
 念のためCD/DVDアレイをQドライブとして作成して内容を確認します。

ex.4.7/2-3
C:\> md4rctl  start  array0  q:  --cd  --array  stripe  --dev  c:\dvd1.img  --dev  c:\dvd2.img

 Qドライブとして使用できることを確認したら、「md4rctl stop q:」でアレイを削除します。
 あとは、dvd1.imgとdvd2.imgを2枚のDVD-Rにでも焼いてください。dvd1.imgやdvd2.imgはISOイメージではなく、通常のファイルとして焼いてください。
 後はわかると思いますがDVD-ROMドライブを2台用意して、dvd1.imgとdvd2.imgからCD/DVDアレイを作成して使うことができます。IドライブとJドライブがDVD-ROMドライブとして、i:\dvd1.imgとj:\dvd2.img があるとしたら次のようにします。

ex.4.8/2-3
C:\> md4rctl  start  array0  q:  --cd  --array  stripe  --dev  i:\dvd1.img  --dev  j:\dvd2.img

 実際にやってみると、DVD-ROMドライブのストライピングはあまり速くないというか、返って遅くなることもあります。同じ設定でDVD-RAMは高速化できるのですが、アクセスタイムの大きいDVD-ROMドライブではストライピングするとデータ転送が細切れになって、ドライブ間の同期も必要なこともあって遅くなることがあります。思ったほど速度が向上しない場合は、ストライプサイズをもっと大きくして見てください(標準設定のストライプサイズ64Kバイトです)
 ストライピングではなくLINEARモード(JBOD)を使うこともできるので、DVD-ROMドライブで分割イメージファイルを使うにはLINEARモードを使ったほうがいいかもしれません。
 LINEARモードでは、ファイルサイズの異なるイメージファイルに分割できるのでストライピングより融通が利きますし、同一ハードディスク上に分割イメージファイルを作成する作業もストライピングよりも速いはずです。

 分割したイメージファイルを1つのイメージファイルに結合することも可能です。ex.4.8/2.2でのQドライブから結合したイメージファイルc:\redvd.isoを作成する場合、md4rctlのReadコマンドを使います。

ex.4.9/2-3
C:\> md4rctl  read  q:  --writefile  c:\redvd.iso

 ストライプサイズの影響で元のISOイメージファイルより少し大きくなることがありますが、内容は問題ありません。

 標準ではイメージファイルは署名ブロックを作成しないので、デバイスの順番やアレイモード、ストライプサイズ等がわかるようなファイル名をつけることをお勧めします。今回の例ならば、dvd1of2-S64K.img やdvd2of2-S64K.imgといった具合です。

 イメージファイルにも署名ブロックを作成する方法もありますが、署名ブロックの構造は後々バージョンアップした際に互換性がなくなる可能性があります。標準設定のストライププサイズ64Kバイトも最適かどうかわからないので、後で変更する可能性もあります。
 署名ブロックの互換性がなくなっても、DVD-RAMのように書き換えできるメディアでは署名ブロックを更新・書き換えすることで対応できるようにする予定です。しかし、CD/DVDに焼いてしまったイメージファイルでは署名ブロックの更新ができないので、どうなるかわかりません。その場合でもまったく利用できないという自体にはならないと思いますが、警告が出るとかパラメータを手動で入力する必要があるとか、署名ブロックがあっても意味がないとか、そんな感じになると思います。


  パート V:暗号化したアレイを使う

■暗号方式について
 MD4Ramの暗号方式にはBLOWFISHとAESの2種類のアルゴリズムをサポートしています。
 オプションを何も指定しなければBLOWFISHが使用されますが、暗号方式を指定したい場合は、 --cryptoオプションに続けて、AESまたは"BLOWFISHを追加してください。
 たとえば、--crypto AES あいるは --crypto BLOWFISH のように指定します。
 MD4Ramではデータ内容を暗号化したアレイを作成できます。
 たとえば、イメージファイルからアレイを作成した場合、イメージファイルの 中身を覗くことでデータ内容がわかってしまいます。文書などのテキストは そのままの形で読めてしまいます。
 MD4Ramの暗号化機能はアレイやデバイスにデータを暗号化した上で保存して、 中身を覗き見ても復元できないようにします。
 暗号化したアレイは通常のアレイとまったく同じように読み書きできますが、 アレイ作成時にパスワードかキーファイルが必要となります。パスワードや キーファイルが一致しないと、暗号化したアレイはデバイスは正しく使用 できません。


●パスワードで保護したディスクアレイを作成する

 暗号化といってもいくつかオプションを追加するだけで、これまでの使い方と まったく同じです。
 パスワードXYZ9955Wで保護した10Mバイトのイメージファイルsecret.imgを作成して、 AESで暗号化するには次のようにします。

ex.5.1/2-3
C:\> md4rctl  start  array0  x:  --crypto  AES  --password  XYZ9955W  --createfile  --dev  c:\secret.img  --capacity  10M

 パスワードによる暗号化を行なう場合には--cryptoと--passwordオプションを使います。
 パスワードに利用できる文字や、文字の長さには特に制限は設けていませんが、 常識的な範囲内で利用してください。

 新しくイメージファイルを作成した場合はフォーマットしてから使ってください。
 いったん作成したイメージファイルを使う場合には--createfileと--capacityオプションは 必要ないので、以後は次のように作成できます。

ex.5.2/2-3
C:\> md4rctl  start  array0  x:  --crypto  AES  --password  XYZ9955W  --dev  c:\secret.img

 --cryptoオプションを付けずに暗号化を指定しなかったり、パスワードを間違えても エラーも警告もなしで動作します(*1)。ただし、 誤ったデータが復元されるために、暗号化したデータは正しく読み取ることはできません。
 ex.5.1/2-3で作成したFATやNTFSでフォーマットしてアレイを、ex.5.2/2-3で 暗号化を指定しなかったりパスワードを間違えて再びアレイを作成すると、Windowsは フォーマットされていない不明なディスクとして扱います。
 その場合は、すぐにアレイを削除して、必要なら正しいパスワードを指定して アレイを再作成してください。
 パスワードが一致しない状態でアレイを作成し、データを書き込みしてしまうと、 以後正しいパスワードを指定しても完全なデータの復元は不可能になります。

*1  署名ブロックを利用している場合は、パスワードがアレイ作成時と一致しているか どうか確認できます。誤ったパスワードが指定された場合は警告が表示されます。

●キーファイルで保護したディスクアレイを作成する

 パスワードの代わりにキーファイルを指定することで、暗号化することも 可能です。
 新しくキーファイルmysecret.keyを作成し、10Mバイトのイメージファイル secret2.imgを作成して、暗号化するには次のようにします。

ex.5.3/2-3
C:\> md4rctl  start  array0  x:  --crypto  AES  --keyfile  c:\mysecret.key  --createfile  --dev  c:\secret2.img  --capacity  10M

 --passwordオプションの代わりに、--keyfileオプションでキーファイルを指定 します。
 --createfileオプションを指定しておくと、キーファイルが存在しない場合は 自動的に作成します。キーファイルの自動作成は日時などからランダムに作成 するので、毎回違った内容になります。

 新しくイメージファイルを作成した場合はフォーマットしてから使ってください。
 いったん作成したイメージファイルを使う場合には--createfileと--capacityオプションは 必要ないので、以後は次のように作成できます。

ex.5.4/2-3
C:\> md4rctl  start  array0  x:  --crypto  --keyfile  c:\mysecret.key  --dev  c:\secret2.img

 キーファイルやキーファイルの内容が一致しなくてもエラーも警告も表示されません (*2)。その場合の注意点はパスワードを使った場合と 同じですので、それちらを見て ください。

 キーファイルを削除したり、内容を書き換えてしまうと復元は不可能になります。 また、暗号化していてもキーファイルが入手できれば誰でも復元できてしまいます。
 重要なキーファイルならバックアップを取っておいたほうがいいでしょうが、 管理には十分注意してください。

*2  署名ブロックを利用している場合は、キーファイルの内容がアレイ作成時と 一致しているかどうか確認できます。誤ったキーファイルが指定された場合は警告が 表示されます。


  パート VI:ディスクキャッシュを活用する

 ディスクキャッシュは、ハードディスク等に格納されているデータを、より高速の 記憶装置(メモリ等)に一時的に格納することでディスクアクセスを高速化する技術や 手法のことです。
 Windowsもディスクキャッシュを行なっていますが、更にMD4Ram独自のディスク キャッシュ機能を使うことができます。
 MD4Ramのディスクキャッシュは、ディスクドライブ、イメージファイル、RAM等 アレイに指定できるデバイスと同じものが使えます。基本的には、アレイよりも高速な デバイスをディスクキャッシュに指定します。
 たとえば、CD/DVDやDVD-RAMに対してはハードディスクやイメージファイルを、 ハードディスクやイメージファイルにはメモリ(RAM)をディスクキャッシュとして 利用します。
 MD4Ramで作成できるどんなアレイにも、ディスクキャッシュは指定できます。CD/DVD アレイにも指定できますし、ストライピングやミラーリングしていてもディスク キャッシュは有効です。

■ライトスルー方式とライトバック方式
 MD4Ramのディスクキャッシュには標準のライトスルー方式と、実験段階のライトバック 方式があります。
 どちらの方式でも、ファイル内容を何度も読み取るような使い方では効果を発揮します。 たとえば、デジカメ画像を保存して、内容を何度も確認しながら作業するような使い方です。 ランダムアクセスの遅いCD/DVDから小さなファイルを何度も読み取るような使い方にも有効です。
 しかし、ライトスルー方式は書き込みは速くならないので、バックアップで書き込みだけで 作業が完了するとか、読み込みでも大きな動画を再生するとといった用途には向きません。 返って遅くなることもあります。
 ライトバック方式ではすぐにはアレイに書き込みせずにいったんキャッシュに保存し、  ある程度データが溜まったり、一定時間が経過するとアレイに書き込みします。 このため、書き込みについてはも高速化が期待できます。
 ディスクキャッシュについて詳しくは「5-2 ディスクキャッシュについて」を参照してください。

●メモリをディスクキャッシュに割り当てる

 MD4Ramのディスクキャッシュはどんなアレイにも指定でき、md4rctlコマンドの 使い方でいえばこれまでのアレイ作成方法に--cacheオプションを追加するだけです。
 たとえば、パートI ex.1.4/2-3 に紹介した100Mバイトのイメージファイルからの アレイに10Mバイトのメモリ(RAM)によるキャッシュを割り当てるとしたら次のようにします。

ex.6.1/2-3
C:\> md4rctl  start  array0  x:  --createfile  --dev  c:\disk.img  --capacity  100M  --cache  ram  --capacity  10M

 「--cache ram --capacity 10M」が加した部分です。これでディスクキャッシュが 機能します。
 --createfileオプションはこれまでの使用例と同じようにイメージファイルが 作成済みの場合には不要です。

 キャッシュの容量は、アレイやメモリ搭載量に応じて自由に決めてください。
 ただし、搭載メモリの大半を使ってしまうような指定はしないでください。

 実際にはたった100MバイトのドライブにMD4Ramのディスクキャッシュを使っても実用的な 意味はありません。CD/DVDのようなランダムアクセスの遅いドライブであればアレイ容量の 数割程度にあたるメモリ(RAM)をキャッシュに指定しておくと、それなりの効果はあるかと 思います。

●イメージファイルをまるごとDVD-RAMのキャッシュに

 CD/DVDから構成されたアレイでは、ハードディスクに格納した同容量の イメージファイルをキャッシュにすることで高速化できます。
 ミラーリングで読み込み優先デバイスを指定するのと同じ効果ですが、 ミラーリングはデータ内容がまったく同じデバイスを常に用意しておく必要があります。
 ディスクキャッシュであれば、利用したいときにいつでも利用できます。

 ここでは、4.7GバイトDVD-RAMメディアを使用する際に、ハードディスク上の イメージファイルをディスクキャッシュに割り当てる方法を紹介します。
 パート III ex.3.4/2-3でDVD-RAMドライブでミラーリングする方法を紹介しましたが、 これとほとんど同じです。
 4.7GバイトDVD-RAMメディアの容量は2048バイト×2236704セクタですので、 このパラメータをキャッシュに指定します。
 DVD-RAMはIドライブ、キャッシュとして割り当てるイメージファイルはc:\dvdram.csh としてアレイをXドライブとして作成することにします。

ex.6.2/2-3
C:\> md4rctl  start  array0  x:  --createfile  --dev  i:  --cache  c:\dvdram.csh  --cacheMode  table  --blockNumber  2236704

 MD4Ramのキャッシュにはlistとtableという2種類の動作モードあります。
 基本的には、アレイよりもディスクキャッシュの容量が小さい場合にはlistモード、 同じかキャッシュのほうが大きな場合にはtableモードを使います。
 アレイ(この例では4.7GバイトDVD-RAM)と同容量の イメージファイルをキャッシュとして利用場合には自動的にtableモードが選択 されるはずですが、念のために「--cacheMode table」でtableモードを明示的に 指定しています。

●CD/DVDドライブのアクセスをディスクキャッシュによって高速化

 CD/DVDドライブのアクセスをMD4Ramのディスクキャッシュを使って高速化する ことも可能です。
 これまで紹介したようにMD4Ramのディスクキャッシュは万能ではありませんが、 繰り返しデータを読み込む場合に効果があります。
 CD/DVD内容をイメージファイルにしてハードディスクに保存して仮想CD/DVD ドライブとしてから使えば、高速なハードディスクを利用できますが、MD4Ramの ディスクキャッシュならイメージファイルを作成しなくてもその場ですぐに利用でき ます。
 CD/DVDドイラブがIドライブとして、キャッシュ付でアクセスできるCD/DVDアレイを Xドライブとして作成します。

ex.6.3/2-3
C:\> md4rctl  start  array0  x:  --cd  --dev  i:  --signBlock  none  --blockAddr  0  --cache  ram  --capacity  10M

 MD4Ramは標準では署名ブロックを作成しようとしますが--signBlock noneにより 無効にした上で、開始アドレスのずれを--blockAddr 0でゼロ(なし)にします。
 こうすると元々のIドライブの内容とまったく同じものがXドライブにも現れます。 書き込みできるドライブでこんなことやると確実にデータを壊しますが、読むだけの ROMドライブなら問題ありません。
 同じ内容のドライブが2つあっても普通は意味がありませんが、Xドライブ側は ディスクキャッシュによって高速化されています。元々のIドライブにはディスク キャッシュは効きません。

 メモリ(RAM)ではなくハードディスク上のイメージファイルをキャッシュとして 割り当て高速化することも可能です。
 1つ前で紹介したDVD-RAMにイメージファイルのキャッシュとして使用する方法と基本的には同じです。
 IドライブのCD-ROMに、イメージファイルc:\cdrom.cshをキャッシャとして割り 当てるには次のようにします。

ex.6.4/2-3
C:\> md4rctl  start  array0  x:  --cd  --createfile  --dev  i:  --signBlock  none  --blockAddr  0  --cache  c:\cdrom.csh  --cacheMode  table  --capacity  700M

 イメージファイルの容量は--capacity 700Mとして700Mバイトとして指定していますが、 CD/DVD-ROMとぴったり同じか、大きなサイズで指定してください。正確なサイズがわかる 場合には--blockNumberオプションで指定するといいでしょう。

■ライトバック方式のディスクキャッシュを使う
 これまでは紹介したディスクキャッシュはライトスルー方式で、書き込みには効果ありません。
 書き込みにも効果があるライトバック方式にしたい場合は、--writebackオプションを指定してください。 このオプションは--cacheでキャッシュデバイスを指定した後に追加してください。
 たとえば、ex.6.1/2-3やex.6.2/2-3をライトバック方式に指定する場合には次のようにします。

ex.6.4/2-3
C:\> md4rctl  start  array0  x:  --createfile  --dev  c:\disk.img  --capacity  100M  --writeback  --cache  ram  --capacity  10M

ex.6.5/2-3
C:\> md4rctl  start  array0  x:  --createfile  --dev  i:  --cache  c:\dvdram.csh  --writeback  --cacheMode  table  --blockNumber  2236704

 読込専用のCD/DVDドライブ等は書き込みは行なわないので、ライトバック方式を使っても意味がありません。
 ライトバック方式は実験段階ですので、使用には十分注意してください。


4-1  MD4RCtlコマンド詳細

表記説明
角かっこ [ ]省略可能な項目
中かっこ { }縦棒(|) で区切られた選択肢のうち、いずれか1つを選択できる。例:{start|stop}
・・・繰り返し指定できるパラメータ。
< >特定の書式をもつパラメータ。例:<数値>、<デバイス>

■ アレイの作成・開始

MD4RCtl  start  <アレイ>  [<ドライブレター>]  

  [--array {LINEAR|STRIPE|MIRROR}  [--blockAddr <アドレス>]  [--blockNumber <ブロック数>]  [--boockSize <サイズ>]  [--capacity <サイズ>]  [--cd]  [--chunkSize <サイズ>]  [--createfile]  [--crypto <暗号アルゴリズム>]  [--keyfile <ファイル名>]  [--ignore-readSign]  [--ignore-cryptoSn]  [--medium <メディア コマンド>]  [--password <パスワード>]  [--ramtype {nonpaged|paged}]  [--readonly]  [--removable]]  

  [--dev <デバイス>  [--blockAddr <アドレス>]  [--blockNumber <ブロック数>]  [--boockSize <サイズ>]  [--capacity <サイズ>]  [--createfile]  [--crypto <暗号アルゴリズム>]  [--keyfile <ファイル名>]  [--ignore-readSign]  [--medium <メディア コマンド>]  [--primary]  [--password <パスワード>]  [--ramtype {nonpaged|paged}]  [--readonly]  [--signBlock <ロケーション>]]・・・  

  [--cache <デバイス>  [--blockAddr <アドレス>]  [--blockNumber <ブロック数>]  [--boockSize <サイズ>]  [--cacheMode {list|table}]  [--capacity <サイズ>]  [--createfile]  [--ramtype {nonpaged|paged}]  [--writeback]]・・・

 <サイズ>にはk、m、g、K、M、G といった単位を指定できます。オプションやパラメータにはアルファベットの大小文字の区別はありませんが、サイズ指定は例外として小文字は103系(10^3=1000単位)、大文字は210系(2^10=1024単位)となります。

【解説】

 アレイ/デバイス/キャッシュで同じ名前のオプションが存在しますが、これらのオプションは--dev, --cacheオプションよりも先に指定したものはアレイに対して有効で、--dev, --cacheオプションを指定した以後はデバイスやキャッシュに対して有効です。
 --createfile、--igore-readSignオプションはアレイに対して指定(最初の--devオプションよりも先に指定)すると、以後のデバイス/キャッシュすべてに作用し、個々のデバイスに指定する必要はありません。--mediumオプションも同様ですが、キャッシュデバイスには作用しません。

 アレイ/デバイスのアドレスとサイズに関する--blockAddr、--blockNumber、--capacityオプションをすべて省略した場合、各デバイスの最大容量からアレイ容量は自動的に決定します。オプションを省略して自動設定に任せる場合には、署名ブロックの位置を考慮したアドレスとサイズが自動的に設定されます。

 安全のため、パーティション(区画)を持つ固定ディスクドライブはデバイスに指定できないようにしています。
 ハードディスクのCドライブ等をデバイスに--dev c: などと指定してもエラーとなります(md4rctlで弾いているだけで、md4ramドライバ側は無理矢理パラメータを渡せば動きますが)
 どうしてもパーティションを持つドライブをデバイスとして指定する場合には、 物理ドライブ指定(--dev disk0 等)を使ってください。その場合、 md4rctlもmd4ramドライバもパーティション構造とは無関係に動作し、 標準設定の署名ブロックの書き込みを行なうと確実にMBR(マスターブートレコード)を 上書きして既存のパーティションやファイルシステムは認識できなくなります。

 RAMディスクの最大容量は2Gバイト(2^31バイト)ですが、実際に使用できる容量はOSによって制限されます。空きメモリが極端に残り少なくなるような指定はしないでください。
 メモリ確保の方法として--ramtypeオプションで非ページメモリとして確保するか、ページメモリとして確保するか指定できます。
 RAMディスクの制限にいては「5-5 RAMディスクの容量について」を参照してください。

 アレイはディスクタイプ、CD/DVDタイプ(--cdオプション指定時)ぞれぞれ16個まで作成できますが、標準設定ではディスクタイプ2個、CD/DVDタイプ1個に制限しています。使用できるアレイ数を変更したい場合、レジストリを編集して再起動する必要があります。

 デバイスは1つのアレイに対して16個まで指定できます。
 デバイスし重複して使用・指定しないように注意してください(現バージョンでは重複チェックは行っていません)。

 --mediumオプションで指定するメディアコマンドはアレイ開始前に各デバイスに対して実行されます。
 たとえば、アレイの構成デバイスにCD/DVDドライブを使っている場合、メディアの取り出しを禁止するには「--medium lock」を指定します。CD/DVDドライブのトレイをロードしたい場合には「--medium load」を指定できます。
 --medium lockを指定したデバイスは、アレイを削除・停止してもロックが有効のままだとメディアを取り出すことができません。その場合、アレイを停止・削除するstopコマンドに--medium unlockオプションを追加してください。詳しくは次項の「アレイの削除・停止」を参照してくだい。
 アレイを削除・停止する際に--medium unlockでのロック解除を忘れてしまった場合はDevTestコマンドが利用できます(DevTestについては「2-3 あると便利なソフトウェア」を参照してください)。DevTestコマンドはMD4RCtlコマンドの--mediumオプションと同様のメディア操作が可能です。
 メディアコマンドはすべてのデバイスで利用できるわけではありません。実際に機能するかどうかはハードウェアやデバイスに依存します。

■ アレイの削除・停止

MD4RCtl  stop  [<アレイ>]  <ドライブレター>  [--cd]  [--medium <メディア コマンド>]  [--redefine]

【解説】

 ドライブレターで指定したアレイを削除・停止します。

 通常、ドライブレターが指定してあれば<アレイ>は指定する必要はありません。--redefineオプションを指定した場合は、<アレイ>の指定が必要です。
 何らかのトラブルが発生するとMD4Ramのアレイが動作状態ままドライブレターだけが削除されてしまうことがあります。この状態では、アレイを停止することも、(同じarray0等を使った)新しいアレイを作成することもできません。エラーではなくても、アレイを作成したままWindowsをログアウトしたりユーザを切り替えると同様に症状になることがあります。
 --redefineオプションはこのようなトラブルが発生した場合に、ドライブレターを再度割り当ててから、アレイの停止・削除を行います。

 --mediumオプションで指定するメディアコマンドは、アレイの停止後に各デバイスに対して実行されます。たとえば、CD/DVDデバイスに対して「--medium unload」を指定すると、トレイをイジェクト(取り出し)します。ただし、トレイ操作がロックされているとイジェクトできないことがあります。その場合は「--medium unlock --medium unload」といった具合にアンロック(ロック解除)も同時に指定できます。
 メディアコマンドはすべてのデバイスで利用できるわけではありません。実際に機能するかどうかはハードウェアやデバイスに依存します。

■ アレイの情報の表示

MD4RCtl  show  <ドライブレター>

【解説】

 使用中のアレイの情報を表示します。

■ アレイ内容を読み込み

MD4RCtl  read  <ドライブレター>  --writefile <フィル名>

【解説】

 ドライブレターで指定したアレイの内容を読み取って、イメージファイルとして保存します。

■ アレイ内容を書き込み

MD4RCtl  write  <ドライブレター>  --readfile <フィル名>

【解説】

 イメージファイルの内容をドライブレターで指定したアレイに書き込みます。

■ アレイのフラッシュ

MD4RCtl  flush  <ドライブレター>

【解説】

 ライトバック・キャッシュ使用時に、キャッシュにあるデータをアレイに書き込みします。

■ ベンチマーク テスト

MD4RCtl  benchmark  <ドライブレター>  [--fcv]  [--fileSize <サイズ>]  [--fileNum <ファイル数>]  [--sequential]

【解説】

 指定ドライブのベンチマークテストを行ないます。このコマンドはアレイ以外の通常ドライブにも実行できます。
 テストドライブはファイルの読み書きができるように予めフォーマットしておく必要があります。また、テストドライブを使っている他のアプリケーションがないことを確認してから実行してください。

 テストにはシーケンシャルテストとfcvテスト(書込・読込・削除)の2種類があります。--sequeltialと--fcvオプションの指定がない場合は、シーケンシャルテストを行ないます。
 シーケンシャルテストでは指定サイズのファイルを作成して、そのファイルへの書込速度と読込速度を計測します。
 fcvテストでは、指定のファイル数/ファイルサイズに達するまでファイルを作成して書込速度と読込速度、削除した速度を計測します。

 指定ドライブにTESTDIR.TMPという名前でディレクトリを作成してテストを行ないます。
 テスト用に作成するファイルやディレクトリと同名のファイルが既に存在した場合、上書きされたり削除されることがあるので注意してください。

 テストの開始時と終了時に、OSのキャッシュをクリアするためにボリュームのロック(LOCK)とディスマウント(DISMOUNT)を行なっています。他のアプリケーションがテストドライブを使用中だとボリュームのロックやディスマウントに失敗するはずですが、テストは続行します。


5-1  署名ブロックについて

 署名ブロックは、アレイを構成するデバイスの順番やパラメータを自動的に構成 するために使用する情報です。署名ブロックを使用するデバイスは、特定の位置に 署名情報が書き込まれます。

 標準設定ではドライブレターや物理ドライブとして指定したデバイスには先頭 ブロック(セクタ)に自動的に署名ブロックを作成します。先頭のセクタはMBR (マスターブートレコード)と呼ばれている、OSがハードディスクを認識する重要 な情報が存在しますが、署名ブロックを作成するとこれを上書きして壊すことに なります。
 これは非常に危険ですので、ハードディスク等のパーティションを持つ固定 ディスクはMD4RCtlでは制御できないように制限しています。

 DVD-RAM等のリムーバブルディスクについては署名ブロックでMBRを上書きすることで、 Windowsがファイルシステムを認識しないディスクを意図的に作っています。
 DVD-RAMでも署名ブロックを無効にしたり最終ブロックに作成した上でFAT32/NTFS でフォーマットすると、一見正しいMBRが存在するためにWindowsがこれを使おうと します。そうするとMD4Ramと競合してしまってトラブルの元になります。

 そういった理由があるため、署名ブロックはあえてMBRと同じ先頭セクタに作成 しています。

 ただし、弊害としてWindwosが認識できないディスクがセットされていると、たまに マイコンピュータやエクスプローラが確認しにいって動作が遅くなることがあります。
 アレイを作成して開始してしまえばMD4Ramドライバに制御が移るので遅くなる ことはありませんが、アレイを構成していないDVD-RAMは使い終わったらメディアを 抜いておくことをお勧めします。

 標準設定では、RAMディスクとイメージファイルについては署名ブロックは作成 しません。
 RAMディスクはアレイを削除すると署名の内容も消えてしまうので署名ブロック を作成しても意味がありません。
 イメージファイルについては--signBlockオプションを使うことで、署名ブロック を使うことも可能です。

 署名ブロックによる自動構成を行なうためには、アレイを構成するすべての デバイスに署名ブロックが必要です。
 RAMディスクタイプのデバイスには署名ブロックは作成できないので (作成してもアレイを削除すると内容が消えてしまう) RAMディスクを組み合わせているアレイでは、署名ブロックによる自動構成は 利用できません。


5-2  ディスクキャッシュについて

 MD4Ramは独自のディスクキャッシュを備えています。
 ディスクキャッシュはWindowsも行なっているので、MD4Ramのディスクキャッシュは 必要なさそうですが、使い方によっては効果があります。

 まず、MD4Ramではあらゆるデバイスがキャッシュとして利用できます。
 WindowsのキャッシュはPCの搭載メモリを使いますが、MD4Ramはメモリだけでなく ディスクやイメージファイルをキャッシュに利用できます。メモリでは大容量のアレイ 全体をキャッシュすることはできませんが、ハードディスクやイメージファイルを キャッシュとして利用すれば、CD/DVD程度の容量ならまるごとキャッシュできます。

 MD4Ramのディスクキャッシュはライトスルー方式と、実験段階ですがライトバック方式 を選択できます。
 ライトスルー方式はデータの書き込みはアレイとキャッシュの両方に同時に行なうので、 書き込みについては速くなりません。ライトバック方式は書き込みデータはいったん キャッシュに保存して、すぐにはアレイには書き込みしません。

 どちらの方式でも読み込みについては、キャッシュにデータがあればアレイに アクセスすることなく転送しますが、キャッシュにないデータはアレイからの読み込みと 同時にキャッシュに書き込みます。このため、動画の再生のように先頭から一度だけ データを読み込むような使い方ではキャッシュの効果はありません。読み込みと 同時にキャッシュに書き込む分だけ遅くなります。
 ライトスルーとライトバックでは書き込み時の動作が異なります。

ライトスルー方式

 ライトスルー方式では、書き込みデータはアレイとキャッシュの両方に同時に 書き込みします。
 このため、書き込みだけで作業が完了してしまうような使い方には向いていません (差分バックアップのように、ある程度読み込みもともなうなら 効果はあるかもしれませんが)
 メモリのように十分に高速なデバイスをキャッシュに使えば、無駄なキャッシュへの 書き込みがあったとしても速度の低下はありませんが、非効率なことに変わりありません。
 ライトスルー方式は書き込み量が少なく、繰り返しデータを読み込むような用途に 効果があります。

ライトバック方式

 ライトバック方式では書き込みデータはまずキャッシュに書き込みして、必要に なるまでアレイには書き込みしません。このため、書き込みを高速化できます。
 ただし、キャッシュの容量が少ないと十分に効果を発揮しません。一時的に キャッシュに保存することで、最初のうちは速くてもキャッシュが一杯になると アレイへの書き込みが始まるので元の速度に戻ってしまいます。
 また、連続して大きなデータを書きこむような使い方だと、キャッシュ容量が十分でも あまり速くなりません。一時的にキャッシュに保存しても、最終的にはアレイにデータを 書き込むことになるので、書き込みデータ量に変化がないからです。
 ただし、ライトバック方式ではシーク回数/距離を低減することができます。
 キャッシュに保存したデータをアレイに書き込む場合、なるべく連続するように データの書き込みを行ないます。この場合は、書き込みデータ量に変化がなくても、 ランダムアクセスを減らすことで高速化が可能です。
 ライトバック方式では書き込みデータがある程度キャッシュに溜まってから、 まとめてアレイに書き込みします。このため、データ量が多かったりアレイへの書込 速度が遅いと、このアレイを使っているOSやアプリケーションの入出力処理を長時間 止めてしまいます。動画をリアルタイムに保存したり、一定時間内に書込処理が 終了して欲しい場合にはライトバック方式は向いていません。

listモードとtableモード

 MD4Ramのディスクキャッシュにはlistモードとtableモードという2種類の動作 モードがあります。
 tableモードはミラーリングの応用で、アレイ全体を丸ごとキャッシュします。 したがって、アレイと同容量のキャッシュデバイスを用意する必要があります。
 listモードは、アレイよりも容量の小さいデバイスをキャッシュとして割り当てる 場合に使います。

 tableモードで使うキャッシュデバイスはアレイよりも高速で容量が十分なら 効果がありますが、listモードではメモリのようにランダムアクセスしても速度 低下のないデバイスを指定してください。
 listモードでは限られた容量の中でデータのやりくりを行なうために、キャッシュ デバイス上に連続してデータが並ぶとは限りません。このため、アレイ上では シーケンシャル アクセスをしているつもりでも、キャッシュデバイス上では連続して いないためにランダムアクセスを行なうことになります。

ライトバック・キャッシュの安全性について

 ライトバック方式ではアレイへの書き込みをなるべく遅らせて書込回数や データ量を減らせばその分、高速化できますが、書き込みに失敗した場合の 危険性が高まります。
 ライトバックを行なわない通常の書き込みでは、アレイへの書き込みエラーは すぐに検知できOSやアプリケーションにエラーを通知できます。
 しかし、ライトバック方式では一時的にキャッシュに書き込みを行なった段階で、 OSやアプリーケョンには正常に書き込みが完了したと通知しています。後に行なう、 実際のアレイへの書き込みでエラーを検出しても、どうしようもありません。
 OSやアプリケーションでは書き込みは成功したものとして次の処理に進んでいます。 書き込みを行なったアプリケーションが終了している可能性もあるわけです。
 MD4Ramのライトバック・キャッシュは、書き込みエラーは発生しないことを前提に 動作しています。エラーに発生しても、OSやアプリケーションは、実際のエラーを 検出できません。

ライトバック・キャッシュのフラッシュ同期処理について

 ライトバック方式でキャッシュに保存されているデータを、アレイに書き込む 処理をフラッシュ(flush)と呼びます。
 書き込みデータをキャッシュに溜め込んでいると、アレイ内容と同期していない データが増えてきます。同期していない領域が多いと、何らかの事故やエラーが 発生したときの危険性が高まります。
 このためMD4Ramでは、キャッシュとアレイのデータ内容を同期するために、 定期的にフラッシュを行ないます。
 MD4Ramのフラッシュ処理は最小・標準・最大の3段階があります。listモードでは、 この3つに加えてスポット・フラッシュというがあります。
 実際の間隔やフラッシュするデータ量はキャッシュ・アレイ容量によって 異なりますが、基本的には後のレベルほど頻度は下がり、逆に一度に書き込み するデータ量は多くなります。
 標準の設定では1分・3分・5分に設定しています。時間以外でもキャッシュの 使用量や、書き込みデータ量によっても各レベルのフラッシュが行なわれます。 詳しくは下記の表を見てください。
 また、listモードでキャッシュを使い切って容量が不足すると、 適時スポット・フラッシュが実行されます。tableモードではキャッシュ容量が 不足することはないので、スポット・フラッシュはありません。

 最小フラッシュは「Min Flush Blocks」か「Flush Range」の範囲内にある 非同期ブロックをアレイに書き込みします。
 標準フラッシュは非同期ブロックが「Min Spool Blocks」以下のブロック数に なるまで、アレイに書き込みします。
 最大フラッシュはすべての非同期ブロックをアレイに書き込みします。
 ただし、フラッシュ処理は条件によって中断することがあります。処理時間が 「Flush Time Limit」を過ぎたり、書き込みブロック数が「Max Flush Blocks」を 超えると中断します。
 アレイの書き込み速度が遅い場合に非同期ブロックがたくさんあると、フラッシュ 処理に時間がかかります。その間、アレイを使う入出力処理が停止してしまうので、 中断条件を設定しています。

 ライトバック方式は実験段階ですが、ハードディスクと比較して書込速度が遅くて、 容量は数10Gバイト以内のアレイへの書込を速くすることを目標に調整しています( ようするにDVD-RAMのことです)。
 まだ、実験段階ですし現在の設定が最適かどうかまだわかりません。
 ライトバック・キャッシュのフラッシュ設定はGUI版のMD4Ramマネージャで 指定・変更できます。

■ tableモード フラッシュ設定
フラッシュ・レベル 最小 標準 最大
Max Spool Blocks
キャッシュ保持最大ブロック数
アレイ容量の15%
Min Spool Blocks
キャッシュ保持最小ブロック数
アレイ容量の10%
Flush Write Blocks
フラッシュ開始書込ブロック数
なし アレイ容量の10% なし
Flush Pass Time
フラッシュ開始経過時間
1分 3分 5分
Flush Time Limit
フラッシュ処理タイムリミット
30秒 30秒 60秒
Max Flush Blocks
最大フラッシュ書込ブロック数
アレイ容量の10% アレイ容量の25% アレイ容量の50%
Min Flush Blocks
最小フラッシュ書込ブロック数
アレイ容量の0.2%
Flush Range
非同期ブロック検索範囲
アレイ容量の0.5%
■ listモード フラッシュ設定
フラッシュ・レベル 最小 標準 最大
Max Spool Blocks
キャッシュ保持最大ブロック数
キャッシュ容量の75%
Min Spool Blocks
キャッシュ保持最小ブロック数
キャッシュ容量の25%
Flush Write Blocks
フラッシュ開始書込ブロック数
なし アレイ容量の5% なし
Flush Pass Time
フラッシュ開始経過時間
1分 3分 5分
Flush Time Limit
フラッシュ処理タイムリミット
30秒 30秒 60秒
Max Flush Blocks
最大フラッシュ書込ブロック数
キャッシュ容量の10% キャッシュ容量の25% キャッシュ容量の50%
Min Flush Blocks
最小フラッシュ書込ブロック数
キャッシュ容量の10%
(またはアレイ容量の0.2%)
Flush Range
非同期ブロック検索範囲
アレイ容量の0.5%

 アレイ全体をキャッシュできるtableモードでは、設定によってはキャッシュだけを使い アレイにはまったく書き込みしないという使い方も可能です。しかし、安全性とアレイの 停止・削除に時間がかかるという問題があるのでお勧めしません。
 アレイ動作中にフラッシュをまったく行なわなかったから、アレイを停止・削除したときに 全データのフラッシュを行なわれます。この処理は中断できませんし、アレイの書込速度や 遅かったり、同期していないデータが多いとフラッシュ処理に長い時間がかかります。

Windows標準ディスクキャッシュとの併用について

 Windowsのディスクキャッシュはディスク専用というわけではなく、 OSやアプリケーションが利用していない空きメモリを活用しています。 空きメモリを活用するという点では効率はいいのですが、プログラムをロードしたり、 アプリケーションがメモリを必要とすると使用できるディスクキャッシュ容量が 減ってしまいます。
 このため繰り返し利用しているデータであってもキャッシュから消えてしまい、 ヒットしないことがあります。

 一方、MD4Ramではディスクキャッシュ専用にデバイスを割り当てますし、table モードなら丸ごとキャッシュして、いったん確保したキャッシュ領域はアレイを停止するまで 開放することはありません。
 listモードは容量が限られているので、すべてがキャッシュできるわけでは ありませんが、内部でデータの使用回数を調べて、利用頻度の高いデータをなるべく キャッシュに残すようにしています。
 こういった処理によりWindows標準のディスクキャッシュと併用しても、 それなりに効果があります。

各タイプ・モードの特長

 MD4Ramのディスクキャッシュについて各タイプ・モード別の特長を表にまとめてみました。
 この特長はDVD-RAMのようにアクセスの遅いデバイスをアレイにし、キャッシュ・デバイスは tableモードはハードディスクを、listモードはRAMディスク(メモリ)を使うことを想定しています。

 tableモードとlistモードは動作原理としては大きな違いはありません。両者の違いは キャッシュの容量で決まります。キャッシュ・デバイスの容量がアレイと同じだけあれば tableモードを使い、キャッシュのほうが容量が小さいのならlistモードを使うことになります。
 ほとんどの場合、tableモードはキャッシュデバイスにハードディスクを使うことになります。 tableモードを使うためにはアレイと同容量で、より高速なキャッシュ・デバイスが 必要になります。DVD-RAMのように数Gバイト程度のアレイでも、より高速で大容量となると ハードディスクしか選択肢がありません。
 一方、listモードではより高速なRAM(メモリ)をキャッシュに利用できますが、 容量は限られています。メモリの搭載量にもよりますがGバイト単位で確保するのは 困難です。
 table/listモードの違いは、大容量のハードディスクをキャッシュにするか、 容量は少ないがより高速なRAM(メモリ)をキャッシュにするかです。

■ キャッシュ タイプ/モード別の特長
タイプ・モード シーケンシャル ランダム 安全性 特長
メリット デミリット
キャッシュなし *1 *1 × アレイの本来の速度での読み書き。 アレイの本来の速度での読み書き。
tableモード
ライトスルー
*1 *2 *3 読み込み中心で利用する場合に向いている。アレイにファイルを格納したまま長時間利用するケースに向いている。 シーケンシャルアクセスには高速化の効果は少ない。アレイから別ドライブにファイルをコピーするような1回だけアクセスして作業が終了するような使い方ではあまり効果はない。
tableモード
ライトバック
*1 *1 *4 キャッシュデバイスが十分高速なら読み書き共に高速化できる。特に比較的小さなファイルを大量に書き込みするケースには有効。 読み込み中心ならライトバック方式の効果はない。フラッシュ処理によってアレイを使うOSやアプリケーションが一時的に停止状態になることがある。
listモード
ライトスルー
*1 *2 *3 読み込み中心で利用する場合に向いている。アレイから別ドライブにファイルをコピーするような使い方に向いている。 シーケンシャルアクセスには高速化の効果は少ない。キャッシュ容量が少ないと効果がない。
listモード
ライトバック
*1 *1 × キャッシュ容量が十分あれば、読み書きともに高速化できる。差分・更新バックアップのように、転送データ量が限定できる使い方で効果がある。 読み込みが中心ならライトバック方式の効果はない。キャッシュ容量が少ないと効果がない。フラッシュ処理によってアレイを使うOSやアプリケーションが一時的に停止状態になることがある。アレイへの書き込みに失敗するとデータを消失する危険性がある。
*1  本来、シーケンシャルアクセスにはキャッシュの効果は期待できないが、 ファイルシステム(FAT/NTFS等)を通したファイルの読み書きでは、 管理情報を定期的に取得・更新するためにキャッシュを使ったほうが速くなる場合がある。
*2  キャッシュデバイスが十分高速であればシーケンシャルアクセスが遅くなることはないが、高速化は期待できない。
*3  ライトスルー方式ではランダムアクセスの書き込みが速くなることはないが、 ファイルの読み書きによるランダムアクセスでは読み込みも同時に行なわれ シーク回数/距離が低減することで多少の効果がある。
*4  ライトバック方式ではOSやアプリケーションに正確な書込エラーを通知することができないが、 tableモードではキャッシュにデータが残っている。


5-3  暗号化について

 暗号化はアレイ全体を暗号化する方法と、個別のデバイスを暗号化する方法が あり、それぞれ独立しています。したがって、アレイ暗号化とデバイス暗号化を同時に 指定すると2重に暗号化がかかることになります。
 ただし、デバイス暗号化はRAMディスクタイプは暗号化を無視します。RAMディスクは アレイを削除すると内容が保持できないので、暗号化してもあまり意味はありません。 どうしても、RAMディスクも暗号化したい場合はアレイ暗号化を指定してください。

 通常はアレイ暗号化を使うと思いますが、デバイス暗号化を使うとミラーリングを 構成するデバイスのうち一方だけを暗号化するといったことが可能です。また、 デバイス毎に異なる暗号アルゴリズムを使うことも可能です。

 暗号化アルゴリズムはBLOWFISHとAESをサポートしています。BLOWFISHでは448 ビット(56バイト)、AESでは256ビット(32バイト)のキーを使います。--keyfile オプションでキーの保存されたキーファイルを指定するか、--passwordオプションで キーを生成します。
 --keyfileオプションで指定するキーファイルは先頭から必要な長さのデータを キーとして使います。指定したキーファイルが存在しない場合--createfileオプション を指定しておくとキーを自動生成します。
 キーの自動生成は日時と乱数を組み合わせるので、毎回違った内容のキーを生成 します。
 キーファイルの内容がもれたら暗号は解除されてしまうので、管理には十分注意 してください。また、キーファイルをなくしてしまったら復元は無理です。

 --passwordオプションを指定する方法では、パスワードとして指定された文字列 からキーを生成します。同じパスワードを指定すると、毎回同じキーを生成します。 キーからパスワードには戻せません(キーがばれたら暗号は解け てしまうのでパスワードに戻す意味はありませんが)。--password オプションで生成されるこのキーはどこにも保存されません。

 署名ブロックを利用している場合、アレイ作成時にパスワード/キーファイル 一致しているかどうか確認できます。もし、暗号方式が違ったりパスワード/キー ファイルが一致していないと警告が表示されます。警告を無視してアレイを作成する ことも可能ですが、その場合は正しい内容は読み取れません。
 署名ブロックを利用していない場合、キーファイルやパスワードが一致しなくても 警告もエラーもありません。ただし、パスワード/キーファイルが一致しない状態では 正しい内容は読み取れません。Windowsは正しいファイルシステムとして認識 できないので、ファイルの読み書きもできません。
 パスワード/キーファイルが一致しない状態でアレイに 書き込みを行なうと、以後正しいパスワード/キーファイルを使っても完全な復元は 不可能になるので注意してください。

 署名ブロックには暗号方式とパスワード/キーファイルを確認するための確証 コードが格納されます。パスワードを指定した場合はパスワード文字列から、 キーファイルを指定した場合はキー内容から256ビット(32バイト)の確証用 コードを作成します(アルゴリズムはMD5とSHA256を組み合わせています)。 この確証コードを使ってパスワード/キーファイルが正しいか確認します。
 確証コードはパスワード/キーファイルとシリアル値の2つを組み合わせて作成 していますが、実際の暗号化の解除にはシリアル値は使いません。
 何らかのトラブルで署名ブロック内のシリアル値が壊れてしまったり、 誤って署名ブロックを更新してしまってシリアル値が書き変わってしまうと、 正しいパスワード/キーファイルを指定してもパスワード/ファイルが一致しない という警告が表示されます。しかし、パスワード/キーファイルが正しければ、 この警告を無視してアレイを作成することで、暗号の解除が可能です。

 アレイ作成時に--ignore-crtotoSnオプションを指定すると、シリアル値を 利用しない確証コードを作成します。通常、シリアル値を利用していれば、 パスワード/キーファイルを使っていても、アレイが異なれば確証コードは 違った内容になります。しかし、シリアル値を利用しない場合、同じパスワード/ キーファイルを使うと、アレイが違っても同じ確証コードになります。

 いったん暗号化したアレイやデバイスを、パスワード/キーファイルを指定 しないでアレイを作成することも可能です。
 もちろんこの状態では暗号化する以前の内容は読み込みませんが、md4rctlの Readコマンドなどは暗号化したイメージのまま読み込みできます。つまり、パスワード /キーファイルがわからなくてもイメージファイルの分割や統合、複製は自由にでき ます。操作後に、正しいキーで開けば元の内容が読み取れます。
 ただし、アレイとデバイスに多重に暗号化がかかっていると、ややこしいことに なるので、お勧めはしません。
 暗号化を行なう場合は、署名ブロックを作成しておくことをお勧めします。 署名ブロックがあれば、アレイ作成時と暗号化が一致しているか確認できます。

 アレイの暗号化とMD4Ramのディスクキャッシュを併用した場合、キャッシュデバイスには 暗号化した状態でデータは格納されます。高速化のためのキャッシュなら、暗号化 をパスする方法もありましたが安全のためにこのようにしました。
 MD4Ramのディスクキャッシュはアレイに対して行なわれるので、デバイスの 暗号化については何ら影響や効果はありません。アレイに暗号化を指定しなければ、 デバイスに暗号化を指定しても、キャッシュのデータは暗号化されません。


5-4  使用できるアレイ数を変更する

 標準設定ではディスク アレイを2個、CD/DVDアレイは1個だけ作成できますが、レジストリを編集することで、それぞれ16個まで増やすことができます。
 レジストリキー KEY_LOCAL_MACHINE\SYSTEM\CurrentControleSet\Services\MD4Ram\Parameters にある、NumberOfDevices がディスクアレイ数、NumberOfCdroms がCD/DVDアレイ数ですので、これらの値を変更してください。
 収録している登録エントリmd4ram.reg を編集してから、実行するという方法もあります。

 レジストリの変更はMD4Ramドライバサービスが起動していない状態で行ってください。また、レジストリを変更したらドライバサービスを再起動するか、Windowsを再起動してください。


5-5  RAMディスクの容量について

 RAMディスク(キャッシュを含む)は最大で2Gバイトまで指定できますが、実際に使用できる容量はOSによる制限があります。
 RAMディスクのメモリ確保の方法には、非ページメモリとページメモリの2種類があます。このメモリタイプはMD4RCtlコマンドの--ramtypeオプション(onpaged/paged)で指定できます。 GUI版MD4Ram Managerでは[Tool - ツール]メニューの[Option - オプション]→[Genral]タブで指定できます。
 非ページメモリはページングの対象にならないメモリ領域です。特に指定のない場合、この方法でメモリを確保します。
 ページメモリはページングの対象となるメモリ領域です。空きメモリが少なくなると、利用頻度の低いデータはハードディスク等にページアウト(スワップ)されます。
 これらの利用可能な容量はOSが搭載メモリに応じて決めています。ほとんどの場合、最大でも数100Mバイト程度です。
 パフォーマンスの点ではページアウトしない非ページメモリのほうが上回るかと思います。
 利用可能なサイズについては、他のドライバやソフトウェアの使用状況に影響されるので、なんともいえません。他のドライバやソフトウェアがこれらのメモリを利用していると、当然MD4Ramで利用できる容量は減ります。
 指定された容量のメモリが確保できない場合、「システム リソースが不足しているため、要求されたサービスを完了できません。」 といったエラーになります。
 このエラーが発生した場合は、--ramtypeオプションでメモリタイプを変更を試してください。

 利用可能な最大サイズを確認する方法はわかりませんが(適当な容量を指定してエラーになったら、限界なのは確実ですが)、現在の使用量はタスクマネージャで確認できます。タスクマネージャはタスクバーを右クリックしてメニューから[タスクマネージャ]を選択すると開きます。[パフォーマンス]タブをクリックして画面を切り替え、「カーネルメモリ(KB)」として表示されている情報を見てください。


5-6  注意・制限事項


付録A  参考

 MD4Ramを開発するにあたって次の資料/書籍/ソフトウェアを参考にしました。


付録B  変更履歴