第13章 仮想マシンのストレージ管理

この章では、仮想マシンのストレージについて説明します。仮想ストレージは仮想マシンの接続に割り当てられた物理ストレージから抽象化されます。ストレージは、準仮想化またはエミュレートされたブロックデバイスドライバーを使用して仮想マシンに接続されます。

13.1. ストレージの概念

ストレージプールとは、ゲスト仮想マシンが使用するために確保しておくストレージの量のことです。ストレージプールは、ストレージボリュームに分割されます。各ストレージボリュームは、ゲストバス上のブロックデバイスとしてゲスト仮想マシンに割り当てられます。
ストレージプールとボリュームはlibvirt を使用して管理されます。libvirt のリモートプロトコルを用いると、ゲスト仮想マシンのライフサイクルのあらゆる側面と、ゲスト仮想マシンが必要とするリソースの構成を管理できます。これらの操作は、リモートホスト上で実行することができます。そのため、libvirt を使用する 仮想マシンマネージャー などの管理アプリケーションによって、ユーザーはゲスト仮想マシンのホスト物理マシンの設定するために必要なタスクをすべて実行できます。これらのタスクには、リソースの割り当て、ゲスト仮想マシンの実行や終了、およびリソースの割り当て解除が含まれ、シェルへのアクセスやその他の制御チャネルを必要としません。
libvirt API を使用すると、ストレージプールのボリュームリストに対してクエリーを実行でき、ストレージプールの容量、割り当て、および利用可能なストレージに関する情報を取得できます。ストレージプールのストレージボリュームは、割り当てや容量などの情報を取得するためにクエリーが行われることがあり、スパース (sparse) ボリュームでは異なることがあります。

注記

スパース (Sparse) ボリュームの詳細については、『仮想化スタートガイド』を参照してください。
サポートするストレージプールの場合、libvirt API を使用してストレージボリュームの作成、クローン、サイズ変更、および削除を行うことができます。また、API を使用してストレージボリュームへのデータのアップロード、ストレージボリュームからのデータのダウンロード、またはストレーボリュームからのデータの消去を行うこともできます。
ストレージプールの開始後、ドメイン XML のボリュームへのホストパスの代わりにストレージプール名とストレージボリューム名を使用して、ストレージボリュームをゲストに割り当てることができます。

注記

ドメイン XML の詳細は 23章ドメイン XML の操作 を参照してください。
ストレージプールは停止 (破棄) することができます。これにより、データの抽象化は削除されますが、データは保持されます。
たとえば、mount -t nfs nfs.example.com:/path/to/share /path/to/data を使用する NFS サーバーの場合、担当のストレージ管理者は仮想化ホストで NFS ストレージプールを定義し、エスクポートされたサーバーのパスとクライアントターゲットのパスを定義できます。これにより、libvirtlibvirt の起動時に自動的にマウントを実行するか、libvirt の実行中に必要に応じてマウントを実行することができます。NFS サーバーのエクスポートされたディレクトリーは、NFS ストレージプール内のストレージボリュームとしてリストされます。
ストレージボリュームがゲストに追加されると、管理者は、ボリュームへのターゲットパスを追加する必要はありません。名前を使ってストレージプールおよびストレージボリュームを追加する必要があります。そのため、ターゲットクライアントのパスが変更された場合でも仮想マシンには影響しません。
ストレージプールが開始されると、libvirt は共有を指定のディレクトリー上にマウントします。これは、システム管理者がログインし、mount nfs.example.com:/path/to/share /vmdata を実行した場合と同様です。ストレージプールが自動起動するよう設定されている場合、libvirtlibvirt の起動時に NFS 共有ディスクが指定されたディレクトリー上にマウントされるようにします。
ストレージプールが開始されると、NFS 共有ディスク内のファイルはストレージボリュームとして報告され、libvirt API を使用してストレージボリューのパスに対してクエリーが実行されることがあります。その後、ゲスト仮想マシンのブロックデバイスのソースストレージを記述するゲスト仮想マシンの XML 定義にストレージボリュームのパスをコピーすることができます。NFS の場合、libvirt API を使用するアプリケーションは、プールのサイズの限界まで (NFS 共有のストレージ容量) ストレージプール (NFS 共有のファイル) のストレージボリュームを作成および削除できます。
すべてのストレージプールの種類がボリュームの作成および削除をサポートする訳ではありません。ストレージプールを停止 (pool-destroy) すると、開始操作が取り消され、この場合は NFS 共有がアンマウントされます。共有上のデータは destroy 操作では編集されません。詳細は「man virsh」を参照してください。

手順13.1 ストレージの作成および割り当て

ここでは、仮想マシンゲストのストレージを作成および割り当てるのに必要な手順の概要を説明します。
  1. ストレージプールの作成

    使用可能なストレージメディアから 1 つ以上のストレージプールを作成します。詳細は 「ストレージプールの使用」 を参照してください。
  2. ストレージボリュームの作成

    使用可能なストレージプールから 1 つ以上のストレージボリュームを作成します。詳細は 「ストレージボリュームの使用」 を参照してください。
  3. ストレージデバイスを仮想マシンに割り当てます。

    ストレージボリュームから抽象化した 1 つ以上のストレージデバイスをゲスト仮想マシンに割り当てます。詳細は 「ストレージデバイスのゲストへの追加」 を参照してください。