« 日本橋 | メイン | (続)WinXP-ProでソフトウェアRAID »

2005年08月07日

WinXP-ProでソフトウェアRAID

さて、先日の日記のとおり、HDDを買ってきたわけです。
せっかく新しい大容量HDDを買ってきたんだから、性能のいいHDDをメインで使いたい!
しかし、インストールし直すのはめんどくさ過ぎる!
で、出来れば古いHDDを有効活用して、データを安全に守りたい。

新しいHDDにデータをコピーしたらいいじゃない。
っと思っても、それは実は上手くいかない。
Win XPはインストールされたHDD(正確にはパーティション)を覚えているから。
ちなみに、HD上のデータを移動させるための専用のツールを使えば問題ない…かも。
ANTIDOTE for PCとか、3000円ぐらいでお手軽です。(不慣れな人なら、3000円分の作業時間は減らせます。

まぁ、HDDコピーツールは手元にあるんですが…仕事柄
今回は、さらに古いHDDと新しいHDDでソフトウェアRAIDを組んで、データの冗長化を図りたいと思います。
この手法の流用すれば、まったく再インストールせずに、換装したHDDにデータを複写することも出来ます。

これには、Windowsのhackが必要です。
OSやファイルシステムについて理解してる方のみお読みください。

まず始めに、諸注意

  • ここに書かれた内容は、あくまで私の環境での話です。
    環境によっては上手くいかないことがあります。
  • OSの改造を伴います。Microsoft社のサポートを受けられなくなります。
  • 失敗したら、全データが消えます。
  • ダイナミックディスクを利用します。
    なにそれ?って方は止めておいたほうがいいです。
  • 以前の環境には戻せません。
  • 市販バックアップソフトは、利用できなくなるものが多いです。
    (BIOSレベルでHDを読むものは、ダイナミックディスクに対応してない為)
  • マルチブート環境には対応できません。
  • WindowsXP-Homeを省く、Windows2000以降のWindowsOSでしかHDDが利用できなくなります。
  • ブートボリューム(パーティション)がディスクの先頭位置にある必要があります。
  • 作業後は、Disk構造を維持したままWindowsXPの再インストールが出来ません。
    (フォーマットをすれば可能です。)
  • 質問・苦情は一切受けません。すべて自己責任でお願いします!

必要な環境

  • Windows XP Professional、または、Windows 2000 Professional
    (Homeは不可。Server系Winはデフォルトで出来ます。)
  • 2台以上のATA/SATA HardDisk
    (メーカー容量は別で構いません。が、あまり速度差があると不便)
  • バイナリエディタ
    (HexEditorあたりがお勧め)
  • WindowsインストールCD
  • ほんの少しの挑戦心と溢れる慎重さ

私の環境は、Windows XP Professional SP2(無印からのUPDATE) AthlonMPのDual、AMD-768チップセットです。

ここの例では、
  メインドライブ60GB (パーティション:20GB+40GB)
の構成を、
  メインドライブ250GB (RAID1:20GB + 20GB + RAID1:20GB + 160GB + RAID0:20GB)
   サブドライブ 60GB (RAID1:20GB + RAID1:20GB + RAID0:20GB)
と変えてみたいと思います。
(色を揃えた部分が、RAIDの組)

作業手順

まず始めに、万が一にも消えたら困るデータは、CD-Rに保存する等でバックアップしましょう。

一度、HelpやMS社のオンラインドキュメントで、ダイナミックディスクや、ミラーボリュームの詳細について確認しておくことをお勧めします。

作業は、すべて管理者権限のあるユーザーで行います。
適当なフォルダ(dmtmpとします)をCドライブに作り、以下のファイルをコピーします。
  \windows\system32\dmadmin.exe
  \windows\system32\dmconfig.dll
  \windows\system32\drivers\dmboot.sys
(winntフォルダにインストールしてる場合は、windowsをwinntに読み替えてください。)
オリジナルファイルのバックアップも取ったほうが良いです。

dmtmpフォルダの中の3ファイルを、バイナリエディタで以下のように編集します。

dmadmin.exe
検索で servernt を探し、 winnt___ (_は0x00(null)の代わり)に置き換えます。(1箇所)
servernt(8byte)をwinnt(5byte)で置き換え、差の3byteを0x00で埋めるということです。_を入力してはいけません。
dmboot.sys
検索で WINNT を探し、 WINNT___SERVERNT を SERVERNTWINNT___ に置き換えます。(1箇所)
_は0x00で埋めの意。
dmconfig.dll
検索で WINNT を探し、 SERVERNT____WINNT___ を WINNT_______SERVERNT に置き換えます。(1箇所)
_は0x00で埋めの意。

以下の位置に、編集したファイルを上書きします。
\windows\system32\dmadmin.exe
\windows\system32\dmconfig.dll
\windows\system32\drivers\dmboot.sys
\windows\system32\dllcache\dmadmin.exe
\windows\system32\dllcache\dmconfig.dll
\windows\system32\dllcache\dmboot.sys
上書きすると、「これは保護されてるよ」とか文句言われるかもしれません、がんばって。
(ちなみに、私は同じPC上のWin2000からXPのファイルを弄ったので…)

以上が終われば、再起動してください。
これで、XP-ProでソフトウェアRAIDが利用できるようになります。

もし、旧ディスクのパーティションサイズをPartitionMagic等で変更したい場合は、この段階で行ってください。以後は不可能になります。

新HDDを繋ぐ編

通常に起動できることを確認出来たら電源を落とし、新HDD(だけ)をプライマリマスターに繋げます。
XPのインストールCDで起動し、回復コンソールに入ります。
コマンド入力画面になったら、fixmbr と入力します。
exitを入力すれば終了できます。

終われば、プライマリマスターに旧HDD、セカンダリマスターに新HDDを繋ぎます。

ディスク管理編

管理ツール→コンピューターの管理から、ディスクの管理画面を出します。
ボリューム(パーティション)設定画面で、左の新HDDを右クリックし、ダイナミックディスクに変換します。
右のパーティション画面で右クリックし、新HDDに新しいボリュームを作成する画面を出した時に、ボリュームの種類に「ミラー」や「RAID5」があれば、成功しています。

次に、旧HDDを右クリックして、ダイナミックディスクに変換します。
この作業は不可逆です。
起動中には出来ないよ。と怒られ、再起動させられます。

一度起動するとダイナミックディスクに変わりますが、HDDの認識が変わる為、さらに再起動となります。

ディスクの管理画面を起動します。
新HDDにボリュームが無い状態にします。
 (ディスクの頭(左)側さえブートボリューム分空いていれば、後ろ(右)にボリュームがあってもOK)
今のブートボリューム(Cドライブ)を右クリックし、「ミラーの追加」をクリックし、ミラーに新HDD(Disk1になってるはず)を指定します。
ミラーリングの構築が始まりますので、PCに触れずに待ちましょう。
データコピーに比べ、格段に早く出来ました。

ミラーリングが終わったら、再起動します。
起動時のOS選択画面で、"Boot Mirror C: - secondary plex"が増えているはずなので、こちらを選択して起動してみましょう。
新HDDからデータを読み込んで起動されます。

次に、新HDDをプライマリマスターに、旧HDDをセカンダリマスターに繋ぎ換え、通常に起動してみましょう。
問題なく起動できれば、新HDD単独での起動も問題ありません。

もし、ミラーリングが不要で、旧HDDは別のことに利用したい場合は、この段階まできたら、新HDDから起動して、ディスクの管理画面でCドライブを右クリックして、"ミラーボリュームの解除"または、"ミラーの削除"をすると旧HDDを開放できます。
"ミラーボリュームの解除"をしてから再起動して、新HDD単独で起動できることを確認した後に、旧HDDのボリュームを削除する事をお勧めします。

以上で作業終了です。

これ以降は、Microsoft社のWindowsUpdateやServicepack等で上記3ファイルが書き換えられないように、十分気をつけてください。
(万が一書き換えられると、ミラー、ストライプ、RAID5のボリュームは一切認識できず、致命的な状況に陥ります。)

うちでは、こんな感じに仕上がりました。
C:\ … OS専用領域 (RAID1)
D:\ … 主要なProgram files専用領域
E:\ … 重要なデータの保存ミラー領域 (RAID1)
F:\ … 事故で消えても問題ないデータ領域(ゲームとか)
J:\ … 高速作業の為のストライプ領域 (RAID0)

まぁ、ぶっちゃけ実は、完全に入れなおししてるんですが(笑
(ちゃんと、上記手順を一度確認した後に、やっぱり身軽にしたくなったらしい

性能をみる

性能のほどはというと、十分に実用的です。
CPU負荷率は、「HDDの書き込みで負荷が増えている」様子が確認できないほど少ない上昇です。

以下の記事は間違っています。やり直したベンチマークを確認してください。

HGSTの250GB/ATA133/8M/7200rpmと、SeagateのBarracuda ATA IV(60GB/ATA100/2M/7200rpm)で組んでるわけですが、単体でのベンチマークは、HGSTがBarracuda4に対して、Read/Writeは1.5倍ほど、Ramdomは2倍ほど高速でした。
(まぁ、2世代違う上に新品と使い込んだHDDだしね)

RAID1(ミラー)では、Read は低速HDDより1割ほど早く、Writeは低速HDDとほぼ等速。RamdomReadはかなり早くなり高速HDDの1.3倍ほどに伸びました。RamdomWriteは低速HDDよりやや遅い程度です。

RAID0(ストライプ)では、Readは高速HDDよりやや早い程度、Writeは高速HDDより1割ほどダウン、RamdomReadが高速HDDの15%程度ダウン、RamdomWriteが高速HDDの25%ほどダウン

スパンボリュームも作って計測したところ、Read/Writeは低速HDDとほぼ等速、Randomは高速と低速のちょうど間ぐらいという結果に。
Diskを繋げて順の位置に書いていくというスパンの仕組みに適合した結果に(笑

うちの結論をまとめると

  • 現在のCPUとBUS速度なら十分にソフトRAIDは使える。
  • RAID1は低速側HDDよりちと速い程度。
  • RAID0は高速側HDDより速くならないので、期待するな。
    各Diskの領域を集合させたい時にはいいかも。
  • スパンは、後からDiskを継ぎ足して使いたい領域で使うといい。
    (ストライプとミラー領域は拡張できず、また同じサイズの領域をDisk毎に使います。)

そんなに速度を求めないなら、別々に買ったDiskを活用できて良いのではないでしょうか。
…でもHackだけどね。
まぁ、自己責任で…

投稿者 kaho : 2005年08月07日 16:25

コメント