SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Archive for the ‘Hyper-V’ Category

WMI で仮想マシンに Reservation を設定

leave a comment

昨日の Tech・Ed Japan 2010 の [T2-401]  Effective Hyper-V R2 SP1 〜 詳説 Dynamic Memory 〜 のセッション内で
以下のお話がありました。

  • WMI のクラスにプロパティが追加されている。
  • Reservation プロパティは WMI でしか設定できない。(GUI では設定できない)
  • 安定稼働してきたときに最低限確保しておくメモリ。Startup RAM より小さく設定できる。

早速、PowerShell で WMI を使用してこのプロパティを設定するためのスクリプトを書いてみました。

# 設定をする仮想マシン
$VMName = "RemoteFX"

# Reservation として設定するメモリサイズ (MB)
$MemReserve = 256

# 仮想マシンの管理サービス用のオブジェクト作成 (設定を Commit するのに使用)
$VM_Service = Get-WmiObject -namespace rootvirtualization -Class Msvm_VirtualSystemManagementService

# 対象の仮想マシンのベース情報を取得 (設定変更を Commit するにはこのクラスの PATH を指定する)
$VMC = Get-WmiObject -Namespace rootVirtualization -Class Msvm_ComputerSystem -Filter "ElementName=’$($VMName)’"

# 仮想マシンの設定情報を取得
# SettingType = 3 は現在の仮想マシンの構成情報 SnapShot が存在すると 5 の情報が増える
$VMS = Get-WmiObject -Namespace rootVirtualization -Query "Associators of {$VMC}  Where ResultClass=Msvm_VirtualSystemSettingData" `
| Where-Object {$_.SettingType -eq 3}

# 仮想マシンのメモリ設定情報の取得
$VMMS = Get-WmiObject -Namespace rootVirtualization -Query "Associators of {$VMS}  Where ResultClass=Msvm_MemorySettingData"

# 変更前のメモリ情報
Write-Output "Before : $($VMS.ElementName) , $($VMMS.DynamicMemoryEnabled) , $($VMMS.Reservation)"

# Reservation を設定するためには、DynamicMemoryEnabled を True にする必要がある。
$VMMS.DynamicMemoryEnabled = $true
$VMMS.Reservation = $MemReserve

# 変更後のメモリ情報
Write-Output "After : $($VMS.ElementName) , $($VMMS.DynamicMemoryEnabled) , $($VMMS.Reservation)"

# 変更を確定
$Result = $VM_Service.ModifyVirtualSystemResources($VMC.__PATH, $VMMS.psbase.Gettext(1))

 

WMI でプロパティを設定する場合、[ModifyVirtualSystemResources] を設定しないと変更は確定されないですね。
また、[ModifyVirtualSystemResources] が True でないと Reservation の設定が反映されないようです。

今回、初めて WMI で仮想マシンを触ったのでこの辺がわからず、四苦八苦しました。
開発はもうあまり携わらいのですが、このようなスクリプトをもっと可読性と汎用性を高めて作成するようになりたいものです。
# 今回も見づらいコードですよね。

Written by masayuki.ozawa

8月 28th, 2010 at 8:27 am

Posted in Hyper-V

256 MB の GPU 搭載サーバーでRemoteFX が有効なゲスト OS は何台起動できるか。

leave a comment

検証環境の一台には RemoteFX を検証するために 256 MB の GPU を搭載しています。
以下が、GPU-Z というツールで取得した GPU の情報になります。
image

この環境で何台 RemoteFX 3D ビデオアダプターが有効になっているゲスト OS を起動できるかを試してみました。

結論から言ってしまいますと 1 ~ 3 台起動することが可能です。

RemoteFX 3D ビデオアダプターの技術情報として以下の情報があります。
Hardware Considerations for RemoteFX

この情報の中に、解像度と使用するモニター数の設定による必要となるメモリについての記載があります。
RemoteFX 3D ビデオアダプターで使用される GPU のメモリですが、解像度とモニター数に依存するようです。

RemoteFX 3D ビデオアダプターを追加した直後のデフォルトの状態では、
[モニターの最大数][1]
[モニターの最大解像度][1280 × 1024]
となります。
image

この状態ですと、[125 MB] のメモリが消費されることになります。
[125 MB × 2 = 250 MB] ではありますが、GPU に搭載しているメモリがフルに使えるかといわれるとそうでもないはずですので、
この状態では 1 台までRemoteFX 3D ビデオアダプターが有効になっているゲスト OS を起動することが可能です。

2 台目を起動しようとすると GPU のメモリが不足して以下のエラーになります。
image

[モニターの最大数][1]
[モニターの最大解像度][1024 × 768]

の場合は、使用されるメモリは [75 MB] となりますので [75 MB × 3 = 225 MB] で 3 台起動することが可能です。
RemoteFX ~ RemoteFX4 のゲスト OS で RemoteFX を有効にして解像度を 1024 × 768 にして起動できる台数を
確認した結果がこちらになります。

image

4 台目の起動でエラーになりましたが、[1280 × 1024] と比較して起動できる台数が増えています。

解像度とモニター数の設定による GPU のメモリの使用量ですが、RemoteFX USB デバイスリダイレクトにも影響します。
USB デバイスリダイレクトですが、RemoteFX 3D ビデオアダプターが追加されているゲスト OS でしか利用できません。

Web カメラのようなグラフィックを使用するデバイスをリダイレクトするのであれば、GPU のメモリを使用するのが良いと
思うのですが、グラフィックを利用しないデバイスを利用するのであれば、最低限の解像度にしてメモリの割り当てを
抑えるのは手段としてあるかと思います。

自宅に Web カメラ以外に何かリダイレクトできそうなデバイスがないかを探したところ、USB NIC がありました。
LAN-USB

いろいろと試してみたところこの USB デバイスをリダイレクトすることができました。

Windows 7 x86 SP1 Beta に LAN-USB を接続して、接続しているコンピュータ側にデバイスドライバをインストールしてない
状態だと USB デバイス リダイレクトの対象として表示されました。
image

デバイスドライバをインストールして、接続をしに行く端末上でデバイスが正常に認識できている状態ではリダイレクト可能な
デバイスとしては表示がされないのですよね…。

デバイスマネージャーでこの状態 (デバイスドライバをインストールしていない) であれば、リダイレクト可能ですが、
 image

この状態 (デバイスドライバインストール済み) だと、USB デバイスリダイレクト対象として表示されません。image

 image

どのようなデバイスがリダイレクトできるのか私はまだよくわかっていないので、この辺はきちんと調べてみたいと思います。
今回は、たまたまリダイレクトできたのでひとまず使用してみたいと思います。

USB NIC をリダイレクト対象として、選択して Windows 7 x86 SP1 Beta のゲスト OS に接続をしてみます。
上がゲスト OS、下がリモートデスクトップを実行している (USB 機器を接続している) 端末になります。

image
image

接続している USB NIC (AX88772) が Hyper-V 上のゲスト OS にリダイレクトされていることが確認できます。

実際に USB NIC で IP も取得できており、USB NIC から PING の疎通も確認できました。

同様の設定で、RemoteFX 3D ビデオアダプターを追加していないゲスト OS に接続をしてみます。
この場合、USB NIC がリダイレクトされません。
image 

リダイレクトできる機器の条件がわかっていないのですが、RemoteFX USB デバイスリダイレクトを使用する場合、
リダイレクトする機器の種類によって解像度を変更することも検討する必要がありそうですね。

それと、以前の投稿では BUFFALO の BWC-130H01 という Web カメラを使用してうまくカメラから動画をとることが
できなかったのですが、今回使用している LOOX U/B50N だとカメラを使用することができました。
GPU の問題ではなかったみたいですね。
合わせ鏡状態ではありますが、下の画像は Hyper-V のゲスト OS で Web カメラを使って取得したものになります。

image

途中から話がずれてしまった投稿ではありますが、RemoteFX について新しく検証してみたとことまとめてみました。

Written by masayuki.ozawa

8月 21st, 2010 at 1:27 am

Posted in Hyper-V

仮想ハードディスクを縮小する方法

leave a comment

以前、以下の投稿をしました。
仮想ハードディスクの拡張と縮小

縮小には VHD Resizer というツールも検証してみたのですが、仮想ハードディスクのサイズを
縮小することができませんでした。

以下の仮想ディスクを VHD Resizer で開いてみます。
image

現在 40 GB のディスクになっているのですが、[Min] が 40gb となっており、ディスクサイズを縮小することができませんでした。
image

前回はここで終わっていたのですが、先月以下の記事が投稿されました。
Shrink VHD size

VHD Resizer を使って、仮想ハードディスクのサイズを縮小する方法が紹介されていました。
「あれ。VHD Resizer でディスクサイズを縮小できるんだ。」と思って再度検証してみました。

 

■VHD Resizer で仮想ハードディスクを縮小するためには

VHD Resizer で仮想ハードディスクを縮小するためには、事前にパーティションを縮小して、[未割り当ての領域] としておく必要があるようです。
image
image
image

未割り当ての領域を作った仮想ハードディスクを VHD Resizer で開いてみます。
image
そうすると、前回 (未割り当ての領域を作る前) は [40 gb] となっていたのが [20 gb] となっています。

VHD Resizer はベースの仮想ハードディスクはそのままで、新規の仮想ハードディスクを作成します。
Min が 20 gb になっているので、New Size に 20 gb を指定しても [resize] を押すことができません。
image

Size を MB にすると理由がわかります。
MB だと 20531 mb となっています。New Size には Min より大きい数を入力する必要がありますので、今回の場合は、[21 GB] か
[20532 MB] を設定する必要があります。

[resize] を押すと、Destination に指定したパスに縮小した VHD が作成されます。
image

[resize] を押すとオリジナルの仮想ハードディスクが読み込まれ、新規の仮想ハードディスクに順次書きだされていきます。
image

終了するとダイアログが表示されます。
今回は他の仮想ハードディスクのサイズは変更しませんので、[いいえ] をクリックします。
image

VHD Resizer で縮小が完了した仮想ハードディスクがこちらになります。
image
未割り当ての領域もなくなってディスク全体が縮小できていることが確認できました。

未割り当ての領域にしないと [Min] が変更されないとは気づきませんでした。

Written by masayuki.ozawa

8月 9th, 2010 at 9:25 pm

Posted in Hyper-V

RemoteFX 3D ビデオ アダプターに再チャレンジしてみました。

2 comments

前回、RemoteFX 3D ビデオ アダプターを試してみようとしたときには、オンボードのグラフィックチップだけでしたので、
ゲスト OS を起動した際に以下のエラーが発生してしまいました。

image

ちょっと、悔しかった (?) ので会社帰りに大手家電量販店に行って、以下のグラフィックボードを購入してきました。
RH4350-LE256HD/HS2

定価で 3,500 ぐらいで、たまっていたポイントを使って 1,900 円でお買い上げできました。
まぁこれぐらいの値段なら失敗しても、「悔しくなんかないやい!!」と強がってちょっとしょんぼりするレベル。

この グラフィックボードをML 115 G5 に搭載して、RemoteFX 3D ビデオ アダプター を試してみました。

 

■ML115 G5 に搭載した時の問題

わくわくしながら、ML115 G5 にグラフィックボードを搭載して、電源を入れてみたらなぜか画面が表示されない…。
BIOS のアップデートしたら何か変わるかな~と思ったのですが、状況に変化はなし…。
# オンボードのディスプレイアダプタ / 追加したグラフィックボードのディスプレイアダプタのどちらにさしても表示されない。

まぁ、OS 自体は起動しているようなので、リモートデスクトップで接続ができれば支障はないので今回は無視して進めることにしました。

デバイスドライバはこちらから入手可能です。(Windows 7 x64 用を使っています。)
Display Driver Only

 

■RemoteFX の情報

RemoteFX の情報をいろいろと調べてみました。
以下の技術情報を参考にすると良さそうです。(全部英語…。)

Deploying a Single Microsoft RemoteFX Server Step-by-Step Guide
Deploying Microsoft RemoteFX for Personal Virtual Desktops Step-by-Step Guide
Deploying Microsoft RemoteFX for Virtual Desktop Pools Step-by-Step Guide
Deploying Microsoft RemoteFX on a Remote Desktop Session Host Server Step-by-Step Guide

Hardware Considerations for RemoteFX
Microsoft RemoteFX

 

■RemoteFX 3D ビデオ アダプター を有効にする

今回はグラフィックボードを追加しているので、RemoteFX 3D ビデオ アダプターを追加してゲスト OS を起動することができます。
image

こちらが起動直後のゲスト OS のデバイス マネージャーの画面になります。
ディスプレイ アダプターは [標準 VGA グラフィック アダプター] となっています。
不明なデバイスとして表示されているのが、3D ビデオ アダプターになります。
image

3D ビデオ アダプターを使うためには Windows 7 を SP1 Beta にする必要があります。

In order to use RemoteFX in a virtual desktop, you must be running one of the following editions:

  • Windows® 7 Enterprise with SP1
  • Windows® 7 Ultimate with SP1

 

ということでさっそく SP1 をインストール。

 

■RemoteFX 3D ビデオ アダプターを追加すると、VM のコンソールから接続できない。

インストールが終わったらさっそく接続をしてみます。

そうすると以下のような画面が表示されます。
image

RemoteFX 3D ビデオ アダプターを追加すると、[仮想マシン接続コンソール] (VMConnect.exe) から接続ができなくなるようですね。
メッセージに表示されているようにリモート デスクトップ接続からは接続が可能です。

ちなみに SCVMM で接続をしようとすると以下のようなちょっとさびしい画面になります。
image

■リモートデスクトップで接続して確認

リモートデスクトップであれば接続することができます。

Windows Server 2008 R2 SP1 で統合サービスも更新がされていますのでインストールしました。

image 

image

Windows 7 SP1 Beta をインストールした環境で、RemoteFX 3D ビデオ アダプターを追加すると、ディスプレイ アダプターが
[Microsoft RemoteFX Graphics Device –WDDM] に変更されます。
# 統合サービスはインストールしなくても変更はされていました。
image 

テストするための方法はこれから調べていきたいと思います。

Written by masayuki.ozawa

7月 17th, 2010 at 12:00 pm

Posted in Hyper-V

Dynamic Memory を試してみました。

leave a comment

続いては Dynamic Memory について調べてみたことをまとめたいと思います。

■Dynamic Memory の設定

Dynamic Memory の設定ですが、ゲスト OS のメモリを [動的] に設定することで使用することができます。
image

動的なメモリでは [スタートアップ RAM][最大 RAM] の 2 種類を設定します。
# Hyper-V でバッファーとして予約しておくべきメモリの割合についてはヘルプに記載がないので正確なことは言えないのですが、
 おそらく ホスト OS 用のメモリ予約なのかな~と思っています。

今回は複数のゲスト OS は起動していないので、[メモリの優先度] に関してはデフォルトのままとしています。

 

■ゲスト OS 起動後の状態

Dynamic Memory を設定して、ゲスト OS を起動してみます。

起動時には、[スタートアップ RAM] のサイズまでメモリが確保されます。
image

SP1 を適用すると Hyper-V マネージャー も表示が変更され、[現在のメモリ][使用可能なメモリ] が表示されるようになります。
こちらも 512 MB となっており、[スタートアップ RAM] まで確保されていることが確認できますね。
image

 

■動的なメモリ拡張を発生させる

それでは、この状態で Dynamic Memory による動的なメモリ拡張を発生させて見たいと思います。

てっとり早くメモリを消費させるため、[fsutil コマンド] を使用して、ファイルサイズの大きいテキストファイルを作ってみたいと思います。

fsutil file createnew c:test.txt 536870912

これで 512 MB のテキストファイルが作成できました。

それでは、このテキストファイルをメモ帳で開いてメモリの割り当てがどのようになるか確認してみたいと思います。image

実装メモリが [1.67 GB] に拡張されていることが確認できます。
Hyper-V マネージャーの [現在のメモリ] も拡張されています。
image

再起動をしないでも動的にメモリを拡張できるのが Dynamic Memory の機能となります。

同じファイルを別のメモ帳で開き、さらにメモリを使用してみたいと思います。
image

image

今回は、[最大 RAM] を [2048 MB] に設定していますので、メモリが [2 GB] で止まります。

こちらがホスト OS のタスクマネージャの内容です。
利用可能メモリが 1.3 GB 程度となっていることが確認できます。
image

 

 

■メモリを使用していたプログラムを終了する

大量のメモリを使用していたメモ帳を終了するとどうなるか試してみます。

閉じたタイミングで、Hyper-V マネージャーの [使用可能なメモリ] が増えていることが確認できます。
# 1.6 GB 程度が使用可能なメモリとなっています。
image

メモ帳を閉じてしばらく待つと、[現在のメモリ] が [スタートアップ RAM] のサイズまで縮小されます。
# 今回はメモ帳以外プログラムは実行していないため、最小まで縮小されています。
image 

一度拡張されたメモリですが、ゲスト OS の実装メモリから見ると縮小はされないみたいですね。
image

Hyper-V マネージャーの [現在のメモリ] が縮小されたタイミングで、ホスト OS の [利用可能] メモリが増えていますので、
ゲスト OS では [2GB] と表示されていても使用していたメモリが解放されていることが確認できます。
image

 

■パフォーマンスカウンター

Dynamic Memory のメモリの割り当て、解放ですがホスト OS のパフォーマンスモニターから確認することができます。

Balancer に関しては、[System Balancer] というインスタンスしか表示されていないのですが、VM に関しては起動している
ゲスト OS をインスタンスとして選択することができます。

VM の Added Memory / Physical Memory / Removed Memory を取得するとゲスト OS で動的にメモリの変化があった時の
状況を確認することができそうです。

オブジェクト カウンター 説明
Hyper-V Dynamic Memory Balancer Added Memory このカウンターは、VM に追加されたメモリの累積量を表します。
Available Memory このカウンターは、ノード上に残されたメモリ量を表します。
Averag Pressure このカウンターは、バランサー ノード上の平均負荷を表します。
Memory Add Operations このカウンターは、追加操作の合計数を表します。
Memory Remove Operations このカウンターは、削除操作の合計数を表します。
Removed Memory このカウンターは、VM から削除されたメモリの累積量を表します。
Hyper-V Dynamic Memory VM Added Memory このカウンターは、VM に追加されたメモリの累積量を表します。
Averag Pressure このカウンターは、VM の平均負荷を表します。
Current Pressure このカウンターは、VM の現在の負荷を表します。
Guest Visible Physical Memory このカウンターは、VM で表示されるメモリ量を表します。
Maximum Pressure このカウンターは、VM の最大負荷帯域を表します。
Memory Add Operations このカウンターは、VM に対する追加操作の合計数を表します。
Memory Remove Operations このカウンターは、VM に対する削除操作の合計数を表します。
Minimum Pressure このカウンターは、VM の最小負荷帯域を表します。
Physical Memory このカウンターは、VM の現在のメモリ量を表します。
Removed Memory このカウンターは、VM から削除されたメモリの累積量を表します。

 

アイドル時にはメモリを解放してくれるようなサービスが実行されているとメモリが有効活用できそうですね。
VDI 環境で、クライアントアプリを実行するような場合も有効に利用できそうですね。

Written by masayuki.ozawa

7月 13th, 2010 at 3:19 pm

Posted in Hyper-V

RemoteFX を試せませんでした…。

leave a comment

昨日より提供が開始された Windows Server 2008 R2 SP1 Beta ですが、昨夜に環境を構築し、今朝の通勤時間から
少し触り始めてみました。

SP1 で大きな機能としては、RemoteFXDynamic Memory の 2 つかと思います。

まずは、RemoteFX について調べて見た事をまとめて見たいと思います。

 

■ゲスト OS で RemoteFX を有効にするためには

SP1 を適用することで、Hyper-V のゲストで RemoteFX を有効にすることができるようになります。
RemoteFX の有効化ですが、ゲスト OS に [RemoteFX 3D ビデオ アダプター] を追加することで有効にできます。
image

ただし、SP1 を適用したらすぐに使えるようになるというわけではありません。
適用直後の状態で、ハードウェアの追加に項目が表示されるようになるのですがグレーアウトした状態となっています。

RemoteFX 3D ビデオ アダプターを追加するためには、リモート デスクトップ サービスの [リモート デスクトップ仮想化ホスト]
[RemoteFX] の役割をインストールする必要があります。
image 

この役割は VDI 環境を作成するときにインストールするものになります。
Windows Server 2008 R2 SP1 の RemoteFX ですが、VDI 環境での利用を意識しているみたいですね。

役割のインストールが終わると、ゲスト OS で RemoteFX 3D ビデオ アダプター が追加できるようになります。

image

 

■RemoteFX 3D ビデオ アダプターを追加して起動

それでは、RemoteFX 3D ビデオ アダプターを追加してみます。

ゲスト OS のハードウェアの追加をすると、アダプターの項目が追加されます。
image

モニターの最大数は [1 / 2 / 3 / 4] 、モニターの最大解像度は [1024×768 / 1280×1024 / 1600×1200 / 1920×1200] から
選択することが可能となっています。

アダプターを追加して [さぁ起動しよう] と起動したところ、私の環境では以下のエラーとなってしまいました…。
image 

今回の環境ですが、ThinkPad x201i を使っています。
この環境では Intel のオンボードのグラフィックアダプターが使われており、グラフィックボードを追加してはいません。
このような環境だと、RemoteFX を使ってゲスト OS を起動できないみたいなんですよね…。

今回発生したエラー [Microsoft Synthetic 3D Display Controller] を元に調べて見たところ、グラフィックボードのメモリとして、
最低でも 200 MB は必要みたいでした。
推奨のグラフィックボードは 1GB のメモリのようで、私の環境にはそのような環境は一台もありません。
ということで、今回は RemoteFX を試せませんでしたとなっている次第です。

 

■パフォーマンスカウンター

Remote FX 用のパフォーマンスカウンターがありましたので少しまとめてみました。

オブジェクト カウンター 説明
RemoteFX Hardware Available General Memory Displays RemoteFX available general memory
General Memory Pool Size Displays RemoteFX size of the general memory pool
Number of Active Sessions Displays RemoteFX number of active sessions
RemoteFX Software Capture Rate RemoteFX キャプチャ比率を表示します。
Compression Ratio RemoteFX 圧縮率を表示します。
Hardware Blt Displays ASIC Blt Processing Time
Hardware DmaIn Displays DmaIn Processing Time
Hardware DmaOut Displays ASIC DmaOut Processing Time
Hardware Encode Displays ASIC Encode Processing Time
Hardware Frame Count Displays RemoteFX Frame Count
Hardware Sessio ID Displays RemoteFX Session ID
Hardware Total Frame Count Displays ASIC Total Frame Count
Output Bytes RemoteFX 出力バイトを表示します。

 

 

ML115 G5 にグラフィックボードを追加すれば何とかなりそうな気もするのですが、すぐに環境を整備するのも難しそうです。

サーバー機ではグラフィックボードは最低限のものになっていることが大半だと思いますので、RemoteFX を使用する際には
気をつける必要がありそうですね。

Written by masayuki.ozawa

7月 13th, 2010 at 12:02 pm

Posted in Hyper-V

コマンドでライブ / クイックマイグレーションを実行

leave a comment

今日はコマンドで Live Migration / Quick Migration を実行する方法について。

[Quick Migration の実行]

まずは Quick Migration の実行から。
ゲスト OS のクラスターグループを移動することで QuickMigration を実行することができます。
Hyper-V のコマンドではなく、クラスターのコマンドを使ってグループを移動させることで実行することが可能です。

  • PowerShell (Windows Server 2008 R2)
    Import-Module FailoverClusters
    Move-ClusterGroup “<クラスターグループ名>” –Node “<ノード名>”

    例)
    Import-Module FailoverClusters
    Move-ClusterGroup "SCVMM 2008R2-OWA-01 Resources" -Node "T60-01"

  • Cluster コマンド
    Cluster Group “<グループ名>” /MOVETO:”<ノード名>”

    例)
    Cluster Group "SCVMM 2008R2-OWA-01 Resources" /MOVETO:"T60-01"

  • SCVMM 2008 R2
    Move-VM -VM "<ゲスト OS 名>" -VMHost "<ノード名>" -UseCluster

    例)
    Move-VM -VM "2008R2-OWA-01" -VMHost "T60-01" –UseCluster

 

[Live Migration の実行]

続いて Live Migration の実行です。
Live Migration ですが Cluster コマンドでは実行できないようです。
PowerShell と SCVMM 2008 R2 からは実行可能です。

  • PowerShell (Windows Server 2008 R2)
    Import-Module FailoverClusters
    Move-ClusterVirtualMachineRole "<クラスターグループ名>" -Node "<ノード名>"

    例)
    Import-Module FailoverClusters
    Move-ClusterVirtualMachineRole "SCVMM 2008R2-OWA-01 Resources" -Node "T60-01"

  • SCVMM 2008 R2
    Move-VM -VM "<ゲスト OS 名>" -VMHost "<ノード名>"

    例)
    Move-VM -VM "2008R2-OWA-01" -VMHost "T60-01"

 

今回は単純なコマンドベースで実行してみたのですが、WMI を使っても実行できるようですね。

[関連情報]
I want to know the wmi function for live migration as moveToNode perfrom quick migration
CLUSCTL_RESOURCE_VM_START_MIGRATION Control Code
ClusterResourceControl Function
ExecuteResourceControl Method of the MSCluster_Resource Class
CLUSCTL_RESOURCE_VM_START_MIGRATION Control Code
External Resource Control Codes
Internal Resource Control Codes

param
(
    $Name = $(throw New-Object ArgumentNullException -Args "Name"),
    $Target = $(throw New-Object ArgumentNullException -Args "Target")
)

# Get the desired virtual machine resource from the Failover Cluster WMI Provider
$Query = @"
    Select * From MSCluster_Resource Where Type=’Virtual Machine’ And Name=’$Name’
"@

$Vm = Get-WmiObject -Namespace rootmscluster -Query $Query

# Tell the virtual machine resource to move.
try
{
    $vm.ExecuteResourceControl(`
        23068676, [System.Text.Encoding]::UNICODE.GetBytes($Target))
}
catch [System.Management.ManagementException]
{

Written by masayuki.ozawa

5月 27th, 2010 at 1:53 pm

Posted in Hyper-V

異なるベンダーの CPU のホスト OS 間でライブ / クイックマイグレーションを実行

one comment

以前、Twitter でつぶやいた内容をブログとしてまとめてみました。

私の家の検証環境は ThinkPad で 3 ノードクラスターを構築している環境があります。

ThinkPad では、CPU としては Intel の Core 2 Duo が使用されています。
image

それとは別に AMD の Phenom 9950 を使用している ML115 G5 もあります。
image 

同一のベンダーの CPU であれば、プロセッサ バージョンが異なった場合でも、ゲスト OS の設定で CPU の機能制限をすることで、
Live Migration / Quick Migration を実行することができます。
image 

この動作を全く別のベンダーの CPU で実行するとどうなるんだろうというのが今回の検証です。

私の検証環境に Intel のマシンとして、ML110 G5 がありこちらは Xeon を使用しているのですが、Core 2 Duo とさほど
機能的には変わらなかったので、ThinkPad と ML115 G5 間でゲスト OS を移行させてみたいと思います。

参考となりますが、Xeon の CPU 情報はこちらとなります。
image

 

[クラスターを構築]

Live Migration / Quick Migration をするためにはまずは、クラスターを構築しなくてはいけません。
ThinkPad は T60 と T61 を使って 3 ノード構成のクラスターを構築しているので、ここに ML115 G5 を追加させたいと思います。
# ML115 G5 は共有ディスクに接続済みです。

image
 

クラスターにノードを追加する前に [ノードの検証] を実行します。
すでにクラスターを構築しているノードと今回使用する ML115 G5 を選択して検証を実行してみます。
image

テスト項目としては全テストを実施するようにしています。
image

テストが終了するとレポートを表示することができるので、今回は CPU についてのレポートを確認してみたいと思います。
CPU については [同じプロセッサ アーキテクチャの検証] というテストで確認されるのですが、このテストではベンダーの
確認はしていないようです。
image 

そのため、異なるベンダーの CPU を使っていてもクラスターを構築することは可能です。image

image

SCVMM でも 4 ノードクラスターとして認識できています。
# クラスターとしてノード追加した後に追加したサーバーを最新の状態に更新すれば自動的にクラスター配下の
  サーバーとして認識されます。
image

それでは、Live Migration と Quick Migration を実行していきたいと思います。

 

[SCVMM で Live Migration を実行]

Live Migration ですが、SCVMM とフェールオーバークラスターマネージャーで実行することができます。
まずは SCVMM で Live Migration を実行したいと思います。

  • 今回、[2008R2-OWA-01] というゲスト OS を CSV 上に配置していますので、このゲスト OS であれば
    Live Migration をすることができます。
    # このゲスト OS は Intel の CPU の T61 で実行されています。
    対象のゲスト OS を右クリックして、[移行] をクリックします。
    image 
  • T61 から ML115 に移行をしようとすると、異なる CPU ということで移行対象として選択することができないようになっています。
    [t61-01] に監視ては単純にメモリが足りていないので移行ができないのですが、[t61-02] に関しては Live Migration で
    移行可能なサーバーとして選択ができるようになっていますね。
    image

SCVMM を使用している場合、異なるベンダーの CPU のホスト OS には移行ができないように制御がされていますね。

 

[フェールオーバー クラスター マネージャーで Live Migration を実行]

つづいて、クラスターの管理ツールで Live Migration を実行してみたいと思います。

  • 管理ツールで ML115 に Live Migration を実行してみます。
    image 
  • クラスターの管理ツールでも同様にエラーとなりますね。
    メッセージとしてはこちらの方がわかりやすい気がします。
     image

異なるベンダーの CPU 間では Live Migration の実行はできないようですね。
続いて Quick Migration を試してみたいと思います。

 

[フェールオーバー クラスター マネージャーで Quick Migration を実行]

Quick Migration の実行ですが、Live Migration が可能な場合は SCVMM からは実行できないようです。
# ライブ移行しかできないようです。

Live Migration が実行できる環境で、Quick Migration を実行するためにはクラスターの管理ツールで実行する必要があります。

  • ML115 に [クイック移行] をしてみます。
    image
  • 異なるベンダーの CPU を使用しているホスト間で Quick Migration を実行すると以下のエラーになります。
    Quick Migration は [保存→移動→開始] という流れになるのですが、この方法は使用できないようですね。
    [はい、仮想マシンをシャットダウンして移動します] をクリックするこちで [シャットダウン→移動→開始] という形で
    クラスターのノード間でゲスト OS を移行することが可能です。
    image
  • [はい、~] をクリックするとシャットダウンが開始され
    image
  • 他のノードに移動がされます。
    image 
  • ここまでの操作は、[クイック移行] で試してみましたが、[仮想マシンの移動] を実行することでも、Quick Migration を
    実行することができます。
    image
  • 移動をするとゲスト OS が保存され、移動先として指定したノードに移動がされます。
    image
  • 保存された状態を復元するのですが、失敗します。
    image
    image

@IT の以下の記事では Quick Migration が成功することもあるということが書かれているのですが、私の環境では NG でした。
Hyper-V実践サーバ統合術 第4回

保存されたままでは、元のノードでしか起動できませんのでこの状態で他のノードで起動したい場合は、[保存された状態を破棄する] で
保存状態を破棄して、解除する必要があります。
image

異なるベンダーの CPU 間でゲスト OS を Live Migration / Quick Migration を実行することはできないみたいですね。
ゲスト OS の CPU に関してはこのような技術情報もあるようです。
Partition Properties

今回は GUI から実行してみましたが、Live Migration / Quick Migration はコマンドでも実行することができます。
次の投稿でコマンドから Live Migration / Quick Misgration を実行する方法をまとめてみたいと思います。

Written by masayuki.ozawa

5月 24th, 2010 at 2:36 pm

Posted in Hyper-V

仮想ハードディスクの拡張と縮小

leave a comment

私がメインで使っているノート PC に接続しているハードウェアのデバイスドライバが 64 ビットに対応してきたので、
VHD ブートで Windows 7 x64 の確認環境を作って使用頻度の高いアプリ等も合わせて稼働確認をしています。

検証用サーバーの感覚で C ドライブを 40GB で作ったため、あっという間に残り容量も少なくなってきました…。

そこで今回は仮想ハードディスクの拡張と縮小について調べてみました。

■ディスクの管理からの操作

ディスクの管理 (diskmgmt.msc) から [VHD の接続] ができます。

image

接続した VHD で [ボリュームの拡張] [ボリュームの縮小] を行うことができます。
image
下が縮小を選んだ時の設定ダイアログになります。
image

縮小をすることでボリュームを縮小することができるのですが、40GB という最大サイズは変わりません。
縮小は枠の変更ではなく、内部領域の変更になりますのでディスクの最大サイズを変更することはできません。
image

ボリュームの拡張も同等で、枠の変更ではなく内部領域のサイズ変更となります。
image

image

 

■DISKPART コマンドからの操作

DIKSPART コマンドを使うと VHD の操作ができます。

DISKPART で使える VHD 関連のコマンドをざっと調べたところ、以下のものがあるようです。

コマンド 説明
ATTACH VDISK 仮想ディスク ファイルをアタッチします。
COMPACT VDISK ファイルの物理サイズの削減を試みます。
CREATE VDISK 仮想ディスク ファイルを作成します。
DETAIL VDISK 選択した仮想ディスクのプロパティを表示します。
DETACH VDISK 仮想ディスク ファイルをデタッチします。
EXPAND VDISK 仮想ディスクで使用可能な最大サイズを拡張します。
LIST VDISK 仮想ディスクの一覧を表示します。
MERGE VDISK 子ディスクを親ディスクと結合します。
SELECT VDISK 仮想ディスクにフォーカスを移動します。

 

ボリュームの拡張と縮小に関しては、VHD に限らず実行することができます。
DISKPRT で拡張と縮小をする場合には以下のコマンドを使用します。

コマンド 説明
EXTEND フォーカスされたボリュームまたはパーティションとそのファイル システムをディスクの空き (未割り当て) 領域に拡張します。
SHRINK フォーカスされたボリュームのサイズを指定した容量だけ縮小します。
ボリュームの最後の使用されていない領域から、空きディスク領域を使用可能にします。

ディスクの管理から実行しているのは上記の [EXTEND] [SHRINK] になります。

ディスク自体を拡張と縮小をするためには、[EXPAND VDISK] [COMPACT VDISK] を実行します。

まずは VHD の拡張から。
# 拡張と縮小をする場合、VHD は切断した状態にする必要があります。
    コマンドの実行時に、VHD が読み取り専用で自動的に接続されます。

SELECT VDISK FILE=<VHD ファイルのフルパス>
EXPAND VDISK FILE=<VHD の最大サイズ (MB)>

実行例)
SELECT VDISK FILE=”C:VHDOS.VHD”
EXPAND VDISK FILE=51200

このコマンドを実行した後の VHD の情報が以下になります。
仮想サイズが : 50 GB になっています。

DETAIL VDISK

デバイスの種類 ID: 2 (VHD)
ベンダー ID: {EC984AEC-A0F9-47E9-901F-71415A66345B} (Microsoft Corporation)
状態: 追加済み
仮想サイズ:   50 GB
物理サイズ:   24 GB
ファイル名: c:vhdos.vhd
子: いいえ
親ファイル名:
関連付けられたディスク番号: 見つかりません。

ディスクの管理からも拡張されていることが確認できます。
image

縮小をする場合は以下のコマンドになります。

SELECT VDISK FILE=<VHD ファイルのフルパス>
COMPACT VDISK

実行例)
SELECT VDISK FILE=”C:VHDOS.VHD”
COMPACT VDISK

縮小は [可変長ディスク] でしか実行することができません。
[固定長ディスク] で実行すると以下のエラーとなってしまいます。

DiskPart にエラーが発生しました: 要求された操作は、この種類の仮想ディスク上では実行できません。
詳細については、システム イベント ログを参照してください。

 

この縮小操作ですが、仮想サイズ (VHD の最大サイズ) は変更されません。
物理サイズ (ファイルとして割り当てられている領域) の縮小が実行されるようです。
# 物理サイズが 24 GB → 23 GB になっています。

DETAIL VDISK

デバイスの種類 ID: 2 (VHD)
ベンダー ID: {EC984AEC-A0F9-47E9-901F-71415A66345B} (Microsoft Corporation)
状態: 追加済み
仮想サイズ:   50 GB
物理サイズ:   23 GB
ファイル名: c:vhdos.vhd
子: いいえ
親ファイル名:
関連付けられたディスク番号: 見つかりません。

調べてみたところ、Virtual Server 2005 で使用されていた事前圧縮ツールのようなものを一度実行してから
[COMPACT VDISK] を実行しないとうまく縮小されないがあるようですね。
縮小はVHD として利用している領域を縮小するため、ファイル内の [0 データ] を圧縮するようため、
未使用の領域を事前圧縮ツールで [0 データ] になるようにする必要があります。

Virutal Server 2005 をダウンロードして [precompact.exe] をコピーしてもよいのですが、ダウンロードもできるみたいですね。
Hyper-V How To: Shrink a VHD File
# [CIPHER /W] でも流用できるかもしれないですね。

■Hyper-V マネージャーからの操作

Hyper-V マネージャーでは [ディスクの編集] 操作があり、ここからディスクの拡張と縮小ができます。
image 

ディスクの編集からは以下の操作が実行でき、最適化が縮小の処理になります。image

拡張後のサイズを指定することで、VHD の最大サイズを変更することが可能です。
image

縮小の場合は、縮小を選ぶだけですがこちらはサイズ指定はありません。
image

この操作は DISKPART の COMPACT と一緒なので、VHD の最大サイズが変更されるのではなく、VHD で使用している
領域の縮小処理となります。

縮小に関しては、可変のみ可能のため固定ディスクの場合には選択することができません。
image

Hyper-V マネージャーからのみ可能な操作は、[変換] になるようですね。
可変→固定 / 固定→可変 の変換については DISKPART では実行できないようです。
 

■SCVMM 2008 R2 からの操作

SCVMM 2008 R2 からは、仮想マシンのプロパティから操作することができます。
操作できる内容は Hyper-V マネージャーと変わらないですね。
 image

こちらも固定ディスクの場合は、圧縮はできません。
image

■VHD Resizer

Microsoft 製以外だと VHD Resizer というツールがあります。
# Twitter で教えていただきました!!ありがとうございます。

VHD Resizer

image

このツールではオリジナルのファイルを残した形で VHD の操作をします。
ディスクの変換、サイズ拡張はできるようですが、縮小はできないみたいですね。
現在選択しているディスクは 50 GB のサイズなのですが、[Min] が 50 gb 以下に設定できないようになっています。

拡張と縮小の方法はいろいろありますね。勉強になりました。

Written by masayuki.ozawa

3月 21st, 2010 at 11:56 am

Posted in Hyper-V

VSS 非対応のゲスト OS を実行している環境での Windows Server バックアップの注意点

leave a comment

Hyper-V 上のゲスト OS に統合サービスをインストールすることで、Windows Server バックアップのバックアップ処理と
ゲスト OS のVSS を連携させ、VSS 対応 OS であればオンラインでバックアップを取得できるようになります。
 image

VSS 非対応 OS のバックアップを取得する場合は、Windows Server バックアップのボリューム シャドウ コピーの処理のタイミングで、
保存状態となり、スナップショットの準備が完了したタイミングで、保存から開始状態に変更されます。
# 下の画像は、Windows Server 2000 SP4 のゲスト OS を格納しているボリュームのバックアップ取得時の画像です。
image

 

■Windows Server バックアップの取得単位

Windows Server 2008 の Windows Server バックアップではバックアップ対象がボリューム単位でした。
image

Windows Server 2008 R2 の Windows Server バックアップではファイル単位でのバックアップが可能となっています。
# [wbadmin.exe] のオプションとして、[-nonRecurseInclude] が使えるようになっています。
image

この機能により、ゲスト OS を格納しているボリュームの一部のファイルだけをバックアップするということが可能となっています。

■ゲスト OS 格納ボリュームの一部のファイルだけバックアップ

Windows Server 2008 R2 で一部のファイルだけバックアップできるのはとても便利なのですが、1 点注意することがあります。

一部のファイルだけ、バックアップを取得した場合でもボリュームに対してのボリューム シャドウ コピーの処理が実行されます。
ここで重要なのがボリューム シャドウ コピーという点です。

ボリューム全体に対して処理がされますので、対象のボリュームに VSS 非対応のゲスト OS が格納され実行している場合は、
ゲスト OS 自身がバックアップ対象として含まれていなくてもゲスト OS がボリューム シャドウ コピーの処理と連携し、
保存状態になってしまいます…。

下の画像で、[EX-2000-TEST] が Windows 2000 Server SP4 のゲスト OS となっています。
ゲスト OS が格納されているディレクトリとは別のディレクトリの特定のファイルをバックアップした場合でも
[EX-2000-TEST] という VSS 非対応のゲスト OS は保存状態となってしまいます。
image

 

VSS 非対応の OS を実行する場合、VSS 対応 OS とは別のボリュームに配置、個別にバックアップを取得する必要のある、
ファイル / ディレクトリとは別のボリュームに配置するといった設計にする必要がありそうですね。

Written by masayuki.ozawa

3月 10th, 2010 at 2:19 pm

Posted in Hyper-V