Windows Server 2008 R2へのアップグレード
Windows Server 2008 R2が出荷されたので、システムをアップグレードすることにした。R2の新機能が使いたかったわけではないが、ライセンスの問題でアップデートせざるを得なかった。
Hyper-Vホストには、Graviton以外の仮想マシンができていた。聞けば、テストマシンだという。それはいいのだが、このテストマシンにはスナップショットが残されていた。Windows Server 2008 R2のインストールガイドによると、アップグレード前にスナップショットを削除する必要があるという。担当者に確認して削除したところ、恐ろしく時間がかかった。正確には記憶していないが2時間くらいかかったのではないだろうか。スナップショットの実態は仮想ディスクなので、サイズが大きくなると削除にはそれなりに時間がかかるようだ。
通常、運用マシンにはスナップショットを作成しない。スナップショットはその仮想マシンの状態を保存するもので、他のホストとの連係を考慮しない。不用意に古いスナップショットに戻すと、他のサーバーに保存された情報と矛盾を起こす可能性もある。今回スナップショットが使われていたのはテストマシンだからである。
もうひとつ問題があった。利用中のHyper-Vホストには物理メモリが8GB搭載されている。仮想マシンは3台あって、メモリは合計で7GB割り当てていた。さてWindows Server 2008 R2にアップグレード後、テストマシンを含めたすべての仮想マシンを起動しようとしたところメモリ不足のエラーが出た。アップグレード前は正常に動作していたので、どうやらOSが確保しているメモリの問題らしい。
一般にWindowsは起動時に多くの物理メモリを消費するが、しばらくすると消費量が減少する。これは、不要な物理メモリが空きメモリとして回収されたり、不要なサービスが停止したりするためである。そのため、OS起動直後よりもしばらくあとの方が空きメモリが増える。今回も、しばらく放置すればすべての仮想マシンを起動できたはずだが、何分待てばいいのか分からない。
Windows Server 2008 R2 SP1へのアップグレード
この問題を解決するためにWindows Server 2008 R2 SP1のHyper-Vで導入されたのが「ダイナミックメモリ」である。ダイナミックメモリは、仮想マシンで維持すべき空きメモリの割合を設定し、メモリ要求の増減に合わせて仮想マシンに割り当てるメモリを動的に変化させる。
例を挙げよう(図4)。
- 仮想マシンには「スタートアップRAM」で指定されたメモリが無条件に割り当てられる(ここでは512MB)。
- 仮想マシン動作中は「メモリバッファ」で指定された空きメモリが確保されているかを監視する。既定値は20%なので、仮想マシンのメモリが512MBの場合は約100MBの空きメモリを維持する。
- 空きメモリがメモリバッファで示された分量を下回った場合、仮想マシンのメモリ割り当てが「最大RAM」を超えない範囲で増加する。これは、稼働中のサーバーに物理メモリを追加する技術「Hot Add Memory」の応用である。
- Hyepr-Vが仮想マシン割り当てるメモリの合計は物理メモリ量を超えられない。物理メモリが足りない場合は「メモリの優先度」に従って利用可能なメモリが按分される。
ダイナミックメモリを使うには、Hyper-VホストをWindows Server 2008 R2 SP1にアップグレードするだけでなく、仮想マシンもダイナミックメモリに対応している必要がある。サポートOSであっても修正プログラムが必要な場合もあるので、要件をよく確認してほしい。参考: Hyper-V Dynamic Memory Configuration Guide .aspx)
なお、GravitonではSP1は未適用である。問題のテストマシンは他の物理サーバーに引っ越していったので、メモリ不足の問題は解決したからだ。しかしサービスパックは必須のアップデートなので、いずれ適用する予定である。
* * *
Hyper-Vは仮想マシンシステムとしては後発だが、十分な信頼性がある。管理ツールも直感的で使いやすい。特に、仮想マシンとしてWindows Server 2008 R2を使う場合は仮想マシンに追加ソフトウェアをインストールしなくてもHyper-Vの機能を完全に引き出せる。しかもHyper-V用のライセンスは不要である。
仮想マシンとしてWindowsを使うのであれば、Hyper-Vは最適な製品であると筆者は考えている。