こんにちは、阿久津です。遂に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)。
早速結果を確認しましょう。VHD形式ファイルを右クリックしますと、<mount><unmount>の二項目が加わったこと確認できたことでしょう。前者は囲み01のバッチファイルを実行し、VHD形式をマウントします。後者は囲み02のバッチファイルを実行して、VHD形式ファイルをアンマウントしています(図24~27)。
今回はコンテキストメニューから渡された引数をバッチファイルが受け取り、その内容をテキストファイルとして保存。そして、そのテキストファイルを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)