こんにちは、阿久津です。遂にWindows 8(開発コード名)の開発プレビュー版が公開されましたね。筆者もWindows 8をいじり倒して遊んでいる最中ですが、さすがにすべての機能が実装されていないバージョンを実機に入れる訳にはいかず、VMware Workstation 8にインストールした次第です。

同環境は画面撮影には便利ながらも、そのOSが持つ操作感を全てつかみきることができません。しかし、Windows 7が快適に動作するマシンを別途用意するのは、金銭的にも設置スペース的にも難しい話。そこで、仮想ディスクであるVHD形式ファイルを用いた起動を試してみました。

手持ちのノートPCであるThinkPad X201sにインストール済みだったUbuntuのパーティションを破棄し、Windows 7用のボリュームサイズを拡大。Diskpartコマンドで20GBのVHD形式ファイルを作成して、USBメモリーにコピーしたWindows 8のセットアッププログラムを起動。

コマンドプロンプトを起動し、VHD形式ファイルを仮想ディスクとしてマウントしたら、あとはWindows 8のセットアッププログラムを続行するだけ。前から仕様書は読んでいましたが、実際に試すのは初めて。加えてWindows 8のセットアッププログラムが既存のWindwos 7を検出し、BCD情報を自動的に書き換えるため、マルチブートに関する設定も不要。これでWindows 8のメトロUIを体感することができました。

Windows 8に関する評価は別の記事で触れたいと思いますが、何百回とマルチブート環境を構築してきた筆者にとって、既存環境への影響を最小限に抑えるVHD形式ファイルを用いたマルチブートは、目から鱗が落ちる思いです。時間があれば、ThinkPadのストレージを大容量HDDに入れ替えて、Ubuntuを復活させてみたくなりました。

さて、Windows 7におけるVHD形式ファイルのマウントは、ディスクの管理ツールもしくはdiskpartコマンドを使用します。しかし、どちらも冗長的な手順を踏まなければならないのが欠点です。

Windows XP時代の連載記事では、Virtual Server 2005 R2に付属するvhdmount.exeというコマンドラインツールを、VHD形式ファイルのコンテキストメニューから呼び出し、マウント/アンマウントするチューニングを行いました。しかし、Windows 7に同様のコマンドは用意されていません。

そこで今回は、diskpartコマンドとバッチファイルを使用して、VHD形式ファイルをコンテキストメニューからマウント/アンマウントするチューニングをお送りしましょう。

1.囲み01~02の内容をバッチファイルとして作成します。
2.管理者権限でレジストリエディターを起動します。
3.HKEY_CLASSES_ROOTキーに.vhdキーを作成し、shell\mount\commandキーを作成します。
4.同じくshellキー下に、\unmount\commandキーを作成します。
5.mount\commandキーの「(既定)」のデータ値を、ステップ01で作成したバッチファイル「c:\vhdmount.bat %1」に変更します。
6.unmount\commandキーの「(既定)」のデータ値を、ステップ01で作成したバッチファイル「c:\vhdUnmount.bat %1」に変更します。
7.[F5]キーを押してからレジストリエディターを終了します。

これでチューニングが終了しました(図01~23)。

図01: [Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「notepad」と入力して<OK>ボタンをクリックします

図02: メモ帳が起動したら囲み01の内容を正しく入力し、<×>ボタンをクリックします

図03: 保存をうながすメッセージが表示されたら<保存する>ボタンをクリックします

図04: テキストボックスに「c:\vhdmount.bat」と入力し、<保存>ボタンをクリックします

図05: 先の手順を参考にメモ帳を起動し、囲み02の内容を正しく入力して<×>ボタンをクリックします

図06: 保存をうながすメッセージが表示されたら<保存する>ボタンをクリックします

図07: テキストボックスに「c:\vhdUnmount.bat」と入力し、<保存>ボタンをクリックします

図08: [Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「regedit」と入力して<OK>ボタンをクリックします

図09: レジストリエディターが起動したら、HKEY_CLASSES_ROOTキーを開きます。同キーを右クリックし、メニューから<新規>→<キー>とクリックします

図10: 「新しいキー #1」の名前を「.vhd」に変更します

図11: 先ほど作成した.vhdキーを右クリックし、メニューから<新規>→<キー>とクリックします

図12: 「新しいキー #1」の名前を「shell」に変更します

図13: shellキーを右クリックし、メニューから<新規>→<キー>とクリックします

図14: 「新しいキー #1」の名前を「mount」に変更します

図15: mountキーを右クリックし、メニューから<新規>→<キー>とクリックします

図16: 「新しいキー #1」の名前を「command」に変更します

図17: commandキーの右ペインにある「(既定)」をダブルクリックで開き、値のデータを「C:\vhdmount.bat %1」に変更して<OK>ボタンをクリックします

図18: 先ほど作成したshellキーを右クリックし、メニューから<新規>→<キー>とクリックします

図19: 「新しいキー #1」の名前を「unmount」に変更します

図20: unmountキーを右クリックし、メニューから<新規>→<キー>とクリックします

図21: 「新しいキー #1」の名前を「command」に変更します

図22: commandキーの右ペインにある「(既定)」をダブルクリックで開き、値のデータを「C:\vhdUnmount.bat %1」に変更して<OK>ボタンをクリックします

図23: 操作を終えたら[F5]キーを押してから、<×>ボタンをクリックしてレジストリエディターを終了させます

早速結果を確認しましょう。VHD形式ファイルを右クリックしますと、<mount><unmount>の二項目が加わったこと確認できたことでしょう。前者は囲み01のバッチファイルを実行し、VHD形式をマウントします。後者は囲み02のバッチファイルを実行して、VHD形式ファイルをアンマウントしています(図24~27)。

図24: VHD形式ファイルを右クリックしますと、メニューに<mount><unmount>の二項目が追加されました

図25: VHD形式ファイルをダブルクリック、もしくは<mount>をクリックすれば、バッチファイルが実行されVHD形式ファイルがマウントされます

図26: <unmount>をクリックしますと、同じようにバッチファイルが実行され、VHD形式ファイルがアンマウントされます

今回はコンテキストメニューから渡された引数をバッチファイルが受け取り、その内容をテキストファイルとして保存。そして、そのテキストファイルをdiskpartコマンドのスクリプトファイルとして渡し、VHD形式ファイルのマウント/アンマウントを実行しています。

そのため、必ずテキスト(スクリプト)ファイルが生成されますが、ホストドライブのルートフォルダーにファイルが生成されるのを好まない場合は、バッチファイル内で定義している環境変数「FN」を「%TEMP%\vhdmount.txt」などに変更しましょう。また、バッチファイルの置き場を変更する場合は、ステップ05~06で指定したパスの変更も忘れずに実行してください。

それでは、また次号でお会いしましょう。

囲み01

@echo off
setlocal
set FN=C:\vhdmount.txt

echo sel vdisk file="%1" > %FN%
echo attach vdisk >> %FN%

diskpart -s %FN%

endlocal

囲み02

@echo off
setlocal
set FN=C:\vhdUnmount.txt

echo sel vdisk file="%1" > %FN%
echo detach vdisk >> %FN%

diskpart -s %FN%

endlocal

阿久津良和(Cactus)