第13章 仮想マシン用のストレージの管理
本章では、仮想マシンのストレージについて説明します。仮想ストレージは、仮想マシンの接続に割り当てられた物理ストレージから抽象化されます。ストレージは、準仮想化またはエミュレートのブロックデバイスドライバーを使用して仮想マシンに接続されています。
13.1. ストレージの概念
storage pool は、ゲスト仮想マシンが使用するために確保するストレージの量です。ストレージプールは、ストレージボリューム に分類されます。各ストレージボリュームは、ゲストバスのブロックデバイスとしてゲスト仮想マシンに割り当てられます。
ストレージプールとボリュームは、libvirt を使用して管理されます。libvirt のリモートプロトコルを使用すると、ゲスト仮想マシンのライフサイクルのあらゆる側面、およびゲスト仮想マシンに必要なリソースの設定を管理できます。この操作は、リモートホストで実行できます。そして、libvirt を使用した管理アプリケーション (Virtual Machine Manager など) は、ゲスト仮想マシンにホスト物理マシンを設定するために必要なすべてのタスクを実行できるようにします。これには、シェルアクセスやその他の制御チャネルを必要とせずに、リソースの割り当て、ゲスト仮想マシンの実行、シャットダウン、リソースの割り当て解除などが含まれます。
libvirt の API を使用すると、ストレージプールのボリューム一覧を照会したり、ストレージプールの容量、割り当て、利用可能なストレージに関する情報を取得したりできます。ストレージプール内のストレージボリュームは、スパースボリュームで異なる可能性がある割り当てや容量などの情報を取得するためにクエリーされることがあります。
注記
スパースボリュームの詳細は、Virtualization Getting Started Guide を参照してください。
ストレージプールがこれに対応する場合は、libvirt API を使用してストレージボリュームを作成、クローン、サイズ変更、および削除できます。API は、ストレージボリュームへのデータのアップロード、ストレージボリュームからのデータのダウンロード、またはストレージボリュームからのデータの消去にも使用できます。
ストレージプールを起動すると、ドメイン XML 内のボリュームへのホストパスの代わりに、ストレージプール名とストレージボリューム名を使用して、ストレージボリュームをゲストに割り当てることができます。
注記
ドメイン XML の詳細は、23章ドメイン XML の操作 を参照してください。
ストレージプールは停止 (破棄) できます。これによりデータの抽象化は削除されますが、データは保持されます。
たとえば、mount -t nfs nfs.example.com:/path/to/share /path/to/data を使用する NFS サーバーです。ストレージ管理者は、仮想化ホストで NFS ストレージプールを定義して、エクスポートしたサーバーパスおよびクライアントターゲットパスを記述できます。これにより、libvirt が起動した場合に自動的に、または必要に応じて、libvirt の実行中に libvirt がマウントを実行できるようになります。NFS サーバーがエクスポートしたディレクトリーが含まれるファイルは、NFS ストレージプールのストレージボリュームとしてリスト表示されます。
ストレージボリュームをゲストに追加する際、管理者がターゲットパスをボリュームに追加する必要はありません。名前でストレージプールとストレージボリュームを追加する必要があります。したがって、ターゲットクライアントのパスが変更しても、仮想マシンには影響を及ぼしません。
ストレージプールが開始すると、libvirt は、システム管理者がログインして mount nfs.example.com:/path/to/share /vmdata を実行した場合と同じように、指定したディレクトリーに共有をマウントします。ストレージプールが自動起動するように設定されている場合は、libvirt が起動したときに、指定したディレクトリーに NFS 共有ディスクがマウントされていることが libvirt により確認されます。
ストレージプールが起動すると、NFS 共有ディスクのファイルはストレージボリュームとして報告され、ストレージボリュームのパスは、libvirt API を使用してクエリーすることができます。ストレージボリュームのパスは、ゲスト仮想マシンの XML 定義のセクションにコピーできます。このセクションは、ゲスト仮想マシンのブロックデバイスのソースストレージを記述します。NFS の場合、libvirt API を使用するアプリケーションは、ストレージプール (NFS 共有内のファイル) にあるストレージボリュームを、プールのサイズ (共有のストレージ容量) の上限まで作成および削除できます。
ボリュームの作成および削除は、すべてのストレージプールタイプで対応しているわけではありません。ストレージプールを停止する (pool-destroy) と、開始操作を取り消します。この場合は、NFS 共有のマウントを解除します。コマンドの名前が記載されているにも関わらず、共有上のデータは destroy 操作で修正されません。詳細は、man virsh を参照してください。
手順13.1 ストレージの作成と割り当て
この手順により、仮想マシンゲストのストレージを作成および割り当てるために必要な手順の概要がわかります。
ストレージプールの作成
利用可能なストレージメディアから、1 つ以上のストレージプールを作成します。詳細は、「ストレージプールの使用」 を参照してください。ストレージボリュームの作成
利用可能なストレージプールから、ストレージボリュームを 1 つ以上作成します。詳細は、「ストレージボリュームの使用」 を参照してください。仮想マシンへのストレージデバイスの割り当て
ストレージボリュームから抽象化されたストレージデバイスを、ゲスト仮想マシンに割り当てます。詳細は、「ゲストへのストレージデバイスの追加」 を参照してください。