Menu Close
Settings Close

Language and Page Formatting Options

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

仮想マシンは、物理マシンと同様に、データ、プログラム、およびシステムファイル用にストレージを必要とします。仮想マシン管理者は、物理ストレージまたはネットワークベースのストレージを仮想マシンに仮想ストレージとして割り当てることができます。また、基本となるハードウェアに関係なく、ストレージを仮想マシンに表示する方法を変更することもできます。

次のセクションでは、仮想マシンのストレージの種類、その機能、および CLI または Web コンソールを使用してそれらを管理する方法を説明します。

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

仮想マシンのストレージを初めて使用するユーザー、またはその仕組みがよくわからないユーザー向けに、次のセクションでは仮想マシンストレージのさまざまなコンポーネントの概要、その機能、管理の基本、Red Hat が提供するサポートされるソリューションを説明します。

以下の情報が記載されています。

14.1.1. ストレージプールの概要

ストレージプールは、仮想マシンにストレージを提供するために、libvirt が管理するファイル、ディレクトリー、またはストレージデバイスです。ストレージプールは、ストレージボリュームに分割できます。ストレージボリュームは、仮想マシンイメージを保存するか、追加のストレージとして仮想マシンに割り当てられます。

さらに、複数の仮想マシンが同じストレージプールを共有できるため、ストレージリソースの割り当てが改善されます。

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

    • 永続ストレージプールは、ホストマシンのシステムを再起動しても維持します。この virsh pool-define を使用して、永続ストレージプールを作成できます。
    • 一時的なストレージプールは、ホストが再起動すると削除されます。virsh pool-create コマンドを使用すると、一時的なストレージプールを作成できます。

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

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

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

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

    ローカルストレージプールは、移行を必要としない、または仮想マシンが多数存在する、開発、テスト、および小規模なデプロイメントに役立ちます。

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

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

14.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

14.1.3. libvirt を使用したストレージ管理

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

libvirt の API を使用すると、ストレージプールのボリューム一覧を照会したり、そのストレージプールの容量、割り当て、利用可能なストレージに関する情報を取得したりできます。それに対応するストレージプールの場合は、libvirt の API を使用して、ストレージボリュームを作成、クローン作成、サイズ変更、および削除することもできます。また、libvirt API を使用してデータをストレージボリュームにアップロードしたり、ストレージボリュームからデータをダウンロードしたり、ストレージボリュームのデータを消去したりできます。

14.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 を参照してください。

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

対応しているストレージプールの種類

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

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

対応していないストレージプールの種類

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

  • sheepdog ベースのストレージプール
  • vstorage ベースのストレージプール
  • ZFS ベースのストレージプール
  • iSCSI-direct ストレージプール
  • GlusterFS ストレージプール