MD4Ram - Multi Device Driver for R.A.M. (BETA) Version 0.99a edition #01 (BETA)
(C) Copyright 2005, 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  Panasonic/B.H.A. DVD-RAMドライバ。
 Windows 2000環境でDVD-RAMとMD4Ramを使うためにはDVD-RAMドライバは必須です。

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


  1-2 ファイル構成

ファイル名 説明
md4ram.sys ドライバ プログラム
md4ram.reg ドライバ インストール用レジストリ登録エントリ
md4rctl.exe 制御コマンド プログラム
Debug\md4rctl.exe 制御コマンド プログラム(デハッグ用)
md4ram.htm 説明(本ファイル)

 ベータ版のためデバッグ用Debug\\md4rctl.exeを収録しています。基本的な動作はリリース版と同じですが、途中経過や動作状況などの情報を表示するようになっています。
 表示内容は開発者が見ないとわからないと思いますが、ブログラムが意図したとおりに動作しない場合はデバッグ版を使ってみてください。


  1-3 実行環境


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

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

  1.  著作権表示を変更しないこと。
  2.  このプログラムを使用したことによって生じた損害はまったく保証しない。
  3.  作者はこのプログラムに不備があっても、それを訂正する義務を負わない。
  4.  ベータ版につき転載・再配布は禁止します。
 感想・障害報告等、作者への連絡は、

e-mail taro.kobayashi@nifty.com

まで、願いします。
 電子メールでのお問い合わせは返事が遅れたり、あるいは返信のメールが行かないこともありますので、予めご了承ください。
 開発途中のベータ版につき転載・再配布は禁止します。


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

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


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

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

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

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

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


  2-2 MD4Ramの使い方

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

※ 準備

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


net start md4ram

と入力して[Enter]キーを押してください。


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

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

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

ex.1.1/2-2


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-2


format x: /fs:fat

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

ex.1.3/2-2


md4rctl stop x:

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

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

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

ex.1.4/2-2


md4rctl start array0 x: --createfile --dev c:\disk.img --capacity 100M

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

ex.1.5/2-2


format x: /fs:ntfs

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

ex.1.6/2-2


md4rctl stop x:

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

ex.1.7/2-2


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-2


md4rctl start array0 x: --array mirror --dev ram --capacity 10M --primary --dev c:\ramdisk.img --createfile --capacity 10M

実際には1行で入力してください。

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

ex.2.2/2-2


md4rctl start array0 x: --array mirror --dev ram --capacity 10M --primary --dev c:\ramdisk.img

実際には1行で入力してください。

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

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

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

ex.2.3/2-2


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-2のようにXドライブを作成してYドライブからXドライブにファイルをすべてコピーすればいいわけです。
 ただし、同じイメージファイルc:\ramdisk.img を複数のアレイから使うことは危険なので、Xドライブには別個のイメージファイルramdisk2.imgを使います。
 たとえば、次のようにXドライブのアレイを作成します。
 Xドライブはarray0、Yドライブはarray1を指定している点に注意してください。

ex.2.4/2-2


md4rctl start array0 x: --array mirror --dev ram --capacity 10M --primary --dev c:\ramdisk2.img --createfile --capacity 10M

実際には1行で入力してください。

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

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

ex.2.5/2-2


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-2


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

実際には1行で入力してください。

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

ex.2.7/2-2


md4rctl start array0 x: --array linear --dev c:\part1.img --dev c:\part2.img --dev c:\part3.img --dev c:\part4.img

実際には1行で入力してください。


■ パート 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ドライブを2台でストライピングしたディスク アレイを作成する

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

ex.3.1/2-2


md4rctl start array0 x: --array stripe --dev i: --dev j:

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


[W: Write signature-block [I: Ignore error/warning [A: Abort : Push key ?

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

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

ex.3.2/2-2


format x: /fs:ntfs /q:

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

ex.3.3/2-2


md4rctl stop x:

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

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

[W: Write signature-block [I: Ignore error/warning [A: Abort : Push key ?

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

 署名ブロックが更新・書き込みできるデバイスが存在する場合には、[W]キーを押すと新しい署名ブロック書き込みます。
 [I]キーを押すとエラーや警告は無視して動作を続行します。
 [A]キーを押すと、中断してプログラムを終了します。

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

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

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

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

ex.3.2/2-2


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.3/2-2


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-2の方法で、DVD-RAM2台でストライビングしたアレイをXドライブとして作成します。FAT32では4Gバイトを超えるファイルは格納できないので、フォーマットは必ずNTFSにしてください。
 dvdrom.isoをXドライブにコピーします。
 Xドライブにコピーしたdvdrom.isoをCD/DVDアレイ機能を使ってQドライブとして使うには次のようにします。

ex.4.1/2-2


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-2


md4rctl start array0 x: --array stripe --dev i: --dev j:

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

ex.4.3/2-2


md4rctl write x: --readfile c:\dvdrom.iso

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

ex.4.4/2-2


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

ex.4.5/2-2


md4rctl start array0 x: --createfile --array stripe --dev c:\dvd1.img --blockSize 2048 --blockNumber 2016124 --dev c:\dvd2.img --blockSize 2048 --blockNumber 2016124

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

ex.4.6/2-2


md4rctl write x: --readfile c:\dvdrom.iso

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

ex.4.7/2-2


md4rctl start array0 q: --cd --array stripe --dev c:\dvd1.img --dev c:\dvd2.img

 Qドライブとして使用できることを確認したら、「md4rctl stop q:」でアレイを削除します。
 あとは、dvd1.igmと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-2


md4rctl start array0 q: --cd --array stripe --dev i:\dvd1.img --dev j:\dvd2.img

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

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

ex.4.9/2-2


md4rctl read q: --writefile c:\redvd.iso

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

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

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


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

 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 MD4RCtlコマンド詳細

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

■ アレイの作成・開始

MD4RCtl start <アレイ> [<ドライブレター>] [--array {LINEAR|STRIPE|MIRROR}] [--blockNumber <ブロック数>] [--blockSize <サイズ>] [--capacity <サイズ>] [--cd] [--chunkSize <サイズ>] [--createfile] [--ignore-readSign] [--readonly]
--dev <デバイス> [--blockAddr <アドレス>] [--blockNumber <ブロック数>] [--blockSize <サイズ>] [--capacity <サイズ>] [--createfile] [--ignore-readSign] [--primary] [--readonly] [--signBlock <ロケーション>]
[ --dev <デバイス> [--blockAddr <アドレス>] [--blockNumber <ブロック数>] [--blockSize <サイズ>] [--capacity <サイズ>] [--createfile] [--ignore-readSign] [--primary] [--readonly] [--signBlock <ロケーション>] ]・・・

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

【解説】

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

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

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

 RAMディスクの最大容量は2Gバイト(2^31バイト)です。ただし、搭載メモリを圧迫するようなサイズは指定しないでください。

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

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

■ アレイの削除・停止

MD4RCtl stop <ドライブレター>

【解説】

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

■ アレイの情報の表示

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

【解説】

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

■ アレイ内容を読み込み

MD4RCtl read <ドライブレター> --wrietfile <ファイル名>

【解説】

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

■ アレイ内容を書き込み

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

【解説】

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


  3-2 署名ブロックについて

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

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

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

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

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

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


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

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


  4-1 注意・制限事項


  4-2 参考

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


  4-3 変更履歴