第15章 仮想マシン用のストレージの管理
仮想マシンは、物理マシンと同様に、データ、プログラム、およびシステムファイル用にストレージを必要とします。仮想マシン管理者は、物理ストレージまたはネットワークベースのストレージを仮想マシンに仮想ストレージとして割り当てることができます。また、基本となるハードウェアに関係なく、ストレージを仮想マシンに表示する方法を変更することもできます。
次のセクションでは、仮想マシンのストレージの種類、その機能、および CLI または Web コンソールを使用してそれらを管理する方法を説明します。
15.1. 仮想マシンのストレージの概要
仮想マシンのストレージを初めて使用するユーザー、またはその仕組みがよくわからないユーザー向けに、次のセクションでは仮想マシンストレージのさまざまなコンポーネントの概要、その機能、管理の基本、Red Hat が提供するサポートされるソリューションを説明します。
以下の情報が記載されています。
15.1.1. ストレージプールの概要
ストレージプールは、仮想マシンにストレージを提供するために、libvirt
が管理するファイル、ディレクトリー、またはストレージデバイスです。ストレージプールは、ストレージボリュームに分割できます。ストレージボリュームは、仮想マシンイメージを保存するか、追加のストレージとして仮想マシンに割り当てられます。
さらに、複数の仮想マシンが同じストレージプールを共有できるため、ストレージリソースの割り当てが改善されます。
ストレージプールは永続的または一時的なものにできます。
-
永続ストレージプールは、ホストマシンのシステムを再起動しても維持します。この
virsh pool-define
を使用して、永続ストレージプールを作成できます。 -
一時的なストレージプールは、ホストが再起動すると削除されます。
virsh pool-create
コマンドを使用すると、一時的なストレージプールを作成できます。
-
永続ストレージプールは、ホストマシンのシステムを再起動しても維持します。この
ストレージプールのストレージタイプ
ストレージプールは、ローカルまたはネットワークベース (共有) にできます。
ローカルストレージのプール
ローカルストレージプールは、ホストサーバーに直接割り当てることができます。これには、ローカルデバイスのローカルディレクトリー、直接接続したディスク、物理パーティション、および論理ボリューム管理 (LVM) ボリュームグループが含まれます。
ローカルストレージプールは、移行を必要としない、または仮想マシンが多数存在する、開発、テスト、および小規模なデプロイメントに役立ちます。
ネットワーク (共有) ストレージプール
ネットワークストレージプールには、標準プロトコルを使用してネットワーク経由で共有されるストレージデバイスが含まれます。
15.1.2. ストレージボリュームの概要
ストレージプールは、ストレージボリューム
に分類されます。ストレージボリュームは、libvirt
が処理する物理パーティション、LVM 論理ボリューム、ファイルベースのディスクイメージ、その他のストレージタイプの抽象化です。ストレージボリュームは、基盤となるハードウェアに関係なく、ローカルのストレージデバイス (ディスクなど) として仮想マシンに表示されます。
ホストマシンでは、ストレージボリュームは、その名前と、そこから派生するストレージプールの識別子で参照されます。virsh
コマンドラインでは、--pool storage_pool volume_name
の形式を取ります。
たとえば、guest_images プールにある firstimage という名前のボリュームに関する情報を表示するには、次のコマンドを実行します。
# virsh vol-info --pool guest_images firstimage
Name: firstimage
Type: block
Capacity: 20.00 GB
Allocation: 20.00 GB
15.1.3. libvirt を使用したストレージ管理
libvirt
リモートプロトコルを使用して、仮想マシンストレージのあらゆる側面を管理できます。これらの操作は、リモートホストで実行することもできます。したがって、RHEL Web コンソールなどの libvirt
を使用する管理アプリケーションを使用して、仮想マシンのストレージを設定するために必要なすべてのタスクを実行できます。
libvirt
の API を使用すると、ストレージプールのボリュームリストを照会したり、そのストレージプールの容量、割り当て、利用可能なストレージに関する情報を取得したりできます。それに対応するストレージプールの場合は、libvirt
の API を使用して、ストレージボリュームを作成、クローン作成、サイズ変更、および削除することもできます。また、libvirt
API を使用してデータをストレージボリュームにアップロードしたり、ストレージボリュームからデータをダウンロードしたり、ストレージボリュームのデータを消去したりできます。
15.1.4. ストレージ管理の概要
ストレージの管理で利用可能なオプションを説明するため、以下の例では、mount -t nfs nfs.example.com:/path/to/share /path/to/data
を使用するサンプルの NFS サーバーを説明します。
ストレージ管理者は、以下を実行できます。
-
仮想ホストに NFS ストレージプールを定義し、エクスポートするサーバーパスと、クライアントのターゲットパスを記述できます。その結果、
libvirt
は、libvirt
の起動時に自動的に、またはlibvirt
の実行中に必要に応じてストレージをマウントできます。 - ストレージプールとストレージボリュームは、名前で仮想マシンに追加するだけです。ターゲットパスをボリュームに追加する必要はありません。そのため、ターゲットのクライアントパスが変更しても、仮想マシンには影響を及ぼしません。
-
ストレージプールを自動起動するように設定できます。これを行うと、
libvirt
は、libvirt
の起動時に指定したディレクトリーに、NFS 共有ディスクを自動的にマウントします。libvirt
は、コマンドmount nfs.example.com:/path/to/share /vmdata
と同様に、指定したディレクトリーに共有をマウントします。 -
libvirt
の API を使用して、ストレージボリュームパスをクエリーできます。このようなストレージボリュームは、基本的には NFS 共有ディスクにあるファイルです。その後、これらのパスを、仮想マシンのブロックデバイスのソースストレージを説明する仮想マシンの XML 定義のセクションにコピーできます。 NFS の場合は、
libvirt
の API を使用するアプリケーションを使用して、ストレージプール (NFS 共有内のファイル) にあるストレージボリュームを、プールのサイズ (共有のストレージ容量) の上限まで作成および削除できます。すべてのストレージプールタイプがボリュームの作成および削除に対応しているわけではないことに注意してください。
-
ストレージプールは、不要になったときに停止できます。ストレージプールを停止する (
pool-destroy
) と、開始操作が取り消されます。この場合は、NFS 共有のマウントが解除されます。コマンドの名前が記載されているにも関わらず、共有上のデータは destroy 操作で修正されません。詳細は、man virsh
を参照してください。
15.1.5. 対応しているストレージプールのタイプと、対応していないストレージプールのタイプ
対応しているストレージプールの種類
以下は、RHEL で対応しているストレージプールタイプのリストです。
- ディレクトリーベースのストレージプール
- ディスクベースのストレージプール
- パーティションベースのストレージプール
- iSCSI ベースのストレージプール
- LVM ベースのストレージプール
- NFS ベースのストレージプール
- vHBA デバイスを使用した SCSI ベースのストレージプール
- マルチパスベースのストレージプール
- RBD ベースのストレージプール
対応していないストレージプールの種類
以下は、RHEL で対応していない libvirt
ストレージプールタイプのリストです。
- sheepdog ベースのストレージプール
- vstorage ベースのストレージプール
- ZFS ベースのストレージプール
- iSCSI-direct ストレージプール
- GlusterFS ストレージプール