2008.09.22

VirtualServer の仮想HDファイルをドライブとして参照(マウント)

なんだか意外に知られていないようなので、メモ2。

VirtualServer の仮想HDファイル *.VHD の中身をゲストマシン以外(ホストマシン等)でも見たい場合があります。
仮想マシンを起動していてネットワークが使える状態であれば、フォルダを共有したりすればよいのですが、
大量にファイルを移動させたい場合にわざわざ(仮想)ネットワーク経由になるのがいやだとか、
仮想マシンそのものを起動していない(メモリ不足で起動できない等)場合には
VirtualServerをインストールしたフォルダ \Program Files\Microsoft Virtual Server\ 中にある \Vhdmount\vhdmount.exe というコマンドでホストマシンのディスクとして見ることができます。
例:コマンドプロンプトで
 vhdmount /p <VHDファイル名>   仮想ファイルをドライブとして認識させる。
 vhdmount /u /d All   変更を破棄して全ての仮想ディスクを取り外す。

残念ながら VirtualPC には vhdmount.exe は付いておらず、このコマンドはコピーしただけでは動作しないので、最低限 VirtualServerをカスタムでインストールする必要があります。


ついでに、Windows Server 2008の Hyper-V にも vhdmount.exe が付いていませんが、
Hyper-Vの場合には自分で“プログラムを書く!”という方法が主に紹介(推奨?)されていて、
最も端折って書けば、以下です。

VhdMount.vbs

' マウントは VhdMount.vbs mount <vhdファイル名>
' アンマウントは VhdMount.vbs unmount <vhdファイル名>
With GetObject( "winmgmts:\\.\root\virtualization" )
With VHDSvc= .ExecQuery( "SELECT * FROM Msvm_ImageManagementService" ).ItemIndex(0)
Eval "." & WScript.Arguments(0) & "(""" & WScript.Arguments(1) & """)"
End With: End With
(手抜きなので、この後 サーバーマネージャー ⇒ ディスクの管理 から手動でディスクを『オンライン』にする必要があります)

他にも、C#.net や VBScript(WSH)での正しい?記述が以下にあります。
(MSDN) Mount Method of the Msvm_ImageManagementService Class

( Msvm_ImageManagementService を使ったプログラムは Hyper-Vの環境でしか使用できないようです)


※VirtualServer/VirtualPC と Hyper-Vの *.VHD には基本的には互換性があるようです。
ただし、ベースとなる仮想マシンが異なるため、一部ハードウェアの認識をしなおす必要がある場合があるのと、
Virtual~用の 追加機能と Hyper-Vの追加機能には互換性がないので、追加機能を入れなおす必要があります。
その際、Virtual~用の 追加機能のバージョンが 13.813以上でないと Hyper-Vの環境からはアンインストールできないようなので、
それ以下のバージョンの場合は、予めに Virtual~ の環境でアンインストール(もしくはアップグレード)しておく必要があります。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
ichikawa