今回は、Hyper-Vのストレージ機能について、「仮想ハードディスク」の詳細やHyper-Vホストで利用可能なストレージの種類や関連する設定など、ストレージ周りを学び直します。
Microsoftの「Hyper-V」はハードウェア仮想化技術(サーバ仮想化技術)であり、Hyper-V上で動作する仮想マシンの設定や、仮想マシンに提供されるネットワークの機能などを前回まで見てきました。
一般的なPCなどで考えると、PCを動かすためにはOSが必要で、そのOSはPC内部に接続されたHDD(Hard Disk Drive)やSSD(Solid State Drive)といった記憶装置に格納されています。作成したデータもそれらの記憶装置に格納されます。
ハードウェア仮想化技術における仮想マシンにも当然、記憶装置が必要で、「PCに接続されたHDD」に相当するものが仮想マシンに接続された「仮想ハードディスク」(Virtual Hard Disk:VHD)になります。Hyper-V上で動作する仮想マシンのOSから見ると、仮想ハードディスクはハードウェアとして認識していることが分かります(画面1)。
画面1は第2世代仮想マシンなのでSCSIコントローラーしかありませんが、第1世代仮想マシンの場合はIDEコントローラーとSCSIコントローラー、そしてそれぞれに接続された仮想ハードディスクを確認できます(画面2)。
仮想ハードディスクの仮想マシン側の設定については、本連載第5回の「いまさら聞けないHyper-V仮想マシンの構成詳細(2):ハードウェア設定[後編]」を参照してください。
仮想マシンから見えるハードウェアとしての仮想ハードディスクは、Hyper-V側から見ると単一ファイルであり、拡張子には「.vhd」もしくは「.vhdx」が使用されています。例えば、画面2の仮想マシンが格納されたHyper-V上のフォルダを参照すると、以下の画面3のように拡張子「.vhdx」の2つのファイル、すなわち2つの仮想ハードディスクファイルを確認できます。
Hyper-Vで扱う仮想ハードディスクには、前述のような拡張子が異なるファイル形式が存在し、また同一のファイル形式でも種類の異なる仮想ハードディスクが存在しています。これらのフォーマットや種類の違いについては、Hyper-Vの「仮想ハードディスクの新規作成ウィザード」で概要が解説されています。
「仮想ハードディスクの新規作成ウィザード」は、「Hyper-Vマネージャー」から「新規」→「ハードディスク」を選択することで起動できます(画面4)。
ウィザード起動後、最初に設定するのは「ディスクフォーマット」になります(画面5)。
仮想ハードディスクのフォーマットとして「VHD形式」(拡張子「.vhd」)と「VHDX形式」(拡張子「.vhdx」)が選択可能です。ウィザードでは「VHDセット形式」(拡張子「.vhds」)も作成可能ですが、VHDセット形式については高可用性の回で解説します。
画面5に記述されている通り、VHD形式は仮想ディスクサイズが2040GBまでなのに対し、「Windows Server 2012」のHyper-VでサポートされたVHDX形式は64TBまで対応可能です。メタデータを用いたログ追跡機能により、突然の電源断といった不慮の事故に際しても、仮想ハードディスクが破損しない仕組みとなっています。さらに「4KBネイティブセクター」対応など最新のストレージに最適化され、VHD形式よりも優れた特性を持つ仮想ハードディスク形式となっています。現在のHyper-Vでの推奨はVHDX形式です。
ディスクフォーマットを決定すると、次は「ディスクの種類」を選択します(画面6)。
「容量固定」ディスクは、仮想ハードディスクとして設定した容量と同じファイルサイズの仮想ハードディスクファイルが作成されます。他のハイパーバイザーでは「シックプロビジョニング」と称される仮想ハードディスクの作成方法で、127GBに設定した場合は、Hyper-Vホストのファイルシステム上でも127GBのファイルが作成されます。
「Hyper-Vマネージャー」から実行できる「ディスクの検査」ツールで容量固定ディスクを確認すると、画面7のように現在のファイルサイズと最大ディスクサイズが同じ値であることが分かります。
このように、仮想マシン上から見たディスクの使用量が0byteでも、Hyper-Vホスト上では127GBの物理容量が消費されてしまう点がデメリットではありますが、容量固定ディスクのメリットは画面6にも書いてある通り、ディスクパフォーマンスに優れている点になります。
また、最初に容量を確保してしまうため、新たな仮想ハードディスクを追加するなどの作業を行わなければ、Hyper-Vホストの物理ディスクの使用量が変化することはありません。これは実際の運用環境において、イレギュラーな事態が発生しなければ空き容量不足に由来する問題が発生する可能性が少ないことを意味しています。容量監視は当然行うにせよ、障害が起きる可能性が低くなることは、運用の現場において大きなメリットになるでしょう。
対して「容量可変」ディスクは、127GBの仮想ハードディスクを作成しても、Hyper-Vホスト上では作成時点で4MBのファイルとして取り扱われます。仮想ハードディスクに書き込みが発生すると必要に応じてファイルサイズが増えていき、最終的にディスクを使い切ると127GBのファイルサイズになります。他のハイパーバイザーでは「シンプロビジョニング」と称される仮想ハードディスク形式となります。
容量可変ディスクを「ディスクの検査」ツールで確認すると、以下の画面8のように現在のファイルサイズは4MBですが、最大ファイルサイズは127GBと表示されます。つまり、現在の仮想ハードディスクの物理ファイルサイズは4MBですが、最大で127GBのファイルサイズまで伸長する可能性があるということを示しています。
容量可変ディスクのメリットは、仮想マシンがディスクに書き込みを行うと必要な分だけ伸長する形式であるため、Hyper-Vホストの物理ディスクサイズ以上の仮想ハードディスクを格納可能という点です。
容量効率に優れている半面、書き込みの都度必要があればファイルサイズを拡張していくため、容量固定ディスクに比べると若干のオーバーヘッドが発生することがデメリットといえます。また、物理ディスクサイズ以上の仮想ハードディスクを格納できるため、物理容量が常に容量不足に陥らないよう空き容量をコントロールすることが必須になります。
容量を使い切った物理ディスク上に容量可変ディスクで稼働している仮想マシンが存在した場合、仮想マシンからの容量要求にHyper-Vホストが応えられない状態に陥ると、当該仮想マシンを保護するため、Hyper-Vホストが強制的にその仮想マシンを一時停止状態に遷移させ、「IOエラーが発生した」とのエラーを表示します(画面9)。
また、「イベントログ」(「アプリケーションとサービスログ」→「Microsoft」→「Hyper-V Worker」→「Admin」)にディスクフルが原因の回復可能なエラーが発生した旨の警告が記録されます(画面10)。
物理ディスクに空き領域を作ることで、一時停止された仮想マシンを復旧させることは可能ですが、容量可変ディスクを使用する仮想マシンは、常に強制一時停止のリスクを抱えていることを認識の上、Hyper-Vホストの物理容量監視を怠らないようにしてください。
これまで説明した通り、容量固定ディスクと容量可変ディスクは、それぞれメリット/デメリットが存在するため、ワークロードに応じた使い分けとHyper-Vホストの監視がポイントになります。
最後の「差分」ディスクは、「親」となる仮想ハードディスクを指定して、そこからの差分を保持する形式の仮想ディスク作成方法になります。差分ディスクを作成する際は、親となる仮想ハードディスクを指定します(画面11)。この際、指定する親ディスクは作成する差分ディスクと同じフォーマットである必要があります。
指定された親ディスクをベースにはするものの、そこからの変更点は全て差分ディスク側に書き込まれ、親ディスクへの書き込みは一切行われません。
同じような機能を持つ仮想マシンを大量に展開するシナリオでは、マスターイメージを作成して、それをベースに仮想マシンを展開する手法が効率的と考えますが、マスターイメージを親ディスクとして差分ディスクで仮想マシンを展開することで、ストレージ容量効率に優れた仮想マシン環境を構築できます。
この差分ディスクを「仮想ディスクの検査」ツールで参照すると、親ディスクがどの仮想ハードディスクファイルであるか、現在の容量はどの程度かを確認でき、また「親の検査」をクリックすることで、親ディスクの状態も確認できます(画面12)。
このように、親からの差分のみが記録される形式が差分ディスクであるため、何かしらの理由で親ディスクが消失した場合、差分ディスクは使用不可になって仮想マシンが起動できなくなる点に注意が必要です(画面13)。
仮想ハードディスクの作成や管理は、GUI(グラフィカルユーザーインタフェース)ツールである「Hyper-Vマネージャー」から実施できますが、もちろんPowerShellでも同様のことが実施可能です。
仮想ハードディスク関連のPowerShellコマンドレットについては、「@IT eBookシリーズ」の第130弾「仮想化環境を自由自在に操るためのファーストステップ! 仮想ディスク操作基本PowerShellコマンドレット集」を参考にしてください。
仮想ハードディスクはHyper-Vホストから見ると「単なるファイル」ですが、フォーマットや種類によって扱いが異なるということをご理解いただけたかと思います。ここからは、それらの仮想ハードディスクを格納するHyper-Vホストのストレージについて見ていきます。
仮想マシンをストレージの観点で見ると、仮想マシンは「仮想マシンを定義する構成ファイル」と「仮想ハードディスク」から成り立ちます。その他にも、本連載第6回「いまさら聞けないHyper-V仮想マシンの構成詳細(3):管理設定」で解説した「チェックポイントファイル」や「スマートページングファイル」などが存在します。主な構成ファイルの拡張子と役割については、以下の表1を参考にしてください。
| ファイルタイプ | 拡張子 | 役割 |
|---|---|---|
| 構成情報 | .vmcx | 仮想マシンの構成情報。バイナリ形式で格納されている |
| 仮想マシンのゲスト状態 | .vmgs | 仮想マシンのデバイス状態情報ファイル |
| 仮想マシンのランタイム状態 | .vmrs | 仮想マシンのメモリ状態情報ファイル |
| 仮想ハードディスク | .vhd または .vhdx |
仮想マシンの仮想ハードディスク |
| チェックポイント取得時の仮想ハードディスク | .avhdx | 仮想マシンでチェックポイントを取得した際の、差分仮想ハードディスク |
| 表1 主な構成ファイルの拡張子と役割 | ||
仮想マシンを作成する際には、これらのファイルを格納するフォルダを任意で指定できますが、Hyper-Vホストとしての既定のフォルダは、本連載第2回「いまさら聞けない『Hyper-Vホスト』の構成と管理機能」で解説した通り、「Hyper-Vの設定」画面で定義します。
ファイル保存先としてドライブ名を含めてフルパスで指定することになりますが、ドライブ名が割り当てられたボリュームとその配下のフォルダ名を指定できれば、基本的には種類を問わずに使用可能です。つまり、Windows Server OSが扱えるストレージデバイスであれば基本的には使用可能といえます。
例えば、以下の画面14は、Hyper-Vホストに接続したUSBメモリ上のフォルダを仮想マシンのファイル格納先として指定し、作成/起動したものになります。ディスクI/O(Input/Output)速度が現実的であるかどうかを問わなければ、このようにUSBメモリであってもストレージとして使用できます。
仮想マシンを実用速度で使用するためには、ある程度のストレージパフォーマンスが要求されます。高可用性構成を取らない単体のHyper-Vホストの場合、ローカルの物理ディスクを仮想マシン格納用ストレージとして使用しますが、その場合はSSDなどの高速なストレージデバイスを使用することが望ましいです。低速なHDDを使用する場合には複数のHDDを束ねて使用するRAID構成とするなど、ストレージI/Oの高速化を検討してください。また、USBメモリのような低速デバイスは極力避けた方がよいでしょう。
ストレージ接続のインタフェースは、クライアントPCでも使用される「シリアルATA」(Serial Advanced Technology Attachment)やサーバで使用される「SAS」(Serial Attached SCSI)、高速インタフェースとして利用シーンが増えている「NVMe」(Non-Volatile Memory Express)など、Windows OSがサポートしていれば、それらのインタフェースを介して接続された物理ディスクを使用できます。
また、高可用性の回でも触れますが、ローカルディスクではなく外部接続ストレージもHyper-Vはサポートしており、「iSCSI」(Internet Small Computer System Interface)や「ファイバーチャネル」(Fibre Channel:FCと省略される)といったインタフェースを介して接続された外部ストレージも使用可能です。
iSCSIやファイバーチャネルで接続された外部ストレージは、Windows Server上ではローカルストレージと同じように扱えるため、ドライブレターを設定することで、仮想マシンの格納先として指定できます。
以下の画面15は、ファイバーチャネルを使用して外部ストレージ上のボリュームをマッピングして使用している例となります。ディスクの種類を見ると「HDD(ファイバーチャネル)」と表記されており、稼働中の仮想マシンに接続された仮想ハードディスクがファイバーチャネルストレージ上にあることが分かります。
また、他社ハイパーバイザーでは「NFS」(Network File System)プロトコルで接続できるファイルストレージが使用可能ですが、Hyper-VではWindows OSのファイル共有プロトコルである「SMB」(Server Message Block)で接続されたファイルストレージを仮想マシンの格納場所として使用することもできます。
SMBで接続するファイルストレージとして、Windows Serverで構築されたファイルサーバは当然利用可能ですし、SMB 3.0をサポートした「NAS」(Network Attached Storage)も使用できます。
以下の画面16では、Windowsの共有フォルダ上に仮想マシンの仮想ハードディスクが置かれていることがファイルパス(\\ホスト名\共有名)から分かりますが、仮想マシンは問題なく稼働していることが確認できます。
ローカルディスクはもとより、iSCSIやファイバーチャネルといった外部ブロックストレージやWindows Serverベースのファイルサーバなどのファイルストレージも仮想マシンの格納先として利用できることを見てきました。
前述のストレージ以外にも、他社ハイパーバイザーで構成可能なハイパーコンバージド構成(HCI構成)もHyper-Vではサポートしています。
Windowsの機能である「記憶域スペース」を拡張し、複数のノードでクラスタを構成して各ノードのローカルディスクを束ねて高可用性が保証された共有ディスクとして使用できる「記憶域スペースダイレクト」(Storage Spaces Direct:S2D)をストレージとして利用する構成が、いわゆるHCI構成に当たります。
S2Dはソフトウェアでストレージ構成を定義する「ソフトウェア定義ストレージ」(Software Defined Storage:SDS)であり、Windows ServerでのHCI構成(「Windows Server HCI」と表現される場合があります)や、Microsoftのハイブリッドクラウドソリューションである「Azure Local」でも使用されています。
S2Dについての詳細は、以下のMicrosoftのドキュメントを参照してください。
このように、Hyper-Vでは多様なストレージ構成がサポートされ、自社のニーズに合った構成を選択、もしくは併用できます。
これまで仮想マシンを格納するディスクを見てきましたが、ローカルディスクやiSCSI接続などの外部ブロックストレージを使用する場合、当然のことながらOSからディスクを認識できるようにディスクをフォーマットする必要があります。
Windows Serverのファイルシステムとしては「NTFS」(New Technology File System)が一般的ですが、Windows Serverで利用可能なもう1つのファイルシステムである「ReFS」(Resilient File System)でフォーマットされたボリュームも、Hyper-Vの仮想マシン格納先として使用できます。ReFSについての詳細は、以下のMicrosoftの公式ドキュメントを参照してください。
ReFSはNTFSより後にリリースされたファイルシステムであるため、拡張性や回復性、パフォーマンスなど、NTFSと比較してさまざまな点で進化を遂げています。
上記Microsoftの公式ドキュメントにも記載がありますが、仮想マシンの高速操作を行うためのブロッククローンのサポートなど、大規模仮想化基盤に必要な機能を実装している点がポイントといえます。
また、回復性についても、破損検出やオンラインでの修正機能などがサポートされており、より回復性に優れたファイルシステムとなっています。
仮想化基盤などでは前項で解説したS2DとReFSのセットでの使用がMicrosoftの推奨であり、Microsoftのハイブリッドクラウドソリューションである「Azure Local」ではS2DとReFSが使用されています。
ReFSは非常に高機能なファイルシステムですが、NTFSでサポートされる一部の機能がReFSでは使用できないこともあり、完全にNTFSを代替するものではない点に注意が必要です。
中でも、ファイルコピーなどの処理を外部ストレージにオフロードする「オフロードデータ転送」(Offloaded Data Transfer:ODX)機能は、ReFSではサポートされない機能の一つです。ODXを使用することで、外部ストレージ上でのファイルコピー処理をストレージ側にオフロードしてHyper-Vホストの負荷を軽減できます(画面17)。
画面17では、F:ドライブにマップしたiSCSIストレージ上のファイルを同じフォルダに別名コピーしていますが、Hyper-VホストではiSCSIのトラフィックは発生せず(iSCSIターゲットのIPアドレスである「192.168.100.10」と通信しているネットワークアダプターで大きなトラフィックが発生していない)、進捗(しんちょく)情報更新のための少量の通信が発生していることが確認でき、ファイルコピーがストレージ内部で処理されていることが分かります。
このように、NTFSでしか使用できない機能を利用している場合には、ReFSの採用は慎重に検討した方がよいでしょう。ReFSで使用できない機能については、前述のドキュメントの「ReFSで使用できない機能」を参照してください。
今回はHyper-Vのストレージについて解説しましたが、単体のHyper-Vホストではそれほどストレージについて意識しないと思います。ストレージを強く意識するシナリオは、やはり複数のHyper-Vホストをクラスタ化して高可用性を保証する機能である「フェールオーバークラスタリング」を使用する場合です。
複数ホストから構成されるクラスタ環境では、単一の仮想マシンのファイル群を複数のホストからのアクセスを可能としなければならず、そのために「クラスター共有ボリューム」と呼ばれるストレージ機能を利用する必要があります。この機能を利用するには、複数のホストからアクセスが可能なストレージを使用する必要があり、こうした構成を取る場合にはストレージを強く意識する必要があります。
次回は、ストレージ機能と密接に関連し、Hyper-Vの高可用性を保証する機能であるフェールオーバークラスタリングについて解説します。
株式会社ネットワールド所属。Microsoft MVP for Cloud and Datacenter Management(2012-2025)。現業の傍ら、コミュニティーイベントでの登壇や著作にてMicrosoftテクノロジーに関する技術情報の発信、共有を続けている。ネットワークやハードウェアといった物理層に近いところが大好きな、昔ながらのインフラ屋さん。得意技はケーブル整線。近著は『詳解! Windows Server仮想ネットワーク』(日経BP社)。
Copyright © ITmedia, Inc. All Rights Reserved.