Red Hat Training

A Red Hat training course is available for RHEL 8

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

仮想マシンのストレージは、CLI または Web コンソール で管理できます。

このドキュメントでは、virsh コマンドを使用して、仮想マシンのストレージを管理する方法を説明します。

11.1. 仮想マシンのストレージの概要

以下のセクションでは、仮想マシンのストレージ (ストレージプール、ストレージボリュームなど) に関する情報と、仮想マシンにストレージを提供するのに使用される方法を説明します。

11.1.1. 仮想マシンのストレージ

ここでは、仮想マシン用のストレージを作成するために、ストレージプールとストレージボリュームがどのように使用されるかを説明します。

ストレージプール は、ホストが管理し、仮想マシンが使用するために確保されているストレージの量です。ストレージボリューム は、ストレージプール内の領域から作成できます。各ストレージボリュームは、仮想マシンに、ゲストバス上のブロックデバイス (ディスクなど) として割り当てることができます。

ストレージプールとボリュームは、libvirt を使用して管理されます。libvirt リモートプロトコルを使用して、仮想マシンストレージのあらゆる側面を管理できます。この操作は、リモートホストで実行できます。その結果、RHEL Web コンソールなどの libvirt を使用する管理アプリケーションを使用して、仮想マシンのストレージを構成するために必要なタスクをすべて実行できます。

libvirt の API を使用すると、ストレージプールのボリューム一覧を照会したり、ストレージプールの容量、割り当て、利用可能なストレージに関する情報を取得したりできます。ストレージプール内のストレージボリュームは、スパースボリュームで異なる可能性がある割り当てや容量などの情報を取得するためにクエリーされることがあります。

ストレージプールがこれに対応する場合は、libvirt API を使用してストレージボリュームを作成、クローン、サイズ変更、および削除できます。API は、ストレージボリュームへのデータのアップロード、ストレージボリュームからのデータのダウンロード、またはストレージボリュームからのデータの消去にも使用できます。

ストレージプールが起動したら、仮想マシンの XML 設定ファイル内のボリュームへのホストパスの代わりに、ストレージプール名とストレージボリューム名を使用して、ストレージボリュームを仮想マシンに割り当てることができます。

11.1.2. ストレージプール

ストレージプールは、仮想マシンにストレージを提供するために、libvirt が管理するファイル、ディレクトリー、またはストレージデバイスです。ストレージプールは、仮想マシンイメージを格納するストレージボリュームに分割されるか、追加のストレージとして仮想マシンに接続されます。複数の仮想マシンで同じストレージプールを共有できるため、ストレージリソースの割り当てを改善できます。

ストレージプールは永続的または一時的なものにできます。

  • 永続ストレージプールは、ホストマシンのシステムを再起動しても維持します。
  • 一時的なストレージプールは、ホストが再起動すると削除されます。

virsh pool-define コマンドを使用して、永続ストレージプールを作成します。virsh pool-create コマンドを使用して一時的なストレージプールを作成します。

ストレージプールのストレージタイプ

ストレージプールは、ローカルまたはネットワークベース (共有) にできます。

  • ローカルストレージのプール

    ローカルストレージプールは、ホストサーバーに直接割り当てることができます。これには、ローカルデバイスのローカルディレクトリー、直接接続したディスク、物理パーティション、および論理ボリューム管理 (LVM) ボリュームグループが含まれます。

    ローカルストレージプールは、移行や、多くの仮想マシンを必要としない開発、テスト、および小規模デプロイメントに便利です。

  • ネットワーク (共有) ストレージプール

    ネットワークストレージプールには、標準プロトコルを使用してネットワーク経由で共有されるストレージデバイスが含まれます。

ストレージプールの使用例

ストレージプールを管理するために利用可能なオプションを説明するために、以下では 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 を参照してください。

対応しているストレージプールのタイプと、対応していないストレージプールのタイプ

以下は、RHEL で対応しているストレージプールタイプの一覧です。

  • ディレクトリーベースのストレージプール
  • ディスクベースのストレージプール
  • パーティションベースのストレージプール
  • GlusterFS ストレージプール
  • iSCSI ベースのストレージプール
  • LVM ベースのストレージプール
  • NFS ベースのストレージプール
  • vHBA デバイスを使用した SCSI ベースのストレージプール
  • マルチパスベースのストレージプール
  • RBD ベースのストレージプール

以下は、RHELで対応していない libvirt ストレージプールタイプの一覧です。

  • sheepdog ベースのストレージプール
  • vstorage ベースのストレージプール
  • ZFS ベースのストレージプール

11.1.3. ストレージボリューム

ストレージプールは、ストレージボリュームに分類されます。ストレージボリュームは、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