Red Hat Training

A Red Hat training course is available for RHEL 8

仮想化の設定および管理

Red Hat Enterprise Linux 8

ホストの設定、仮想マシンの作成および管理、ならびに Red Hat Enterprise Linux 8 の仮想化機能の理解

Red Hat Customer Content Services

概要

本書は、Red Hat Enterprise Linux 8 (RHEL 8) で仮想化を管理する方法を説明します。仮想化に関する一般的な情報と、コマンドラインツールユーティリティーおよび Web コンソールを使用して仮想化を管理する方法を説明します。

Red Hat ドキュメントへのフィードバック (英語のみ)

ご意見ご要望をお聞かせください。ドキュメントの改善点はございませんか。改善点を報告する場合は、以下のように行います。

  • 特定の文章に簡単なコメントを記入する場合は、以下の手順を行います。

    1. ドキュメントの表示が Multi-page HTML 形式になっていて、ドキュメントの右上端に Feedback ボタンがあることを確認してください。
    2. マウスカーソルで、コメントを追加する部分を強調表示します。
    3. そのテキストの下に表示される Add Feedback ポップアップをクリックします。
    4. 表示される手順に従ってください。
  • より詳細なフィードバックを行う場合は、Bugzilla のチケットを作成します。

    1. Bugzilla の Web サイトにアクセスします。
    2. Component で Documentation を選択します。
    3. Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも記入してください。
    4. Submit Bug をクリックします。

第1章 RHEL 8 仮想化の概要

本章では、仮想化の概念や、Linux における仮想化の実装について参考になるように、RHEL 8 における仮想化の概要、基本な内容、利点、コンポーネントなど、Red Hat が提供する仮想化ソリューションを説明します。

1.1. 仮想化とは

RHEL 8 では 仮想化機能 が提供され、RHEL 8 を実行するマシンが、複数の仮想マシン (VM) (ゲスト とも呼ばれます) を ホスト できるようにします。仮想マシンは、ホストの物理ハードウェアとコンピューティングリソースを使用して、独立した仮想化オペレーティングシステム (ゲスト OS) を、ホストのオペレーティングシステムのユーザー空間プロセスとして実行します

つまり、仮想化により、オペレーティングシステム内にオペレーティングシステムを追加できます。

仮想マシンを使用すると、ソフトウェアの設定や機能を安全にテストしたり、レガシーソフトウェアを実行したり、ハードウェアのワークロードの効率を最適化したりできます。利点の詳細は「仮想化の利点」を参照してください。

仮想システムの詳細は「仮想化とは」を参照してください。

RHEL 8 で仮想化を試す場合は、2章仮想化の使用を参照してください。

注記

Red Hat は、RHEL 8 の仮想化以外にも、専門化した仮想化ソリューションを多数提供しています。各ソリューションには、さまざまなユーザーフォーカスおよび機能があります。詳細は「Red Hat の仮想化ソリューション」を参照してください。

1.2. 仮想化の利点

仮想マシンの使用には、物理マシンを使用する場合と比較して、以下の利点があります。

  • リソースの柔軟性と詳細な割り当て

    仮想マシンは、通常、物理マシンであるホストマシンで稼働し、使用するゲスト OS に物理ハードウェアを割り当てることもできます。ただし、仮想マシンへの物理リソースの割り当てはソフトウェアレベルで行うため、柔軟性が非常に高くなります。仮想マシンは、ホストメモリー、CPU、またはストレージ領域で設定可能な割合を指定して、非常に詳細なリソース要求を指定できます。

    たとえば、ゲスト OS がディスクとして見るものは、ホストファイルシステムではファイルとして表示され、そのディスクのサイズは、物理ディスクで利用可能なサイズよりも少なくなります。

  • ソフトウェアで制御される設定

    仮想マシン全体の設定は、ホスト上のデータとして保存され、ソフトウェア制御下にあります。したがって、仮想マシンの作成、削除、クローン作成、移行、リモートからの操作、リモートストレージへの接続などを簡単に行うことができます。

  • ホストからの分離

    ゲスト OS は、ホストの OS とは別の仮想化カーネルで実行します。つまり、任意の OS を仮想マシンにインストールでき、ゲスト OS が不安定になっても、または不正アクセスされても、ホストには影響を及ぼしません。

  • 領域とコスト効率

    1 台の物理マシンで仮想マシンを多数ホストできます。したがって、複数の物理マシンが同じタスクを実行する必要がないため、物理ハードウェアに対する領域、電力、およびメンテナンスの要件が低くなります。

  • ソフトウェアの互換性

    仮想マシンは、ホストとは異なる OS を使用できるため、仮想化により、本来はホスト OS 用にリリースされていないアプリケーションを実行できるようになります。たとえば、RHEL 6 のゲスト OS を使用すると、RHEL 6 用にリリースされたアプリケーションを RHEL 8 ホストシステムで実行できます。

    注記

    RHEL 8 ホストでは、すべてのオペレーティングシステムがゲスト OS としてサポートされているわけではありません。詳細は「RHEL 8 仮想化で推奨される機能」を参照してください。

1.3. 仮想マシンコンポーネントおよびその相互作用

RHEL 8 の仮想化は、以下の主要ソフトウェアコンポーネントで構成されています。

ハイパーバイザー

RHEL 8で仮想マシンを作成する基礎となる部分は、ハードウェアを制御し、ホストマシンで複数のオペレーティングシステムを実行できるようにするソフトウェア層で、ハイパーバイザー と呼ばれます。

ハイパーバイザーには、KVM (Kernel-based Virtual Machine) モジュールと、仮想化カーネルドライバー (virtiovfioなど) が含まれます。このコンポーネントでは、ホストマシンの Linux カーネルにより、ユーザー空間のソフトウェアに仮想化のリソースが提供されます。

ユーザー空間レベルでは、QEMU エミュレーターが、ゲスト OS を実行できる完全に仮想化されたハードウェアプラットフォームをシミュレートし、リソースがホストでどのように割り当てられ、ゲストに示されるかを管理します。

さらに、libvirt ソフトウェアスイートが管理層および通信層として機能し、QEMU とのやり取りを容易にし、セキュリティルールを適用し、VM を設定して実行するための追加ツールを多数提供します。

XML 設定

ホストベースの XML 設定ファイル (ドメイン XML ファイルとも呼ばれます) には、個別の仮想マシンが記述されます。これには、以下が含まれます。

  • メタデータ (仮想マシンの名前、タイムゾーン、その他の仮想マシンの情報など)
  • 仮想マシンのデバイスの説明 (仮想 CPU (vCPU)、ストレージデバイス、入出力デバイス、ネットワークインターフェースカード、その他の物理ハードウェアおよび仮想ハードウェアなど)
  • 仮想マシンの設定 (使用可能な最大メモリー量、再起動設定、仮想マシンの動作に関するその他の設定など)

コンポーネントのインタラクション

仮想マシンが起動すると、ハイパーバイザーは XML 設定を使用して、ホストのユーザー空間プロセスとして仮想マシンのインスタンスを作成します。ハイパーバイザーは、仮想マシンプロセスが、ホストベースのインターフェース (virsh ユーティリティー、virt-install ユーティリティー、guestfish ユーティリティー、Web コンソールの GUI など) にアクセスできるようにします。

このような仮想化ツールを使用すると、libvirt が、入力を QEMU の命令に変換します。QEMU が命令を KVM に伝え、カーネルが命令を実行するのに必要なリソースを適切に割り当てるようになります。これにより、QEMU が、仮想マシンの作成や修正、仮想マシンのオペレーティングシステムでのアクションの実行など、対応するユーザー空間を変更します。

注記

QEMU はアーキテクチャーの必須コンポーネントですが、セキュリティーに関する懸念があるため、RHEL 8 システムで直接使用することは意図されていません。したがって、Red Hat は、qemu-* コマンドの使用をサポート対象外としており、libvirt を使用して QEMU と相互作用することを強く推奨します。

ホストベースのインターフェースの詳細は、「仮想管理に使用するツールおよびインターフェース」を参照してください。

図1.1 RHEL 8 の仮想アーキテクチャー

仮想アーキテクチャー

1.4. 仮想管理に使用するツールおよびインターフェース

RHEL 8 の仮想化は、コマンドラインインターフェース (CLI) または複数のグラフィカルユーザーインターフェース (GUI) を使用して管理できます。

コマンドラインインターフェース

CLI は、RHEL 8 で仮想化を管理する最も強力な方法です。仮想マシン (VM) 管理用の CLI コマンドでは、以下のものがよく知られています。

  • virsh - 指定した引数に応じて、多種多様な目的を持つ多目的仮想コマンドラインユーティリティーおよびシェル。以下に例を示します。

    • 仮想マシンの起動およびシャットダウン - virsh start および virsh shutdown
    • 利用可能な仮想マシンの一覧表示 - virsh list
    • 設定ファイルからの仮想マシンの作成 - virsh create
    • 仮想化シェルの入力 - virsh

    詳細は、man ページの virsh(1) を参照してください。

  • virt-install - 新しい仮想マシンを作成する CLI ユーティリティー。詳細は、man ページの virt-install(1) を参照してください。
  • virt-xml - 仮想マシンの設定を編集するユーティリティー。
  • guestfish - 仮想マシンのディスクイメージを調べ、修正するユーティリティー。詳細は、man ページの guestfish(1) を参照してください。

グラフィカルユーザーインターフェース

以下の GUI を使用して、RHEL 8 で仮想化を管理できます。

  • RHEL 8 の Web コンソール (Cockpit とも呼ばれています) は、仮想マシンおよび仮想化ホストの管理用に、リモートからアクセスでき、簡単に使用できるグラフィカルユーザーインターフェースを提供します。

    Web コンソールを使用した基本的な仮想化管理の手順は、5章Web コンソールで仮想マシンの管理を参照してください。

  • 仮想マシンマネージャー (virt-manager) アプリケーションは、仮想マシンおよび仮想化ホストの管理に使用する GUI を提供します。

    重要

    virt-manager は、RHEL 8 でも引き続き対応していますが、非推奨になっています。後続のリリースでは、Web コンソールがその代替となる予定です。したがって、GUI で仮想化を管理する場合は、Web コンソールを使用することが推奨されます。

    ただし、RHEL 8 では、virt-manager またはコマンドラインのいずれか一方からしかアクセスできない機能もあります。詳細は「仮想マシンマネージャーと Web コンソールでの仮想化機能の相違点」を参照してください。

  • Gnome Boxes アプリケーションは、仮想マシンおよびリモートシステムを表示したりアクセスしたりするための、軽量のグラフィカルインタフェースです。GNOME Boxes は、主にデスクトップシステムで使用するように設計されています。

    重要

    Gnome Boxes は、GNOME デスクトップ環境に含まれ、RHEL 8 で対応しています、Red Hat は、Web コンソールを使用して、GUI で仮想化を管理することを推奨します。

関連情報

  • CLI および GUI を使用した基本的な仮想化管理の手順は、2章仮想化の使用を参照してください。

1.5. Red Hat の仮想化ソリューション

以下の Red Hat 製品は、RHEL 8 仮想化機能に構築されており、RHEL 8 で利用可能な KVM 仮想化機能を拡張します。また、RHEL 8 仮想化の制限 の多くが、このような製品には適用されません。

Red Hat Virtualization (RHV)

RHV は、エンタープライズクラスのスケーラビリティーおよびパフォーマンスのために設計されており、ホスト、仮想マシン、ネットワーク、ストレージ、およびユーザーを含む仮想インフラストラクチャー全体を、一元管理されたグラフィカルインターフェースから管理できます。

Red Hat Virtualization は、大規模なデプロイメントまたはミッションクリティカルなアプリケーションを実行している企業に使用されることがあります。Red Hat Virtualization に適した大規模デプロイメントの例としては、ダウンタイムなしで継続的に実行する必要がある、データベース、商取引プラットフォーム、メッセージングシステムなどがあります。

Red Hat Virtualization の詳細は、Red Hat Virtualization 製品ページ、または Red Hat Virtualization ドキュメントスイートを参照してください。

完全にサポートされている 60 日間評価版の Red Hat Virtualization をダウンロードする場合は、https://access.redhat.com/products/red-hat-virtualization/evaluation を参照してください。

Red Hat OpenStack Platform (RHOSP)

Red Hat OpenStack Platform は、安全で信頼性の高いパブリックまたはプライベートの OpenStack クラウドを作成、デプロイ、および拡張するための統合基盤を提供します。

Red Hat OpenStack Platform の詳細は、Red Hat OpenStack Platform の製品ページ、または Red Hat OpenStack Platform ドキュメントスイート を参照してください。

注記

RHEL でサポートされておらず、RHV または RHOSP でサポートされている仮想化機能の詳細は、「RHEL 8 仮想化で対応していない機能」を参照してください。

さらに、一部の Red Hat 製品は、オペレーティングシステムレベルの仮想化 (コンテナー化 とも呼ばれます) を提供します。

  • コンテナーは、ホスト OS から分離したインスタンスであり、既存の OS カーネルで動作します。コンテナーの詳細は、「Linux コンテナの概要」 を参照してください。
  • コンテナーには KVM 仮想化の多様性はありませんが、より軽量で柔軟な処理が可能です。より詳細な比較は、「Introduction to Linux Containers」を参照してください。

第2章 仮想化の使用

「RHEL 8 の仮想化」 を使用をする場合は、以下の手順に従ってください。これに対するデフォルトの方法はコマンドラインインターフェース (CLI) ですが、便宜上、手順の一部は Web コンソールの GUI で完了できます。

  1. 仮想化モジュールを有効にし、仮想化パッケージをインストールします。「仮想化を有効にする」を参照してください。
  2. 仮想マシン を作成します。

  3. 仮想マシンを起動します。

  4. 仮想マシンに接続します。

注記

現在、Web コンソールでは、仮想マシン管理機能のサブセットしか提供されないため、RHEL 8 での仮想化の高度な使用には、コマンドラインを使用することが推奨されます。

2.1. 仮想化を有効にする

RHEL 8 で仮想化を使用するには、仮想化モジュールを有効にし、仮想化パッケージをインストールして、仮想マシンをホストするようにシステムを設定する必要があります。

前提条件

  • Red Hat Enterprise Linux 8 が、ホストマシンに インストールされ登録されている
  • システムが仮想ホストとして機能するため、以下のハードウェア要件を満たしている。

    • ホストマシンのアーキテクチャーが KVM 仮想化に対応 している。
    • 最低でも、以下のシステムリソースが利用できる。

      • ホスト用に 6 GB と、各仮想マシン用に 6 GB の空きディスク容量。
      • ホスト用に 2 GB と、各仮想マシン用に 2 GB の RAM。

手順

  1. RHEL 8 仮想化モジュールにパッケージをインストールします。

    # yum module install virt
  2. virt-install パッケージおよび virt-viewer パッケージをインストールします。

    # yum install virt-install virt-viewer
  3. libvirtd サービスを開始します。

    # systemctl start libvirtd
  4. システムが仮想ホストとして準備されていることを確認します。

    # virt-host-validate
    [...]
    QEMU: Checking for device assignment IOMMU support         : PASS
    QEMU: Checking if IOMMU is enabled by kernel               : WARN (IOMMU appears to be disabled in kernel. Add intel_iommu=on to kernel cmdline arguments)
    LXC: Checking for Linux >= 2.6.26                          : PASS
    [...]
    LXC: Checking for cgroup 'blkio' controller mount-point    : PASS
    LXC: Checking if device /sys/fs/fuse/connections exists    : FAIL (Load the 'fuse' module to enable /proc/ overrides)
  5. virt-host-validate のすべての項目で PASS 値が返された場合は、システムに 仮想マシンを作成する 準備ができています。

    いずれかの項目で FAIL が返された場合は、表示される指示に従って問題を解決してください。

    いずれかの項目で WARN が返された場合は、表示される指示に従って仮想化機能を向上させることを検討してください。

関連情報

  • 仮想化がホスト CPU で対応されていないと、virt-host-validate が、以下の出力を生成します。

    QEMU: Checking for hardware virtualization: FAIL (Only emulated CPUs are available, performance will be significantly limited)

    ただし、このようなホストシステムで仮想マシンを作成しようとすると、パフォーマンス上の問題が発生するのではなく、失敗します。

2.2. 仮想マシンの作成

RHEL 8 で仮想マシンを作成する場合は、コマンドラインインターフェース または RHEL 8 Web コンソール を使用します。

前提条件

  • 仮想化がシステムに インストールされ有効になっている
  • ディスク領域、RAM、CPU など、仮想マシンに割り当てるのに十分なシステムリソースがあることを確認しておく。推奨される値は、仮想マシンで行うタスクやワークロードにより大きく異なる可能性があります。

    警告

    RHEL 8 では、ホストの CD-ROM デバイスまたは DVD-ROM デバイスからインストールすることができません。RHEL 8 で利用可能な仮想マシンのインストール方法を使用する際に、インストールソースに CD-ROM または DVD-ROM を選択するとインストールに失敗します。詳細は「RHEL 7 で CD/DVD-ROM からゲスト OS をインストールできない」を参照してください。

2.2.1. コマンドラインインターフェースを使用した仮想マシンの作成

virt-install ユーティリティーを使用して、RHEL 8 ホストで仮想マシンを作成するには、以下の手順に従ってください。

前提条件

  • ローカルまたはネットワークで利用可能なオペレーティングシステム (OS) のインストールソースがある。次のいずれかになります。

    • インストールメディアの ISO イメージ
    • 既存の仮想マシンインストールのディスクイメージ
  • インストールをより速く、簡単に設定するために、キックスタートファイルも利用できます。
  • ホストシステムで仮想化を 有効 にする必要があります。

手順

仮想マシンを作成して OS のインストールを開始するには、以下の必須引数を指定して、virt-install コマンドを使用します。

  • 新しいマシンの名前
  • 割り当てるメモリーの量
  • 割り当てる仮想 CPU (vCPU) の数
  • 割り当てるストレージのタイプおよびサイズ
  • OS インストールソースのタイプおよび場所

選択したインストール方法に応じて、必要なオプションと値が異なります。例については、以下を参照してください。

  • 次のコマンドでは、demo-guest1 という名前の仮想マシンを作成し、ローカルの /home/username/Downloads/Win10install.iso ファイルに保存されている ISO イメージから、Windows 10 OS をインストールします。この仮想マシンには、2048 MiB の RAM と 2 つの vCPU が割り当てられ、80 GiB の qcow2 仮想ディスクも自動的に割り当てられます。

    # virt-install --name demo-guest1 --memory 2048 --vcpus 2 --disk size=80 --os-variant win10 --cdrom /home/username/Downloads/Win10install.iso
  • 次のコマンドは、demo-guest2 という名前の仮想マシンを作成し、/home/username/Downloads/rhel8.iso イメージを使用して、ライブ CD から RHEL 8 OS を実行します。この仮想マシンにはディスク領域が割り当てられないため、セッション中に行った変更は保持されません。また、仮想マシンには、4096 MiB の RAM と、4 つの vCPU が割り当てられます。

    # virt-install --name demo-guest2 --memory 4096 --vcpus 4 --disk none --livecd --os-variant rhel8.0 --cdrom /home/username/Downloads/rhel8.iso
  • 次のコマンドは、既存のディスクイメージ /home/username/backup/disk.qcow2 に接続する demo-guest3 という名前の RHEL 8 仮想マシンを作成します。これは、マシン間でハードドライブを物理的に移動するのと似ています。したがって、demo-guest3 で使用できる OS およびデータは、イメージが処理された方法により決定します。また、仮想マシンには、2048 MiB の RAM および 2 つの vCPU が割り当てられます。

    # virt-install --name demo-guest3 --memory 2048 --vcpus 2 --os-variant rhel8.0 --import --disk /home/username/backup/disk.qcow2

    ディスクイメージをインポートする場合は、--os-variant オプションを使用することが強く推奨されます。このオプションを指定しないと、作成された仮想マシンのパフォーマンスに影響を及ぼします。

  • 次のコマンドは、demo-guest4 という名前の仮想マシンを作成し、URL http://example.com/OS-install からインストールします。インストールを開始するには、作業中の OS インストールツリーを URL に指定する必要があります。さらに、OS は、キックスタートファイル /home/username/ks.cfg で自動的に設定されます。この仮想マシンには、2048 MiB の RAM、2 つの vCPU、および 160 GiB の qcow2 仮想ディスクも割り当てられます。

    # virt-install --name demo-guest4 --memory 2048 --vcpus 2 --disk size=160 --os-variant rhel8.0 --location http://example.com/OS-install --initrd-inject /home/username/ks.cfg --extra-args="ks=file:/ks.cfg console=tty0 console=ttyS0,115200n8"
  • 次のコマンドは、demo-guest5 という名前の仮想マシンを作成し、グラフィックスがない、テキストのみのモードである RHEL8.iso イメージファイルからインストールします。ゲストコンソールをシリアルコンソールに接続します。仮想マシンには、16384 MiB のメモリー、16 個の vCPU、および 280 GiB のディスクが割り当てられます。このようなインストールは、低速なネットワークリンクを介してホストに接続する際に便利です。

    # virt-install --name demo-guest5 --memory 16384 --vcpus 16 --disk size=280 --os-variant rhel8.0 --location RHEL8.iso --graphics none --extra-args='console=ttyS0'
  • 次のコマンドは、demo-guest6 という名前の仮想マシンを作成します。この仮想マシンの設定は demo-guest5 と同じですが、リモートホスト 10.0.0.1 に置かれます。

    # virt-install --connect qemu+ssh://root@10.0.0.1/system --name demo-guest6 --memory 16384 --vcpus 16 --disk size=280 --os-variant rhel8.0 --location RHEL8.iso --graphics none --extra-args='console=ttyS0'

仮想マシンが問題なく作成されると、仮想マシンのグラフィカルコンソールで virt-viewer 画面が開き、ゲスト OS のインストールが開始します。

トラブルシューティング

  • virt-installcannot find default network エラーを出力する場合は、以下のようにします。

    1. libvirt-daemon-config-network パッケージがインストールされていることを確認します。

      # yum info libvirt-daemon-config-network
      Installed Packages
      Name         : libvirt-daemon-config-network
      [...]
    2. libvirt のデフォルトネットワークがアクティブで、自動的に起動するように設定されていることを確認します。

      # virsh net-list --all
       Name      State    Autostart   Persistent
      --------------------------------------------
       default   active   yes         yes
    3. そうでない場合は、デフォルトのネットワークをアクティブにし、自動起動に設定します。

      # virsh net-autostart default
      Network default marked as autostarted
      
      # virsh net-start default
      Network default started
      1. デフォルトのネットワークをアクティベートしても以下のエラーが出て失敗する場合は、libvirt-daemon-config-network パッケージが正常にインストールされていません。

        error: failed to get network 'default'
        error: Network not found: no network with matching name 'default'

        この問題を修正するには、libvirt-daemon-config-network を再インストールします。

        # yum reinstall libvirt-daemon-config-network
      2. 以下のようなエラーでデフォルトのネットワークをアクティベートできない場合には、デフォルトネットワークのサブネットとホストの既存インターフェースで競合が発生しています。

        error: Failed to start network default
        error: internal error: Network is already in use by interface ens2

        これを修正するには、virsh net-edit default コマンドを使用して、設定の 192.168.122.* の値を、ホストで使用していないサブネットに変更します。

関連情報

  • 仮想マシンとその OS のインストールの設定をより詳細に設定する場合は、virt-install に、さらにオプションを指定してください。詳細は、man ページの virt-install を参照してください。
  • 機能している仮想マシンがある場合には、そのクローンを作成することで、同じ構成とデータで新しい仮想マシンをすばやく作成できます。詳細は8章仮想マシンのクローン作成を参照してください。

2.2.2. Web コンソールで仮想マシンの作成、およびゲストのオペレーティングシステムのインストール

次のセクションでは、RHEL 8 Web コンソールを使用して仮想マシンを作成し、仮想マシンにオペレーティングシステムをインストールする方法を説明します。

2.2.2.1. Web コンソールで仮想マシンの作成

Web コンソールが接続しているホストマシンに仮想マシンを作成する場合は、以下の手順を行います。

前提条件

  • Web コンソールの仮想マシンプラグイン をインストールして、Web コンソールを使用して仮想マシンを管理できるようにしてある。
  • ディスク領域、RAM、CPU など、仮想マシンに割り当てるのに十分なシステムリソースがあることを確認しておく。推奨される値は、仮想マシンで行うタスクやワークロードにより大きく異なる可能性があります。
  • ローカルで利用可能なオペレーティングシステム (OS) のインストールソースがある。次のいずれかになります。

    • インストールメディアの ISO イメージ
    • 既存の仮想マシンインストールのディスクイメージ

手順

  1. Web コンソールの 仮想マシン インターフェースで、仮想マシンの作成 をクリックします。

    「仮想マシンの新規作成」ダイアログが表示されます。

    cockpit での仮想マシンの新規作成
  2. 作成する仮想マシンの基本設定を入力します。

    • 名前 - 仮想マシンの名前
    • インストールタイプ - インストールでは、ローカルインストールメディア、URL、PXE ネットワークブート、または限定されたオペレーティングシステムのセットから OS をダウンロードできます。
    • オペレーティングシステム - 仮想マシンのオペレーティングシステム。Red Hat がサポートするのは、一部のゲストオペレーティングシステム のみです。
    • ストレージ - 仮想マシンを設定するストレージの種類
    • サイズ - 仮想マシンを設定するストレージ容量
    • メモリー - 仮想マシンを設定するメモリーのサイズ
    • 仮想マシンをすぐに起動 - 仮想マシンの作成直後にそのマシンを開始するかどうか
  3. 作成 をクリックします。

    仮想マシンが作成されます。仮想マシンをすぐに起動 チェックボックスが選択されていると、仮想マシンがすぐに起動し、ゲスト OS のインストールを開始します。

インストールソースの種類で 既存のディスクイメージ を選択しなかった場合は、仮想マシンの初回実行時にオペレーティングシステムをインストールする必要があります。

関連情報

2.2.2.2. Web コンソールでゲストオペレーティングシステムのインストール

仮想マシンを最初に読み込む際に、仮想マシンにオペレーティングシステムをインストールする必要があります。

注記

仮想マシンの新規作成ダイアログの 仮想マシンをすぐに起動 チェックボックスにチェックマークを入れると、仮想マシンの作成時にオペレーティングシステムのインストールルーチンが自動的に起動します。

前提条件

手順

  1. 仮想マシン インターフェースで、ゲスト OS をインストールする仮想マシンがある行をクリックします。

    行が展開し、概要ペインが表示されます。このペインには選択した仮想マシンの基本情報が記載され、仮想マシンのインストールおよび削除を制御できます。

  2. インストール をクリックします。

    仮想マシンコンソールで、オペレーティングシステムのインストールルーチンが実行します。

トラブルシューティング

  • インストールルーチンが失敗した場合は、仮想マシンを削除し、再作成する必要があります。

2.3. 仮想マシンの起動

RHEL 8 で仮想マシンを起動する場合は、コマンドインターフェース または Web コンソール GUI を使用できます。

前提条件

  • 仮想マシンを起動する前に仮想マシンを作成しておく。理想としては、OS をインストールしておく。手順は「仮想マシンの作成」を参照してください。

2.3.1. コマンドラインインターフェースでの仮想マシンの起動

コマンドラインインターフェースを使用して、仮想マシンのシャットダウンを開始するか、保存した仮想マシンを復元します。以下の手順を実施します。

前提条件

  • 既に定義されている非アクティブな仮想マシン
  • ホストの名前
  • リモート仮想マシンの場合は、以下も設定されている。

    • 仮想マシンが置かれているホストの IP アドレス
    • ホストへの root アクセス権限

手順

  • ローカルの仮想マシンには、virsh start ユーティリティーを使用します。

    たとえば、次のコマンドは仮想マシン demo-guest1 を起動します。

    # virsh start demo-guest1
    Domain demo-guest1 started
  • リモートホストにある仮想マシンでは、ホストへの QEMU+SSH 接続と共に virsh start ユーティリティーを使用します。

    たとえば、次のコマンドは、ホスト 192.168.123.123 にある仮想マシン demo-guest1 を起動します。

    # virsh -c qemu+ssh://root@192.168.123.123/system start demo-guest1
    
    root@192.168.123.123's password:
    Last login: Mon Feb 18 07:28:55 2019
    
    Domain demo-guest1 started

関連資料

  • virsh start の引数の詳細は、man ページの virsh を参照してください。
  • リモートホストで仮想マシンの管理を簡素化するには、「libvirt および SSH 設定の変更」を参照してください。
  • virsh autostart ユーティリティーを使用して、ホストの起動時に自動的に起動するように設定できます。autostart の詳細は、virsh autostart の help ページを参照してください。

2.3.2. Web コンソールで仮想マシンの起動

仮想マシンが 停止 状態にある場合は、RHEL 8 Web コンソールを使用して起動できます。

前提条件

手順

  1. 仮想マシン インターフェースで、開始する仮想マシンがある行をクリックします。

    行が展開し、概要ペインが表示されます。このペインには選択した仮想マシンの基本情報が記載され、仮想マシンのシャットダウンおよび削除を制御できます。

  2. 実行 をクリックします。

    仮想マシンが起動し、そのコンソールまたはグラフィカル出力に接続 できます。

  3. (必要に応じて) ホストの起動時に仮想マシンが自動的に起動するように設定するには、自動起動 チェックボックスをクリックします。

関連情報

2.4. 仮想マシンへの接続

RHEL 8 で仮想マシンと相互作用するには、以下のいずれかの方法で接続する必要があります。

接続先の仮想マシンがローカルホストではなくリモートホストにある場合は、リモートホストにより便利にアクセスできるように、システムを設定することもできます。

前提条件

2.4.1. Web コンソールで仮想マシンとの相互作用

RHEL 8 Web コンソールで仮想マシンと相互作用するには、仮想マシンのコンソールに接続する必要があります。グラフィカルコンソールおよびシリアルコンソールの両方が含まれます。

2.4.1.1. Web コンソールで仮想マシンのグラフィカルコンソールの表示

仮想マシンのコンソールインターフェースを使用すると、RHEL 8 Web コンソールに、選択した仮想マシンのグラフィカル出力を表示できます。

前提条件

  • Web コンソールの仮想マシンプラグイン をインストールして、Web コンソールを使用して仮想マシンを管理できるようにしてある。
  • ホストおよび仮想マシンの両方が、グラフィカルインターフェースに対応している。

手順

  1. 仮想マシン インターフェースで、グラフィカルコンソールを表示する仮想マシンがある行をクリックします。

    行が展開し、概要ペインが表示されます。このペインには選択した仮想マシンの基本情報が記載され、仮想マシンのシャットダウンおよび削除を制御できます。

  2. コンソール をクリックします。

    グラフィカルコンソールが Web インターフェースに表示されます。

cockpit のグラフィカルコンソール

実際のマシンの場合と同じように、マウスとキーボードを使用して仮想マシンのコンソールと相互作用できます。仮想マシンコンソールには、仮想マシンで実行しているアクティビティーが表示されます。

注記

Web コンソールを実行しているホストで、特定の鍵の組み合わせ (Ctrl+Alt+Del など) を傍受して、仮想マシンに送信しないようにできます。

このようなキーの組み合わせを送信する場合は、キーの送信 メニューをクリックして、送信するキーシーケンスを選択します。

たとえば、仮想マシンに Ctrl+Alt+F1 の組み合わせを送信するには、キーの送信 メニューをクリックして、Ctrl+Alt+F1 メニューエントリーを選択します。

関連情報

2.4.1.2. Web コンソールを使用して、リモートビューアーでグラフィカルコンソールを表示

virt-viewer などのリモートビューアーで、選択した仮想マシンのグラフィカルコンソールを表示できます。手順は、以下を参照してください。

注記

Web コンソールから Virt Viewer を起動できます。その他の VNC および SPICE のリモートビューアーは手動で起動できます。

前提条件

  • Web コンソールの仮想マシンプラグイン をインストールして、Web コンソールを使用して仮想マシンを管理できるようにしてある。
  • ホストおよび仮想マシンの両方が、グラフィカルインターフェースに対応している。
  • Virt Viewer でグラフィカルコンソールを表示する前に、Web コンソールが接続されるマシンに Virt Viewer がインストールされている。

    Virt Viewer のインストール方法を表示する場合は、コンソールタイプで デスクトップビューアーのグラフィックコンソール を選択し、コンソール画面で 詳細情報 をクリックします。

    cockpit での Virt Viewer のインストールの情報
注記

ブラウザーの拡張機能やプラグインによっては、Web コンソールで Virt Viewer を開けないことがあります。

手順

  1. 仮想マシン インターフェースで、グラフィカルコンソールを表示する仮想マシンがある行をクリックします。

    行が展開し、概要ペインが表示されます。このペインには選択した仮想マシンの基本情報が記載され、仮想マシンのシャットダウンおよび削除を制御できます。

  2. コンソール をクリックします。

    グラフィカルコンソールが Web インターフェースに表示されます。

  3. コンソールタイプの デスクトップビューアーのグラフィックコンソール を選択します。

    cockpit の Virt Viewer でグラフィカルコンソールの起動
  4. リモートビューアーの起動 をクリックします。

    グラフィカルコンソールが Virt Viewer に表示されます。

    Virt Viewer GUI

実際のマシンの場合と同じように、マウスとキーボードを使用して仮想マシンのコンソールと相互作用できます。仮想マシンコンソールには、仮想マシンで実行しているアクティビティーが表示されます。

注記

Web コンソールを実行しているサーバーで、特定の鍵の組み合わせ (Ctrl+Alt+Del など) を傍受して、仮想マシンに送信しないようにできます。

このようなキーの組み合わせを送信する場合は、キーの送信 メニューをクリックして、送信するキーシーケンスを選択します。

たとえば、仮想マシンに Ctrl+Alt+F1 の組み合わせを送信するには、キーの送信 メニューをクリックして、Ctrl+Alt+F1 メニューエントリーを選択します。

トラブルシューティング

  • Web コンソールでリモートビューアーのグラフィックコンソールを起動できない場合、またはリモートビューアーのグラフィックコンソールが最適でない場合は、グラフィックコンソール ペインの右側に表示される 手動接続 情報を使用できます。

    cockpit での手動ビューアーの情報

    SPICE、または Virt Viewer などの VNC ビューアーアプリケーションに情報を入力します。

関連情報

2.4.1.3. Web コンソールで仮想マシンのシリアルコンソールの表示

RHEL 8 Web コンソールで、選択した仮想マシンのシリアルコンソールを表示できます。これは、グラフィカルインターフェースでホストマシンまたは仮想マシンを設定していない場合に便利です。

前提条件

手順

  1. 仮想マシン ペインで、シリアルコンソールを表示する仮想マシンがある行をクリックします。

    行が展開し、概要ペインが表示されます。このペインには選択した仮想マシンの基本情報が記載され、仮想マシンのシャットダウンおよび削除を制御できます。

  2. コンソール をクリックします。

    グラフィカルコンソールが Web インターフェースに表示されます。

  3. コンソールタイプの シリアルコンソール を選択します。

    シリアルコンソールが Web インターフェースに表示されます。

    cockpit での cockpit シリアルコンソール

仮想マシンからシリアルコンソールへの接続を切断して、再接続できます。

  • 仮想マシンからシリアルコンソールへの接続を切断するには、切断 をクリックします。
  • シリアルコンソールを仮想マシンに再接続するには、再接続 をクリックします。

関連情報

2.4.2. Virt Viewer で仮想マシンのグラフィカルコンソールを開く

KVM 仮想マシンのグラフィカルコンソールに接続して、Virt Viewer デスクトップアプリケーションで開く場合は、以下の手順を行います。

前提条件

  • システム、および接続している仮想マシンが、グラフィカルディスプレイに対応している。
  • ターゲットの仮想マシンがリモートホストにある場合は、そのホストへの接続およびルートアクセス権限が確保されている。
  • (必要に応じて) ターゲットの仮想マシンがリモートホストにある場合は、リモートホストにアクセスしやすくなる ように libvirt と SSH を設定している。

手順

  • ローカルの仮想マシンに接続するには、次のコマンドを使用して、guest-name を、接続する仮想マシンの名前に置き換えます。

    # virt-viewer guest-name
  • リモートの仮想マシンに接続するには、SSH プロトコルで virt-viewer コマンドを実行します。たとえば、次のコマンドは、root 権限で、リモートシステム 10.0.0.1 にある guest-name という名前の仮想マシンに接続します。接続には、10.0.0.1 用の root 認証も必要になります。

    # virt-viewer --direct --connect qemu+ssh://root@10.0.0.1/system guest-name
    root@10.0.0.1's password:

接続が正しく機能している場合は、Virt Viewer 画面に仮想マシンのディスプレイが表示されます。

Virt Viewer での RHEL 7 ゲスト OS の表示

実際のマシンの場合と同じように、マウスとキーボードを使用して仮想マシンのコンソールと相互作用できます。仮想マシンコンソールには、仮想マシンで実行しているアクティビティーが表示されます。

関連情報

2.4.3. SSH を使用した仮想マシンへの接続

SSH 接続プロトコルを使用して仮想マシンの端末と相互作用するには、以下の手順を行います。

前提条件

  • ターゲットの仮想マシンへのネットワーク接続および root アクセス権がある。
  • libvirt-nss コンポーネントを仮想マシンのホストにインストールして有効にしている。そうでない場合は、以下を行います。

    1. libvirt-nss パッケージをインストールします。

      # yum install libvirt-nss
    2. /etc/nsswitch.conf ファイルを編集し、libvirt_guesthosts 行に追加します。

      [...]
      passwd:      compat
      shadow:      compat
      group:       compat
      hosts:       files libvirt_guest dns
      [...]
  • ターゲットの仮想マシンがリモートホストにある場合は、そのホストへの接続およびルートアクセス権限も必要です。

手順

  1. 必要に応じて、リモート仮想マシンに接続する場合は、最初に SSH でその物理ホストに接続します。以下の例は、root 認証情報を使用してホストマシン 10.0.0.1 に接続する方法を示しています。

    # ssh root@10.0.0.1
    root@10.0.0.1's password:
    Last login: Mon Sep 24 12:05:36 2018
    root~#
  2. 仮想マシンの名前とユーザーアクセスの認証情報を使用して、仮想マシンに接続します。たとえば、次のコマンドでは、root の認証情報を使用して仮想マシン testguest1 に接続します。

    # ssh root@testguest1
    root@testguest1's password:
    Last login: Wed Sep 12 12:05:36 2018
    root~]#

トラブルシューティング

  • 仮想マシンの名前が分からない場合は、virsh list --all コマンドを使用すると、ホストで利用可能な仮想マシンの一覧を表示できます。

    # virsh list --all
    Id    Name                           State
    ----------------------------------------------------
    2     testguest1                    running
    -     testguest2                    shut off

2.4.4. 仮想マシンのシリアルコンソールを開く

virsh console コマンドを使用すると、仮想マシン (VM) のシリアルコンソールに接続できます。

これは、仮想マシンが次のような場合に役に立ちます。

  • VNC プロトコルまたは SPICE プロトコルは提供されないため、GUI ツールのビデオ表示が提供されない
  • ネットワークに接続されていないため、SSH を使用して 相互作用できない

前提条件

  • 仮想マシンに、カーネルコマンドラインでシリアルコンソールが設定されている。これを確認するには、仮想マシンの cat /proc/cmdline コマンドの出力に console=ttyS0 が含まれていることを確認します。以下に例を示します。

    # cat /proc/cmdline
    BOOT_IMAGE=/vmlinuz-3.10.0-948.el7.x86_64 root=/dev/mapper/rhel-root ro console=tty0 console=ttyS0,9600n8 rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb

    シリアルコンソールが仮想マシンに正しく設定されていない場合は、virsh コンソール を仮想マシンに接続すると、応答のないゲストコンソールに接続できます。ただし、Ctrl+] ショートカットを使用すると、応答しないコンソールを終了できます。

  • 仮想マシンでシリアルコンソールを設定するには、以下を行います。

    1. 仮想マシンで /etc/default/grub ファイルを編集し、console=ttyS0 を、GRUB_CMDLINE_LINUX で開始する行に追加します。
    2. 変更を反映させない可能性があるカーネルオプションを削除します。

      # grub2-editenv - unset kernelopts
    3. Grub 設定を再読み込みします。

      # grub2-mkconfig -o /boot/grub2/grub.cfg
      Generating grub configuration file ...
      Found linux image: /boot/vmlinuz-3.10.0-948.el7.x86_64
      Found initrd image: /boot/initramfs-3.10.0-948.el7.x86_64.img
      [...]
      done
    4. 仮想マシンを再起動します。

手順

  1. ホストシステムで、virsh console コマンドを使用します。次の例では、libvirt ドライバーが安全なコンソール処理に対応していると、仮想マシン guest1 に接続します。

    # virsh console guest1 --safe
    Connected to domain guest1
    Escape character is ^]
    
    Subscription-name
    Kernel 3.10.0-948.el7.x86_64 on an x86_64
    
    localhost login:
  2. virsh コンソールは、標準のコマンドラインインターフェースと同じ方法で相互作用できます。

関連情報

  • 仮想マシンのシリアルコンソールの詳細は、man ページの virsh を参照してください。

2.4.5. リモートの仮想化ホストへの簡単なアクセスの設定

libvirt ユーティリティを使用してリモートホストシステムの仮想マシンを管理する場合は、-c qemu+ssh://root@hostname/system 構文を使用することが推奨されます。たとえば、ホスト 10.0.0.1 で、root で virsh list コマンドを実行します。

# virsh -c qemu+ssh://root@10.0.0.1/system list

root@10.0.0.1's password:
Last login: Mon Feb 18 07:28:55 2019

Id   Name              State
---------------------------------
1    remote-guest      running

ただし、便宜上、SSH および libvirt の設定を変更すれば、接続の詳細を完全に指定する必要がなくなります。たとえば、以下を行うことができます。

# virsh -c remote-host list

root@10.0.0.1's password:
Last login: Mon Feb 18 07:28:55 2019

Id   Name              State
---------------------------------
1    remote-guest      running

この改善を有効にするには、以下の手順を行います。

手順

  1. ~/.ssh/config ファイルを編集するか作成し、次の行を追加します。ここで host-alias は、特定のリモートホストに関連付けられる短縮名です。hosturl は、ホストの URL アドレスです。

    Host host-alias
            User                    root
            Hostname                hosturl

    たとえば、次の例は、root@10.0.0.1 に tyrannosaurus エイリアスを設定します。

    Host tyrannosaurus
            User                    root
            Hostname                10.0.0.1
  2. /etc/libvirt/libvirt.conf ファイルを編集するか作成し、以下を追加します。qemu-host-alias は、QEMU ユーティリティーおよび libvirt ユーティリティーが目的のホストに関連付けるホストのエイリアスです。

    uri_aliases = [
      "qemu-host-alias=qemu+ssh://host-alias/system",
    ]

    たとえば、次の例では、1 つ前の手順で設定した tyrannosaurus エイリアスを使用して、t-rex エイリアスを設定します。これは、qemu+ssh://10.0.0.1/system を表します。

    uri_aliases = [
      "t-rex=qemu+ssh://tyrannosaurus/system",
    ]
  3. これにより、ローカルシステムで libvirt ベースのユーティリティーを使用し、-c qemu-host-alias パラメーターをコマンドに追加することで、リモートの仮想マシンを管理できます。これにより、リモートホストの SSH でコマンドが自動的に実行されます。

    たとえば、次の例では、リモートホスト 10.0.0.1 上の仮想マシン (上の手順で t-rex として設定した接続) の一覧を表示します。

    $ virsh -c t-rex list
    
    root@10.0.0.1's password:
    Last login: Mon Feb 18 07:28:55 2019
    
    Id   Name              State
    ---------------------------------
    1    velociraptor      running
  4. (必要に応じて) libvirt ユーティリティーを、1 台のリモートホストで排他的に使用する場合は、libvirt ベースのユーティリティーのデフォルトターゲットとして特定の接続を設定することもできます。これを行うには、/etc/libvirt/libvirt.conf ファイルを編集して、uri_default パラメーターの値を qemu-host-alias に設定します。たとえば、次の例では、上の手順でデフォルトの libvirt ターゲットとして設定した t-rex ホストのエイリアスを使用します。

    # These can be used in cases when no URI is supplied by the application
    # (@uri_default also prevents probing of the hypervisor driver).
    #
    uri_default = "t-rex"

    これにより、指定したリモートホストで、libvirt ベースのコマンドがすべて自動的に実行されます。

    $ virsh list
    root@10.0.0.1's password:
    Last login: Mon Feb 18 07:28:55 2019
    
    Id   Name              State
    ---------------------------------
    1    velociraptor      running

    ただし、ローカルホストまたは別のリモートホストでも仮想マシンを管理する場合、この方法は推奨されません。

関連情報

  • リモートホストに接続する場合は、リモートシステムに root パスワードを指定しないように設定することもできます。これを行うには、以下のいずれかを行います。

  • 上述の -c (または --connect) オプションと、リモートホストのアクセス設定を使用できるユーティリティーには、以下が含まれます。

2.5. 仮想マシンのシャットダウン

Red Hat Enterprise Linux 8 で実行中の仮想マシンをシャットダウンする場合は、コマンドラインインターフェース または Web コンソールの GUI を使用します。

2.5.1. コマンドラインインターフェースでの仮想マシンのシャットダウン

応答している仮想マシンをシャットダウンするには、以下のいずれかを行います。

  • ゲストに接続している 場合に、ゲスト OS に適したシャットダウンコマンドを使用
  • ホストで virsh shutdown コマンドを使用

    • 仮想マシンがローカルホストにある場合は、以下のコマンドを実行します。

      # virsh shutdown demo-guest1
      Domain demo-guest1 is being shutdown
    • 仮想マシンがリモートホスト (この例では 10.0.0.1) にある場合は、以下のコマンドを実行します。

      # virsh -c qemu+ssh://root@10.0.0.1/system shutdown demo-guest1
      
      root@10.0.0.1's password:
      Last login: Mon Feb 18 07:28:55 2019
      Domain demo-guest1 is being shutdown

応答しない場合など、ゲストを強制的にシャットダウンする場合は、そのホストで virsh destroy コマンドを実行します。

# virsh destroy demo-guest1
Domain demo-guest1 destroyed
注記

virsh destroy コマンドは、仮想マシンの構成またはディスクイメージを削除するわけではありません。実行中の仮想マシンインスタンスだけを破棄します。ただし、まれに、このコマンドを実行すると仮想マシンのファイルシステムが破損することがあるため、その他のシャットダウン方法がすべて失敗した場合に限り、virsh destroy の使用が推奨されます。

2.5.2. Web コンソールで仮想マシンのシャットダウンおよび再起動

RHEL 8 Web コンソールを使用して、実行中の仮想マシンを シャットダウン または 再起動 できます。仮想マシンが応答しない場合は、マスク不可割り込みを送信できます。

2.5.2.1. Web コンソールで仮想マシンのシャットダウン

仮想マシンが 稼働 状態であれば、RHEL 8 Web コンソールを使用してシャットダウンできます。

前提条件

手順

  1. 仮想マシン インターフェースで、シャットダウンする仮想マシンがある行をクリックします。

    行が展開し、概要ペインが表示されます。このペインには選択した仮想マシンの基本情報が記載され、仮想マシンのシャットダウンおよび削除を制御できます。

  2. シャットダウン をクリックします。

    仮想マシンがシャットダウンします。

トラブルシューティング

  • 仮想マシンがシャットダウンしない場合は、シャットダウン ボタンの横にある矢印をクリックし、再起動の強制 を選択します。
  • 仮想マシンが応答しない場合は、マスク不可割り込みを送信してシャットダウンすることもできます。詳細は「Web コンソールでマスク不可割り込みを仮想マシンに送信」を参照してください。

関連情報

2.5.2.2. Web コンソールで仮想マシンの再起動

仮想マシンが 稼働 状態であれば、RHEL 8 Web コンソールを使用して再起動できます。

前提条件

手順

  1. 仮想マシン インターフェースで、再起動する仮想マシンがある行をクリックします。

    行が展開し、概要ペインが表示されます。このペインには選択した仮想マシンの基本情報が記載され、仮想マシンのシャットダウンおよび削除を制御できます。

  2. 再起動 をクリックします。

    仮想マシンがシャットダウンして再起動します。

トラブルシューティング

関連情報

2.5.2.3. Web コンソールでマスク不可割り込みを仮想マシンに送信

NMI (マスク不可割り込み) を送信すると、応答しない稼働中の仮想マシンが応答またはシャットダウンする可能性があります。たとえば、Ctrl+Alt+Del の NMI を、標準入力に応答しない仮想マシンに送信できます。

前提条件

手順

  1. 仮想マシン インターフェースで、NMI を送信する仮想マシンがある行をクリックします。

    行が展開し、概要ペインが表示されます。このペインには選択した仮想マシンの基本情報が記載され、仮想マシンのシャットダウンおよび削除を制御できます。

  2. シャットダウン ボタンの横にある矢印をクリックし、マスク不可割り込みの送信 を選択します。

    NMI が仮想マシンに送信されます。

関連情報

2.6. 仮想マシンの削除

Red Hat Enterprise Linux 8 で仮想マシンを削除する場合は、コマンドラインインターフェース または Web コンソールの GUI を使用します。

2.6.1. コマンドラインインターフェースで仮想マシンの削除

仮想マシンを削除するには、コマンドラインでその XML 設定および関連するストレージファイルをホストから削除します。以下の手順を実施します。

前提条件

  • 仮想マシンからの重要なデータのバックアップを作成する。
  • 仮想マシンをシャットダウンしている。
  • その他の仮想マシンが、同じ関連ストレージを使用しないようにしている。

手順

  • virsh undefine ユーティリティーを使用します。

    たとえば、次のコマンドは、guest1 仮想マシン、関連のあるストレージボリューム、および不揮発性 RAM が存在する場合はそれを削除します。

    # virsh undefine guest1 --remove-all-storage --nvram
    Domain guest1 has been undefined
    Volume 'vda'(/home/images/guest1.qcow2) removed.

関連情報

  • その他の virsh undefine 引数は、man ページの virsh を参照してください。

2.6.2. Web コンソールで仮想マシンの削除

RHEL 8 Web コンソールが接続しているホストから、仮想マシンおよび関連ストレージファイルを削除する場合は、以下の手順を行います。

前提条件

  • Web コンソールの仮想マシンプラグイン をインストールして、Web コンソールを使用して仮想マシンを管理できるようにしてある。
  • 仮想マシンからの重要なデータのバックアップを作成する。
  • 仮想マシンをシャットダウンしている。
  • その他の仮想マシンが、同じ関連ストレージを使用しないようにしている。

手順

  1. 仮想マシン インターフェースで、削除する仮想マシンの名前をクリックします。

    行が展開し、概要ペインが表示されます。このペインには選択した仮想マシンの基本情報が記載され、仮想マシンのシャットダウンおよび削除を制御できます。

    cockpit 1 仮想マシンの情報
  2. 削除 をクリックします。

    確認ダイアログが表示されます。

    cockpit 仮想マシンの削除の確認
  3. (必要に応じて) 仮想マシンに関連するすべてまたは一部のストレージファイルを削除する場合は、削除するストレージファイルの横にあるチェックボックスを選択します。
  4. 削除 をクリックします。

    仮想マシンと、選択したストレージファイルが削除されます。

第3章 IBM POWER での仮想化の使用

IBM POWER8 または POWER9 のハードウェアで RHEL 8 を使用する場合は、KVM 仮想化を使用できます。ただし、システムで KVM ハイパーバイザーを有効にする 場合は、AMD64 および Intel64 のアーキテクチャーの仮想化に、追加の手順が必要になります。RHEL 8 の仮想化機能には、IBM POWER の 機能が異なったり、制限されている ものもあります。

以下のセクションの情報とは別に、IBM POWER で仮想化を使用すると、AMD64 および Intel 64 と同じように機能します。したがって、IBM POWER で仮想化を使用する方法は、その他の RHEL 8 仮想化ドキュメントを参照してください。

3.1. IBM POWER での仮想化の有効化

KVM ハイパーバイザーを設定し、RHEL 8 を実行している IBM POWER8 または IBM POWER9 のシステムで仮想マシンを作成するには、以下の手順に従います。

前提条件

  • ホストマシンに RHEL 8 がインストールされ、登録されている。
  • 最低でも、以下のシステムリソースが利用できる。

    • ホスト用に 6 GB と、各仮想マシン用に 6 GB の空きディスク容量。
    • ホスト用に 2 GB と、各仮想マシン用に 2 GB の RAM。
  • CPU マシンタイプは、IBM POWER 仮想化に対応している必要があります。

    これを確認するには、/proc/cpuinfo ファイルでプラットフォーム情報を探してください。

    # grep ^platform /proc/cpuinfo/
    platform        : PowerNV

    このコマンドの出力に PowerNV エントリーが含まれる場合は、マシンタイプ PowerNV を実行しており、IBM POWER で仮想化を使用できます。

手順

  1. KVM-HV カーネルモジュールを読み込みます。

    # modprobe kvm_hv
  2. KVM カーネルモジュールが読み込まれていることを確認します。

    # lsmod | grep kvm

    KVM が正常に読み込まれると、このコマンドの出力には kvm_hv が含まれます。

  3. 仮想化モジュールにパッケージをインストールします。

    # yum module install virt
  4. virt-install パッケージをインストールします。

    # yum install virt-install
  5. libvirtd サービスを開始します。

    # systemctl start libvirtd
  6. システムが仮想ホストとして準備されていることを確認します。

    # virt-host-validate
    [...]
    QEMU: Checking if device /dev/vhost-net exists                          : PASS
    QEMU: Checking if device /dev/net/tun exists                            : PASS
    QEMU: Checking for cgroup 'memory' controller support                   : PASS
    QEMU: Checking for cgroup 'memory' controller mount-point               : PASS
    [...]
    QEMU: Checking for cgroup 'blkio' controller support                    : PASS
    QEMU: Checking for cgroup 'blkio' controller mount-point                : PASS
    QEMU: Checking if IOMMU is enabled by kernel                            : PASS
  7. virt-host-validate のすべての項目で PASS 値が返された場合は、システムに 仮想マシンを作成する 準備ができています。

    いずれかの項目で FAIL が返された場合は、表示される指示に従って問題を解決してください。

    いずれかの項目で WARN が返された場合は、表示される指示に従って仮想化機能を向上させることを検討してください。

関連情報

  • 仮想化がホスト CPU で対応されていないと、virt-host-validate が、以下の出力を生成します。

    QEMU: Checking for hardware virtualization: FAIL (Only emulated CPUs are available, performance will be significantly limited)

    ただし、このようなホストシステムで仮想マシンを作成しようとすると、パフォーマンス上の問題が発生するのではなく、失敗します。

3.2. IBM POWER の仮想化と AMD64 および Intel 64 の相違点

IBM POWER システムにおける RHEL 8 の KVM 仮想化は、AMD64 および Intel 64 の KVM とは異なります。特に以下のような側面があります。

メモリー要件
IBM POWER 上の仮想マシンは、より多くのメモリーを消費します。したがって、IBM POWER ホストの仮想マシンに推奨される最小メモリー割り当ては 2GB RAM です。
ディスプレイプロトコル

IBM POWER システムでは、SPICE プロトコルに対応していません。仮想マシンのグラフィック出力を表示するには、VNC プロトコルを使用します。さらに、次の仮想グラフィックスカードデバイスにのみ対応しています。

  • vga - -vga std モードでのみ対応され、-vga cirrus モードでは対応されません。
  • virtio-vga
  • virtio-gpu
SMBIOS
SMBIOS 設定は利用できません。
メモリー割り当てエラー

Power8 VM (互換モードの仮想マシンを含む) は、以下のようなエラーで失敗する場合があります。

qemu-kvm: Failed to allocate KVM HPT of order 33 (try smaller maxmem?): Cannot allocate memory

これは、RHEL 7.3 以前をゲスト OS として使用する仮想マシンで発生する可能性が非常に高くなります。

この問題を解決するには、ホストのカーネルコマンドラインに kvm_cma_resv_ratio=memory を追加して、ゲストのハッシュページテーブル (HPT) に使用できる CMA メモリープールを増やします。memory は、CMA プールに予約する必要があるホストメモリーの割合 (デフォルトは 5) です。

Huge page

THP (Transparent Huge page) は、IBM POWER8 の仮想マシンのパフォーマンスには大きな利点をもたらすことはありません。ただし、IBM POWER9 仮想マシンでは、THP から期待どおりの利点を得ることができます。

また、IBM POWER8 システムの静的 Huge Page のサイズは、16 MiB および 16 GiB です。これは、AMD64、Intel 64、および IBM POWER9 の 2 MiB および 1 GiB とは対照的です。したがって、静的 Huge Page を設定した仮想マシンを、IBM POWER8 ホストから IBM POWER9 ホストに移行するには、最初に仮想マシンに 1GiB の Huge Page を設定する必要があります。

kvm-clock
kvm-clock サービスは、IBM POWER9 の仮想マシンで時間管理用に構成する必要はありません。
pvpanic

IBM POWER9 システムは、pvpanic デバイスに対応していません。ただし、このアーキテクチャーでは、同等の機能がデフォルトで利用でき、アクティベートされます。仮想マシンで有効にするには、preserve 値で XML構成要素 <on_crash> を使用します。

また、<devices> セクションから <panic> 要素を必ず削除してください。その要素があると、仮想マシンが IBM POWER システムで起動できなくなる可能性があるためです。

シングルスレッドホスト
IBM POWER8システムでは、仮想マシンに対応するために、ホストマシンを シングルスレッドモード で稼働する必要があります。これは、qemu-kvm パッケージがインストールされていると、自動的に設定されます。ただし、シングルスレッドホストで実行している仮想マシンは、複数のスレッドを使用できます。
周辺機器

AMD64 および Intel 64 のシステムで対応している周辺デバイスの多くが、IBM POWER システムでは対応されていないか、別のデバイスが代替として対応されています。

  • ioh3420 および xio3130-downstream を含む PCI-E 階層に使用されるデバイスには対応していません。この機能は、spapr-pci-host-bridge デバイスが提供する複数の独立した PCI root ブリッジに置き換えられます。
  • UHCI コントローラーおよび EHCI PCI コントローラーには対応していません。代わりに OHCI コントローラーおよび xHCI コントローラーを使用してください。
  • 仮想 IDE CD-ROM (ide-cd) を含む IDE デバイスと、仮想 IDE ディスク (ide-hd) には対応していません。代わりに virtio-scsi デバイスおよび virtio-blk デバイスを使用してください。
  • エミュレートされた PCI NIC (rtl8139) には対応していません。代わりに virtio-net デバイスを使用してください。
  • intel-hda、hda-output、および AC97 を含むサウンドデバイスは対応していません。
  • usb-redirusb-tablet などの USB リダイレクトデバイスには対応していません。
v2v および p2v
virt-v2v ユーティリティーおよび virt-p2v ユーティリティーは、AMD64 および Intel 64 のアーキテクチャーでのみ対応しており、IBM POWER では提供されません。

関連情報

  • Red Hat がサポートする各システムアーキテクチャーで、一部のサポート対象およびサポート対象外の仮想化機能を比較する場合は、「仮想化機能のサポートの概要」を参照してください。

第4章 IBM Z での仮想化の使用

IBM Z ハードウェアで RHEL 8 を使用する場合は、KVM 仮想化を使用できます。ただし、システムで KVM ハイパーバイザーを有効にする 場合は、AMD64 および Intel 64 のアーキテクチャーの仮想化に、追加の手順が必要です。RHEL 8 の仮想化機能には、IBM Z の 機能が異なったり、制限されている ものもあります。

以下のセクションの情報とは別に、IBM Z で仮想化を使用すると、AMD64 および Intel 64 と同じように機能します。したがって、IBM Z で仮想化を使用する方法は、その他の RHEL 8 仮想化ドキュメントを参照してください。

4.1. IBM Z での仮想化の有効化

KVM ハイパーバイザーを設定し、RHEL 8 を実行している IBM Z システムで仮想マシンを作成するには、以下の手順に従います。

前提条件

  • ホストマシンに RHEL 8 がインストールされ、登録されている。
  • 最低でも、以下のシステムリソースが利用できる。

    • ホスト用に 6 GB と、各仮想マシン用に 6 GB の空きディスク容量。
    • ホスト用に 2 GB と、各仮想マシン用に 2 GB の RAM。
  • IBM Z ホストシステムでは、z13 以降の CPU を使用する必要があります。
  • RHEL 8 は、論理パーティション (LPAR) にインストールする必要があります。さらに、LPAR は、start-interpretive execution (SIE) 仮想機能に対応する必要があります。

    これを確認するには、/proc/cpuinfo ファイルで sie を検索します。

    # grep sie /proc/cpuinfo/
    features        : esan3 zarch stfle msa ldisp eimm dfp edat etf3eh highgprs te sie

手順

  1. KVM カーネルモジュールを読み込みます。

    # modprobe kvm
  2. KVM カーネルモジュールが読み込まれていることを確認します。

    # lsmod | grep kvm

    KVM が正常に読み込まれると、このコマンドの出力には kvm が含まれます。

  3. 仮想化モジュールにパッケージをインストールします。

    # yum module install virt
  4. virt-install パッケージをインストールします。

    # yum install virt-install
  5. libvirtd サービスを開始します。

    # systemctl start libvirtd
  6. システムが仮想ホストとして準備されていることを確認します。

    # virt-host-validate
    [...]
    QEMU: Checking if device /dev/kvm is accessible                : PASS
    QEMU: Checking if device /dev/vhost-net exists                 : PASS
    QEMU: Checking if device /dev/net/tun exists                   : PASS
    QEMU: Checking for cgroup 'memory' controller support          : PASS
    QEMU: Checking for cgroup 'memory' controller mount-point      : PASS
    [...]
  7. virt-host-validate のすべての項目で PASS 値が返された場合は、システムに 仮想マシンを作成する 準備ができています。

    いずれかの項目で FAIL が返された場合は、表示される指示に従って問題を解決してください。

    いずれかの項目で WARN が返された場合は、表示される指示に従って仮想化機能を向上させることを検討してください。

関連情報

  • 仮想化がホスト CPU で対応されていないと、virt-host-validate が、以下の出力を生成します。

    QEMU: Checking for hardware virtualization: FAIL (Only emulated CPUs are available, performance will be significantly limited)

    ただし、このようなホストシステムで仮想マシンを作成しようとすると、パフォーマンス上の問題が発生するのではなく、失敗します。

4.2. IBM Z の仮想化と、AMD64 および Intel 64 の仮想化の相違点

IBM Z システムの RHEL 8 の KVM 仮想化は、以下の点で AMD64 システムおよび Intel 64 システムの KVM とは異なります。

グラフィカル出力なし
VNC プロトコルを使用して仮想マシンに接続する場合は、仮想マシンのグラフィカル出力の表示ができません。これは、gnome-desktop ユーティリティーが IBM Z でサポートされていないためです。また、SPICE ディスプレイプロトコルが IBM Z では機能しません。
PCI デバイスおよび USB デバイス

IBM Z は、仮想 PCI デバイスおよび USB デバイスに対応していません。したがって、virtio-*-pci デバイスに対応していないため、代わりに virtio-*-ccw デバイスを使用してください。たとえば、virtio-net-pci の代わりに virtio-net-ccw を使用します。

PCI パススルーとも呼ばれる PCI デバイスの直接アタッチに対応しています。

デバイスの起動順序

IBM Z は、XML 構成要素 <boot dev='device'> に対応していません。デバイスの起動順序を定義するには、XML の <devices> セクションで、 <boot order='number'> 要素を使用します。以下に例を示します。

<devices>
  <disk type='file' snapshot='external'>
    <driver name="tap" type="aio" cache="default"/>
    <source file='/var/lib/xen/images/fv0' startupPolicy='optional'>
      <seclabel relabel='no'/>
    </source>
    <target dev='hda' bus='ide'/>
    <iotune>
      <total_bytes_sec>10000000</total_bytes_sec>
      <read_iops_sec>400000</read_iops_sec>
      <write_iops_sec>100000</write_iops_sec>
    </iotune>
    <boot order='2'/>
    [...]
  </disk>
注記

また、AMD64 および Intel 64 のホストでは、ブート手順管理に <boot order='number'> を使用することが推奨されます。

メモリーのホットプラグ
IBM Z では、実行中の仮想マシンにメモリーを追加することはできません。実行中の仮想マシン (メモリーの ホットアンプラグ) からメモリーを削除することは、IBM Z や、AMD64 および Intel 64 でもできないことに注意してください。
NUMA トポロジー
CPU の NUMA (Non-Uniform Memory Access) トポロジーは、IBM Z 上の libvirt では対応していません。したがって、このシステムでは、NUMA を使用して vCPU パフォーマンスを調整することはできません。
vfio-ap
IBM Z ホストの仮想マシンは、vfio-ap 暗号デバイスパススルーを使用しますが、その他のアーキテクチャーでは対応していません。
SMBIOS
IBM Z では、SMBIOS 設定は利用できません。
Watchdog デバイス

IBM Z ホストの仮想マシンでウォッチドッグデバイスを使用する場合は、diag288 モデルを使用します。以下に例を示します。

<devices>
  <watchdog model='diag288' action='poweroff'/>
</devices>
kvm-clock
kvm-clock サービスは、AMD64 システムおよび Intel 64 システムに固有のものであり、IBM Z の仮想マシンの時間管理用に構成する必要はありません。
v2v および p2v
virt-v2v ユーティリティーおよび virt-p2v ユーティリティーは、AMD64 および Intel 64 のアーキテクチャーでのみ対応しており、IBM Z では提供されません。
ネストされた仮想化
ネストされた仮想マシンを作成するには、AMD64 および Intel 64 とは別の設定を IBM Z で作成する必要があります。詳細は18章入れ子仮想マシンの作成を参照してください。

関連情報

  • Red Hat がサポートする各システムアーキテクチャーで、一部のサポート対象およびサポート対象外の仮想化機能を比較する場合は、「仮想化機能のサポートの概要」を参照してください。

第5章 Web コンソールで仮想マシンの管理

RHEL 8 ホストのグラフィカルインターフェースで仮想マシンを管理する場合は、RHEL 8 Web コンソール仮想マシン ペインを使用できます。

Web コンソールの概要

以下のセクションでは、Web コンソールの仮想管理機能と、その使用方法を説明します。

5.1. Web コンソールで仮想マシンの管理の概要

RHEL 8 Web コンソールは、Web ベースのシステム管理インターフェースです。Web コンソールは、その機能の 1 つとして、ホストシステムで仮想マシンをグラフィカルに表示し、その仮想マシンを作成、アクセス、および構成できるようにします。

Web コンソールを使用して RHEL 8 で仮想マシンを管理するには、最初に、仮想化用の Web コンソールプラグインをインストールする必要があります。

次のステップ

5.2. 仮想マシンを管理するために Web コンソールを設定

Web コンソールの仮想マシン (VM) プラグインをインストールして、RHEL 8 Web コンソールを使用してホストで仮想マシンを管理できるようにしてある。

前提条件

  • Web コンソールがマシンにインストールされ、有効化さていることを確認してください。

    # systemctl status cockpit.socket
    cockpit.socket - Cockpit Web Service Socket
    Loaded: loaded (/usr/lib/systemd/system/cockpit.socket
    [...]

    このコマンドが、Unit cockpit.socket could not be found を返す場合は、『Web コンソールのインストール』に従って Web コンソール を有効にします。

手順

  • cockpit-machines プラグインをインストールします。

    # yum install cockpit-machines

検証

  • インストールに成功すると、仮想マシン が Web コンソールのサイドメニューに表示されます。

    cockpit での仮想マシン情報

関連情報

5.3. Web コンソールで利用可能な仮想マシンの管理機能

RHEL 8 Web コンソールを使用して、以下の操作を実行して、システム上の仮想マシンを管理できます。

表5.1 RHEL 8 Web コンソールで実行できる仮想マシン管理タスク

タスク詳細は以下を参照してください。

仮想マシンを作成し、ゲストオペレーティングシステムでインストールします。

「Web コンソールで仮想マシンの作成、およびゲストのオペレーティングシステムのインストール」

仮想マシンを削除します。

「Web コンソールで仮想マシンの削除」

仮想マシンを起動、シャットダウンし、再起動します。

「Web コンソールで仮想マシンの起動」 ならびに 「Web コンソールで仮想マシンのシャットダウンおよび再起動」

さまざまなコンソールを使用して仮想マシンに接続し、操作します。

「Web コンソールで仮想マシンとの相互作用」

仮想マシンに関するさまざまな情報を表示します。

「Web コンソールで仮想マシン情報の表示」

仮想マシンに割り当てられたホストメモリーを調整します。

「Web コンソールで仮想マシンのメモリーの追加と削除」

仮想マシンのネットワーク接続を管理します。

「Web コンソールで仮想マシンのネットワークインターフェースの管理」

ホストで利用可能な仮想マシンストレージを管理し、仮想ディスクを仮想マシンに割り当てます。

「Web コンソールで仮想マシン用のストレージの管理」

仮想マシンの仮想 CPU 設定を構成します。

「Web コンソールで仮想 CPU の管理」

5.4. 仮想マシンマネージャーと Web コンソールでの仮想化機能の相違点

仮想マシンマネージャー (virt-manager) は、RHEL 8 で対応していますが、非推奨になっています。後続の主要なリリースでは、Web コンソールがその代替となる予定です。したがって、GUI で仮想化を管理する場合は、Web コンソールを使用することが推奨されます。

ただし、RHEL 8 では、virt-manager またはコマンドラインでのみ実行可能な仮想マシン管理タスクがあります。次の表は、virt-manager で使用でき、RHEL 8.0 Web コンソールでは使用できない機能を示しています。

この機能は、RHEL 8 の後続のマイナーバージョンで利用可能な場合は、「Web コンソールのサポート」の列に、最小バージョンの RHEL 8 が表示されます。

表5.2 RHEL 8.0 の Web コンソールを使用して実行できない仮想マシンの管理タスク

タスクWeb コンソールでのサポートが導入されました。CLI を使用した代替方法

ホストの起動時に起動する仮想マシンを設定

RHEL 8.1

virsh autostart

仮想マシンの一時停止

RHEL 8.1

virsh suspend

中断している仮想マシンの再開

RHEL 8.1

virsh resume

ファイルシステムディレクトリーストレージプールの作成

RHEL 8.1

virsh pool-define-as

NFS ストレージプールの作成

RHEL 8.1

virsh pool-define-as

物理ディスクデバイスのストレージプールの作成

RHEL 8.1

virsh pool-define-as

LVM ボリュームグループストレージプールの作成

RHEL 8.1

virsh pool-define-as

パーティションベースのストレージプールの作成

現在利用不可

virsh pool-define-as

GlusterFS ベースのストレージプールの作成

現在利用不可

virsh pool-define-as

SCSI デバイスを使用した vHBA ベースのストレージプールの作成

現在利用不可

virsh pool-define-as

マルチパスベースのストレージプールの作成

現在利用不可

virsh pool-define-as

RBD ベースのストレージプールの作成

現在利用不可

virsh pool-define-as

ストレージボリュームの新規作成

RHEL 8.1

virsh vol-create

新しい仮想ネットワークの追加

RHEL 8.1

virsh net-create または virsh net-define

仮想ネットワークの削除

RHEL 8.1

virsh net-undefine

ホストマシンのインターフェースから仮想マシンへのブリッジを作成

現在利用不可

virsh iface-bridge

スナップショットの作成

現在利用不可

virsh snapshot-create-as

スナップショットへの復帰

現在利用不可

virsh snapshot-revert

スナップショットの削除

現在利用不可

virsh snapshot-delete

仮想マシンのクローン作成

現在利用不可

virt-clone

仮想マシンの別のホストマシンへの移行

現在利用不可

virsh migrate

関連情報

第6章 仮想マシンに関する情報の表示

RHEL 8 での仮想化デプロイメントのあらゆる側面を調整またはトラブルシューティングする必要がある場合は、通常、仮想マシンの現在の状態および設定に関する情報を確認する必要があります。これを行うには「コマンドラインインターフェース」または「Web コンソール」を使用できます。

6.1. コマンドラインインターフェースで仮想マシン情報の表示

ホストおよびその設定で仮想マシンに関する情報を取得するには、以下のコマンドのいずれかまたは複数コマンドを使用します。

手順

  • ホストで仮想マシンの一覧を取得するには、次のコマンドを実行します。

    # virsh list --all
    Id   Name              State
    ----------------------------------
    1    testguest1             running
    -    testguest2             shut off
    -    testguest3             shut off
    -    testguest4             shut off
  • 特定の仮想マシンに関する基本的な情報を取得するには、次のコマンドを実行します。

    # virsh dominfo testguest1
    Id:             1
    Name:           testguest1
    UUID:           a973666f-2f6e-415a-8949-75a7a98569e1
    OS Type:        hvm
    State:          running
    CPU(s):         2
    CPU time:       188.3s
    Max memory:     4194304 KiB
    Used memory:    4194304 KiB
    Persistent:     yes
    Autostart:      disable
    Managed save:   no
    Security model: selinux
    Security DOI:   0
    Security label: system_u:system_r:svirt_t:s0:c486,c538 (enforcing)
  • 特定の仮想マシンの完全な XML 設定を取得するには、次のコマンドを実行します。

    # virsh dumpxml testguest2
    
    <domain type='kvm' id='1'>
      <name>testguest2</name>
      <uuid>a973434f-2f6e-4ěša-8949-76a7a98569e1</uuid>
      <metadata>
    [...]
  • 仮想マシンのディスクおよびその他のブロックデバイスに関する情報は、次のコマンドを実行します。

    # virsh domblklist testguest3
     Target   Source
    ---------------------------------------------------------------
     vda      /var/lib/libvirt/images/testguest3.qcow2
     sda      -
     sdb      /home/username/Downloads/virt-p2v-1.36.10-1.el7.iso

    仮想マシンのストレージを管理する方法は、11章仮想マシン用のストレージの管理を参照してください。

  • 仮想マシンのファイルシステムとそのマウントポイントに関する情報を取得するには、次のコマンドを実行します。

    # virsh domfsinfo testguest3
    Mountpoint   Name   Type   Target
    ------------------------------------
     /            dm-0   xfs
     /boot        vda1   xfs
  • 特定の仮想マシンの vCPU に関する詳細を取得するには、次のコマンドを実行します。

    # virsh vcpuinfo testguest4
    VCPU:           0
    CPU:            3
    State:          running
    CPU time:       103.1s
    CPU Affinity:   yyyy
    
    VCPU:           1
    CPU:            0
    State:          running
    CPU time:       88.6s
    CPU Affinity:   yyyy

    仮想マシンで vCPU を設定し、最適化するには、「仮想マシンの CPU パフォーマンスの最適化」を参照してください。

  • ホスト上の仮想ネットワークインターフェースの一覧を表示するには、次のコマンドを実行します。

    # virsh net-list --all
     Name       State    Autostart   Persistent
    ---------------------------------------------
     default    active   yes         yes
     labnet     active   yes         yes

    特定のインターフェースに関する情報は、次のコマンドを実行します。

    # virsh net-info default
    Name:           default
    UUID:           c699f9f6-9202-4ca8-91d0-6b8cb9024116
    Active:         yes
    Persistent:     yes
    Autostart:      yes
    Bridge:         virbr0

    ネットワークインターフェース、仮想マシンネットワーク、および設定手順の詳細は、13章仮想マシンのネットワーク接続の設定を参照してください。

  • ホスト上のストレージプールおよびストレージボリュームの情報を表示する方法は、「CLI で仮想マシンのストレージ情報の表示」を参照してください。

6.2. Web コンソールで仮想マシン情報の表示

RHEL 8 Web コンソールを使用して、Web コンソールが接続する仮想ストレージおよび仮想マシンに関する情報を表示できます。

6.2.1. Web コンソールで仮想化の概要を表示

次の手順では、仮想マシン (VM) の概要と、Web コンソールセッションが接続されている利用可能な仮想ストレージを表示する方法を説明します。

前提条件

手順

  • Web コンソールのサイドメニューで、仮想マシン をクリックします。

    利用可能なストレージと、Web コンソールが接続する仮想マシンに関する情報を含むダイアログボックスが表示されます。

cockpit での仮想マシン情報

この情報には以下が含まれます。

  • ストレージプール - Web コンソールからアクセスできるストレージプールの数とその状態
  • ネットワーク - Web コンソールからアクセスできるネットワークの数とその状態
  • 名前 - 仮想マシンの名前
  • 接続 - libvirt 接続、システム、またはセッションの種類
  • 状態 - 仮想マシンの状態

関連情報

6.2.2. Web コンソールでストレージプール情報の表示

次の手順では、Web コンソールセッションがアクセスできる仮想マシンのストレージプールの詳細なストレージプール情報を表示する方法を説明します。

前提条件

手順

  1. 仮想マシン インターフェースで ストレージプール をクリックします。ストレージプール画面が表示され、設定されているストレージプールの一覧が示されます。

    Web コンソールのストレージプール画面

    この情報には以下が含まれます。

    • 名前 - ストレージプールの名前
    • サイズ - ストレージプールのサイズ
    • 接続 - ストレージプールのアクセスに使用される接続
    • 状態 - ストレージプールのステータス
  2. 情報を表示するストレージの行をクリックします。

    行が展開して、選択したストレージプールに関する次の情報を含む概要ペインが表示されます。

    • パス - ストレージプールのパス
    • 永続的 - ストレージプールが永続的かどうか
    • 自動起動 - ストレージプールが自動的に起動するかどうか
    • 種類 - ストレージプールの種類。
    Web コンソールのストレージプールの概要
  3. ストレージプールから作成したストレージボリュームの一覧を表示する場合は、ストレージボリューム をクリックします。

    ストレージボリュームペインが表示され、設定されているストレージボリュームと、そのサイズ、使用量の一覧が示されます。

    Web コンソールのストレージプールのストレージボリューム

関連情報

6.2.3. Web コンソールで仮想マシン基本情報の表示

ここでは、Web コンソールセッションの接続先に選択した仮想マシンの基本情報を表示する方法を説明します。

前提条件

手順

  1. Web コンソールのサイドメニューで、仮想マシン をクリックします。
  2. 情報を表示する仮想マシンの行をクリックします。

    行が展開し、概要ペインが表示されます。このペインには選択した仮想マシンの基本情報が記載され、仮想マシンのシャットダウンおよび削除を制御できます。

  3. 別のタブを選択した場合は 概要 をクリックします。

    cockpit での基本的な仮想マシン情報

この情報には以下が含まれます。

  • メモリー - 仮想マシンに割り当てるメモリー容量
  • エミュレートされたマシン - 仮想マシンによりエミュレートされたマシンタイプ
  • vCPU - 仮想マシンに設定された仮想 CPU の数
  • ブート順序 - 仮想マシンに設定されたブート順序
  • CPU タイプ - 仮想マシンに設定された仮想 CPU のアーキテクチャー
  • 自動起動 - 仮想マシンで自動起動が有効になっているかどうか

関連情報

6.2.4. Web コンソールで仮想マシンのリソース使用状況の表示

次の手順では、Web コンソールセッションの接続先に選択した仮想マシンのメモリーおよび仮想の CPU 使用情報を表示する方法を説明します。

前提条件

手順

  1. 仮想マシン インターフェースで、情報を表示する仮想マシンがある行をクリックします。

    行が展開し、概要ペインが表示されます。このペインには選択した仮想マシンの基本情報が記載され、仮想マシンのシャットダウンおよび削除を制御できます。

  2. 使用法 をクリックします。

    使用法ペインが表示され、仮想マシンのメモリーおよび仮想 CPU の使用状況に関する情報が表示されます。

cockpit リソースの使用方法

関連情報

6.2.5. Web コンソールで仮想マシンのディスク情報の表示

次の手順は、Web コンソールセッションが接続する仮想マシンのディスク状況を表示する方法を説明します。

前提条件

Web コンソールの仮想マシンプラグイン をインストールして、Web コンソールを使用して仮想マシンを管理できるようにしてある。

手順

  1. 情報を表示する仮想マシンの行をクリックします。

    行が展開し、概要ペインが表示されます。このペインには選択した仮想マシンの基本情報が記載され、仮想マシンのシャットダウンおよび削除を制御できます。

  2. ディスク をクリックします。

    ディスクペインが表示され、仮想マシンに割り当てられたディスクに関する情報が表示されます。

cockpit のディスク情報

この情報には以下が含まれます。

  • デバイス - ディスクのデバイスの種類
  • 使用中 - 使用中のディスク容量
  • 容量 - ディスクのサイズ
  • バス - ディスクのバスの種類
  • アクセス - ディスクが書き込み可能かどうか、読み取り専用であるか。
  • ソース - ディスクデバイスまたはファイル

関連情報

6.2.6. Web コンソールで仮想ネットワークインターフェース情報の表示および編集

RHEL 8 Web コンソールを使用して、選択した仮想マシンで仮想ネットワークインターフェースを表示および変更できます。

前提条件

手順

  1. 仮想マシン インターフェースで、情報を表示する仮想マシンがある行をクリックします。

    行が展開し、概要ペインが表示されます。このペインには選択した仮想マシンの基本情報が記載され、仮想マシンのシャットダウンおよび削除を制御できます。

  2. ネットワークインターフェース をクリックします。

    ネットワークインターフェースペインが表示され、仮想マシン用に設定された仮想ネットワークインターフェースに関する情報が表示されます。

    cockpit での vNIC 情報

    この情報には以下が含まれます。

    • 種類 - 仮想マシンのネットワークインターフェースの種類。タイプには、仮想ネットワーク、LAN へのブリッジ、および直接割り当てが含まれます。

      注記

      RHEL 8.2 では、汎用イーサネット接続に対応していません。

    • モデルタイプ - 仮想ネットワークインターフェースのモデル。
    • MACアドレス - 仮想ネットワークインターフェースの MAC アドレス。
    • IP アドレス - 仮想ネットワークインターフェースの IP アドレス。
    • ソース - ネットワークインターフェースのソース。これはネットワークの種類によって異なります。
    • 状態 - 仮想ネットワークインターフェースの状態。
  3. 仮想ネットワークインターフェースの設定を編集するには、編集 をクリックします。仮想ネットワークインターフェースの設定ダイアログが開きます。

    設定した場合の Web コンソールの仮想ネットワーク
  4. インターフェースの種類、ソース、またはモデルを変更します。
  5. 保存 をクリックします。ネットワークインターフェースが変更しました。

    注記

    仮想ネットワークインターフェース設定の変更は、仮想マシンを再起動しないと有効になりません。

関連情報

第7章 仮想マシンの保存および復元

システムリソースを解放するには、そのシステムで実行中の仮想マシンをシャットダウンできます。ただし、仮想マシンが再び必要になった場合は、ゲストオペレーティングシステム (OS) を起動し、アプリケーションを再起動する必要があります。これにはかなりの時間がかかる場合があります。このダウンタイムを短縮し、仮想マシンワークロードをより早く実行できるようにする場合は、保存機能および復元機能を使用して、OS のシャットダウンと起動シーケンスを完全に回避できます。

本セクションでは、仮想マシンの保存、および仮想マシンの完全な起動を行わずに仮想マシンを同じ状態に復元する方法を説明します。

7.1. 仮想マシンの保存および復元の仕組み

仮想マシンを保存すると、そのメモリーとデバイス状態がホストのディスクに保存され、仮想マシンプロセスがすぐに停止します。実行中または一時停止状態の仮想マシンを保存できます。復元すると、仮想マシンがその状態に戻ります。

このプロセスにより、ディスク容量と引き換えにホストシステムの RAM および CPU のリソースが解放され、ホストシステムのパフォーマンスが向上する場合があります。仮想マシンが復元する場合にゲスト OS を起動する必要がないため、時間がかかる起動時間も回避できます。

仮想マシンを保存するには、コマンドラインインターフェース (CLI) を使用します。手順は、「コマンドラインインターフェースで仮想マシンの削除」を参照してください。

仮想マシンを復元するには、CLI または Web コンソールの GUI を使用します。

7.2. コマンドラインインターフェースで仮想マシンの保存

コマンドラインを使用して仮想マシンを保存するには、以下の手順を行います。

前提条件

  • 仮想マシンと設定を保存するのに十分なディスク領域がある。仮想マシンが占有する領域は、その仮想マシンに割り当てられている RAM のサイズによって異なることに注意してください。
  • 仮想マシンが永続化されている。
  • (必要に応じて) 仮想マシンの重要なデータのバックアップを作成する。

手順

  • virsh managedsave ユーティリティーを使用します。

    たとえば、次のコマンドは、仮想マシン demo-guest1 を停止し、その設定を保存します。

    # virsh managedsave demo-guest1
    Domain demo-guest1 saved by libvirt

    保存された仮想マシンファイルは、デフォルトで /var/lib/libvirt/qemu/save ディレクトリーに demo-guest1.save として置かれます。

    次に仮想マシンを 起動 すると、上記のファイルから、保存された状態が自動的に復元します。

検証

  • virsh list ユーティリティーを使用して、仮想マシンが保存された状態になっていることを確認したり、シャットダウンできます。

    managed save が有効になっている仮想マシンの一覧を表示するには、次のコマンドを実行します。保存済み に挙げられている仮想マシンでは、管理保存 (managed save) が有効になっています。

    # virsh list --managed-save --all
    Id    Name                           State
    ----------------------------------------------------
    -     demo-guest1                    saved
    -     demo-guest2                    shut off

    管理保存のイメージがある仮想マシンの一覧を表示するには、次のコマンドを使用します。

    # virsh list --with-managed-save --all
    Id    Name                           State
    ----------------------------------------------------
    -     demo-guest1                    shut off

    停止状態にある保存された仮想マシンの一覧を表示するには、コマンドで --all オプションまたは --inactive オプションを使用する必要があります。

トラブルシューティング

  • 保存した仮想マシンファイルが破損したり、読み込めない場合は、仮想マシンを復元すると、代わりに標準の仮想マシン起動が起動します。

関連情報

7.3. コマンドラインインターフェースでの仮想マシンの起動

コマンドラインインターフェースを使用して、仮想マシンのシャットダウンを開始するか、保存した仮想マシンを復元します。以下の手順を実施します。

前提条件

  • 既に定義されている非アクティブな仮想マシン
  • ホストの名前
  • リモート仮想マシンの場合は、以下も設定されている。

    • 仮想マシンが置かれているホストの IP アドレス
    • ホストへの root アクセス権限

手順

  • ローカルの仮想マシンには、virsh start ユーティリティーを使用します。

    たとえば、次のコマンドは仮想マシン demo-guest1 を起動します。

    # virsh start demo-guest1
    Domain demo-guest1 started
  • リモートホストにある仮想マシンでは、ホストへの QEMU+SSH 接続と共に virsh start ユーティリティーを使用します。

    たとえば、次のコマンドは、ホスト 192.168.123.123 にある仮想マシン demo-guest1 を起動します。

    # virsh -c qemu+ssh://root@192.168.123.123/system start demo-guest1
    
    root@192.168.123.123's password:
    Last login: Mon Feb 18 07:28:55 2019
    
    Domain demo-guest1 started

関連資料

  • virsh start の引数の詳細は、man ページの virsh を参照してください。
  • リモートホストで仮想マシンの管理を簡素化するには、「libvirt および SSH 設定の変更」を参照してください。
  • virsh autostart ユーティリティーを使用して、ホストの起動時に自動的に起動するように設定できます。autostart の詳細は、virsh autostart の help ページを参照してください。

7.4. Web コンソールで仮想マシンの起動

仮想マシンが 停止 状態にある場合は、RHEL 8 Web コンソールを使用して起動できます。

前提条件

手順

  1. 仮想マシン インターフェースで、開始する仮想マシンがある行をクリックします。

    行が展開し、概要ペインが表示されます。このペインには選択した仮想マシンの基本情報が記載され、仮想マシンのシャットダウンおよび削除を制御できます。

  2. 実行 をクリックします。

    仮想マシンが起動し、そのコンソールまたはグラフィカル出力に接続 できます。

  3. (必要に応じて) ホストの起動時に仮想マシンが自動的に起動するように設定するには、自動起動 チェックボックスをクリックします。

関連情報

第8章 仮想マシンのクローン作成

特定のプロパティーセットで仮想マシンの新規作成を行うには、既存の仮想マシンの クローン を作成します。

クローンを作成すると、ストレージ用に独自のディスクイメージを使用する新しい仮想マシンが作成されますが、クローン設定と保存データのほとんどはソース仮想マシンと同じです。これにより、各仮想マシンを個別に最適化せずに、特定のタスクに最適化された多数の仮想マシンを準備できます。

8.1. 仮想マシンのクローン作成の仕組み

仮想マシンのクローンを作成すると、ソース仮想マシンとそのディスクイメージの XML 構成がコピーされるため、新しい仮想マシンの一意性を確保するように設定を調整します。これには、仮想マシンの名前を変更して、ディスクイメージのクローンを使用するようにすることが含まれます。ただし、クローンの仮想ディスクに保存されているデータは、ソース仮想マシンと同じです。

このプロセスは、新しい仮想マシンを作成してゲストオペレーティングシステムと一緒にインストールするよりも高速であり、特定の構成およびコンテンツを持つ仮想マシンを迅速に生成するために使用できます。

仮想マシンの複数のクローンを作成することを計画している場合は、最初に、以下を含まない仮想マシン テンプレート を作成します。

  • 永続的なネットワーク MAC 設定などの一意の設定。これにより、クローンが適切に機能しなくなる可能性があります。
  • SSH キーやパスワードファイルなどの機密データ。

手順は「仮想マシンテンプレートの作成」を参照してください。

仮想マシンのクローンを作成するには、RHEL 8 CLI を使用します。詳細は「コマンドラインインターフェースで仮想マシンのクローン作成」を参照してください。

8.2. 仮想マシンテンプレートの作成

仮想マシンのクローンが適切に実行されるようにするには、仮想マシンのクローンを作成する前に、クローン元の仮想マシンに固有の情報および設定 (SSH キーや永続的なネットワーク MAC 設定など) を削除します。

これにより、仮想マシンのクローンを簡単かつ安全に作成するのに使用できる仮想マシンの テンプレート が作成されます。

前提条件

  • virt-sysprep ユーティリティーがホストにインストールされている。

    # yum install /usr/bin/virt-sysprep
  • テンプレートとして使用する仮想マシンがシャットダウンしている。
  • ソースの仮想マシンのディスクイメージの場所と、仮想マシンのディスクイメージファイルの所有者情報がある。

    libvirt の システムセッション で作成した仮想マシンのディスクイメージが、デフォルトで /var/lib/libvirt/images ディレクトリーにあり、root ユーザーが所有している。

    # ls -la /var/lib/libvirt/images
    -rw-------.  1 root root  9665380352 Jul 23 14:50 a-really-important-vm.qcow2
    -rw-------.  1 root root  8591507456 Jul 26  2017 an-actual-vm-that-i-use.qcow2
    -rw-------.  1 root root  8591507456 Jul 26  2017 totally-not-a-fake-vm.qcow2
    -rw-------.  1 root root 10739318784 Sep 20 17:57 another-vm-example.qcow2
  • (必要に応じて) 仮想マシンのディスクにある重要なデータのバックアップが作成されている。ソースの仮想マシンをそのまま保持する場合は、クローン を作成してから、そのクローンを編集してテンプレートを作成します。

手順

  1. 仮想マシンのディスクイメージの所有者としてログインしていることを確認します。

    # whoami
    root
  2. (必要に応じて) 仮想マシンのディスクイメージをコピーします。

    # cp /var/lib/libvirt/images/a-really-important-vm.qcow2 /var/lib/libvirt/images/a-really-important-vm-original.qcow2

    これは後で、仮想マシンがテンプレートに正常に変換されたことを確認するのに使用されます。

  3. 次のコマンドを使用し、/var/lib/libvirt/images/a-really-important-vm.qcow2 を、ソース仮想マシンのディスクイメージへのパスに置き換えます。

    # virt-sysprep -a /var/lib/libvirt/images/a-really-important-vm.qcow2
    [   0.0] Examining the guest ...
    [   7.3] Performing "abrt-data" ...
    [   7.3] Performing "backup-files" ...
    [   9.6] Performing "bash-history" ...
    [   9.6] Performing "blkid-tab" ...
    [...]

検証

  • プロセスが成功したことを確認するには、変更したディスクイメージを元のイメージと比較します。次の例は、テンプレートの作成例を示しています。

    # virt-diff -a /var/lib/libvirt/images/a-really-important-vm-orig.qcow2 -A /var/lib/libvirt/images/a-really-important-vm.qcow2
    - - 0644       1001 /etc/group-
    - - 0000        797 /etc/gshadow-
    = - 0444         33 /etc/machine-id
    [...]
    - - 0600        409 /home/username/.bash_history
    - d 0700          6 /home/username/.ssh
    - - 0600        868 /root/.bash_history
    [...]

関連情報

  • 上記のように virt-sysprep コマンドを使用して、標準の仮想マシンテンプレートの準備を行います。詳細は、man ページの virt-sysprepOPERATIONS セクションを参照してください。

    virt-sysprep が実行する特定の操作をカスタマイズするには、--operations オプションを使用し、目的の操作をコンマ区切りで指定します。

  • 仮想マシンテンプレートのクローン作成手順は、「コマンドラインインターフェースで仮想マシンのクローン作成」を参照してください。

8.3. コマンドラインインターフェースで仮想マシンのクローン作成

特定のプロパティーセット (例: テスト目的) で新しい仮想マシンをすばやく作成するために、既存の仮想マシンのクローンを作成します。CLI を使用してこれを行うには、以下の手順を行います。

前提条件

  • 移行元の仮想マシンがシャットダウンしている。
  • クローンとして作成したディスクイメージを保存するのに十分なディスク領域があることを確認します。
  • (必要に応じて) 仮想マシンのクローンを複数作成する場合は、ソースの仮想マシンから一意のデータと設定を削除して、クローンとして作成した仮想マシンが正しく機能することを確認することを推奨します。手順は「仮想マシンテンプレートの作成」を参照してください。

手順

  1. 環境とユースケースに適したオプションを指定して virt-clone ユーティリティーを使用します。

    サンプルのユースケース

    • 次のコマンドは、doppelganger という名前のローカルの仮想マシンのクローンを作成し、doppelganger-clone 仮想マシンを作成します。また、クローン元の仮想マシンのディスクイメージと同じ場所に、同じデータで doppelganger-clone.qcow2 ディスクイメージを作成します。

      # virt-clone --original doppelganger --auto-clone
      Allocating 'doppelganger-clone.qcow2'                            | 50.0 GB  00:05:37
      
      Clone 'doppelganger-clone' created successfully.
    • 次のコマンドは、リモートシステム 10.0.0.1 に kal-el という名前の仮想マシンのクローンを作成し、kal-el の複数ディスクのうち 2 つのみを使用する bizarro という名前のローカル仮想マシンを作成します。このコマンドを実行するには、10.0.0.1 への root 権限も必要になります。

      # virt-clone --connect qemu+ssh://root@10.0.0.1/system --original kal-el --name bizarro --file /var/lib/libvirt/images/solitude1.qcow2 --file /var/lib/libvirt/images/solitude2.qcow2
      Allocating 'solitude1.qcow2'                                      | 78.0 GB  00:05:37
      Allocating 'solitude2.qcow2'                                      | 80.0 GB  00:05:37
      
      Clone 'bizzaro' created successfully.

検証

仮想マシンのクローンが正常に作成され、正しく機能していることを確認するには、以下を行います。

  1. クローンが、ホストの仮想マシンの一覧に追加されていることを確認します。

    # virsh list --all
    Id   Name                  State
    ---------------------------------------
    -    doppelganger          shut off
    -    doppelganger-clone    shut off
  2. クローンを起動し、起動しているかどうかを確認します。

    # virsh start doppelganger-clone
    Domain doppelganger-clone started

関連情報

  • 仮想マシンのクローン作成の追加オプションは、man ページの virt-clone を参照してください。

第9章 仮想マシンの移行

仮想マシンの現在のホストが不安定であったり、使用できない場合は、ホストワークロードを再分散する場合は、仮想マシンを別の KVM ホストに移行できます。

9.1. 仮想マシンの移行の仕組み

仮想マシンの移行は、仮想マシンの XML 設定を別のホストマシンにコピーします。移行した仮想マシンがシャットダウンしていない場合、移行では、仮想マシンのメモリーと仮想デバイスの状態も移行先ホストマシンに転送されます。移行先ホストで仮想マシンが機能し続けるには、仮想マシンのディスクイメージが利用可能なままである必要があります。

ライブ マイグレーションまたは 非ライブ マイグレーションを使用して、実行中の仮想マシンを移行できます。シャットダウンした仮想マシンを移行するには、オフライン マイグレーションを使用する必要があります。詳細は、以下の表を参照してください。

表9.1 仮想マシンの移行タイプ

移行タイプ説明ユースケースストレージ要件

ライブマイグレーション

仮想マシンが移行元ホストマシンで実行し続け、KVM が仮想マシンのメモリーページを移行先ホストに転送します。移行がほぼ完了すると、KVM はごく短い間仮想マシンを中断し、移行先ホストで再開します。

一定の稼働時間が必要な仮想マシンに役に立ちます。ただし、I/O 負荷が大きい仮想マシンなど、KVM がメモリーページを転送するよりも速くメモリーページを変更する仮想マシンではライブマイグレーションが行えず、代わりに非ライブマイグレーションを使用する必要があります。

仮想マシンのディスクイメージが 共有ネットワークに存在し、移行元ホストと移行先ホストの両方からアクセスできる必要があります。

非ライブマイグレーション

仮想マシンを一時停止し、その設定とそのメモリーを移行先ホストにコピーし、仮想マシンを再開します。

仮想マシンに対するダウンタイムを作成しますが、一般的にはライブマイグレーションよりも信頼性が高くなります。I/O 負荷が大きい仮想マシンには推奨されます。

仮想マシンのディスクイメージが 共有ネットワークに存在し、移行元ホストと移行先ホストの両方からアクセスできる必要があります。

オフラインマイグレーション

仮想マシンの設定を移行先ホストに移動します。

仮想マシンをシャットダウンするのに推奨されます。

仮想マシンのディスクイメージは共有ネットワークで利用可能である必要はなく、代わりに移行先ホストに手動でコピーまたは移動できます。

関連情報

9.2. 仮想マシンの移行の利点

仮想マシンの移行は、以下の場合に役に立ちます。

ロードバランシング
ホストがオーバーロードするか、別のホストの使用率が低くなっている場合に、仮想マシンを使用率の低いホストマシンに移動できます。
ハードウェアの非依存性
ホストマシンでハードウェアデバイスのアップグレード、追加、削除などを行う必要がある場合は、仮想マシンをその他のホストに安全に移動できます。つまり、仮想マシンは、ハードウェアを改善する際にダウンタイムが生じることはありません。
エネルギー節約
仮想マシンはその他のホストに再配布できるため、電力使用量の少ない時間帯に、アンロードしたホストシステムの電源を切ることで、節電やコスト削減が可能になります
地理的な移行
待ち時間の短縮や他の理由により、別の物理的な場所に仮想マシンを移動できます。

9.3. 仮想マシンの移行の制限

RHEL 8 で仮想マシンを移行する前に、移行の制限に注意してください。

  • ストレージの移行は、RHEL 8 ではライブで実行できませんが、仮想マシンの電源が切れている時にストレージを移行できます。ライブマイグレーションは Red Hat Virtualization で利用できます。
  • libvirt のユーザーセッション との間で仮想マシンを移行することは信頼性がないため、推奨されません。
  • 特定の機能と構成を使用する仮想マシンは、移行すると正しく機能しなくなるか、移行が失敗します。このような機能は次のとおりです。

    • デバイスパススルー
    • SR-IOV デバイスの割り当て
    • vGPU などの仲介デバイス
    • NUMA (Non-Uniform Memory Access) の固定 (ピニング)

9.4. 他のホスト間での仮想マシンディスクイメージの共有

対応している KVM ホスト 間で仮想マシンのライブマイグレーションを実行するには、仮想マシンの共有ストレージが必要です。本セクションでは、NFS プロトコルを使用して、ローカルに保存された仮想マシンイメージを移行元ホストと移行先ホストで共有する方法を説明します。

前提条件

  • 移行に使用する仮想マシンがシャットダウンしている。
  • (必要に応じて) 移行元ホストまたは移行先ホストではないストレージをホストするのにホストシステムを使用できるが、移行元ホストと移行先ホストの両方がネットワーク経由でアクセスできる。これは共有ストレージに最適なソリューションで、Red Hat が推奨しています。
  • KVM では対応していないため、NFS ファイルのロック機能を使用しない。
  • NFS が移行元および移行先ホストにインストールされ、有効になっている。そうでない場合は、以下を行います。

    1. NFS パッケージをインストールします。

      # yum install nfs-utils
    2. iptables の NFS のポート (2049 など) がファイアウォールで開いていることを確認します。

      # firewall-cmd --permanent --add-service=nfs
      # firewall-cmd --permanent --add-service=mountd
      # firewall-cmd --permanent --add-service=rpc-bind
      # firewall-cmd --permanent --add-port=2049/tcp
      # firewall-cmd --permanent --add-port=2049/udp
      # firewall-cmd --reload
    3. NFS サービスを起動します。

      # systemctl start nfs-server

手順

  1. 共有ストレージを提供するホストに接続します。以下の例では、cargo-bay ホストになります。

    # ssh root@cargo-bay
    root@cargo-bay's password:
    Last login: Mon Sep 24 12:05:36 2019
    root~#
  2. ディスクイメージを保持するディレクトリーを作成し、移行ホストと共有します。

    # mkdir /var/lib/libvirt/shared-images
  3. 移行元ホストから新規作成されたディレクトリーに仮想マシンのディスクイメージをコピーします。たとえば、以下は、wanderer1 仮想マシンのディスクイメージを、`cargo-bay` ホストの /var/lib/libvirt/shared-images/ ディレクトリーのディスクイメージにコピーします。

    # scp /var/lib/libvirt/images/wanderer1.qcow2 root@cargo-bay:/var/lib/libvirt/shared-images/wanderer1.qcow2
  4. ストレージを共有するのに使用するホストで、/etc/exports ファイルに共有ディレクトリーを追加します。以下の例では、/var/lib/libvirt/shared-images ディレクトリーを source-exampledest-example ホストと共有しています。

    /var/lib/libvirt/shared-images source-example(rw,no_root_squash) dest-example(rw,no_root_squash)
  5. 移行元ホストと移行先ホストの両方で、共有ディレクトリーを /var/lib/libvirt/images ディレクトリーにマウントします。

    # mount cargo-bay:/var/lib/libvirt/shared-images /var/lib/libvirt/images

検証

  • プロセスが成功したことを確認するには、ソースホストで仮想マシンを起動して、正しく起動したかどうかを確認します。

関連情報

9.5. コマンドラインインターフェースでの仮想マシンの移行

仮想マシンの現在のホストが不安定であったり、使用できない場合は、ホストワークロードを再分散する場合は、仮想マシンを別の KVM ホストに移行できます。このセクションでは、このような移行のさまざまなシナリオの手順と例を説明します。

前提条件

  • 移行元ホストと移行先のホストの両方が、KVM ハイパーバイザーを使用している必要があります。
  • 移行元ホストと移行先のホストは、ネットワーク経由で相互に通信できなければなりません。ping ユーティリティーを使用してこれを確認します。
  • Red Hat が移行に対応できるようにするには、移行元ホストと移行先のホストが特定のオペレーティングシステムとマシンタイプを使用している必要があります。詳細を確認するには、「VM の移行互換性の表」を参照してください。
  • Red Hat は、移行する仮想マシンのディスクイメージをネットワーク上の別の場所に配置し、移行元ホストと移行先ホストの両方からアクセスできることを推奨します。オフラインマイグレーションの場合は任意ですが、実行中の仮想マシンの移行に必要になります。

    このような仮想マシンの共有ストレージを設定する手順は、「他のホスト間での仮想マシンディスクイメージの共有」 を参照してください。

  • パブリックブリッジタップネットワークの既存の仮想マシンで移行を行う場合は、移行元ホストと移行先ホストが同じネットワークにある必要があります。そうでない場合は、移行後に仮想マシンのネットワークが機能しなくなります。

手順

  1. libvirtd サービスが有効で、実行していることを確認します。

    # systemctl enable libvirtd.service
    # systemctl restart libvirtd.service
  2. virsh migrate コマンドで、移行の要件に適したオプションを指定します。

    • 以下では、wanderer1 仮想マシンをローカルホストから dest-example ホストのシステムセッションに移行します。仮想マシンは移行中も稼働し続けます。

      # virsh migrate --persistent --live wanderer1 qemu+ssh://dest-example/system
    • 次のコマンドでは、ローカルホストで実行している仮想マシン wanderer2 の設定を手動で調整し、仮想マシンを dest-example ホストに移行できます。移行した仮想マシンが更新された設定を自動的に使用します。

      # virsh dumpxml --migratable wanderer2 >wanderer2.xml
      # vi wanderer2.xml
      # virsh migrate --live --persistent --xml wanderer2.xml wanderer2 qemu+ssh://dest-example/system

      この手順は、たとえば、移行先ホストが別のパスを使用して仮想マシンの共有ストレージにアクセスする必要がある場合、または移行先ホストに固有の機能を構成する場合に役立ちます。

    • 以下では、source-example ホストから wanderer3 仮想マシンを停止し、これを dest-example ホストに移行し、wanderer3-alt.xml が提供する調整された XML 設定を使用するように指示します。移行が終了すると、libvirt は移行先ホストで仮想マシンを再開します。

      # virsh migrate --persistent wanderer3 qemu+ssh://source-example/system qemu+ssh://dest-example/system --xml wanderer3-alt.xml
    • 以下では、source-example ホストからシャットダウンされた wanderer4 仮想マシンを削除し、その設定を dest-example ホストに移動します。

      # virsh migrate --offline --persistent --undefinesource wanderer4 qemu+ssh://krypt.on/system qemu+ssh://ter.ra/system

      このタイプの移行では、仮想マシンのディスクイメージを共有ストレージに移動する必要がないことに注意してください。ただし、移行先ホストで仮想マシンを使用するには、仮想マシンのディスクイメージを移行する必要があります。以下に例を示します。

      # scp root@krypt.on:/var/lib/libvirt/images/wanderer4.qcow2 root@ter.ra:/var/lib/libvirt/images/wanderer4.qcow2
  3. 移行が完了するまで待ちます。ネットワーク帯域幅、システムの負荷、仮想マシンのサイズによっては、プロセスに時間がかかる場合があります。virsh migrate--verbose オプションが使用されていないと、CLI はエラー以外の進捗インジケーターを表示しません。

    移行の進行中は、virsh domjobinfo ユーティリティーを使用して移行の統計を表示できます。

検証

  • 移行先ホストで、使用可能な仮想マシンの一覧を表示して、仮想マシンが移行されたかどうかを確認します。

    # virsh list
    Id Name                 State
    ----------------------------------
    10 wanderer1              running

    移行がまだ実行中であれば、このコマンドは、一時停止 の仮想マシンの一覧を表示します。

トラブルシューティング

  • ライブマイグレーションの完了に時間がかかっている場合は、仮想マシンの負荷が高く、ライブマイグレーションを実行するために変更しているメモリページ多すぎる可能性があります。この問題を修正するには、仮想マシンを停止して、ライブ以外への移行に変更します。

    # virsh suspend wanderer1

関連情報

  • その他のオプションおよび仮想マシンの移行例は、man ページの virsh を参照してください。

9.6. 仮想マシンの移行で対応しているホスト

仮想マシンの移行が適切に機能し、Red Hat でサポートされるようにするには、移行元ホストと移行先ホストが特定の RHEL バージョンおよびマシンタイプである必要があります。以下の表は、対応している仮想マシンの移行パスを示しています。

表9.2 ライブマイグレーションの互換性

移行の方法リリースタイプサポート状況

前方

メジャーリリース

7.6+ → 8.1

対応している RHEL 7 システム - マシンタイプ i440fx および q35

後方

メジャーリリース

8.1 → 7.6+

対応している RHEL 8 システム - マシンタイプ i440fx および q35

前方

マイナーリリース

8.0.1+ → 8.1+

対応している RHEL 7 システム - RHEL 7.6.0 以降のマシンタイプ i440fx および q35

サポートされている RHEL 8 システム - マシンタイプ q35

後方

マイナーリリース

8.1 → 8.0.1

サポートされている RHEL 7 システムマシンタイプ i440fx および q35 に完全対応

サポートされている RHEL 8 システム - マシンタイプ q35

関連情報

  • 現在サポートされている RHEL 7 および RHEL 8 のバージョンの詳細は、Red Hat ナレッジベース を参照してください。

9.7. 関連情報

第10章 仮想デバイスの管理

仮想マシンの機能、特徴、およびパフォーマンスを管理する最も効果的な方法の 1 つは、仮想デバイス を調整することです。

以下のセクションでは、仮想デバイスの 概要 と、仮想デバイスがどのように仮想マシンに 割り当てられ変更され削除される かを説明します。

10.1. 仮想デバイスの動作

基本情報

物理マシンと同様、仮想マシンでは、処理能力、メモリー、ストレージ、ネットワーク、グラフィックスなどの機能をシステムに提供する特殊なデバイスが必要になります。物理システムでは通常、これらの目的でハードウェアデバイスを使用します。ただし、仮想マシンはソフトウェア実装として機能するため、代わりにそのようなデバイスのソフトウェアの抽象化を使用する必要があります。これは、仮想デバイス と呼ばれています。

仮想マシンの作成 時に、仮想マシンに接続されている仮想デバイスを設定でき、既存の仮想マシンでも管理できます。通常、仮想デバイスは、仮想マシンが停止している場合に限り仮想マシンに接続または切断できますが、仮想マシンの実行中に追加または削除できるものもあります。この機能は、デバイスの ホットプラグ および ホットアンプラグ と呼ばれています。

新しい仮想マシンを作成すると、特に指定しない限り、libvirt は、必須の仮想デバイスのデフォルトセットを自動的に作成して構成します。これは、ホストシステムのアーキテクチャーとマシンタイプに基づいており、通常は以下のものが含まれます。

  • CPU
  • メモリー
  • キーボード
  • ネットワークインターフェースコントローラー (NIC)
  • さまざまなデバイスコントローラー
  • ビデオカード
  • サウンドカード

仮想マシンの作成後に仮想デバイスを管理するには、コマンドラインインターフェース (CLI) を使用します。ただし、仮想ストレージデバイス および NIC を管理する場合は、RHEL 8 Web コンソールを使用することもできます。

パフォーマンスまたは柔軟性

デバイスの種類によっては、RHEL 8 が複数の実装に対応し、しばしばパフォーマンスと柔軟性にトレードオフが伴います。

たとえば、仮想ディスクに使用される物理ストレージは、qcow2raw などのさまざまな形式のファイルで示され、次のようなさまざまなコントローラーを使用して仮想マシンに提示されます。

  • エミュレートされたコントローラー
  • virtio-scsi
  • virtio-blk

virtio デバイスは、仮想化を目的として特別に設計されているため、エミュレートされたコントローラーは、virtio コントローラーよりも遅くなります。一方、エミュレートされたコントローラーは、virtio デバイスに対するドライバーがないオペレーティングシステムを実行するのを可能にします。同様に、virtio-scsi は、SCSI コマンドへのより完全な対応を提供しており、仮想マシンにより多くのディスクを割り当てることができるようにします。最後に、virtio-blk は、virtio-scsi とエミュレートされたコントローラーよりも高いパフォーマンスを提供しますが、ユースケースは範囲がより限定されます。たとえば、virtio-blk を使用する場合には、物理ディスクを LUN デバイスとして仮想マシンに割り当てることはできません。

仮想デバイスの種類の詳細は、「仮想デバイスの種類」を参照してください。

関連情報

10.2. 仮想マシンへのデバイスの割り当て

ここでは、コマンドラインインターフェース (CLI) を使用して、仮想マシンに仮想デバイスを作成して割り当てる一般的な情報を説明します。RHEL 8 Web コンソールを使用して 仮想マシンに割り当てられるデバイスもあります。

前提条件

  • 仮想マシンに接続するデバイスに必要なオプションを取得します。特定のデバイスで利用可能なオプションを確認するには、virt-xml --device=? コマンドを使用します。以下に例を示します。

    # virt-xml --network=?
    --network options:
    [...]
    address.unit
    boot_order
    clearxml
    driver_name
    [...]

手順

  1. デバイスを仮想マシンに接続するには、デバイスと必要なオプションの定義を含む virt-xml --add-device コマンドを使用します。

    • たとえば、次は、/var/lib/libvirt/images/ ディレクトリーに 20GB の newdisk qcow2 ディスクイメージを作成し、仮想マシンの次回の起動時にそれを仮想マシンとして、実行中の仮想マシン testguest に接続します。

      # virt-xml testguest --add-device --disk /var/lib/libvirt/images/newdisk.qcow2,format=qcow2,size=20
      Domain 'testguest' defined successfully.
      Changes will take effect after the domain is fully powered off.
    • 以下は、仮想マシンの稼働時に、ホストでバス 002 のデバイス 004 として、仮想マシン testguest2 に接続した USB フラッシュドライブを接続します。

      # virt-xml testguest2 --add-device --update --hostdev 002.004
      Device hotplug successful.
      Domain 'testguest2' defined successfully.

      USB を定義するバスとデバイスの組み合わせは、lsusb コマンドを使用して取得できます。

検証

デバイスが追加されたことを確認するには、次のいずれかを行います。

  • virsh dumpxml コマンドを実行し、デバイスの XML 定義が、仮想マシンの XML 設定の <devices> セクションに追加されました。

    たとえば、以下の出力は、仮想マシン testguest の設定を表示し、002.004 USB フラッシュディスクドライブが追加されていることを確認します。

    # virsh dumpxml testguest
    [...]
    <hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x4146'/>
        <product id='0x902e'/>
        <address bus='2' device='4'/>
      </source>
      <alias name='hostdev0'/>
      <address type='usb' bus='0' port='3'/>
    </hostdev>
    [...]
  • 仮想マシンを実行し、デバイスが存在し、正しく機能しているかどうかをテストします。

関連情報

  • virt-xml コマンドの使用方法は、man virt-xml コマンドで確認します。

10.3. 仮想マシンに接続されているデバイスの変更

以下の手順は、コマンドラインインターフェース (CLI) を使用して仮想デバイスを修正する一般的な手順を示しています。ディスクや NIC など、仮想マシンに接続されている一部のデバイスは、RHEL 8 Web コンソールを使用して 変更することもできます。

前提条件

  • 仮想マシンに接続するデバイスに必要なオプションを取得します。特定のデバイスで利用可能なオプションを確認するには、virt-xml --device=? コマンドを使用します。以下に例を示します。
# virt-xml --network=?
--network options:
[...]
address.unit
boot_order
clearxml
driver_name
[...]
  • (必要に応じて) virsh dumpxml vm-name を使用してファイルに出力を送って、仮想マシンの XML 構成のバックアップを作成します。たとえば、以下は、Motoko 仮想マシンの設定のバックアップファイル motoko.xml を作成します。
# virsh dumpxml Motoko > motoko.xml
# cat motoko.xml
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <name>Motoko</name>
  <uuid>ede29304-fe0c-4ca4-abcd-d246481acd18</uuid>
  [...]
</domain>

手順

  1. デバイスの定義および必要なオプションを追加して、virt-xml --edit コマンドを使用します。

    たとえば、次のようにすると、停止する仮想マシン testguest<cpu> 設定を削除し、host-model に設定します。

    # virt-xml testguest --edit --cpu host-model,clearxml=yes
    Domain 'testguest' defined successfully.

検証

デバイスが変更されたことを確認するには、次のいずれかを行います。

  • デバイスが存在し、変更を反映する場合は、仮想マシンを実行してテストします。
  • virsh dumpxml コマンドを使用して、デバイスの XML 定義が、仮想マシンの XML 構成で変更されているかどうかを確認します。

    たとえば、次の出力は、仮想マシン testguest の設定を表示し、CPU モードが host-model として設定されていることを確認します。

    # virsh dumpxml testguest
    [...]
    <cpu mode='host-model' check='partial'>
      <model fallback='allow'/>
    </cpu>
    [...]

トラブルシューティング

  • デバイスを変更すると仮想マシンが起動できなくなる場合は、virsh define ユーティリティーを使用して、バックアップとして作成しておいた XML 設定ファイルを再読み込みして XML 設定を復元します。

    # virsh define testguest.xml
注記

仮想マシンの XML 構成を変更する場合は、virsh edit コマンド (virsh edit testguest など) も使用できます。ただし、より詳細な変更にはこの方法を使用しないでください。構成を壊し、仮想マシンの起動を妨げる可能性が高くなります。

関連情報

  • virt-xml コマンドの使用方法は、man virt-xml コマンドで確認します。

10.4. 仮想マシンからのデバイスの削除

以下は、コマンドラインインターフェース (CLI) を使用して仮想マシンから仮想デバイスを削除する一般的な情報です。ディスクや NIC などの一部のデバイスは、RHEL 8 Web コンソールを使用して 仮想マシンから削除することもできます。

前提条件

  • (必要に応じて) virsh dumpxml vm-name を使用してファイルに出力を送って、仮想マシンの XML 構成のバックアップを作成します。たとえば、以下は、Motoko 仮想マシンの設定のバックアップファイル motoko.xml を作成します。
# virsh dumpxml Motoko > motoko.xml
# cat motoko.xml
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <name>Motoko</name>
  <uuid>ede29304-fe0c-4ca4-abcd-d246481acd18</uuid>
  [...]
</domain>

手順

  1. デバイスの定義を付けて、virt-xml --remove-device コマンドを使用します。以下に例を示します。

    • 以下は、シャットダウン後に、稼働中の仮想マシン testguest から vdb としてマークされているストレージデバイスを削除します。

      # virt-xml testguest --remove-device --disk target=vdb
      Domain 'testguest' defined successfully.
      Changes will take effect after the domain is fully powered off.
    • 次は、稼働中の稼働マシン testguest2 からすぐに USB フラッシュドライブデバイスを削除します。

      # virt-xml testguest2 --remove-device --update --hostdev type=usb
      Device hotunplug successful.
      Domain 'testguest2' defined successfully.

トラブルシューティング

  • デバイスを取り外すと仮想マシンが起動できなくなる場合は、virsh define ユーティリティーを使用して、バックアップとして作成しておいた XML 設定ファイルを再読み込みして XML 設定を復元します。

    # virsh define testguest.xml

関連情報

  • virt-xml コマンドの使用方法は、man virt-xml コマンドで確認します。

10.5. 仮想デバイスの種類

RHEL 8 の仮想化は、仮想マシンに、以下のタイプの仮想デバイスを提供できます。

エミュレートされたデバイス

エミュレートされたデバイスは、広く使用されている物理デバイスのソフトウェア実装です。物理デバイス用に設計されたドライバーは、エミュレートされたデバイスとも互換性があります。そのため、エミュレートされたデバイスは柔軟性に非常に優れています。

ただし、特定のタイプのハードウェアを正確にエミュレートする必要があるため、エミュレートされたデバイスは、対応する物理デバイス、またはより最適化された仮想デバイスと比較すると、パフォーマンスが大幅に低下する可能性があります。

以下のタイプのエミュレートされたデバイスに対応します。

  • 仮想 CPU (vCPU) があり、利用可能な CPU モデルが多数あります。エミュレーションのパフォーマンスへの影響は、ホストの CPU とエミュレートされた vCPU の差異に大きく左右されます。
  • PCI バスコントローラーなどのエミュレートされたシステムコンポーネント
  • SATA、SCSI、IDE などのエミュレートされたストレージコントローラー
  • ICH9、ICH6、AC97 などのエミュレートされたサウンドデバイス
  • VGA カードや QXL カードなどのエミュレートされたグラフィックスカード
  • rtl8139 などのエミュレートされたネットワークデバイス
準仮想化デバイス

準仮想化は、仮想デバイスを仮想マシンに公開する高速かつ効率的な方法を提供します。準仮想化デバイスは、仮想マシンで使用するために特別に設計されたインターフェースを公開するため、デバイスのパフォーマンスが大幅に向上します。RHEL 8 では、virtio API を、ハイパーバイザーと仮想マシンとの間のレイヤーとして使用して、仮想マシンに準仮想化デバイスを提供します。このアプローチの欠点は、ゲストオペレーティングシステムで特定のデバイスドライバーが必要になることです。

可能な場合、特に I/O 集約型アプリケーションを実行している場合は、仮想マシンにエミュレートされたデバイスの代わりに準仮想化デバイスを使用することが推奨されます。準仮想化デバイスは、I/O レイテンシーを低減し、I/O スループットを増加させます。場合によっては、ベアメタルのパフォーマンスに非常に近づくことがあります。その他の準仮想化デバイスも、他の方法では利用できない機能を仮想マシンに追加します。

以下のタイプの準仮想化デバイスに対応します。

  • 準仮想化ネットワークデバイス (virtio-net)
  • 準仮想化ストレージコントローラー:

    • virtio-blk - ブロックデバイスエミュレーションを提供します。
    • virtio-scsi - より完全な SCSI エミュレーションを提供します。
  • 準仮想化されたクロック
  • 準仮想化されたシリアルデバイス (virtio-serial)
  • ハイパーバイザーでゲストのメモリー使用量に関する情報を共有するために使用されるバルーンデバイス (virtio-balloon)

    ただし、バルーンデバイスにはバルーンサービスもインストールする必要があります。

  • 準仮想化された乱数ジェネレーター (virtio-rng)
  • 準仮想化グラフィックカード (QXL)
物理的に共有されているデバイス

特定のハードウェアプラットフォームにより、仮想マシンはさまざまなハードウェアデバイスやコンポーネントに直接アクセスできます。このプロセスは、デバイスの割り当て として、または パススルー として知られています。

この方法で接続すると、物理マシンの場合と同様に、物理デバイスの一部の側面が仮想マシンで直接利用できます。これにより、仮想マシンで使用されるデバイスのパフォーマンスが向上します。ただし、仮想マシンに物理的に接続されているデバイスはホストからは利用できず、移行もできません。

それにもかかわらず、いくつかのデバイスは、複数の仮想マシンで 共有 できます。たとえば、場合によっては、1 台の物理デバイスが複数の 仲介デバイス を提供します。これは、異なる仮想マシンに割り当てることができます。

以下の種類のパススルーデバイスに対応します。

  • VFIO (Virtual Function I/O) デバイスの割り当て - ハードウェアで強制された DMA および割り込み分離を使用して、デバイスをアプリケーションや仮想マシンに安全に公開します。
  • USB、PCI、および SCSI のパススルー - ゲストソフトウェアで特定の機能が利用できるようにするために、一般的な業界標準のバスを仮想マシンに直接公開します。
  • シングルルート I/O 仮想化 (SR-IOV) - PCI Express リソースのハードウェアで強制された分離を可能にする仕様です。これにより、1 つの物理 PCI リソースを、複数の仮想 PCI 機能に分割する、安全かつ効率的な作業が可能になります。これは、通常、ネットワークインターフェースカード (NIC) に使用されます。
  • NPIV (N_Port ID virtualization) - 1 つの物理ホストバスアダプター (HBA) を、複数の仮想ポートと共有するファイバーチャネル技術です。
  • GPU および vGPU - 特定のタイプのグラフィックスまたは計算ワークロード用のアクセラレーター。GPU によっては仮想マシンに直接接続できるものもありますが、一部のタイプでは、基本となる物理ハードウェアを共有する仮想 GPU (vGPU) を作成する機能も提供されます。

10.6. 仮想 USB デバイスの管理

仮想マシンを使用する場合は、ホストシステムに接続されているフラッシュドライブや Web マッピングなどの USB デバイスにアクセスし、制御できます。このシナリオでは、ホストシステムはデバイスの制御を仮想マシンに渡します。これは USB パススルーとしても知られています。

次のセクションでは、コマンドラインを使用して次のことを行う方法を説明します。

10.6.1. 仮想マシンへの USB デバイスの割り当て

USB デバイスを仮想マシンに割り当てるには、仮想マシンの XML 設定ファイルに USB デバイス情報を含めることができます。

前提条件

  • 仮想マシンにパススルーするデバイスがホストに接続されていることを確認します。

手順

  1. 仮想マシンに接続する USB のバスおよびデバイス値を見つけます。

    たとえば、次のコマンドは、ホストに接続されている USB デバイスの一覧を表示します。この例で使用するデバイスは、デバイス 005 としてバス 001 にアタッチされています。

    # lsusb
    [...]
    Bus 001 Device 003: ID 2567:0a2b Intel Corp.
    Bus 001 Device 005: ID 0407:6252 Kingston River 2.0
    [...]
  2. virt-xml ユーティリティーを --add-device 引数と共に使用します。

    たとえば、次のコマンドは、USB フラッシュドライブを Library 仮想マシンに接続します。

    # virt-xml Library --add-device --hostdev 001.005
    Domain 'Library' defined successfully.
注記

実行中の仮想マシンに USB デバイスを接続するには、--update 引数を直前のコマンドに追加します。

検証手順

  • 仮想マシンを実行し、デバイスが存在し、予想通りに機能するかどうかをテストします。
  • virsh dumpxml コマンドを使用して、デバイスの XML 定義が仮想マシンの XML 設定ファイルの <devices> セクションに追加されたかどうかを確認します。

    # virsh dumpxml Library
    [...]
    <hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x0407'/>
        <product id='0x6252'/>
        <address bus='1' device='5'/>
      </source>
      <alias name='hostdev0'/>
      <address type='usb' bus='0' port='3'/>
    </hostdev>
    [...]

関連情報

  • その他の引数は、man ページの virt-xml(1) を参照してください。

10.6.2. 仮想マシンからの USB デバイスの削除

仮想マシンから USB デバイスを削除するには、仮想マシンの XML 設定から USB デバイス情報を削除できます。

手順

  1. 仮想マシンから削除する USB のバスおよびデバイス値を見つけます。

    たとえば、次のコマンドは、ホストに接続されている USB デバイスの一覧を表示します。この例で使用するデバイスは、デバイス 005 としてバス 001 にアタッチされています。

    # lsusb
    [...]
    Bus 001 Device 003: ID 2567:0a2b Intel Corp.
    Bus 001 Device 005: ID 0407:6252 Kingston River 2.0
    [...]
  2. virt-xml ユーティリティーを --remove-device 引数と共に使用します。

    たとえば、次のコマンドは、Library 仮想マシンから、バス 001 でデバイス 005 としてホストに接続されている USB フラッシュドライブを削除します。

    # virt-xml Library --remove-device --hostdev 001.005
    Domain 'Library' defined successfully.
注記

実行中の仮想マシンから USB デバイスを削除するには、--update 引数を直前のコマンドに追加します。

検証手順

  • 仮想マシンを実行し、デバイスがデバイスの一覧から削除されたかどうかを確認します。

関連情報

  • その他の引数は、man ページの virt-xml(1) を参照してください。

10.6.3. 関連情報

10.7. 仮想光学ドライブの管理

仮想マシンを使用する場合は、ホストの ISO イメージに保存されている情報にアクセスできます。これを行うには、CD ドライブや DVD ドライブなどの仮想光学ドライブとして、ISO イメージを仮想マシンに割り当てます。

次のセクションでは、コマンドラインを使用して次のことを行う方法を説明します。

10.7.1. 仮想マシンへの光学ドライブの割り当て

ISO イメージを仮想光学ドライブとして割り当てるには、仮想マシンの XML 設定ファイルを編集し、新しいドライブを追加します。

前提条件

  • ISO イメージをローカルホストに保存する必要があります。
  • ISO イメージへのパスを知っている必要があります。

手順

  • --add-device 引数を指定して virt-xml ユーティリティーを使用します。

    たとえば、次のコマンドは、/MC/tank/ ディレクトリーに保存されている Doc10 ISO イメージを、DN1 仮想マシンに割り当てます。

    # virt-xml DN1 --add-device --disk /MC/tank/Doc10.iso,device=cdrom
    Domain 'DN1' defined successfully.

検証手順

  • 仮想マシンを実行し、デバイスが存在し、予想通りに機能するかどうかをテストします。

関連情報

  • その他の引数は、man ページの virt-xml(1) を参照してください。

10.7.2. 仮想光学ドライブでの ISO イメージの置き換え

仮想マシンに仮想光学ドライブとして割り当てられた ISO イメージを置き換えるには、仮想マシンの XML 設定ファイルを編集し、置き換えを指定します。

前提条件

  • ISO イメージをローカルホストに保存する必要があります。
  • ISO イメージへのパスを知っている必要があります。

手順

  1. CD-ROM が仮想マシンに接続されているターゲットデバイスを見つけます。この情報は、仮想マシンの XML 設定ファイルにあります。

    たとえば、次のコマンドは、CD-ROM のターゲットデバイスが sda である DN1 仮想マシンの XML 設定ファイルを表示します。

    # virsh dumpxml DN1
    ...
    <disk>
      ...
      <source file='/MC/tank/Doc10.iso'/>
      <target dev='sda' bus='sata'/>
      ...
    </disk>
    ...
  2. --edit 引数を指定して virt-xml ユーティリティーを使用します。

    たとえば、次のコマンドは、ターゲット sda で仮想マシン DN1 に接続された ISO イメージ Doc10 を、/Dvrs/current/ ディレクトリーに保存されている ISO イメージ DrDN に置き換えます。

    # virt-xml DN1 --edit target=sda --disk /Dvrs/current/DrDN.iso
    Domain 'DN1' defined successfully.

検証手順

  • 仮想マシンを実行し、デバイスが置き換えられているかどうかをテストし、期待どおりに機能します。

関連情報

  • その他の引数は、man ページの virt-xml(1) を参照してください。

10.7.3. 仮想光学ドライブからの ISO イメージの削除

仮想マシンに接続されている仮想光学ドライブから ISO イメージを削除するには、仮想マシンの XML 設定ファイルを編集します。

手順

  1. CD-ROM が仮想マシンに接続されているターゲットデバイスを見つけます。この情報は、仮想マシンの XML 設定ファイルにあります。

    たとえば、次のコマンドは、CD-ROM のターゲットデバイスが sda である DN1 仮想マシンの XML 設定ファイルを表示します。

    # virsh dumpxml DN1
    ...
    <disk>
      ...
      <source file='/Dvrs/current/DrDN'/>
      <target dev='sda' bus='sata'/>
      ...
    </disk>
    ...
  2. --edit 引数を指定して virt-xml ユーティリティーを使用します。

    たとえば、次のコマンドは、仮想マシン DN1 に接続されている CD ドライブから、ISO イメージ DrDN を削除します。

    # virt-xml DN1 --edit target=sda --disk path=
    Domain 'DN1' defined successfully.

検証手順

  • 仮想マシンを実行し、イメージが使用できなくなったことを確認します。

関連情報

  • その他の引数は、man ページの virt-xml(1) を参照してください。

10.7.4. 仮想マシンからの光学ドライブの削除

仮想マシンに接続されている光学ドライブを削除するには、仮想マシンの XML 設定ファイルを編集します。

手順

  1. CD-ROM が仮想マシンに接続されているターゲットデバイスを見つけます。この情報は、仮想マシンの XML 設定ファイルにあります。

    たとえば、次のコマンドは、CD-ROM のターゲットデバイスが sda である DN1 仮想マシンの XML 設定ファイルを表示します。

    # virsh dumpxml DN1
    ...
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <target dev='sda' bus='sata'/>
      ...
    </disk>
    ...
  2. --remove-device 引数を指定して virt-xml ユーティリティーを使用します。

    たとえば、次のコマンドは、ターゲット sda として接続された光学ドライブを仮想マシン DN1 から削除します。

    # virt-xml DN1 --remove-device --disk target=sda
    Domain 'DN1' defined successfully.

検証手順

  • デバイスが仮想マシンの XML 設定ファイルに一覧表示されていないことを確認します。

関連情報

  • その他の引数は、man ページの virt-xml(1) を参照してください。

10.7.5. 関連情報

10.8. SR-IOV デバイスの管理

エミュレートされた仮想デバイスは、多くの場合、ハードウェアネットワークデバイスよりも多くの CPU およびメモリーを使用します。これにより、仮想マシンのパフォーマンスを制限できます。ただし、仮想化ホストのデバイスが SR-IOV (Single Root I/O Virtualization) に対応する場合は、この機能を使用してデバイスのパフォーマンスを向上し、仮想マシンの全体的なパフォーマンスを向上させることができます。

10.8.1. SR-IOV とは

SR-IOV (Single-root I/O virtualization) は、1 つの PCIe (PCI Express) デバイスが、ホストに、複数の個別の PCI デバイス (仮想機能 (VF) と呼ばれます) をホストシステムに表示できるようにする仕様です。このデバイスはそれぞれ以下のようになります。

  • 元の PCIe デバイスと同一または同様のサービスを提供できます。
  • ホストの PCI バス上の異なるアドレスに表示されます。
  • VFIO の割り当てを使用して、別の仮想マシンに割り当てることができます。

たとえば、1 つの SR-IOV 対応ネットワークデバイスが、VF を複数の仮想マシンに提示できます。すべての VF は同じ物理カード、同じネットワーク接続、同じネットワークケーブルを使用しますが、各仮想マシンは直接そのハードウェアネットワークデバイスを制御し、ホストのリソースは使用しません。

SR-IOV の仕組み

SR-IOV 機能は、以下の PCIe 機能の導入により可能になりました。

  • Physical Function (PF) - デバイス (ネットワークなど) の機能をホストに提供しますが、一連の VF を作成して管理することもできる PCIe 機能。SR-IOV 対応の各デバイスには、1 つ以上の PF があります。
  • Virtual Function (VF) - 独立したデバイスとして動作する軽量の PCIe 機能。各 VF は PF から派生します。デバイスが持つことができる VF の最大数は、デバイスのハードウェアによって異なります。各 VF は、一度に 1 台の仮想マシンにのみ割り当てることができますが、1 台の仮想マシンには複数の VF を割り当てることができます。

仮想マシンは、VF を仮想デバイスとして認識します。たとえば、SR-IOV ネットワークデバイスによって作成された VF は、物理ネットワークカードがホストシステムに表示されるのと同じように、割り当てられた仮想マシンへのネットワークカードとして表示されます。

図10.1 SR-IOV アーキテクチャー

virt SR IOV

利点

エミュレートされたデバイスではなく SR-IOV VF を使用する主な利点は以下のとおりです。

  • パフォーマンスが向上する
  • ホストの CPU およびメモリーリソースの使用が減少する

たとえば、vNIC として仮想マシンに接続する VF は、物理 NIC とほぼ同じレベルで実行され、準仮想化またはエミュレートされた NIC よりもはるかに適しています。特に、複数の VF を 1 台のホスト上で同時に使用する場合に、パフォーマンス上のメリットは重要です。

デメリット

  • PF の設定を変更する場合は、最初に PF により公開される VF の数をゼロに変更する必要があります。したがって、このような VF が提供するデバイスを、デバイスが割り当てられている仮想マシンから削除する必要もあります。
  • SR-IOV VF など、VFIO が割り当てられたデバイスが接続された仮想マシンは、別のホストに移行することができません。場合によっては、割り当てられたデバイスをエミュレートされたデバイスとペアにすることにより、この制限を回避できます。たとえば、割り当てられたネットワーク VF をエミュレートされた vNIC に ボンディング を行い、移行前に VF を削除できます。
  • さらに、VFIO が割り当てたデバイスには仮想マシンのメモリーの固定 (ピニング) が必要になるため、仮想マシンのメモリー消費が増加し、仮想マシンのメモリーバルーンが使用できなくなります。

関連情報

10.8.2. SR-IOV ネットワークデバイスの仮想マシンへの割り当て

Intel ホストまたは AMD ホストの仮想マシンに SR-IOV ネットワークデバイスを割り当てるには、VF (Virtual Function) をホストの SR-IOV 対応ネットワークインターフェースから作成し、VF をデバイスとして、指定された仮想マシンに割り当てます。詳細は、次の手順を参照してください。

前提条件

  • ホストの CPU およびファームウェアは、IOMMU (I/O Memory Management Unit) に対応する必要があります。

    • Intel CPU を使用している場合は、Intel VT-d (Virtualization Technology for Directed I/O) に対応する必要があります。
    • AMD CPU を使用している場合は、AMD-Vi 機能に対応している必要があります。
  • システムがアクセス制御サービス (ACS) を使用して PCIe トポロジーの DMA (Direct Memory Access) 分離を提供することをシステムベンダーに確認します。

    詳細は、「SR-IOV 実装に関するハードウェアの考慮事項」を参照してください。

  • 物理ネットワークデバイスは SR-IOV に対応する必要があります。システムのネットワークデバイスが SR-IOV に対応しているかどうかを確認するには、lspci -v コマンドを使用して、出力で Single Root I/O Virtualization (SR-IOV) を探します。

    # lspci -v
    [...]
    02:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
    	Subsystem: Intel Corporation Gigabit ET Dual Port Server Adapter
    	Flags: bus master, fast devsel, latency 0, IRQ 16, NUMA node 0
    	Memory at fcba0000 (32-bit, non-prefetchable) [size=128K]
    [...]
    	Capabilities: [150] Alternative Routing-ID Interpretation (ARI)
    	Capabilities: [160] Single Root I/O Virtualization (SR-IOV)
    	Kernel driver in use: igb
    	Kernel modules: igb
    [...]
  • VF の作成に使用するホストのネットワークインターフェースが実行している必要があります。たとえば、eth1 インターフェースをアクティブにして、実行していることを確認するには、次のコマンドを実行します。

    # ip link set eth1 up
    # ip link show eth1
    8: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000
       link/ether a0:36:9f:8f:3f:b8 brd ff:ff:ff:ff:ff:ff
       vf 0 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 1 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 2 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 3 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
  • SR-IOV デバイス割り当てを有効にするには、ホスト BIOS およびカーネルで IOMMU 機能を有効にする必要があります。改善点を報告する場合は、以下のように行います。

    • Intel ホストで VT-d を有効にします。

      • Intel ホストが複数のブートエントリーを使用する場合は、以下を行います。

        1. /etc/default/grub ファイルを編集し、intel_iommu=on パラメーターおよび iommu=pt パラメーターを GRUB_CMDLINE_LINUX 行の末尾に追加します。

          GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rhel_dell-per730-27-swap rd.lvm.lv=rhel_dell-per730-27/root rd.lvm.lv=rhel_dell-per730-27/swap console=ttyS0,115200n81 intel_iommu=on iommu=pt"
        2. GRUB 設定を再生成します。

          # grub2-mkconfig -o /boot/grub2/grub.cfg
        3. ホストを再起動します。
      • Intel ホストがブートエントリーを 1 つ使用する場合は、以下を行います。

        1. intel_iommu=on パラメーターで GRUB 設定を再生成します。

          # grubby --args="intel_iommu=on" --update-kernel DEFAULT
        2. ホストを再起動します。
    • AMD ホストで、AMD-Vi を有効にします。

      • AMD ホストが複数のブートエントリーを使用する場合は、以下を行います。

        1. /etc/default/grub ファイルを編集し、iommu=pt パラメーターおよび amd_iommu=on パラメーターを GRUB_CMDLINE_LINUX 行の末尾に追加します。

          GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rhel_dell-per730-27-swap rd.lvm.lv=rhel_dell-per730-27/root rd.lvm.lv=rhel_dell-per730-27/swap console=ttyS0,115200n81 iommu=pt amd_iommu=on"
        2. GRUB 設定を再生成します。

          # grub2-mkconfig -o /boot/grub2/grub.cfg
        3. ホストを再起動します。
      • AMD ホストがブートエントリーを 1 つ使用する場合は、以下を行います。

        1. iommu=pt パラメーターで GRUB 設定を再生成します。

          # grubby --args="iommu=pt" --update-kernel DEFAULT
        2. ホストを再起動します。

手順

  1. (必要に応じて) ネットワークデバイスが使用できる VF の最大数を確認します。これを実行するには、次のコマンドを使用して、eth1 を SR-IOV 互換のネットワークデバイスに置き換えます。

    # cat /sys/class/net/eth1/device/sriov_totalvfs
    7
  2. 次のコマンドを実行して、Virtual Function (VF) を作成します。

    # echo VF-number > /sys/class/net/network-interface/device/sriov_numvfs

    上記コマンドでは、以下のようになります。

    • VF-number には、PF に作成する VF の数を入力します。
    • network-interface は、VF が作成されるネットワークインターフェースの名前に置き換えます。

    以下の例では、eth1 ネットワークインターフェースから 2 つの VF を作成します。

    # echo 2 > /sys/class/net/eth1/device/sriov_numvfs
  3. VF が追加されたことを確認します。

    # lspci | grep Ethernet
    01:00.0 Ethernet controller: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 (rev 01)
    01:00.1 Ethernet controller: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 (rev 01)
    07:00.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
    07:00.1 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
  4. VF の作成に使用したネットワークインターフェース用の udev ルールを作成して、作成した VF を永続化します。たとえば、eth1 インターフェースの場合は、/etc/udev/rules.d/eth1.rules ファイルを作成し、以下の行を追加します。

    ACTION=="add", SUBSYSTEM=="net", ENV{ID_NET_DRIVER}=="ixgbe", ATTR{device/sriov_numvfs}="2"

    これにより、ホストの起動時に ixgbe ドライバーを使用する 2 つの VF が eth1 インターフェースで自動的に利用できるようになります。

    警告

    現在、Broadcom NetXtreme II BCM57810 アダプターで VF を永続化しようとすると、このコマンドは正しく機能しません。また、このアダプターに基づく VF を Windows 仮想マシンに接続することは、現在信頼性がありません。

  5. virsh nodedev-list コマンドを使用して、追加された VF デバイスを libvirt が認識していることを確認します。たとえば、以下の例では、前の例の 01:00.0 と 07:00.0 PF が VF に正常に変換されていることを示しています。

    # virsh nodedev-list | grep pci_
    pci_0000_01_00_0
    pci_0000_01_00_1
    pci_0000_07_10_0
    pci_0000_07_10_1
    [...]
  6. PF の busslot、および function の値、および対応する VF 値のいずれかを取得します。たとえば、pci_0000_01_00_0 および pci_0000_01_00_1 の場合は以下のようになります。

    # virsh nodedev-dumpxml pci_0000_01_00_0
    <device>
      <name>pci_0000_01_00_0</name>
      <path>/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0</path>
      <parent>pci_0000_00_01_0</parent>
      <driver>
        <name>ixgbe</name>
      </driver>
      <capability type='pci'>
        <domain>0</domain>
        <bus>1</bus>
        <slot>0</slot>
        <function>0</function>
    [...]
    # virsh nodedev-dumpxml pci_0000_01_00_1
    <device>
      <name>pci_0000_01_00_1</name>
      <path>/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.1</path>
      <parent>pci_0000_00_01_0</parent>
      <driver>
        <name>vfio-pci</name>
      </driver>
      <capability type='pci'>
        <domain>0</domain>
        <bus>1</bus>
        <slot>0</slot>
        <function>1</function>
    [...]
  7. 一時 XML ファイルを作成し、前の手順で取得した busslot、および function の値を使用して構成を追加します。以下に例を示します。

    <interface type='hostdev' managed='yes'>
      <source>
        <address type='pci' domain='0x0000' bus='0x03' slot='0x10' function='0x2'/>
      </source>
    </interface>
  8. 一時 XML ファイルを使用して VF を仮想マシンに追加します。たとえば、以下は、/tmp/holdmyfunction.xml に保存されている VF を稼働中の仮想マシン testguest1 に接続し、仮想マシンの再起動後に利用できるようにします。

    # virsh attach-device testguest1 /tmp/holdmyfunction.xml --live --config
    Device attached successfully.

    これに成功すると、ゲストオペレーティングシステムは新規ネットワークインターフェースカードを検出します。

10.8.3. SR-IOV 割り当てに対応しているデバイス

すべてのデバイスを SR-IOV に使用できるわけではありません。以下のデバイスは、RHEL 8 の SR-IOV との互換性がテストおよび検証されています。

ネットワークデバイス

  • Intel 82599ES 10 Gigabit Ethernet Controller - ixgbe ドライバーを使用します。
  • Intel Ethernet Controller XL710 Series - i40e ドライバーを使用します。
  • Mellanox ConnectX-5 Ethernet Adapter Cards - mlx5_core ドライバーを使用します。
  • Intel Ethernet Network Adapter XXV710 - i40e ドライバーを使用します。
  • Intel 82576 Gigabit Ethernet Controller - igb ドライバーを使用します。
  • Broadcom NetXtreme II BCM57810 - bnx2x ドライバーを使用します。

第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 ベースのストレージプール
  • SCSI デバイスを使用した vHBA ベースのストレージプール
  • マルチパスベースのストレージプール
  • 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

11.2. CLI で仮想マシン用のストレージの管理

以下のドキュメントでは、コマンドラインユーティリティーの virsh を使用して、仮想マシンのストレージを管理する方法を説明します。

virsh を使用して、仮想マシンのストレージを追加、削除、および変更したり、仮想マシンストレージに関する情報を表示できます。

注記

多くの場合、仮想マシン用のストレージは、仮想マシンが作成される と同時に作成されます。したがって、以下の情報は、主に仮想マシンのストレージの高度な管理に関するものです。

11.2.1. CLI で仮想マシンのストレージ情報の表示

ここでは、CLI を使用してストレージプールおよびストレージボリュームに関する情報を表示する方法を説明します。

11.2.1.1. CLI でストレージプール情報の表示

手順

  • virsh pool-list コマンドを使用して、ストレージプール情報を表示します。

    # virsh pool-list --all --details
     Name                State    Autostart  Persistent    Capacity  Allocation   Available
     default             running  yes        yes          48.97 GiB   23.93 GiB   25.03 GiB
     Downloads           running  yes        yes         175.62 GiB   62.02 GiB  113.60 GiB
     RHEL8-Storage-Pool  running  yes        yes         214.62 GiB   93.02 GiB  168.60 GiB

関連情報

  • 利用可能な virsh pool-list オプションは、関連する man ページを参照してください。

11.2.1.2. CLI でストレージボリューム情報の表示

ここでは、ストレージプールの情報を表示する方法を説明します。指定したストレージプールのすべてのストレージプールの一覧と、指定したストレージプールに関する詳細を表示できます。

手順

  1. virsh vol-list コマンドを使用して、指定したストレージプールにあるストレージボリュームを一覧表示します。

    # virsh vol-list --pool RHEL8-Storage-Pool --details
     Name                Path                                               Type   Capacity  Allocation
    ---------------------------------------------------------------------------------------------
     .bash_history       /home/VirtualMachines/.bash_history       file  18.70 KiB   20.00 KiB
     .bash_logout        /home/VirtualMachines/.bash_logout        file    18.00 B    4.00 KiB
     .bash_profile       /home/VirtualMachines/.bash_profile       file   193.00 B    4.00 KiB
     .bashrc             /home/VirtualMachines/.bashrc             file   1.29 KiB    4.00 KiB
     .git-prompt.sh      /home/VirtualMachines/.git-prompt.sh      file  15.84 KiB   16.00 KiB
     .gitconfig          /home/VirtualMachines/.gitconfig          file   167.00 B    4.00 KiB
     RHEL8_Volume.qcow2  /home/VirtualMachines/RHEL8_Volume.qcow2  file  60.00 GiB   13.93 GiB
    注記

    利用可能な virsh vol-list オプションは、関連する man ページを参照してください。

  2. virsh vol-info コマンドを使用して、指定したストレージプール内のストレージボリュームを一覧表示します。

    # vol-info --pool RHEL8-Storage-Pool --vol RHEL8_Volume.qcow2
    Name:           RHEL8_Volume.qcow2
    Type:           file
    Capacity:       60.00 GiB
    Allocation:     13.93 GiB
    注記

    利用可能な virsh vol-info オプションは、関連する man ページを参照してください。

11.2.2. CLI で仮想マシンのストレージの作成および割り当て

以下は、仮想マシンにストレージを作成し、割り当てる高度な手順です。

  1. ストレージプールの作成

    利用可能なストレージメディアから、1 つ以上のストレージプールを作成します。対応しているストレージプールの種類の一覧は、「ストレージプールの種類」を参照してください。

    • 永続ストレージプールを作成する場合は、virsh pool-define コマンドおよび virsh pool-define-as コマンドを使用します。

      virsh pool-define コマンドは、プールオプションに XML ファイルを使用します。virsh pool-define-as コマンドは、コマンドラインにオプションを配置します。

    • 一時的なストレージプールを作成する場合は、virsh pool-create コマンドおよび virsh pool-create-as コマンドを使用します。

      virsh pool-create コマンドは、プールオプションに XML ファイルを使用します。virsh pool-create-as コマンドは、コマンドラインにオプションを配置します。

注記

このドキュメントの例と手順はすべて、virsh pool-define コマンドを使用して永続的なストレージプールを作成するためのものです。virsh pool-create コマンド、virsh pool-define-as コマンド、および virsh pool-create-as コマンドの詳細は、関連する man ページを参照してください。

  1. ストレージボリュームの作成

    利用可能なストレージプールから、ストレージボリューム を 1 つ以上作成します。

    注記

    このドキュメントの例と手順はすべて、virsh vol‑create コマンドを使用してストレージを作成するためのものです。virsh vol-create-as コマンドの詳細は、関連する man ページを参照してください。

  2. 仮想マシンへのストレージデバイスの割り当て

    ストレージボリュームから抽象化されたストレージデバイスを、仮想マシンに割り当てます。

以下のセクションでは、CLI を使用してストレージを作成し、割り当てる方法を説明します。

11.2.2.1. CLI で仮想マシン用のディレクトリーベースのストレージの作成および割り当て

以下は、ディレクトリーベースのストレージプールおよびストレージボリュームの作成と、仮想マシンへのボリュームの割り当てに関する情報を提供します。

11.2.2.1.1. CLI でディレクトリーベースのストレージプールの作成

ここでは、ディレクトリーベースのストレージプールを作成する手順を説明します。

手順

  1. XML ファイルでストレージプールを定義します。

    新しいデバイスに必要なストレージプールパラメーターを含む一時的な XML ファイルを作成します。

    必須パラメーターの詳細は、「パラメーター」を参照してください。

  2. ストレージプールを作成します。

    virsh pool-define コマンドを使用して、前の手順で作成した XML ファイルに基づいて永続ストレージプールを作成します。

    # virsh pool-define ~/guest_images.xml
      Pool defined from guest_images_fs
注記

virsh pool-define コマンドを実行したら、手順 1 で作成した XML ファイルを削除できます。

  1. ストレージプールのターゲットパスを定義します。

    virsh pool-build コマンドを使用して、フォーマット済みファイルシステムのストレージプール用のストレージプールターゲットパスを作成し、ストレージソースデバイスを初期化し、データのフォーマットを定義します。

    # virsh pool-build guest_images_fs
      Pool guest_images_fs built
    
    # ls -la /guest_images
      total 8
      drwx------.  2 root root 4096 May 31 19:38 .
      dr-xr-xr-x. 25 root root 4096 May 31 19:38 ..
  2. プールが作成されたことを確認します。

    virsh pool-list コマンドを使用して、プールが作成されたことを確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   no
  3. ストレージプールを起動します。

    virsh pool-start コマンドを使用して、ストレージプールをマウントします。

    # virsh pool-start guest_images_fs
      Pool guest_images_fs started
    注記

    virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。

  4. (必要に応じて) 自動起動をオンにします。

    デフォルトでは、virsh コマンドを使用して定義したストレージプールは、libvirtd が起動するたびに自動的に起動するようには設定されていません。virsh pool-autostart コマンドを使用して、ストレージプールが自動的に起動するように設定します。

    # virsh pool-autostart guest_images_fs
      Pool guest_images_fs marked as autostarted
  5. 自動起動 状態を確認します。

    virsh pool-list コマンドを使用して、自動起動 の状態を確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   yes
  6. ストレージプールを確認します。

    ストレージプールが正しく作成され、報告されたサイズが期待どおりで、状態が 実行中 と報告されたことを確認します。ファイルシステムのターゲットパスに lost+found ディレクトリーがあることを確認します。これは、デバイスがマウントされていることを示しています。

    # virsh pool-info guest_images_fs
      Name:           guest_images_fs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
    
    # mount | grep /guest_images
      /dev/sdc1 on /guest_images type ext4 (rw)
    
    # ls -la /guest_images
      total 24
      drwxr-xr-x.  3 root root  4096 May 31 19:47 .
      dr-xr-xr-x. 25 root root  4096 May 31 19:38 ..
      drwx------.  2 root root 16384 May 31 14:18 lost+found
11.2.2.1.2. ディレクトリーベースのストレージプールのパラメーター

以下は、ディレクトリーベースのストレージプールおよび例に必要なパラメーターに関する情報です。

パラメーター

以下の表は、ディレクトリーベースのストレージプールの XML ファイルに必要なパラメーターの一覧です。

表11.1 ディレクトリーベースのストレージプールのパラメーター

説明XML

ストレージプールの種類

<pool type='dir'>

ストレージプールの名前

<name>name</name>

ターゲットを指定するパス。ストレージプールに使用されるパスになります。

<target>
   <path>target_path</path>
</target>

以下は、/guest_images ディレクトリーに基づいたストレージプールの XML ファイルの例です。

<pool type='dir'>
  <name>dirpool</name>
  <target>
    <path>/guest_images</path>
  </target>
</pool>

11.2.2.2. CLI で仮想マシンにディスクベースのストレージを作成して割り当て

以下は、ディスクベースのストレージプールおよびストレージボリュームの作成と、仮想マシンのボリュームの割り当てに関する情報を提供します。

11.2.2.2.1. CLI でディスクベースのストレージプールの作成

ここでは、ディスクベースのストレージプールを作成する手順を説明します。

推奨情報

ディスクベースのストレージプールを作成する前に、以下の点に注意してください。

  • 使用されている libvirt のバージョンに応じて、ディスクをストレージプール専用にすると、現在ディスクデバイスに格納されているすべてのデータが再フォーマットされて消去される可能性があります。ストレージプールを作成する前に、ストレージデバイスのデータのバックアップを作成することを強く推奨します。
  • 仮想マシンには、ディスク全体またはブロックデバイス (/dev/sdb など) への書き込みアクセス権を付与しないでください。パーティション (/dev/sdb1 など) または LVM ボリュームを使用します。

    ブロックデバイス全体を仮想マシンに渡すと、仮想マシンはブロックデバイスをパーティションに分割するか、ブロックデバイスに独自の LVM グループを作成します。これにより、ホストマシンがこのようなパーティションまたは LVM グループを検出し、エラーが発生する可能性があります。

手順

  1. GUID パーティションテーブル (GPT) のディスクラベルで、ディスクのラベルを付け直します。GPT ディスクラベルは、各デバイスに最大 128 個のパーティションを作成できます。

    # parted /dev/sdb
    GNU Parted 2.1
    Using /dev/sdb
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted) mklabel
    New disk label type? gpt
    (parted) quit
    Information: You may need to update /etc/fstab.
    #
  2. XML ファイルでストレージプールを定義します。

    新しいデバイスに必要なストレージプールパラメーターを含む一時的な XML ファイルを作成します。

    必須パラメーターの詳細は、「パラメーター」を参照してください。

  3. ストレージプールを作成します。

    virsh pool-define コマンドを使用して、前の手順で作成した XML ファイルに基づいて永続ストレージプールを作成します。

    # virsh pool-define ~/guest_images.xml
      Pool defined from guest_images_fs
注記

virsh pool-define コマンドを実行したら、手順 1 で作成した XML ファイルを削除できます。

  1. ストレージプールのターゲットパスを定義します。

    virsh pool-build コマンドを使用して、フォーマット済みファイルシステムのストレージプール用のストレージプールターゲットパスを作成し、ストレージソースデバイスを初期化し、データのフォーマットを定義します。

    # virsh pool-build guest_images_fs
      Pool guest_images_fs built
    
    # ls -la /guest_images
      total 8
      drwx------.  2 root root 4096 May 31 19:38 .
      dr-xr-xr-x. 25 root root 4096 May 31 19:38 ..
    注記

    ターゲットパスの構築は、ディスクベース、ファイルシステムベース、論理ストレージプールにのみ必要です。libvirt は、overwrite オプションが指定されている場合を除き、ソースストレージデバイスのデータフォーマットが、選択したストレージプールタイプと異なることを検出すると、ビルドに失敗します。

  2. プールが作成されたことを確認します。

    virsh pool-list コマンドを使用して、プールが作成されたことを確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   no
  3. ストレージプールを起動します。

    virsh pool-start コマンドを使用して、ストレージプールをマウントします。

    # virsh pool-start guest_images_fs
      Pool guest_images_fs started
    注記

    virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。

  4. (必要に応じて) 自動起動をオンにします。

    デフォルトでは、virsh コマンドを使用して定義したストレージプールは、libvirtd が起動するたびに自動的に起動するようには設定されていません。virsh pool-autostart コマンドを使用して、ストレージプールが自動的に起動するように設定します。

    # virsh pool-autostart guest_images_fs
      Pool guest_images_fs marked as autostarted
  5. 自動起動 状態を確認します。

    virsh pool-list コマンドを使用して、自動起動 の状態を確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   yes
  6. ストレージプールを確認します。

    ストレージプールが正しく作成され、報告されたサイズが期待どおりで、状態が 実行中 と報告されたことを確認します。ファイルシステムのターゲットパスに lost+found ディレクトリーがあることを確認します。これは、デバイスがマウントされていることを示しています。

    # virsh pool-info guest_images_fs
      Name:           guest_images_fs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
    
    # mount | grep /guest_images
      /dev/sdc1 on /guest_images type ext4 (rw)
    
    # ls -la /guest_images
      total 24
      drwxr-xr-x.  3 root root  4096 May 31 19:47 .
      dr-xr-xr-x. 25 root root  4096 May 31 19:38 ..
      drwx------.  2 root root 16384 May 31 14:18 lost+found
11.2.2.2.2. ディスクベースのストレージプールのパラメーター

以下は、ディレクトリーベースのストレージプールおよび例に必要なパラメーターに関する情報です。

パラメーター

以下の表は、ディスクベースのストレージプールの XML ファイルに必要なパラメーターの一覧です。

表11.2 ディスクベースのストレージプールのパラメーター

説明XML

ストレージプールの種類

<pool type='disk'>

ストレージプールの名前

<name>name</name>

ストレージデバイスを指定するパス。たとえば、/dev/sdb です。

<source>
   <path>source_path</path>
</source>

ターゲットデバイスを指定するパス。ストレージプールに使用されるパスになります。

<target>
   <path>target_path</path>
</target>

以下は、ディスクに基づいたストレージプールに対する XML ファイルの例です。

<pool type='disk'>
  <name>phy_disk</name>
  <source>
    <device path='/dev/sdb'/>
    <format type='gpt'/>
  </source>
  <target>
    <path>/dev</path>
  </target>
</pool>

11.2.2.3. CLI で仮想マシンにファイルシステムベースのストレージを作成して割り当て

以下は、ディレクトリーベースのストレージプールおよびストレージボリュームの作成と、仮想マシンへのボリュームの割り当てに関する情報を提供します。

11.2.2.3.1. CLI でファイルシステムベースのストレージプールの作成

ここでは、ファイルシステムベースのストレージプールを作成する手順を説明します。

推奨情報

この手順は、ディスク全体をストレージプール (/dev/sdb など) として割り当てるのに使用しないでください。仮想マシンには、ディスク全体またはブロックデバイスへの書き込みアクセス権を付与しないでください。この方法は、パーティション (/dev/sdb1 など) をストレージプールに割り当てる場合に限り使用してください。

手順

  1. XML ファイルでストレージプールを定義します。

    新しいデバイスに必要なストレージプールパラメーターを含む一時的な XML ファイルを作成します。

    必須パラメーターの詳細は、「パラメーター」を参照してください。

  2. ストレージプールを作成します。

    virsh pool-define コマンドを使用して、前の手順で作成した XML ファイルに基づいて永続ストレージプールを作成します。

    # virsh pool-define ~/guest_images.xml
      Pool defined from guest_images_fs
注記

virsh pool-define コマンドを実行したら、手順 1 で作成した XML ファイルを削除できます。

  1. ストレージプールのターゲットパスを定義します。

    virsh pool-build コマンドを使用して、フォーマット済みファイルシステムのストレージプール用のストレージプールターゲットパスを作成し、ストレージソースデバイスを初期化し、データのフォーマットを定義します。

    # virsh pool-build guest_images_fs
      Pool guest_images_fs built
    
    # ls -la /guest_images
      total 8
      drwx------.  2 root root 4096 May 31 19:38 .
      dr-xr-xr-x. 25 root root 4096 May 31 19:38 ..
  2. プールが作成されたことを確認します。

    virsh pool-list コマンドを使用して、プールが作成されたことを確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   no
  3. ストレージプールを起動します。

    virsh pool-start コマンドを使用して、ストレージプールをマウントします。

    # virsh pool-start guest_images_fs
      Pool guest_images_fs started
    注記

    virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。

  4. (必要に応じて) 自動起動をオンにします。

    デフォルトでは、virsh コマンドを使用して定義したストレージプールは、libvirtd が起動するたびに自動的に起動するようには設定されていません。virsh pool-autostart コマンドを使用して、ストレージプールが自動的に起動するように設定します。

    # virsh pool-autostart guest_images_fs
      Pool guest_images_fs marked as autostarted
  5. 自動起動 状態を確認します。

    virsh pool-list コマンドを使用して、自動起動 の状態を確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   yes
  6. ストレージプールを確認します。

    ストレージプールが正しく作成され、報告されたサイズが期待どおりで、状態が 実行中 と報告されたことを確認します。ファイルシステムのターゲットパスに lost+found ディレクトリーがあることを確認します。これは、デバイスがマウントされていることを示しています。

    # virsh pool-info guest_images_fs
      Name:           guest_images_fs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
    
    # mount | grep /guest_images
      /dev/sdc1 on /guest_images type ext4 (rw)
    
    # ls -la /guest_images
      total 24
      drwxr-xr-x.  3 root root  4096 May 31 19:47 .
      dr-xr-xr-x. 25 root root  4096 May 31 19:38 ..
      drwx------.  2 root root 16384 May 31 14:18 lost+found
11.2.2.3.2. ファイルシステムベースのストレージプールパラメーター

以下は、ディレクトリーベースのストレージプールおよび例に必要なパラメーターに関する情報です。

パラメーター

次の表は、ファイルシステムベースのストレージプールの XML ファイルに必要なパラメーターの一覧です。

表11.3 ファイルシステムベースのストレージプールパラメーター

説明XML

ストレージプールの種類

<pool type='fs'>

ストレージプールの名前

<name>name</name>

パーミッションを指定するパス。たとえば、/dev/sdc1 です。

<source>
   <device path=device_path />

ファイルシステムのタイプ (ext4 など)。

    <format type=fs_type />
</source>

ターゲットを指定するパス。ストレージプールに使用されるパスになります。

<target>
    <path>path-to-pool</path>
</target>

以下は、/dev/sdc1 パーティションに基づいたストレージプールに対する XML ファイルの例です。

<pool type='fs'>
  <name>guest_images_fs</name>
  <source>
    <device path='/dev/sdc1'/>
    <format type='auto'/>
  </source>
  <target>
    <path>/guest_images</path>
  </target>
</pool>

11.2.2.4. CLI で仮想マシンの GlusterFS ストレージの作成および割り当て

以下は、ディレクトリーベースのストレージプールおよびストレージボリュームの作成と、仮想マシンへのボリュームの割り当てに関する情報を提供します。

11.2.2.4.1. CLI で GlusterFS ベースのストレージプールの作成

GlusterFS は、ユーザー空間のファイルシステム (FUSE) を使用するユーザー空間のファイルシステムです。ここでは、GlusterFS ベースのストレージプールを作成する手順を説明します。

前提条件

  • GlusterFS ベースのストレージプールをホストに作成する前に、Gluster サーバーを準備する必要があります。

    1. 次のコマンドを使用してそのステータスを一覧表示して、Gluster サーバーの IP アドレスを取得します。

      # gluster volume status
      Status of volume: gluster-vol1
      Gluster process                           Port	Online	Pid
      ------------------------------------------------------------
      Brick 222.111.222.111:/gluster-vol1       49155	  Y    18634
      
      Task Status of Volume gluster-vol1
      ------------------------------------------------------------
      There are no active volume tasks
    2. glusterfs-fuse パッケージがインストールされていない場合はインストールします。
    3. virt_use_fusefs ブール値が有効になっていない場合は有効にします。有効になっていることを確認します。

      # setsebool virt_use_fusefs on
      # getsebool virt_use_fusefs
      virt_use_fusefs --> on

必要なパッケージがインストールされ、有効になっていることを確認したら、引き続きストレージプールを作成します。

手順

  1. XML ファイルでストレージプールを定義します。

    新しいデバイスに必要なストレージプールパラメーターを含む一時的な XML ファイルを作成します。

    必須パラメーターの詳細は、「パラメーター」を参照してください。

  2. ストレージプールを作成します。

    virsh pool-define コマンドを使用して、前の手順で作成した XML ファイルに基づいて永続ストレージプールを作成します。

    # virsh pool-define ~/guest_images.xml
      Pool defined from guest_images_fs

virsh pool-define コマンドを実行したら、手順 1 で作成した XML ファイルを削除できます。

  1. ストレージプールのターゲットパスを定義します。

    virsh pool-build コマンドを使用して、フォーマット済みファイルシステムのストレージプール用のストレージプールターゲットパスを作成し、ストレージソースデバイスを初期化し、データのフォーマットを定義します。

    # virsh pool-build guest_images_fs
      Pool guest_images_fs built
    
    # ls -la /guest_images
      total 8
      drwx------.  2 root root 4096 May 31 19:38 .
      dr-xr-xr-x. 25 root root 4096 May 31 19:38 ..
    注記

    ターゲットパスの構築は、ディスクベース、ファイルシステムベース、論理ストレージプールにのみ必要です。libvirt は、overwrite オプションが指定されている場合を除き、ソースストレージデバイスのデータフォーマットが、選択したストレージプールタイプと異なることを検出すると、ビルドに失敗します。

  2. プールが作成されたことを確認します。

    virsh pool-list コマンドを使用して、プールが作成されたことを確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   no
  3. ストレージプールを起動します。

    virsh pool-start コマンドを使用して、ストレージプールをマウントします。

    # virsh pool-start guest_images_fs
      Pool guest_images_fs started
    注記

    virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。

  4. (必要に応じて) 自動起動をオンにします。

    デフォルトでは、virsh コマンドを使用して定義したストレージプールは、libvirtd が起動するたびに自動的に起動するようには設定されていません。virsh pool-autostart コマンドを使用して、ストレージプールが自動的に起動するように設定します。

    # virsh pool-autostart guest_images_fs
      Pool guest_images_fs marked as autostarted
  5. 自動起動 状態を確認します。

    virsh pool-list コマンドを使用して、自動起動 の状態を確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   yes
  6. ストレージプールを確認します。

    ストレージプールが正しく作成され、報告されたサイズが期待どおりで、状態が 実行中 と報告されたことを確認します。ファイルシステムのターゲットパスに lost+found ディレクトリーがあることを確認します。これは、デバイスがマウントされていることを示しています。

    # virsh pool-info guest_images_fs
      Name:           guest_images_fs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
    
    # mount | grep /guest_images
      /dev/sdc1 on /guest_images type ext4 (rw)
    
    # ls -la /guest_images
      total 24
      drwxr-xr-x.  3 root root  4096 May 31 19:47 .
      dr-xr-xr-x. 25 root root  4096 May 31 19:38 ..
      drwx------.  2 root root 16384 May 31 14:18 lost+found
11.2.2.4.2. GlusterFS ベースのストレージプールパラメーター

以下は、GlusterFS ベースのストレージプールと例に必要なパラメーターに関する情報です。

パラメーター

以下の表は、GlusterFS ベースのストレージプールの XML ファイルに必要なパラメーターの一覧です。

表11.4 GlusterFS ベースのストレージプールパラメーター

説明XML

ストレージプールの種類

<pool type='gluster'>

ストレージプールの名前

<name>name</name>

Gluster サーバーのホスト名または IP アドレス

<source>
   <name=gluster-name />

Gluster サーバーの名前

    <name>name</name>

ストレージプールに使用される Gluster サーバーのパス。

    <dir path=gluster-path />
</source>

以下は、111.222.111.222 の Gluster ファイルシステムに基づいたストレージプールに対する XML ファイルの例です。

<pool type='gluster'>
  <name>Gluster_pool</name>
  <source>
    <host name='111.222.111.222'/>
    <dir path='/'/>
    <name>gluster-vol1</name>
  </source>
</pool>

11.2.2.5. CLI で仮想マシンに iSCSI ベースのストレージを作成して割り当て

以下は、iSCSI ベースのストレージプールおよびストレージボリュームの作成、libvirt シークレットを使用した iSCSI ベースのストレージプールのセキュリティー保護、および仮想マシンへのボリュームの割り当てに関する情報を提供します。

推奨情報

iSCSI (Internet Small Computer System Interface) は、ストレージデバイスを共有するネットワークプロトコルです。iSCSI は、IP 層で SCSI 命令を使用してイニシエーター (ストレージクライアント) をターゲット (ストレージサーバー) に接続します。

iSCSI ベースのデバイスを使用して仮想マシンを保存することで、iSCSI をブロックストレージデバイスとして使用するなど、より柔軟なストレージオプションが可能になります。iSCSI デバイスは、Linux-IO (LIO) ターゲットを使用します。これは、Linux 用のマルチプロトコル SCSI ターゲットです。LIO は、iSCSI に加えて、FCoE (Fibre Channel and Fibre Channel over Ethernet) にも対応します。

iSCSI ストレージプールへのアクセスを防ぐ必要がある場合は、libvirt シークレット を使用してセキュリティーを保護できます。

前提条件
  • iSCSI ベースのストレージプールを作成する前に、iSCSI ターゲットを作成する必要があります。iSCSI ターゲットを作成するには、targetcli パッケージを使用して作成します。このパッケージは、ソフトウェアで強化した iSCSI ターゲットを作成するコマンドセットを提供します。

    iSCSI ターゲットの作成に関する詳細および手順は、『Red Hat Enterprise Linuxストレージ管理ガイド』 を参照してください。

11.2.2.5.1. CLI で iSCSI ベースのストレージプールの作成

ここでは、iSCSI ベースのストレージプールを作成する手順を説明します。

手順

  1. XML ファイルでストレージプールを定義します。

    新しいデバイスに必要なストレージプールパラメーターを含む一時的な XML ファイルを作成します。

    必須パラメーターの詳細は、「パラメーター」を参照してください。

  2. ストレージプールを作成します。

    virsh pool-define コマンドを使用して、前の手順で作成した XML ファイルに基づいて永続ストレージプールを作成します。

    # virsh pool-define ~/guest_images.xml
      Pool defined from guest_images_fs

virsh pool-define コマンドを実行したら、手順 1 で作成した XML ファイルを削除できます。

  1. プールが作成されたことを確認します。

    virsh pool-list コマンドを使用して、プールが作成されたことを確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   no
  2. ストレージプールを起動します。

    virsh pool-start コマンドを使用して、ストレージプールをマウントします。

    # virsh pool-start guest_images_fs
      Pool guest_images_fs started
    注記

    virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。

  3. (必要に応じて) 自動起動をオンにします。

    デフォルトでは、virsh コマンドを使用して定義したストレージプールは、libvirtd が起動するたびに自動的に起動するようには設定されていません。virsh pool-autostart コマンドを使用して、ストレージプールが自動的に起動するように設定します。

    # virsh pool-autostart guest_images_fs
      Pool guest_images_fs marked as autostarted
  4. 自動起動 状態を確認します。

    virsh pool-list コマンドを使用して、自動起動 の状態を確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   yes
  5. ストレージプールを確認します。

    ストレージプールが正しく作成され、報告されたサイズが期待どおりで、状態が 実行中 と報告されたことを確認します。ファイルシステムのターゲットパスに lost+found ディレクトリーがあることを確認します。これは、デバイスがマウントされていることを示しています。

    # virsh pool-info guest_images_fs
      Name:           guest_images_fs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
    
    # mount | grep /guest_images
      /dev/sdc1 on /guest_images type ext4 (rw)
    
    # ls -la /guest_images
      total 24
      drwxr-xr-x.  3 root root  4096 May 31 19:47 .
      dr-xr-xr-x. 25 root root  4096 May 31 19:38 ..
      drwx------.  2 root root 16384 May 31 14:18 lost+found
11.2.2.5.2. iSCSI ベースのストレージプールパラメーター

以下は、iSCSI ベースのストレージプールと例に必要なパラメーターに関する情報です。

パラメーター

以下の表は、iSCSI ベースのストレージプールの XML ファイルに必要なパラメーターの一覧です。

表11.5 iSCSI ベースのストレージプールパラメーター

説明XML

ストレージプールの種類

<pool type='iscsi'>

ストレージプールの名前

<name>name</name>

ホストの名前

<source>
  <host name=hostname />

iSCSI IQN

    <device path= iSCSI_IQN />
</source>

ターゲットを指定するパス。ストレージプールに使用されるパスになります。

<target>
   <path>/dev/disk/by-path</path>
</target>

(必要に応じて) iSCSI イニシエーターの IQN。これは、ACL が LUN を特定のイニシエーターに制限する場合に限り必要です。

<initiator>
   <iqn name='initiator0' />
</initiator>

注記

iSCSI イニシエーターの IQN は、iscsi コマンドの virsh find-storage-pool-sources-as を使用して指定できます。

以下は、指定した iSCSI に基づいたストレージプールに対する XML ファイルの例です。

<pool type='iscsi'>
  <name>iSCSI_pool</name>
  <source>
    <host name='server1.example.com'/>
    <device path='iqn.2010-05.com.example.server1:iscsirhel7guest'/>
  </source>
  <target>
    <path>/dev/disk/by-path</path>
  </target>
</pool>
11.2.2.5.3. libvirt シークレットを使用した iSCSI ストレージプールのセキュリティー保護

ユーザー名とパスワードのパラメーターは、iSCSI ストレージプールを保護するため、virsh で設定できます。これは、プールを定義する前または後に設定できますが、認証設定を有効にするにはプールを起動する必要があります。

ここでは、libvirt シークレットを使用して、iSCSI ベースのストレージプールのセキュリティーを保護する手順を説明します。

注記

この手順は、iSCSI ターゲットの作成時に user_ID および password が定義される場合に必要です。

手順

  1. チャレンジハンドシェイク認証プロトコル (CHAP) のユーザー名を使用して、libvirt シークレットファイルを作成します。以下に例を示します。

    <secret ephemeral='no' private='yes'>
        <description>Passphrase for the iSCSI example.com server</description>
        <usage type='iscsi'>
            <target>iscsirhel7secret</target>
        </usage>
    </secret>
  2. virsh secret-define コマンドを使用して、libvirt シークレットを定義します。

    # virsh secret-define secret.xml

  3. virsh secret-list コマンドで UUID を確認します。

    # virsh secret-list
    UUID                                  Usage
    -------------------------------------------------------------------
    2d7891af-20be-4e5e-af83-190e8a922360  iscsi iscsirhel7secret
  4. virsh secret-set-value コマンドを使用して、前の手順の出力の UUID に、シークレットを割り当てます。これにより、CHAP ユーザー名とパスワードが、libvirt が制御するシークレット一覧にあることが保証されます。以下に例を示します。

    # MYSECRET=`printf *%s "password123" | base64`
    # virsh secret-set-value 2d7891af-20be-4e5e-af83-190e8a922360 $MYSECRET
  5. virsh edit コマンドを使用してストレージプールの XML ファイルに認証エントリーを追加し、<auth> 要素を追加して認証タイプユーザー名、および シークレットの使用方法 を指定します。

    以下に例を示します。

    <pool type='iscsi'>
      <name>iscsirhel7pool</name>
        <source>
           <host name='192.168.122.1'/>
           <device path='iqn.2010-05.com.example.server1:iscsirhel7guest'/>
           <auth type='chap' username='redhat'>
              <secret usage='iscsirhel7secret'/>
           </auth>
        </source>
      <target>
        <path>/dev/disk/by-path</path>
      </target>
    </pool>
    注記

    サブ要素 <auth> は仮想マシンの <pool> および <disk> XML 要素内の異なる場所に存在します。<pool> の場合は、<auth><source> 要素に指定されます。認証は一部のプールソース (iSCSI および RBD) のプロパティーであるため、これはプールソースの検索場所を説明する要素となります。ドメインのサブ要素である <disk> の場合、iSCSI ディスクまたは RBD ディスクに対する認証は、ディスクのプロパティーです。また、ディスクのサブ要素 <auth> は、ストレージプールのサブ要素とは異なります。

    <auth username='redhat'>
      <secret type='iscsi' usage='iscsirhel7secret'/>
    </auth>
  6. 変更を有効にするには、ストレージプールをアクティベートする必要があります。プールがすでに起動している場合は、ストレージプールを停止して再起動します。

    # virsh pool-destroy iscsirhel7pool

    # virsh pool-start iscsirhel7pool

11.2.2.6. CLI で仮想マシンに LVM ベースのストレージを作成して割り当て

以下は、LVM ベースのストレージプールおよびストレージボリュームの作成と、仮想マシンへのボリュームの割り当てに関する情報を提供します。

11.2.2.6.1. CLI で LVM ベースのストレージプールの作成

ここでは、LVM ベースのストレージプールを作成する手順を説明します。

推奨情報

LVM ベースのストレージプールを作成する前に、以下の点に注意してください。

  • LVM ベースのストレージプールは、LVM の柔軟性を完全には提供しません。
  • libvirt は、シン論理ボリュームに対応しますが、シンストレージプールの機能は提供しません。
  • LVM ベースのストレージプールは、ボリュームグループです。Logical Volume Manager コマンド、または virsh コマンドを使用して、ボリュームグループを作成できます。virsh インターフェースを使用してボリュームグループを管理する場合は、virsh コマンドを使用してボリュームグループを作成します。

    ボリュームグループの詳細は、『Red Hat Enterprise Linux 論理ボリュームマネージャ管理ガイド』を参照してください。

  • LVM ベースのストレージプールには、完全なディスクパーティションが必要です。この手順で新しいパーティションまたはデバイスをアクティベートすると、パーティションはフォーマットされ、すべてのデータが削除されます。ホストの既存のボリュームグループ (VG) を使用すると、何も消去されません。ストレージデバイスのバックアップは、開始前に行うことが推奨されます。

手順

  1. XML ファイルでストレージプールを定義します。

    新しいデバイスに必要なストレージプールパラメーターを含む一時的な XML ファイルを作成します。

    必須パラメーターの詳細は、「パラメーター」を参照してください。

  2. ストレージプールを作成します。

    virsh pool-define コマンドを使用して、前の手順で作成した XML ファイルに基づいて永続ストレージプールを作成します。

    # virsh pool-define ~/guest_images.xml
      Pool defined from guest_images_fs
注記

virsh pool-define コマンドを実行したら、手順 1 で作成した XML ファイルを削除できます。

  1. プールが作成されたことを確認します。

    virsh pool-list コマンドを使用して、プールが作成されたことを確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   no
  2. ストレージプールを起動します。

    virsh pool-start コマンドを使用して、ストレージプールをマウントします。

    # virsh pool-start guest_images_fs
      Pool guest_images_fs started
    注記

    virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。

  3. (必要に応じて) 自動起動をオンにします。

    デフォルトでは、virsh コマンドを使用して定義したストレージプールは、libvirtd が起動するたびに自動的に起動するようには設定されていません。virsh pool-autostart コマンドを使用して、ストレージプールが自動的に起動するように設定します。

    # virsh pool-autostart guest_images_fs
      Pool guest_images_fs marked as autostarted
  4. 自動起動 状態を確認します。

    virsh pool-list コマンドを使用して、自動起動 の状態を確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   yes
  5. ストレージプールを確認します。

    ストレージプールが正しく作成され、報告されたサイズが期待どおりで、状態が 実行中 と報告されたことを確認します。ファイルシステムのターゲットパスに lost+found ディレクトリーがあることを確認します。これは、デバイスがマウントされていることを示しています。

    # virsh pool-info guest_images_fs
      Name:           guest_images_fs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
    
    # mount | grep /guest_images
      /dev/sdc1 on /guest_images type ext4 (rw)
    
    # ls -la /guest_images
      total 24
      drwxr-xr-x.  3 root root  4096 May 31 19:47 .
      dr-xr-xr-x. 25 root root  4096 May 31 19:38 ..
      drwx------.  2 root root 16384 May 31 14:18 lost+found
11.2.2.6.2. LVM ベースのストレージプールパラメーター

以下は、LVM ベースのストレージプールと例に必要なパラメーターに関する情報です。

パラメーター

以下の表は、LVM ベースのストレージプールの XML ファイルに必要なパラメーターの一覧です。

表11.6 LVM ベースのストレージプールパラメーター

説明XML

ストレージプールの種類

<pool type='logical'>

ストレージプールの名前

<name>name</name>

ストレージプールのデバイスのパス

<source>
   <device path='device_path' />`

ボリュームグループの名前

    <name>VG-name</name>

仮想グループの形式

    <format type='lvm2' />
</source>

ターゲットパス

<target>
   <path=target_path />
</target>

注記

論理ボリュームグループが複数のディスクパーティションで作成されている場合は、複数のソースデバイスが一覧表示されている可能性があります。以下に例を示します。

<source>
  <device path='/dev/sda1'/>
  <device path='/dev/sdb3'/>
  <device path='/dev/sdc2'/>
  ...
</source>

以下は、指定した LVM に基づいたストレージプールに対する XML ファイルの例です。

<pool type='logical'>
  <name>guest_images_lvm</name>
  <source>
    <device path='/dev/sdc'/>
    <name>libvirt_lvm</name>
    <format type='lvm2'/>
  </source>
  <target>
    <path>/dev/libvirt_lvm</path>
  </target>
</pool>

11.2.2.7. CLI で仮想マシンにネットワークベースのストレージを作成して割り当て

ここでは、ネットワークベースのストレージプールおよびストレージボリュームの作成と、仮想マシンのボリュームの割り当てに関する情報を提供します。

前提条件

  • NFS (Network File System) ベースのストレージプールを作成するには、ホストマシンで NFS サーバーを使用するように設定しておく必要があります。NFS の詳細は、『Red Hat Enterprise Linux ストレージ管理ガイド』を参照してください。
  • 使用するファイルシステムに必要なユーティリティーがホストにインストールされていることを確認します。たとえば、共通インターネットファイルシステム (CIFS) の場合は cifs-utils、GlusterFS の場合は glusterfs.fuse です。
11.2.2.7.1. CLI でネットワークベースのストレージプールの作成

ここでは、ネットワークベースのストレージプールを作成する手順を説明します。

手順

  1. XML ファイルでストレージプールを定義します。

    新しいデバイスに必要なストレージプールパラメーターを含む一時的な XML ファイルを作成します。

    必須パラメーターの詳細は、「パラメーター」を参照してください。

  2. ストレージプールを作成します。

    virsh pool-define コマンドを使用して、前の手順で作成した XML ファイルに基づいて永続ストレージプールを作成します。

    # virsh pool-define ~/guest_images.xml
      Pool defined from guest_images_fs
注記

virsh pool-define コマンドを実行したら、手順 1 で作成した XML ファイルを削除できます。

  1. ストレージプールのターゲットパスを定義します。

    virsh pool-build コマンドを使用して、フォーマット済みファイルシステムのストレージプール用のストレージプールターゲットパスを作成し、ストレージソースデバイスを初期化し、データのフォーマットを定義します。

    # virsh pool-build guest_images_fs
      Pool guest_images_fs built
    
    # ls -la /guest_images
      total 8
      drwx------.  2 root root 4096 May 31 19:38 .
      dr-xr-xr-x. 25 root root 4096 May 31 19:38 ..
  2. プールが作成されたことを確認します。

    virsh pool-list コマンドを使用して、プールが作成されたことを確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   no
  3. ストレージプールを起動します。

    virsh pool-start コマンドを使用して、ストレージプールをマウントします。

    # virsh pool-start guest_images_fs
      Pool guest_images_fs started
    注記

    virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。

  4. (必要に応じて) 自動起動をオンにします。

    デフォルトでは、virsh コマンドを使用して定義したストレージプールは、libvirtd が起動するたびに自動的に起動するようには設定されていません。virsh pool-autostart コマンドを使用して、ストレージプールが自動的に起動するように設定します。

    # virsh pool-autostart guest_images_fs
      Pool guest_images_fs marked as autostarted
  5. 自動起動 状態を確認します。

    virsh pool-list コマンドを使用して、自動起動 の状態を確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   yes
  6. ストレージプールを確認します。

    ストレージプールが正しく作成され、報告されたサイズが期待どおりで、状態が 実行中 と報告されたことを確認します。ファイルシステムのターゲットパスに lost+found ディレクトリーがあることを確認します。これは、デバイスがマウントされていることを示しています。

    # virsh pool-info guest_images_fs
      Name:           guest_images_fs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
    
    # mount | grep /guest_images
      /dev/sdc1 on /guest_images type ext4 (rw)
    
    # ls -la /guest_images
      total 24
      drwxr-xr-x.  3 root root  4096 May 31 19:47 .
      dr-xr-xr-x. 25 root root  4096 May 31 19:38 ..
      drwx------.  2 root root 16384 May 31 14:18 lost+found
11.2.2.7.2. NFS ベースのストレージプールパラメーター

以下は、NFS ベースのストレージプールと例に必要なパラメーターに関する情報です。

パラメーター

以下の表は、NFS ベースのストレージプールの XML ファイルに必要なパラメーターの一覧です。

表11.7 NFS ベースのストレージプールパラメーター

説明XML

ストレージプールの種類

<pool type='netfs'>

ストレージプールの名前

<name>name</name>

マウントポイントがあるネットワークサーバーのホスト名。これは、ホスト名または IP アドレスになります。

<source>
   <host name=hostname
/>

ストレージプールの形式

次のいずれかになります。

    <format type='nfs' />

    <format type='glusterfs' />

    <format type='cifs' />

ネットワークサーバーで使用されるディレクトリー

    <dir path=source_path />
</source>

ターゲットを指定するパス。ストレージプールに使用されるパスになります。

<target>
   <path>target_path</path>
</target>

以下は、NFS サーバー file_server/home/net_mount ディレクトリーでのストレージプールの XML ファイルの例です。

<pool type='netfs'>
  <name>nfspool</name>
  <source>
    <host name='file_server'/>
    <format type='nfs'/>
    <dir path='/home/net_mount'/>
  </source>
  <target>
    <path>/var/lib/libvirt/images/nfspool</path>
  </target>
</pool>

11.2.2.8. CLI で仮想マシンに vHBA ベースのストレージを作成して割り当て

ここでは、vHBA ベースのストレージプールおよびストレージボリュームの作成と、仮想マシンのボリュームの割り当てを説明します。

11.2.2.8.1. 推奨情報

N_Port ID Virtualization (NPIV) は、1 つの物理ファイバーチャンネルのホストバスアダプター (HBA) の共有を可能にするソフトウェアテクノロジーです。これにより、複数の仮想マシンが複数の物理ホストから同じストレージを認識できるため、ストレージの移行パスが容易になります。そのため、正しいストレージパスが指定されていれば、移行を使用してストレージを作成またはコピーする必要はありません。

仮想化では、仮想ホストバスアダプター (vHBA) が、仮想マシンの論理ユニット番号 (LUN) を制御します。複数の仮想マシン間でファイバーチャネルデバイスパスを共有するホストには、仮想マシンごとに vHBA を作成する必要があります。1 つの vHBA を、複数の仮想マシンで使用することはできません。

NPIV の各 vHBA は、その親 HBA と、独自の World Wide Node Name (WWNN) および World Wide Port Name (WWPN) で識別されます。ストレージのパスは、WWNN および WWPN の値で決定します。親 HBA は、scsi_host# または WWNN/WWPN ペアとして定義できます。

注記

親 HBA が scsi_host# として定義され、ハードウェアがホストマシンに追加されている場合、scsi_host# の割り当ては変更する可能性があります。したがって、WWNN/WWPN のペアを使用して親 HBA を定義することが推奨されます。

これは、vHBA 設定を保持するため、vHBA に基づいて libvirt ストレージを定義することが推奨されます。

libvirt ストレージプールを使用すると、主に以下の利点があります。

  • libvirt コードは、virsh コマンド出力から LUN のパスを簡単に検索できます。
  • 仮想マシンの移行には、ターゲットマシンで同じ vHBA 名を持つストレージプールの定義と起動のみが必要です。これを行うには、仮想マシンの XML 設定で、vHBA LUN、libvirt ストレージプール、およびボリューム名を指定する必要があります。
注記

vHBA を作成する前に、ホストの LUN でストレージアレイ (SAN) 側のゾーンを設定して、仮想マシン間の分離を提供し、データの破損を防ぐことが推奨されます。

永続的な vHBA 構成を作成するには、最初に libvirt の scsi ストレージプールの XML ファイルを作成します。XML ファイルの詳細は、「vHBA の作成」を参照してください。同じ物理 HBA 上のストレージプールを使用する 1 つの vHBA を作成する場合は、システムの /dev/disk/by-{path|id|uuid|label} のような場所など、<path> 値に安定した場所を使用することが推奨されます。

同じ物理 HBA 上でストレージプールを使用する複数の vHBA を作成する場合は、<path> フィールドの値を /dev/ のみにする必要があります。それ以外の場合は、ストレージプールボリュームが 1 つの vHBA からしか確認できず、NPIV 構成で、ホストのデバイスを複数の仮想マシンに公開することができません。

<path> と、<target> の要素の詳細は、アップストリームの libvirt ドキュメント を参照してください。

前提条件

vHBA を作成して、SCSI デバイスを使用して vHBA ベースのストレージプールを作成できるようにしてある。

11.2.2.8.2. vHBA の作成

ここでは、仮想ホストバスアダプター (vHBA) の作成方法を説明します。

手順

  1. virsh nodedev-list --cap vports コマンドを使用して、ホストシステムの HBA を見つけます。

    以下の例は、vHBA に対応する HBA が 2 つ搭載されているホストを示しています。

    # virsh nodedev-list --cap vports
    scsi_host3
    scsi_host4
  2. virsh nodedev-dumpxml HBA_device コマンドを使用して、HBA の詳細を表示します。

    # virsh nodedev-dumpxml scsi_host3

    コマンドの出力には、vHBA の作成に使用される <name><wwnn>、および <wwpn> フィールドが一覧表示されます。<max_vports> は、サポートされる vHBA の最大数を示します。以下に例を示します。

    <device>
      <name>scsi_host3</name>
      <path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3</path>
      <parent>pci_0000_10_00_0</parent>
      <capability type='scsi_host'>
        <host>3</host>
        <unique_id>0</unique_id>
        <capability type='fc_host'>
          <wwnn>20000000c9848140</wwnn>
          <wwpn>10000000c9848140</wwpn>
          <fabric_wwn>2002000573de9a81</fabric_wwn>
        </capability>
        <capability type='vport_ops'>
          <max_vports>127</max_vports>
          <vports>0</vports>
        </capability>
      </capability>
    </device>

    この例では、<max_vports> 値は、HBA 構成で使用できる合計 127 の仮想ポートがあることを示します。<vports> の値は、現在使用中の仮想ポートの数を示します。この値は、vHBA の作成後に更新されます。

  3. vHBA ホスト用に、以下のいずれかの XML ファイルを作成します。この例では、ファイルの名前は vhba_host3.xml です。

    次の例では、scsi_host3 を使用して親 vHBA を説明します。

    <device>
      <parent>scsi_host3</parent>
      <capability type='scsi_host'>
        <capability type='fc_host'>
        </capability>
      </capability>
    </device>

    次の例では、WWNN/WWPN のペアを使用して親 vHBA を説明します。

    <device>
      <name>vhba</name>
      <parent wwnn='20000000c9848140' wwpn='10000000c9848140'/>
      <capability type='scsi_host'>
        <capability type='fc_host'>
        </capability>
      </capability>
    </device>
    注記

    WWNN および WWPN の値は、前の手順で確認した HBA の詳細の値と一致する必要があります。

    <parent> フィールドは、この vHBA デバイスに関連付ける HBA デバイスを指定します。<device> タグの詳細は、ホスト用の新しい vHBA デバイスを作成するために、次の手順で使用されます。nodedev の XML 形式の詳細は、 libvirt アップストリームページ を参照してください。

    注記

    virsh コマンドでは、parent_wwnn 属性、parent_wwpn 属性、または parent_fabric_wwn 属性を定義する方法が提供されません。

  4. virsh nodev-create コマンドを使用して、前の手順で作成した XML ファイルに基づいて VHBA を作成します。

    # virsh nodedev-create vhba_host3
    Node device scsi_host5 created from vhba_host3.xml
  5. virsh nodedev-dumpxml コマンドで、新しい vHBA の詳細 (scsi_host5) を確認します。

    # virsh nodedev-dumpxml scsi_host5
    <device>
      <name>scsi_host5</name>
      <path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3/vport-3:0-0/host5</path>
      <parent>scsi_host3</parent>
      <capability type='scsi_host'>
        <host>5</host>
        <unique_id>2</unique_id>
        <capability type='fc_host'>
          <wwnn>5001a4a93526d0a1</wwnn>
          <wwpn>5001a4ace3ee047d</wwpn>
          <fabric_wwn>2002000573de9a81</fabric_wwn>
        </capability>
      </capability>
    </device>
11.2.2.8.3. CLI で vHBA ベースのストレージプールの作成

ここでは、vHBA ベースのストレージプールを作成する手順を説明します。

前提条件

手順

  1. XML ファイルでストレージプールを定義します。

    新しいデバイスに必要なストレージプールパラメーターを含む一時的な XML ファイルを作成します。

    必須パラメーターの詳細は、「パラメーター」を参照してください。

  2. ストレージプールを作成します。

    virsh pool-define コマンドを使用して、前の手順で作成した XML ファイルに基づいて永続ストレージプールを作成します。

    # virsh pool-define ~/guest_images.xml
      Pool defined from guest_images_fs

virsh pool-define コマンドを実行したら、手順 1 で作成した XML ファイルを削除できます。

  1. プールが作成されたことを確認します。

    virsh pool-list コマンドを使用して、プールが作成されたことを確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   no
  2. ストレージプールを起動します。

    virsh pool-start コマンドを使用して、ストレージプールをマウントします。

    # virsh pool-start guest_images_fs
      Pool guest_images_fs started
    注記

    virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。

  3. (必要に応じて) 自動起動をオンにします。

    デフォルトでは、virsh コマンドを使用して定義したストレージプールは、libvirtd が起動するたびに自動的に起動するようには設定されていません。virsh pool-autostart コマンドを使用して、ストレージプールが自動的に起動するように設定します。

    # virsh pool-autostart guest_images_fs
      Pool guest_images_fs marked as autostarted
  4. 自動起動 状態を確認します。

    virsh pool-list コマンドを使用して、自動起動 の状態を確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   yes
  5. ストレージプールを確認します。

    ストレージプールが正しく作成され、報告されたサイズが期待どおりで、状態が 実行中 と報告されたことを確認します。ファイルシステムのターゲットパスに lost+found ディレクトリーがあることを確認します。これは、デバイスがマウントされていることを示しています。

    # virsh pool-info guest_images_fs
      Name:           guest_images_fs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
    
    # mount | grep /guest_images
      /dev/sdc1 on /guest_images type ext4 (rw)
    
    # ls -la /guest_images
      total 24
      drwxr-xr-x.  3 root root  4096 May 31 19:47 .
      dr-xr-xr-x. 25 root root  4096 May 31 19:38 ..
      drwx------.  2 root root 16384 May 31 14:18 lost+found
11.2.2.8.4. vHBA ベースのストレージプールパラメーター

以下は、vHBA ベースのストレージプールと例に必要なパラメーターに関する情報です。

パラメーター

以下の表は、vHBA ベースのストレージプールの XML ファイルに必要なパラメーターの一覧です。

表11.8 vHBA ベースのストレージプールパラメーター

説明XML

ストレージプールの種類

<pool type='scsi'>

ストレージプールの名前

<name>name</name>

vHBA の識別子。parent 属性はオプションです。

<source>
   <adapter type='fc_host'
   [parent=parent_scsi_device]
   wwnn='WWNN'
   wwpn='WWPN' />
</source>

ターゲットパス。ストレージプールに使用されるパスになります。

<target>
   <path=target_path />
</target>

重要

<path> フィールドが /dev/ の場合、libvirt は、ボリュームデバイスパスで一意の短いデバイスパスを生成します。たとえば、/dev/sdc です。それ以外の場合は、物理ホストパスが使用されます。たとえば、/dev/disk/by-path/pci-0000:10:00.0-fc-0x5006016044602198-lun-0 などです。一意の短いデバイスパスを使用すると、複数のストレージプールで、同じボリュームを複数の仮想マシン (VM) に一覧表示できます。物理ホストのパスを複数の仮想マシンで使用すると、デバイスタイプが重複していることを示す警告が発生することがあります。

注記

parent 属性は、パスを変更して NPIV LUN の使用元となる物理 HBA の親を識別する <adapter> フィールドで使用できます。scsi_hostN フィールドは、vports 属性および max_vports 属性と合わせて、親 ID を作成します。parentparent_wwnnparent_wwpn、または parent_fabric_wwn の属性は、ホストの再起動後に同じ HBA が使用されることを保証するさまざまなレベルを提供します。

  • を指定しないと、libvirt は、NPIV に対応する最初の scsi_hostN アダプターを使用します。
  • のみを指定し、設定に SCSI ホストアダプターを追加すると、問題が発生する可能性があります。
  • parent_wwnn または parent_wwpn を指定すると、ホストの再起動後に同じ HBA が使用されます。
  • ホストの再起動後、parent_fabric_wwn を使用すると、scsi_hostN が使用されたかどうかにかかわらず、同じファブリックの HBA が選択されます。

以下は、vHBA ベースのストレージプールの XML ファイルの例です。

以下は、HBA にある唯一のストレージプールの例です。

<pool type='scsi'>
  <name>vhbapool_host3</name>
  <source>
    <adapter type='fc_host' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee047d'/>
  </source>
  <target>
    <path>/dev/disk/by-path</path>
  </target>
</pool>

次に示すのは、1 つの vHBA を使用し、parent 属性を使用して、SCSI ホストデバイスを識別する複数のストレージプールの 1 つの例です。

<pool type='scsi'>
  <name>vhbapool_host3</name>
  <source>
    <adapter type='fc_host' parent='scsi_host3' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee047d'/>
  </source>
  <target>
    <path>/dev/disk/by-path</path>
  </target>
</pool>

11.2.2.9. CLI でストレージボリュームの作成および割り当て

ここでは、CLI でストレージプールからストレージボリュームを作成し、仮想マシンにストレージボリュームを割り当てる方法を説明します。手順は、どのタイプのストレージプールでも同じです。

前提条件

  • 空き領域が割り当てられていないホストのストレージプール
11.2.2.9.1. 手順
  1. XML ファイルでストレージボリュームを定義します。

    ストレージボリュームのパラメーターを含む一時的な XML ファイルを作成します。

    以下は、必要なストレージボリュームパラメーターの一覧です。

    • 名前 - ストレージプールの名前。
    • 割り当て - ストレージボリュームのストレージ割り当ての合計数。
    • 容量 - ストレージボリュームの論理容量。ボリュームがスパースの場合、この値は 割り当て の値とは異なります。
    • ターゲット - ホストシステムのストレージボリュームのパス、さらに任意でそのパーミッションとラベル。

      以下は、ストレージボリューム定義の XML ファイルの例です。この例では、ファイルは ~/guest_volume.xml に保存されます。

        <volume>
          <name>volume1</name>
          <allocation>0</allocation>
          <capacity>20</capacity>
          <target>
            <path>/var/lib/virt/images/sparse.img</path>
          </target>
        </volume>
  2. ストレージボリュームを作成して割り当てます。

    virsh vol-create コマンドおよび virsh vol-create-as コマンドは、ほとんどのストレージプールのタイプからストレージボリュームを作成するために使用されます。

    以下は、virsh vol-create コマンドおよび virsh vol-create-as コマンドに対応しないストレージタイプと、そのタイプとともに使用してストレージボリュームを作成するメソッドの一覧です。

    • GlusterFSベース - qemu-img コマンドを使用して、ストレージボリュームを作成します。
    • iSCSI ベース - iSCSI サーバーに事前に iSCSI LUN を準備します。
    • マルチパスベース - multipathd コマンドを使用して、マルチパスを準備または管理します。
    • vHBA ベース - ファイバーチャンネルカードを事前に準備します。

    virsh vol-create コマンドを使用して、XML ファイルに基づいてストレージボリュームを作成して割り当てます。virsh vol-create コマンドでストレージボリュームを割り当てる仮想マシンを指定します。

    # virsh vol-create guest_images_dir ~/guest_volume.xml
      Vol volume1 created
    注記

    virsh vol-create コマンドを実行した後、手順 1 で作成した XML ファイルを削除できます。

    ストレージプールが GlusterFS ベース、マルチパスベース、および RBD ベースの場合は、以下の XML 形式を使用してストレージボリュームを記述し、ドメイン XML に追加します。

      <disk type='network' device='disk'>
        <driver name='qemu' type='raw'/>
        <source protocol='gluster' name='Volume1/Image'>
          <host name='example.org' port='6000'/>
        </source>
        <target dev='vda' bus='virtio'/>
        <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
      </disk>

    マルチパスベースのストレージプールの場合は、以下の XML 形式を使用してストレージボリュームを説明し、ドメイン XML に追加します。

    <disk type='block' device='disk'>
    <driver name='qemu' type='raw'/>
    <source dev='/dev/mapper/mpatha' />
    <target dev='sdc' bus='scsi'/>
    </disk>

    RBD ベースのストレージプールの場合は、以下の XML 形式を使用してストレージボリュームを記述し、ドメイン XML に追加します。

      <disk type='network' device='disk'>
        <driver name='qemu' type='raw'/>
        <source protocol='rbd' name='pool/image'>
          <host name='mon1.example.org' port='6321'/>
        </source>
        <target dev='vdc' bus='virtio'/>
      </disk>

11.2.3. CLI で仮想マシン用のストレージの削除

以下では、CLI でストレージプールおよびストレージボリュームを削除する方法を説明します。

11.2.3.1. CLI でストレージプールの削除

以下では、ストレージプールを削除する方法を説明します。

前提条件

  • 削除するストレージプールを使用するその他の仮想マシンに影響を及ぼさないようにするには、ストレージプールを停止して、使用されているリソースをすべて解放することが推奨されます。

手順

  1. virsh pool-list コマンドを使用して、定義済みストレージプールを一覧表示します。

    # virsh pool-list --all
    Name                 State      Autostart
    -------------------------------------------
    default              active     yes
    Downloads            active     yes
    RHEL8-Storage-Pool   active     yes
  2. virsh pool-destroy コマンドを使用して、削除するストレージプールを停止します。

    # virsh pool-destroy Downloads
    Pool Downloads destroyed
  3. (必要に応じて) ストレージプールの種類によっては、virsh pool-delete コマンドを使用して、ストレージプールが含まれるディレクトリーを削除できます。ストレージプールが含まれるディレクトリーを削除するには、そのディレクトリーが空である必要があります。

    # virsh pool-delete Downloads
    Pool Downloads deleted
  4. virsh pool-undefine コマンドを使用して、ストレージプールの定義を削除します。

    # virsh pool-undefine Downloads
    Pool Downloads has been undefined
  5. ストレージプールが削除されたことを確認します。

    # virsh pool-list --all
    Name                 State      Autostart
    -------------------------------------------
    default              active     yes
    RHEL8-Storage-Pool   active     yes

11.2.3.2. CLI でストレージボリュームの削除

以下では、CLI でストレージボリュームを削除する方法を説明します。

前提条件

  • 削除するストレージボリュームを使用する仮想マシンに影響を及ぼさないようにするには、これを使用してリソースを解放することが推奨されます。

手順

  1. virsh vol-list コマンドを使用して、ストレージプールの定義済みストレージボリュームを一覧表示します。このコマンドは、ストレージボリュームの名前またはパスを指定する必要があります。

    # virsh vol-list --pool RHEL8-Storage-Pool
     Name                 Path
    ---------------------------------------------------------------
     .bash_history        /home/VirtualMachines/.bash_history
     .bash_logout         /home/VirtualMachines/.bash_logout
     .bash_profile        /home/VirtualMachines/.bash_profile
     .bashrc              /home/VirtualMachines/.bashrc
     .git-prompt.sh       /home/VirtualMachines/.git-prompt.sh
     .gitconfig           /home/VirtualMachines/.gitconfig
     RHEL8_Volume.qcow2   /home/VirtualMachines/RHEL8_Volume.qcow2
  2. virsh vol-delete コマンドを使用してストレージボリュームを削除します。このコマンドは、ストレージボリュームの名前またはパスと、ストレージボリュームの抽象化の元となるストレージプールを指定する必要があります。

    # virsh vol-delete --pool RHEL-Storage-Pool RHEL8_Volume.qcow2
    Pool RHEL8_Volume.qcow2 deleted

11.3. Web コンソールで仮想マシン用のストレージの管理

RHEL 8 Web コンソールを使用して、仮想マシンのストレージのさまざまな側面を管理できます。Web コンソールを使用して以下を行うことができます。

11.3.1. Web コンソールでストレージプール情報の表示

次の手順では、Web コンソールセッションがアクセスできる仮想マシンのストレージプールの詳細なストレージプール情報を表示する方法を説明します。

前提条件

手順

  1. 仮想マシン インターフェースで ストレージプール をクリックします。ストレージプール画面が表示され、設定されているストレージプールの一覧が示されます。

    Web コンソールのストレージプール画面

    この情報には以下が含まれます。

    • 名前 - ストレージプールの名前
    • サイズ - ストレージプールのサイズ
    • 接続 - ストレージプールのアクセスに使用される接続
    • 状態 - ストレージプールのステータス
  2. 情報を表示するストレージの行をクリックします。

    行が展開して、選択したストレージプールに関する次の情報を含む概要ペインが表示されます。

    • パス - ストレージプールのパス
    • 永続的 - ストレージプールが永続的かどうか
    • 自動起動 - ストレージプールが自動的に起動するかどうか
    • 種類 - ストレージプールの種類。
    Web コンソールのストレージプールの概要
  3. ストレージプールから作成したストレージボリュームの一覧を表示する場合は、ストレージボリューム をクリックします。

    ストレージボリュームペインが表示され、設定されているストレージボリュームと、そのサイズ、使用量の一覧が示されます。

    Web コンソールのストレージプールのストレージボリューム

関連情報

11.3.2. Web コンソールでストレージプールの作成

仮想マシンには、仮想マシンイメージを保存する、または追加のストレージとして動作するストレージボリュームを作成するのに使用できるファイル、ディレクトリー、またはストレージデバイスが必要です。ストレージプールは、ローカルベースまたはネットワークベースのリソースから作成でき、このリソースを使用してストレージボリュームを作成できます。

RHEL Web コンソールを使用してストレージプールを作成するには、以下の手順を参照してください。

前提条件

手順

  1. 仮想マシンタブの上部にある ストレージプール をクリックします。ストレージプール画面が表示され、設定されているストレージプールの一覧が示されます。

    Web コンソールのストレージプール画面
  2. ストレージプールの作成 をクリックします。ストレージプールの作成ダイアログボックスが表示されます。

    cockpit でのストレージプールの作成
  3. ストレージプールの作成ダイアログに、次の情報を入力します。

    • 名前 - ストレージプールの名前
    • 種類 - ストレージプールの種類。これは、ファイルシステムのディレクトリー、ネットワークファイルシステム、iSCSI ターゲット、物理ディスクドライブ、または LVM ボリュームグループになります。
    • ターゲットパス - ホストのファイルシステムのストレージプールのパス
    • 起動 - ホストの起動時にストレージプールが起動するかどうか
  4. 作成 をクリックします。ストレージプールが作成され、ストレージプールの作成ダイアログが閉じて、新しいストレージプールがストレージプールの一覧に表示されます。

関連情報

11.3.3. Web コンソールでストレージプールの削除

ホストまたはネットワーク上のリソースを解放するためにストレージプールを削除して、システムパフォーマンスを向上させることができます。ストレージプールを削除すると、他の仮想マシンが使用可能なリソースが解放されます。

重要

明示的に指定されていない限り、ストレージプールを削除しても、そのプール内のストレージボリュームは同時に削除されません。

RHEL Web コンソールを使用してストレージプールを削除するには、以下の手順を参照してください。

注記

削除せずにストレージプールを一時的に非アクティブにする場合は、「Web コンソールでストレージプールの非アクティブ化」を参照してください。

前提条件

手順

  1. 仮想マシンタブの上部にある ストレージプール をクリックします。ストレージプール画面が表示され、設定されているストレージプールの一覧が示されます。

    Web コンソールのストレージプール画面
  2. ストレージプール 画面で、削除するストレージプールをクリックします。

    行が展開し、概要ペインが表示されます。このペインには選択したストレージプールの基本情報が記載され、仮想マシンの非アクティブ化または削除を制御できます。

    Web コンソールのストレージプールの概要
  3. 削除 をクリックします。

    確認ダイアログが表示されます。

    cockpit でのストレージプールの削除確認
  4. 必要に応じて、プール内のストレージボリュームを削除するには、ダイアログでチェックボックスを選択します。
  5. 削除 をクリックします。

    ストレージプールが削除されます。直前の手順でチェックボックスを選択した場合は、関連付けられたストレージボリュームも削除されます。

関連情報

11.3.4. Web コンソールでストレージプールの非アクティブ化

ストレージプールを永続的に削除しない場合は、代わりに一時的に非アクティブにすることができます。

ストレージプールを非アクティブにすると、そのプールに新しいボリュームを作成することができません。ただし、そのプールにボリュームがある仮想マシンは引き続き実行します。これは、たとえばプールに作成できるボリューム数を制限してシステムパフォーマンスを向上させることができます。

RHEL Web コンソールを使用してストレージプールを非アクティブ化するには、以下の手順を参照してください。

前提条件

手順

  1. 仮想マシンタブの上部にある ストレージプール をクリックします。ストレージプール画面が表示され、設定されているストレージプールの一覧が示されます。

    Web コンソールのストレージプール画面
  2. ストレージプール 画面で、非アクティブにするストレージプールをクリックします。

    行が展開し、概要ペインが表示されます。このペインには選択したストレージプールの基本情報が記載され、仮想マシンの非アクティブ化および削除を制御できます。

    Web コンソールのストレージプールの概要
  3. 非アクティブ をクリックします。

    Web コンソールのストレージプールの概要

    ストレージプールは非アクティブになります。

関連情報

11.3.5. Web コンソールでストレージボリュームの作成

機能している仮想マシンを作成するには、仮想マシンイメージと仮想マシン関連のデータを保存できるローカルストレージデバイスが仮想マシンに割り当てられている必要があります。ストレージプールにストレージボリュームを作成し、それをストレージディスクとして仮想マシンに割り当てることができます。

Web コンソールを使用してストレージボリュームを作成するには、以下の手順を参照してください。

前提条件

手順

  1. 仮想マシンタブの上部にある ストレージプール をクリックします。ストレージプール画面が表示され、設定されているストレージプールの一覧が示されます。

    Web コンソールのストレージプール画面
  2. ストレージプール 画面で、ストレージボリュームを作成するストレージプールをクリックします。

    行が展開され、選択したストレージプールに関する基本情報を含む概要ペインが表示されます。

    Web コンソールのストレージプールの概要
  3. 拡張された行の概要タブの横にある ストレージボリューム をクリックします。

    ストレージボリュームタブが表示され、既存のストレージボリュームが存在する場合は、そのボリュームに関する基本的な情報が表示されます。

    cockpit でのストレージボリュームの概要
  4. ボリュームの作成 をクリックします。

    ストレージボリュームの作成ダイアログが表示されます。

    cockpit でのストレージボリュームの作成
  5. ストレージボリュームの作成ダイアログに、次の情報を入力します。

    • 名前 - ストレージボリュームの名前。
    • サイズ - ストレージボリュームのサイズ (MiB または GiB)
    • フォーマット - ストレージボリュームの形式サポートされているタイプは qcow2 および raw です。
  6. 作成 をクリックします。

    ストレージボリュームが作成され、ストレージボリュームの作成ダイアログが閉じられ、ストレージボリュームの一覧に新しいストレージボリュームが表示されます。

関連情報

11.3.6. Web コンソールでストレージボリュームの削除

ストレージプールの領域を解放するためにストレージボリュームを削除したり、仮想マシンが切断された場合に関連付けられたストレージ項目を削除したりできます。

RHEL Web コンソールを使用してストレージボリュームを削除するには、以下の手順を参照してください。

前提条件

手順

  1. 仮想マシンタブの上部にある ストレージプール をクリックします。ストレージプール画面が表示され、設定されているストレージプールの一覧が示されます。

    Web コンソールのストレージプール画面
  2. ストレージプール 画面で、ストレージボリュームを削除するストレージプールをクリックします。

    行が展開され、選択したストレージプールに関する基本情報を含む概要ペインが表示されます。

    Web コンソールのストレージプールの概要
  3. 拡張された行の概要タブの横にある ストレージボリューム をクリックします。

    ストレージボリュームタブが表示され、既存のストレージボリュームが存在する場合は、そのボリュームに関する基本的な情報が表示されます。

    cockpit でのストレージボリュームの概要
  4. 削除するストレージボリュームを選択します。

    cockpit でストレージボリュームの削除
  5. 1 ボリュームの削除 をクリックします。

関連情報

11.3.7. Web コンソールで仮想マシンのディスクの管理

RHEL 8 Web コンソールを使用して、Web コンソールが接続している仮想マシンに設定されたディスクを管理できます。

以下を行うことができます。

11.3.7.1. Web コンソールで仮想マシンのディスク情報の表示

次の手順は、Web コンソールセッションが接続する仮想マシンのディスク状況を表示する方法を説明します。

前提条件

Web コンソールの仮想マシンプラグイン をインストールして、Web コンソールを使用して仮想マシンを管理できるようにしてある。

手順

  1. 情報を表示する仮想マシンの行をクリックします。

    行が展開し、概要ペインが表示されます。このペインには選択した仮想マシンの基本情報が記載され、仮想マシンのシャットダウンおよび削除を制御できます。

  2. ディスク をクリックします。

    ディスクペインが表示され、仮想マシンに割り当てられたディスクに関する情報が表示されます。

cockpit のディスク情報

この情報には以下が含まれます。

  • デバイス - ディスクのデバイスの種類
  • 使用中 - 使用中のディスク容量
  • 容量 - ディスクのサイズ
  • バス - ディスクのバスの種類
  • アクセス - ディスクが書き込み可能かどうか、読み取り専用であるか。
  • ソース - ディスクデバイスまたはファイル

関連情報

11.3.7.2. Web コンソールで新しいディスクを仮想マシンに追加

新しいディスクを仮想マシンに追加するには、RHEL 8 Web コンソールを使用して、新しいストレージボリュームを作成し、仮想マシンに割り当てます。

前提条件

手順

  1. 仮想マシン インターフェースで、新しいディスクを作成して割り当てる仮想マシンがある行をクリックします。

    行が展開し、概要ペインが表示されます。このペインには選択した仮想マシンの基本情報が記載され、仮想マシンのシャットダウンおよび削除を制御できます。

  2. ディスク をクリックします。

    ディスクペインが表示され、仮想マシンに設定したディスクに関する情報が表示されます。

    cockpit disk info

  3. ディスクの追加 をクリックします。

    ディスクの追加ダイアログが表示されます。

    cockpit add disk

  4. 新規作成 オプションを選択します。
  5. 新しいディスクを設定します。

    • プール - 仮想ディスクの作成元であるストレージプールを選択します。
    • 名前 - 作成する仮想ディスクの名前を入力します。
    • サイズ - 作成する仮想ディスクのサイズを入力し、単位 (MiB または GiB) を選択します。
    • フォーマット - 作成する仮想ディスクの形式を選択します。サポートされているタイプは qcow2 および raw です。
    • 永続 -選択すると、仮想ディスクが永続化されます。選択しないと、仮想ディスクは一時的になります。

      注記

      一時的なデバイスは、稼働中の仮想マシンにのみ追加できます。

    • 追加オプション - 仮想ディスクの追加設定を設定します。

      • キャッシュ - 仮想ディスクのキャッシュの種類を選択します。
      • バス - 仮想ディスクのバスの種類を選択します。
  6. 追加 をクリックします。

    仮想ディスクが作成され、仮想マシンに接続します。

関連情報

11.3.7.3. Web コンソールで既存ディスクを仮想マシンに割り当て

次の手順は、RHEL 8 Web コンソールを使用して仮想マシンに既存のストレージボリュームをディスクとして割り当てる方法を説明します。

前提条件

手順

  1. 仮想マシン インターフェースで、既存ディスクを割り当てる仮想マシンがある行をクリックします。

    行が展開し、概要ペインが表示されます。このペインには選択した仮想マシンの基本情報が記載され、仮想マシンのシャットダウンおよび削除を制御できます。

  2. ディスク をクリックします。

    ディスクペインが表示され、仮想マシンに設定したディスクに関する情報が表示されます。

    cockpit のディスク情報
  3. ディスクの追加 をクリックします。

    ディスクの追加ダイアログが表示されます。

    cockpit でのディスクの追加
  4. 既存の使用 ラジオボタンをクリックします。

    ディスクの追加ダイアログに、適切な設定フィールドが表示されます。

    cockpit でディスクの割り当て
  5. 仮想マシンのディスクを設定します。

    • プール - 仮想ディスクを割り当てるストレージプールを選択します。
    • ボリューム - 割り当てるストレージボリュームを選択します。
    • 永続化 - 仮想ディスクを永続的にする場合はチェックマークを入れます。仮想ディスクを一時的にする場合はチェックマークを外します。
    • 追加オプション - 仮想ディスクの追加設定を設定します。

      • キャッシュ - 仮想ディスクのキャッシュの種類を選択します。
      • バス - 仮想ディスクのバスの種類を選択します。
  6. 追加 をクリックします。

    選択した仮想ディスクが仮想マシンに割り当てられます。

関連情報

11.3.7.4. 仮想マシンへのディスクの割り当てを解除

ここでは、RHEL 8 Web コンソールを使用して、仮想マシンへのディスクの割り当てを解除する方法を説明します。

前提条件

手順

  1. 仮想マシン インターフェースで、既存ディスクの割り当てを解除する仮想マシンがある行をクリックします。

    行が展開し、概要ペインが表示されます。このペインには選択した仮想マシンの基本情報が記載され、仮想マシンのシャットダウンおよび削除を制御できます。

  2. ディスク をクリックします。

    ディスクペインが表示され、仮想マシンに設定したディスクに関する情報が表示されます。

    cockpit disk info

  3. 仮想マシンから接続を解除するディスクの横にある 削除 ボタンをクリックします。ディスクの削除 の確認ダイアログが表示されます。
  4. 確認ダイアログで、削除 をクリックします。

    仮想マシンから、仮想ディスクの割り当てが解除されます。

関連情報

第12章 NVIDIA vGPU デバイスの管理

vGPU 機能により、仲介デバイス として参照される物理的な NVIDIA GPU デバイスを複数の仮想デバイスに分割できます。この仲介デバイスは、仮想 GPU として複数の仮想マシンに割り当てることができます。これにより、この仮想マシンが、1 つの物理 GPU のパフォーマンスを共有します。

ただし、仲介デバイスの使用にかかわらず、仮想マシンに物理 GPU を割り当てると、ホストが GPU を使用できなくなります。

12.1. NVIDIA vGPU デバイスの設定

NVIDIA の vGPU 機能を設定するには、GPU デバイスの NVIDIA vGPU ドライバーを取得して、仲介デバイスを作成し、使用する仮想マシンに割り当てる必要があります。詳細な手順は、以下を参照してください。

前提条件

  • vGPU の仲介デバイスの作成は、NVIDIA GPU の制限セットでのみ可能です。このデバイスの最新の一覧は、NVIDIA GPU ソフトウェアのドキュメント を参照してください。

    ホストが使用している GPU が分からない場合は、lshw パッケージをインストールして、lshw -C display コマンドを使用します。以下の例は、システムが、vGPU と互換性がある NVIDIA Tesla P4 GPU を使用していることを示しています。

    # lshw -C display
    
    *-display
           description: 3D controller
           product: GP104GL [Tesla P4]
           vendor: NVIDIA Corporation
           physical id: 0
           bus info: pci@0000:01:00.0
           version: a1
           width: 64 bits
           clock: 33MHz
           capabilities: pm msi pciexpress cap_list
           configuration: driver=vfio-pci latency=0
           resources: irq:16 memory:f6000000-f6ffffff memory:e0000000-efffffff memory:f0000000-f1ffffff

手順

  1. NVIDIA vGPU ドライバーを取得して、システムにインストールします。手順は NVIDIA ドキュメント を参照してください。
  2. NVIDIA ソフトウェアのインストーラーが /etc/modprobe.d/nvidia-installer-disable-nouveau.conf ファイルを作成しなかった場合は、/etc/modprobe.d/ に、任意の名前で conf ファイルを作成します。次に、そのファイルに以下の行を追加します。

    blacklist nouveau
    options nouveau modeset=0
  3. 現在のカーネル用に初期 ramdisk を再生成してから再起動します。

    # dracut --force
    # reboot

    仲介されたデバイスで、以前対応していたカーネルバージョンを使用する必要がある場合は、インストールしたすべてのカーネルバージョンに対して初期 ramdisk を再生成します。

    # dracut --regenerate-all --force
    # reboot
  4. nvidia_vgpu_vfio モジュールがカーネルにより読み込まれていて、nvidia-vgpu-mgr.service サービスが実行していることを確認してください。

    # lsmod | grep nvidia_vgpu_vfio
    nvidia_vgpu_vfio 45011 0
    nvidia 14333621 10 nvidia_vgpu_vfio
    mdev 20414 2 vfio_mdev,nvidia_vgpu_vfio
    vfio 32695 3 vfio_mdev,nvidia_vgpu_vfio,vfio_iommu_type1
    # systemctl status nvidia-vgpu-mgr.service
    nvidia-vgpu-mgr.service - NVIDIA vGPU Manager Daemon
       Loaded: loaded (/usr/lib/systemd/system/nvidia-vgpu-mgr.service; enabled; vendor preset: disabled)
       Active: active (running) since Fri 2018-03-16 10:17:36 CET; 5h 8min ago
     Main PID: 1553 (nvidia-vgpu-mgr)
     [...]
  5. デバイスの UUID を /sys/class/mdev_bus/pci_dev/mdev_supported_types/type-id/create ファイルに書き込みます。pci_dev は、ホスト GPU の PCI アドレスで、type-id は、ホスト GPU タイプの ID です。

    次の例は、NVIDIA Tesla P4 カードの vGPU タイプ nvidia-63 の仲介デバイスを作成する方法を示しています。

    # uuidgen
    30820a6f-b1a5-4503-91ca-0c10ba58692a
    # echo "30820a6f-b1a5-4503-91ca-0c10ba58692a" > /sys/class/mdev_bus/0000:01:00.0/mdev_supported_types/nvidia-63/create
    注記

    特定の GPU デバイスの type-id 値は、仮想 GPU ソフトウェアのドキュメント を参照してください。Linux 仮想マシンでは、GRID P4-2Q などの Q シリーズ NVIDIA vGPU のみが、仲介デバイス GPU タイプとして対応されます。

  6. 次の行を、vGPU リソースを共有するゲストの XML 設定の <devices/> セクションに追加します。前の手順で uuidgen コマンドで生成した UUID 値を使用します。各 UUID は、一度に 1 つのゲストにしか割り当てることができません。

    <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci'>
      <source>
        <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/>
      </source>
    </hostdev>

関連情報

  • 割り当てられた仮想マシンで vGPU 仲介デバイスが正しく動作するようにするには、仮想マシンに対して NVIDIA vGPU ゲストソフトウェアライセンスを設定する必要があります。詳細および手順は、NVIDIA の仮想 GPU ソフトウェアのドキュメント を参照してください。

12.2. NVIDIA vGPU デバイスの削除

割り当てられた vGPU 仲介デバイス の設定を変更する場合は、割り当てられた仮想マシンから既存のデバイスを削除する必要があります。手順は、以下を参照してください。

手順

  • 仲介 vGPU デバイスを削除するには、デバイスが非アクティブのときに次のコマンドを使用します。uuid は、デバイスの UUID (30820a6f-b1a5-4503-91ca-0c10ba58692a など) に置き換えます。

    # echo 1 > /sys/bus/mdev/devices/uuid/remove

    仮想マシンで現在使用されている vGPU デバイスを削除しようとすると、以下のエラーが発生することに注意してください。

    echo: write error: Device or resource busy

12.3. システムに関する NVIDIA vGPU 情報の取得

利用可能な vGPU 機能の性能を評価するために、特定タイプの仲介デバイスをどのぐらい作成できるかなど、お使いのシステムの仲介デバイスに関する追加情報を取得できます。

手順

  • virsh nodedev-list --cap mdev_types コマンドおよび virsh nodedev-dumpxml コマンドを使用します。

    たとえば、以下の出力では、物理 Tesla P4 カードを使用している場合に使用可能な vGPU タイプが表示されます。

    $ virsh nodedev-list --cap mdev_types
    pci_0000_01_00_0
    $ virsh nodedev-dumpxml pci_0000_01_00_0
    <...>
      <capability type='mdev_types'>
        <type id='nvidia-70'>
          <name>GRID P4-8A</name>
          <deviceAPI>vfio-pci</deviceAPI>
          <availableInstances>1</availableInstances>
        </type>
        <type id='nvidia-69'>
          <name>GRID P4-4A</name>
          <deviceAPI>vfio-pci</deviceAPI>
          <availableInstances>2</availableInstances>
        </type>
        <type id='nvidia-67'>
          <name>GRID P4-1A</name>
          <deviceAPI>vfio-pci</deviceAPI>
          <availableInstances>8</availableInstances>
        </type>
        <type id='nvidia-65'>
          <name>GRID P4-4Q</name>
          <deviceAPI>vfio-pci</deviceAPI>
          <availableInstances>2</availableInstances>
        </type>
        <type id='nvidia-63'>
          <name>GRID P4-1Q</name>
          <deviceAPI>vfio-pci</deviceAPI>
          <availableInstances>8</availableInstances>
        </type>
        <type id='nvidia-71'>
          <name>GRID P4-1B</name>
          <deviceAPI>vfio-pci</deviceAPI>
          <availableInstances>8</availableInstances>
        </type>
        <type id='nvidia-68'>
          <name>GRID P4-2A</name>
          <deviceAPI>vfio-pci</deviceAPI>
          <availableInstances>4</availableInstances>
        </type>
        <type id='nvidia-66'>
          <name>GRID P4-8Q</name>
          <deviceAPI>vfio-pci</deviceAPI>
          <availableInstances>1</availableInstances>
        </type>
        <type id='nvidia-64'>
          <name>GRID P4-2Q</name>
          <deviceAPI>vfio-pci</deviceAPI>
          <availableInstances>4</availableInstances>
        </type>
      </capability>
    </...>

12.4. NVIDIA vGPU のリモートデスクトップのストリーミングサービス

以下のリモートデスクトップのストリーミングサービスは、RHEL 8 ホストの NVIDIA vGPU 機能でテストに成功しました。

  • HP-RGS - 現在、RHEL 8 仮想マシンでは HP-RGS を使用することはできません。
  • Mechdyne TGX - 現在、Windows Server 2016 の仮想マシンで Mechdyne TGX を使用することはできません。
  • NICE DCV - このストリーミングサービスを使用する場合は、解像度を動的にすると、場合によっては画面が黒くなるため、Red Hat は、解像度を固定する設定を使用することを推奨します。また、現在、RHEL 8 仮想マシンで NICE DCV を使用することはできません。

第13章 仮想マシンのネットワーク接続の設定

ネットワーク経由でホストに接続する、ホスト上の他の仮想マシン、および外部ネットワーク上の場所に接続する場合は、仮想マシンのネットワークを適切に設定する必要があります。仮想マシンのネットワークを提供するために、RHEL 8 ハイパーバイザーおよび新規に作成された仮想マシンには、デフォルトのネットワーク設定があります。これは、さらに変更することもできます。以下に例を示します。

  • 仮想マシンがホストと同じネットワーク上にあるかのように、ホスト上の仮想マシンを検出し、そのホスト外で接続できます。
  • 仮想マシンを受信ネットワークトラフィックから部分的に分離するか、または完全に分離して、セキュリティーを強化し、仮想マシンに影響を及ぼすリスクを最小限に抑えることができます。

以下のセクションでは、さまざまなタイプの仮想マシンネットワーク設定と、選択した仮想マシンネットワーク設定を設定する手順を説明します。

13.1. 仮想ネットワークの概要

ホストハードウェアにより、ネットワーク上の他のデバイスや場所への仮想マシンの接続が容易になります。以下のセクションでは、仮想マシンのネットワーク接続のメカニズムを説明し、デフォルトの仮想マシンのネットワーク設定を説明します。

13.1.1. 仮想ネットワークの仕組み

仮想ネットワークは、仮想ネットワークスイッチの概念を使用します。仮想ネットワークスイッチは、ホストマシンで動作するソフトウエア構成です。仮想マシンは、仮想ネットワークスイッチを介してネットワークに接続します。仮想スイッチの設定に基づいて、仮想マシンはハイパーバイザーによって管理される既存の仮想ネットワーク、または別のネットワーク接続メソッドを使用できます。

以下の図は、2 つの仮想マシンをネットワークに接続する仮想ネットワークスイッチを示しています。

vn 02 スイッチおよび 2 台のゲスト

ゲストオペレーティングシステムの視点から見ると、仮想ネットワーク接続は物理ネットワーク接続と同じです。ホストマシンは、仮想ネットワークスイッチをネットワークインターフェースとして表示します。libvirtd サービスが最初にインストールして起動すると、仮想マシン用のデフォルトのネットワークインターフェースである virbr0 が作成されます。

このインターフェースに関する情報を表示するには、ホストで ip ユーティリティーを使用します。

$ ip addr show virbr0
3: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state
 UNKNOWN link/ether 1b:c4:94:cf:fd:17 brd ff:ff:ff:ff:ff:ff
 inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0

デフォルトでは、1 台のホストにあるすべての仮想マシンが、virbr0 インターフェースを使用する default という名前の同じ NAT タイプ の仮想ネットワークに接続されています。詳細は「デフォルトの仮想ネットワーク設定」を参照してください。

仮想マシンからの基本的なアウトバウンドのみのネットワークアクセスでは、デフォルトのネットワークが libvirt パッケージと一緒にインストールされ、libvirtd サービスが開始する際に自動的に開始するため、通常は追加のネットワーク設定が必要ありません。

別の仮想マシンのネットワーク機能が必要な場合は、仮想ネットワークおよびネットワークインターフェースを追加で作成し、仮想マシンがその機能を使用するように設定できます。デフォルトの NAT に加えて、これらのネットワークとインターフェースは以下のいずれかのモードを使用するように設定できます。

13.1.2. デフォルトの仮想ネットワーク設定

libvirtd サービスが仮想化ホストに最初にインストールされると、ネットワークアドレス変換 (NAT) モードの仮想ネットワークの初期設定が含まれます。デフォルトでは、1 台のホストにあるすべての仮想マシンが、同じ libvirt 仮想ネットワーク (default) に接続されています。このネットワーク上の仮想マシンは、ホスト上およびホスト外のネットワーク上の場所の両方に接続できますが、以下の制限があります。

  • ネットワーク上の仮想マシンはホスト上のホストおよび他の仮想マシンに表示されますが、ネットワークトラフィックはゲストオペレーティングシステムのネットワークスタックのファイアウォールと、ゲストインターフェースに接続されている libvirt ネットワークフィルタールールの影響を受けます。
  • ネットワーク上の仮想マシンは、ホスト外の場所には表示されません。送信トラフィックは NAT ルールおよびホストシステムのファイアウォールの影響を受けます。

以下の図は、仮想マシンのデフォルトのネットワーク設定を示しています。

vn 08 ネットワークの概要

13.2. Web コンソールで仮想マシンのネットワークインターフェースの管理

RHEL 8 Web コンソールを使用して、Web コンソールが接続している仮想マシンの仮想ネットワークインターフェースを管理できます。以下を行うことができます。

13.2.1. Web コンソールで仮想ネットワークインターフェース情報の表示および編集

RHEL 8 Web コンソールを使用して、選択した仮想マシンで仮想ネットワークインターフェースを表示および変更できます。

前提条件

手順

  1. 仮想マシン インターフェースで、情報を表示する仮想マシンがある行をクリックします。

    行が展開し、概要ペインが表示されます。このペインには選択した仮想マシンの基本情報が記載され、仮想マシンのシャットダウンおよび削除を制御できます。

  2. ネットワークインターフェース をクリックします。

    ネットワークインターフェースペインが表示され、仮想マシン用に設定された仮想ネットワークインターフェースに関する情報が表示されます。

    cockpit での vNIC 情報

    この情報には以下が含まれます。

    • 種類 - 仮想マシンのネットワークインターフェースの種類。タイプには、仮想ネットワーク、LAN へのブリッジ、および直接割り当てが含まれます。

      注記

      RHEL 8.2 では、汎用イーサネット接続に対応していません。

    • モデルタイプ - 仮想ネットワークインターフェースのモデル。
    • MACアドレス - 仮想ネットワークインターフェースの MAC アドレス。
    • IP アドレス - 仮想ネットワークインターフェースの IP アドレス。
    • ソース - ネットワークインターフェースのソース。これはネットワークの種類によって異なります。
    • 状態 - 仮想ネットワークインターフェースの状態。
  3. 仮想ネットワークインターフェースの設定を編集するには、編集 をクリックします。仮想ネットワークインターフェースの設定ダイアログが開きます。

    設定した場合の Web コンソールの仮想ネットワーク
  4. インターフェースの種類、ソース、またはモデルを変更します。
  5. 保存 をクリックします。ネットワークインターフェースが変更しました。

    注記

    仮想ネットワークインターフェース設定の変更は、仮想マシンを再起動しないと有効になりません。

関連情報

13.2.2. Web コンソールで仮想ネットワークインターフェースの接続

RHEL 8 Web コンソールを使用して、選択した仮想マシンに設定された仮想ネットワークインターフェースの接続を解除したものを、再接続できます。

前提条件

手順

  1. 仮想マシン インターフェースで、仮想ネットワークインターフェースを接続する仮想マシンがある行をクリックします。

    行が展開し、概要ペインが表示されます。このペインには選択した仮想マシンの基本情報が記載され、仮想マシンのシャットダウンおよび削除を制御できます。

  2. ネットワーク をクリックします。

    ネットワークペインが表示され、仮想マシン用に設定された仮想ネットワークインターフェースに関する情報が表示されます。

    cockpit vNIC plug

  3. 接続する仮想ネットワークインターフェースの行の プラグ をクリックします。

    選択した仮想ネットワークインターフェースが仮想マシンに接続します。

13.2.3. Web コンソールで仮想ネットワークインターフェースの切断

RHEL 8 Web コンソールを使用して、選択した仮想マシンに接続した仮想ネットワークインターフェースの接続を解除できます。

前提条件

手順

  1. 仮想マシン インターフェースで、仮想ネットワークインターフェースを切断する仮想マシンがある行をクリックします。

    行が展開し、概要ペインが表示されます。このペインには選択した仮想マシンの基本情報が記載され、仮想マシンのシャットダウンおよび削除を制御できます。

  2. ネットワークインターフェース をクリックします。

    ネットワークインターフェースペインが表示され、仮想マシン用に構成された仮想ネットワークインターフェースに関する情報が表示されます。

    cockpit で vNIC の切断
  3. 切断する仮想ネットワークインターフェースの行で アンプラグ をクリックします。

    選択した仮想ネットワークインターフェースが仮想マシンから切断されます。

13.5. 仮想マシンのネットワーク接続の種類

仮想マシンのネットワークプロパティーと動作を変更するには、仮想マシンが使用する仮想ネットワークまたはインターフェースの種類を変更します。次のセクションでは、RHEL 8 の仮想マシンで利用可能な接続の種類を説明します。

13.5.1. ネットワークアドレス変換のある仮想ネットワーク

デフォルトでは、仮想ネットワークスイッチはネットワークアドレス変換 (NAT) モードで動作します。Source-NAT (SNAT) または Destination-NAT (DNAT) の代わりに IP マスカレードを使用します。IP マスカレードで接続されている仮想マシンは、外部ネットワークとの通信にホストマシンの IP アドレスを使用できるようになります。ホスト外のコンピューターは、仮想ネットワークスイッチが NAT モードで動作している場合に、ホスト内部の仮想マシンと通信ができません。

vn 04 NAT スイッチを使用するホスト
警告

仮想ネットワークスイッチは、iptables ルールで設定された NAT を使用します。スイッチの実行中にこのルールを編集することは推奨されていません。誤ったルールがあると、スイッチが通信できなくなる可能性があるためです。

13.5.2. ルーティングモードの仮想ネットワーク

ルーティング モードを使用する場合は、仮想スイッチを、ホストマシンに接続された物理 LAN に接続し、NAT を使用せずにトラフィックをやり取りします。仮想スイッチは、すべてのトラフィックを調べ、ネットワークパケットに含まれる情報を使用して、ルーティングの決定を行うことができます。このモードを使用すると、仮想マシンはすべてホストマシンから分離された 1 つのサブネットに表示されます。仮想マシンサブネットは、ホストマシンにある仮想スイッチを介してルーティングされます。これにより、着信接続が有効になりますが、外部ネットワークのシステムに追加のルーティングテーブルエントリーが必要になります。

ルーティングモードは、IP アドレスに基づくルーティングを使用します。

vn 06 ルーティングスイッチ

ルーティングモードを使用する一般的なトポロジーには DMZ および仮想サーバーのホストが含まれます。

DMZ

セキュリティー上の理由から、制御されたサブネットワークにノードを配置するネットワークを作成できます。このようなサブネットワークは、非武装地帯 (DMZ) して知られています。

vn 09 ルーティングモード DMZ

DMZ のホストマシンは、通常、WAN (外部) のホストマシンと、LAN (内部) のホストマシンにサービスを提供します。これにより、複数の場所からアクセスでき、この場所はセキュリティーおよび信頼レベルに基づいて異なる方法で制御および操作されるため、ルーティングモードはこの環境に最適な設定になります。

仮想サーバーのホスト

プロバイダーをホストする仮想サーバーには複数のホストマシンがあり、それぞれに 2 つの物理ネットワーク接続がある場合があります。管理とアカウンティングにはいずれかのインターフェースが使用されており、もう 1 つは仮想マシンによる接続に使用されます。各仮想マシンには独自のパブリック IP アドレスがありますが、ホストマシンはプライベート IP アドレスを使用するため、内部管理者のみが仮想マシンを管理できます。

vn 10 ルーティングモードのデータセンター

13.5.3. ブリッジモードの仮想ネットワーク

ほとんどの仮想マシンネットワークモードでは、仮想マシンは virbr0 仮想ブリッジを自動的に作成して接続します。一方、ブリッジ モードでは、仮想マシンはホストの既存の Linux ブリッジに接続します。これにより、仮想マシンが物理ネットワークに直接表示されます。これにより、着信接続が有効になりますが、追加のルーティングテーブルエントリーは必要ありません。

ブリッジモードは、MAC アドレスに基づいて接続スイッチを使用します。

VN ブリッジモードダイアグラム

ブリッジモードでは、仮想マシンがホストマシンと同じサブネットに表示されます。同じ物理ネットワークにあるその他のすべての物理マシンは、仮想マシンを検出し、そのマシンにアクセスできます。

ブリッジネットワークボンディング

複数の物理ブリッジインターフェースをボンドで結合することで、ハイパーバイザーで複数の物理ブリッジインターフェースを使用できます。ボンドをブリッジに追加すると、仮想マシンをブリッジに追加できるようになります。ただし、ボンディングドライバーにはいくつかの操作モードがあり、これらのモードのすべてが、仮想マシンが使用されているブリッジで機能する訳ではありません。

以下の ボンディングモード を使用できます。

  • モード 1
  • モード 2
  • モード 4

一方、モード 0、3、5、または 6 を使用すると、接続が失敗する可能性が高くなります。また、ARP (Address Resolution Protocol) の監視が適切に機能しないため、MII (Media-Independent Interface) 監視を使用してボンディングモードを監視する必要があります。

ボンディングモードの詳細は、Red Hat ナレッジベース「仮想マシンのゲストが接続するブリッジで使用される場合にどのボンディングモードが有効ですか?」を参照してください。

一般的なシナリオ

ブリッジモードにおける最も一般的なユースケースには、たとえば以下のようなものがあります。

  • ホストマシンとともに既存のネットワークに仮想マシンをデプロイし、仮想マシンと物理マシンの相違点をエンドユーザーに非表示にする。
  • 既存の物理ネットワーク設定を変更せずに仮想マシンをデプロイする。
  • 既存の物理ネットワークから簡単にアクセスできる必要がある仮想マシンをデプロイする。DHCP サービスにアクセスする必要のある物理ネットワークに仮想マシンを配置する。
  • 仮想 LAN (VLAN) を使用する既存のネットワークに仮想マシンを接続する。

関連情報

13.5.4. 分離モードの仮想ネットワーク

分離 モードを使用すると、仮想スイッチに接続されている仮想マシンは相互に通信でき、ホストマシンとも通信できますが、トラフィックはホストマシンの外部を通過せず、ホストマシンの外部からトラフィックを受信することができません。DHCP などの基本的な機能には、このモードの dnsmasq を使用する必要があります。

vn 07 分離スイッチ

13.5.5. オープンモードの仮想ネットワーク

ネットワークに オープン モードを使用する場合、libvirt はネットワークに iptables ルールを生成しません。したがって、libvirt はホストが提供する iptables ルールを上書きせず、仮想マシンの iptables ルールを手動で管理できます。

13.5.6. 仮想ネットワークデバイスの直接割り当て

macvtap ドライバーを使用して、仮想マシンの NIC を直接ホストマシンの指定された物理インターフェースに接続できます。macvtap 接続には、プライベートモード を含む多くのモードがあります。

このモードでは、すべてのパケットが外部スイッチに送信され、それらが同じホストマシンのターゲット VM に配信されます。それらが外部ルーターまたはゲートウェイ経由で送信され、それらがホストに戻される場合のみです。プライベートモードを使用すると、1 台のホスト上の個々の仮想マシンが相互に通信しないようにすることができます。

virt macvtap のプライベートモード

関連情報

13.5.7. 仮想マシンの接続タイプの比較

以下の表は、選択したタイプの仮想マシンネットワーク設定が接続できる場所とその表示に関する情報を示しています。

表13.1 仮想マシンの接続タイプ

 ホストへの接続ホスト上の他の仮想マシンへの接続外部ロケーションへの接続外部の場所から見ることができる

ブリッジモード

はい

はい

はい

はい

NAT

はい

はい

はい

no

ルーティングモード

はい

はい

はい

はい

分離モード

はい

はい

no

no

プライベートモード

no

no

はい

はい

オープンモード

ホストの iptables ルールにより異なります。

13.6. 関連情報

第14章 ホストとその仮想マシン間でのファイルの共有

ホストシステムと、そのホストが実行する仮想マシンとの間で、データを共有することが頻繁に必要になります。これを素早く効率的に行うには、ファイル共有 NFS または Samba をシステムに設定します。

14.1. ホストと Linux 仮想マシン間でのファイルの共有

ホストシステムと、そのホストシステムが接続している Linux 仮想マシンとの間で効率的なファイル共有を行うために、仮想マシンがマウントしてアクセスできる NFS 共有をエクスポートできます。

前提条件

  • nfs-utils パッケージがホストにインストールされている。
  • 仮想マシンと共有するディレクトリーがある。既存のディレクトリーを共有しない場合は、shared-files などの新しいディレクトリーを作成します。

    # mkdir shared-files
  • 仮想マシンにホストが表示され、ネットワーク経由で到達可能である。これは、通常、仮想マシンが、仮想ネットワークの NAT および ブリッジ のタイプを使用して接続されている場合となります。ただし、macvtap 接続の場合は、最初にホストに macvlan 機能を設定する必要があります。改善点を報告する場合は、以下のように行います。

    1. ホストの /etc/systemd/network/ ディレクトリーに、vm-macvlan.netdev などのネットワークデバイスファイルを作成します。

      # touch /etc/systemd/network/vm-macvlan.netdev
    2. ネットワークデバイスファイルを編集し、以下の内容を追加します。vm-macvlan を、ネットワークデバイスの名前に置き換えます。

      [NetDev]
      Name=vm-macvlan
      Kind=macvlan
      
      [MACVLAN]
      Mode=bridge
    3. macvlan ネットワークデバイス (例: vm-macvlan.network) 用にネットワーク設定ファイルを作成します。

      # touch /etc/systemd/network/vm-macvlan.network
    4. ネットワーク設定ファイルを編集し、以下の内容を追加します。vm-macvlan を、ネットワークデバイスの名前に置き換えます。

      [Match]
      Name=_vm-macvlan_
      
      [Network]
      IPForward=yes
      Address=192.168.250.33/24
      Gateway=192.168.250.1
      DNS=192.168.250.1
    5. 物理ネットワークインターフェース用のネットワーク設定ファイルを作成します。たとえば、インターフェースが enp4s0 の場合は、以下のコマンドを実行します。

      # touch /etc/systemd/network/enp4s0.network

      使用するインターフェース名が分からない場合は、ホストで ifconfig コマンドを実行すると、アクティブなネットワークインターフェースの一覧を取得できます。

    6. 物理ネットワークが macvlan インターフェース (この場合は vm-macvlan) の一部になるように、物理ネットワーク設定ファイルを編集します。

      [Match]
      Name=enp4s0
      
      [Network]
      MACVLAN=vm-macvlan
    7. ホストを再起動します。
  • (必要に応じて) セキュリティーを強化する場合は、仮想マシンが NFS バージョン 4 以降と互換性があることを確認してください。

手順

  1. ホストで、ネットワークファイルシステム (NFS) として共有するファイルを含むディレクトリーをエクスポートします。

    1. ファイルを共有する各仮想マシンの IP アドレスを取得します。以下の例では、testguest1 および testguest2 の IP を取得します。

      # virsh domifaddr testguest1
      Name       MAC address          Protocol     Address
      ----------------------------------------------------------------
      vnet0      52:53:00:84:57:90    ipv4         192.168.124.220/24
      
      # virsh domifaddr testguest2
      Name       MAC address          Protocol     Address
      ----------------------------------------------------------------
      vnet1      52:53:00:65:29:21    ipv4         192.168.124.17/24
    2. ホストの /etc/exports ファイルを編集して、共有するディレクトリー、共有する仮想マシンの IP、および共有オプションを含む行を追加します。

      Shared directory VM1-IP(options) VM2-IP(options) [...]

      たとえば、以下は、testguest1 および testguest2 があるホストの /usr/local/shared-files ディレクトリーを共有し、仮想マシンがディレクトリーのコンテンツを編集できるようにします。

      /usr/local/shared-files/ 192.168.124.220(rw,sync) 192.168.124.17(rw,sync)
    3. 更新したファイルシステムをエクスポートします。

      # exportfs -a
    4. NFS プロセスが起動することを確認します。

      # systemctl start nfs-server
    5. ホストシステムの IP アドレスを取得します。これは、後で仮想マシンに共有ディレクトリーをマウントするために使用されます。

      # ip addr
      [...]
      5: virbr0: [BROADCAST,MULTICAST,UP,LOWER_UP] mtu 1500 qdisc noqueue state UP group default qlen 1000
          link/ether 52:54:00:32:ff:a5 brd ff:ff:ff:ff:ff:ff
          inet 192.168.124.1/24 brd 192.168.124.255 scope global virbr0
             valid_lft forever preferred_lft forever
      [...]

      関連するネットワークは、ファイルを共有する仮想マシンによるホストへの接続に使用されるネットワークであることに注意してください。通常、これは virbr0 です。

  2. /etc/exports ファイルで指定されている仮想マシンのゲスト OS で、エクスポートしたファイルシステムをマウントします。

    1. 共有ファイルシステムのマウントポイントとして使用するディレクトリー (例: /mnt/host-share) を作成します。

      # mkdir /mnt/host-share
    2. ホストによりエクスポートされたディレクトリーを、マウントポイントにマウントします。この例では、ゲストの /mnt/host-share にある 192.168.124.1 ホストによりエクスポートされた /usr/local/shared-files ディレクトリーをマウントします。

      # mount 192.168.124.1:/usr/local/shared-files /mnt/host-share
    3. マウントに成功したことを確認するには、マウントポイントの共有ディレクトリーにアクセスして確認します。

      # cd /mnt/host-share
      # ls
      shared-file1  shared-file2  shared-file3

14.2. ホストと Windows 仮想マシンとの間でファイルの共有

ホストシステムと、そのホストが接続している Windows 仮想マシンとの間で効率的なファイル共有を行うために、仮想マシンがアクセスできる Samba サーバーを準備できます。

前提条件

  • samba パッケージがホストにインストールされている。そうでない場合は、以下のコマンドを実行します。

    # yum install samba
  • 仮想マシンにホストが表示され、ネットワーク経由で到達可能である。これは、通常、仮想マシンが、仮想ネットワークの NAT および ブリッジ のタイプを使用して接続されている場合となります。ただし、macvtap 接続の場合は、最初にホストに macvlan 機能を設定する必要があります。改善点を報告する場合は、以下のように行います。

    1. ホストの /etc/systemd/network/ ディレクトリーに、vm-macvlan.netdev などのネットワークデバイスファイルを作成します。

      # touch /etc/systemd/network/vm-macvlan.netdev
    2. ネットワークデバイスファイルを編集し、以下の内容を追加します。vm-macvlan を、ネットワークデバイスの名前に置き換えます。

      [NetDev]
      Name=vm-macvlan
      Kind=macvlan
      
      [MACVLAN]
      Mode=bridge
    3. macvlan ネットワークデバイス (例: vm-macvlan.network) 用にネットワーク設定ファイルを作成します。

      # touch /etc/systemd/network/vm-macvlan.network
    4. ネットワーク設定ファイルを編集し、以下の内容を追加します。vm-macvlan を、ネットワークデバイスの名前に置き換えます。

      [Match]
      Name=_vm-macvlan_
      
      [Network]
      IPForward=yes
      Address=192.168.250.33/24
      Gateway=192.168.250.1
      DNS=192.168.250.1
    5. 物理ネットワークインターフェース用のネットワーク設定ファイルを作成します。たとえば、インターフェースが enp4s0 の場合は、以下のコマンドを実行します。

      # touch /etc/systemd/network/enp4s0.network

      使用するインターフェースが分からない場合は、ホストの ifconfig コマンドを使用して、アクティブなネットワークインターフェースの一覧を取得できます。

    6. 物理ネットワークが macvlan インターフェース (この場合は vm-macvlan) の一部になるように、物理ネットワーク設定ファイルを編集します。

      [Match]
      Name=enp4s0
      
      [Network]
      MACVLAN=vm-macvlan
    7. ホストを再起動します。

手順

  1. ホストで Samba 共有を作成し、外部システムでアクセスできるようにします。

    1. Samba にファイアウォールパーミッションを追加します。

      # firewall-cmd --permanent --zone=public --add-service=samba
      success
      # firewall-cmd --reload
      success
    2. /etc/samba/smb.conf ファイルを編集します。

      1. [global] セクションに以下を追加します。

        map to guest = Bad User
      2. ファイルの末尾に以下を追加します。

        #=== Share Definitions ===
        [VM-share]
        path = /samba/VM-share
        browsable = yes
        guest ok = yes
        read only = no
        hosts allow = 192.168.122.0/24

        hosts allow 行は、共有のアクセスが、仮想マシンネットワークにあるホストに限定されることに注意してください。共有にすべてのユーザーがアクセスできるようにするには、この行を削除します。

    3. /samba/VM-share ディレクトリーを作成します。

      # mkdir -p /samba/VM-share
    4. Samba サービスを有効にします。

      # systemctl enable smb.service
      Created symlink /etc/systemd/system/multi-user.target.wants/smb.service → /usr/lib/systemd/system/smb.service.
    5. Samba サービスを再起動します。

      # systemctl restart smb.service
    6. 仮想マシン用の VM-share ディレクトリーへのアクセスと変更を許可します。

      # chmod -R 0755 /samba/VM-share/
      # chown -R nobody:nobody /samba/VM-share/
    7. SELinux Samba 共有ラベルを /etc/samba/VM-share/ に追加します。

      # chcon -t samba_share_t /samba/VM-share/
  2. Windows ゲストオペレーティングシステムで、Samba 共有をネットワークの場所として割り当てます。

    1. ファイルエクスプローラーを開き、この PC を右クリックします。
    2. コンテキストメニューで、ネットワークの場所を追加する をクリックします。

      仮想化 Win10 ネットワーク loc1
    3. ネットワークの場所の追加 ウィザードが開きます。カスタムのネットワークの場所を選択し、次へ をクリックします。
    4. インターネットまたはネットワークのアドレスフィールドに host-IP/VM-share と入力します。host-IP はホストの IP アドレスになります。通常、ホストの IP は仮想マシンのデフォルトゲートウェイです。その後、次へ をクリックします。

      仮想化 Win10 ネットワーク loc2
    5. 共有ディレクトリーの名前を変更するかどうかをたずねられた場合は、デフォルト名のままにします。これにより、仮想マシンとゲストのファイル共有設定の一貫性が確保されます。次へ をクリックします。
    6. ネットワークの場所にアクセスできたら、完了 をクリックすると共有ディレクトリーが開きます。

第15章 仮想マシンの保護

仮想マシンを使用する RHEL 8 システムの管理者が、仮想マシンのセキュリティーをできる限り確保することで、ゲストおよびホストの OS が悪意のあるソフトウェアに感染するリスクが大幅に軽減されます。

本書は、RHEL 8 ホストの 仮想マシンを保護する構造 の概要を表し、仮想マシンのセキュリティーを強化する 一連の方法 を示します。

15.1. 仮想マシンでセキュリティーが機能する仕組み

仮想マシンを使用する場合は、複数のオペレーティングシステムを 1 台のホストマシンに格納できます。このシステムは、ハイパーバイザーを介してホストに接続しますが、通常は仮想ネットワークを介して接続します。したがって、各仮想マシンを、悪意のあるソフトウェアでホストを攻撃するベクトルとして使用できます。また、ホストも、仮想マシンを攻撃するベクトルとして使用できます。

図15.1 仮想化ホストの潜在的なマルウェア攻撃ベクトル

仮想のセキュリティーが攻撃に成功

ハイパーバイザーは、ホストカーネルを使用して仮想マシンを管理するため、仮想マシンのオペレーティングシステムで実行しているサービスは、悪意のあるコードをホストシステムに挿入するのによく使用されます。ただし、ホストおよびゲストのシステムで 多数のセキュリティー機能 を使用して、このようなセキュリティーの脅威からシステムを保護できます。

このような SELinux や QEMU サンドボックスなどの機能は、悪意のあるコードがハイパーバイザーを攻撃し、ホストと仮想マシンとの間の転送をより困難にするさまざまな対策を提供します。

図15.2 仮想化ホストでマルウェア攻撃を阻止

仮想のセキュリティーが攻撃を防ぐ

仮想マシンのセキュリティーに対して RHEL 8 が提供する機能の多くは、常にアクティブで、有効または設定する必要がありません。詳細は「仮想マシンのセキュリティーの自動機能」を参照してください。

さらに、仮想マシンおよびハイパーバイザーの脆弱性を最小限に抑えるために、さまざまなベストプラクティスを実行することもできます。詳細は「仮想マシンのセキュリティー保護に関するベストプラクティス」を参照してください。

15.2. 仮想マシンのセキュリティー保護に関するベストプラクティス

以下の手順を行うと、仮想マシンが悪意のあるコードに感染し、ホストシステムに侵入するための攻撃ベクトルとして使用されるリスクが大幅に低減します。

ゲストで以下を行います。

  • 仮想マシンを、物理マシンと同じように保護します。セキュリティーを強化するのに使用できる方法は、ゲスト OS によって異なります。

    仮想マシンで RHEL 8 を実行している場合は、ゲストシステムのセキュリティーを強化する方法を、『RHEL 8 セキュリティーの強化』で参照してください。

ホストで以下を行います。

  • 仮想マシンをリモートで管理する場合は、SSH などの暗号化ユーティリティーと、SSL などのネットワークプロトコルを使用して仮想マシンに接続します。
  • SELinux が Enforcing モードであることを確認します。

    # getenforce
    Enforcing

    SELinux が無効または Permissive モードになっている場合は、『SELinux の使用』で Enforcing モードを有効にする手順を参照してください。

    注記

    SELinux の Enforcing モードでは、sVirt RHEL 8 機能も有効になります。これは、仮想化に使用される特別な SELinux ブール値のセットです。この値は 手動で調整 でき、仮想マシンのセキュリティーを詳細に管理できます。

  • SecureBoot で仮想マシンを使用します。

    SecureBoot は、仮想マシンが暗号化で署名された OS を実行していることを確認する機能です。これにより、マルウェア攻撃が変更した OS の仮想マシンを起動できなくなります。

    SecureBoot は、OVMF ファームウェアを使用する Linux 仮想マシンをインストールする場合に限り適用できます。手順は「SecureBoot の仮想マシンの作成」を参照してください。

  • qemu-img などの qemu-* コマンドは使用しないでください。

    QEMU は、RHEL 8 における仮想化アーキテクチャーの必須コンポーネントですが、手動で管理することが難しく、QEMU 設定に誤りがあるとセキュリティーの脆弱性を引き起こす可能性があります。したがって、Red Hat では、qemu-* コマンドの使用をサポートしていません。代わりに、ベストプラクティスに従って QEMU を調整するため、virshvirt-installvirt-xml などの libvirt ユーティリティーを使用して QEMU と相互作用することが強く推奨されます。

関連情報

15.3. SecureBoot の仮想マシンの作成

以下は、SecureBoot 機能を使用する Linux 仮想マシンを使用する方法を説明します。これは、仮想マシンが、暗号で署名された OS を実行していることを保証します。マルウェアが仮想マシンのゲスト OS を変更すると、SecureBoot により仮想マシンが起動しなくなり、ホストのマシンにマルウェアが広がらないようになります。

前提条件

  • 仮想マシンが Q35 マシンタイプを使用している。
  • edk2-OVMF パッケージがインストールされている。

    # yum install edk2-ovmf
  • ローカルまたはネットワークで利用可能なオペレーティングシステム (OS) のインストールソースがある。次のいずれかになります。

    • DVD などの物理的なインストールメディア
    • インストールメディアの ISO イメージ
    • 既存の仮想マシンインストールのディスクイメージ
  • インストールをより速く、簡単に設定するために、キックスタートファイルも利用できます。

手順

  1. 「コマンドラインインターフェースを使用した仮想マシンの作成」に従って、virt-install コマンドを使用して仮想マシンを作成します。--boot オプションには、uefi,nvram_template=/usr/share/OVMF/OVMF_VARS.secboot.fd を使用します。これは、OVMF_VARS.secboot.fd ファイルおよび OVMF_CODE.secboot.fd ファイルをテンプレートとして使用します。仮想マシンの不揮発性 RAM (NVRAM) 設定のテンプレートとして使用します。これにより、SecureBoot 機能を有効にします。

    以下に例を示します。

    # virt-install --name rhel8sb --memory 4096 --vcpus 4 --os-variant rhel8.0 --boot uefi,nvram_template=/usr/share/OVMF/OVMF_VARS.secboot.fd --disk boot_order=2,size=10 --disk boot_order=1,device=cdrom,bus=scsi,path=/images/RHEL-8.0-installation.iso
  2. 画面の指示に従って、OS のインストール手順を進めます。
  3. ゲスト OS がインストールされたら、グラフィカルゲストコンソール で端末を開いて仮想マシンのコマンドラインにアクセスするか、SSH を使用 してゲスト OS へ接続します。
  4. mokutil --sb-state コマンドで、SecureBoot が有効になっていることを確認します。

    # mokutil --sb-state
    SecureBoot enabled

15.4. 仮想マシンのセキュリティーの自動機能

「仮想マシンのセキュリティー保護に関するベストプラクティス」に記載されている、仮想マシンのセキュリティーを向上させる手動の手段に加えて、RHEL 8 で仮想化を使用する場合は、libvirt ソフトウェアスイートにより、多くのセキュリティー機能が提供され、自動的に有効になっています。これには、以下が含まれます。

システムセッションおよびユーザーセッション

RHEL 8 で仮想マシン管理に使用できるすべてのユーティリティーにアクセスするには、libvirt の システムセッション を使用する必要があります。そのためには、システムで root 権限を持っているか、または libvirt ユーザーグループの一部である必要があります。

libvirt グループに属していない root 以外のユーザーは、libvirt の ユーザーセッション にのみアクセスできます。それは、リソースにアクセスする際に、ローカルユーザーのアクセス権限が有効である必要があります。たとえば、ユーザーセッションで、システムセッションまたは他のユーザーが作成した仮想マシンを検出またはアクセスすることはできません。また、利用可能な仮想マシンネットワーク設定オプションも大幅に制限されます。

注記

RHEL 8 ドキュメントは、libvirt システムセッションの特権があることを前提としています。

仮想マシンの分離
個々の仮想マシンは、ホストで孤立したプロセスとして動作し、ホストカーネルにより強制されるセキュリティーに依存します。したがって、仮想マシンは、同じホストにある他の仮想マシンのメモリーやストレージを読み取ったり、アクセスすることができません。
QEMU サンドボックス
QEMU コードが、ホストのセキュリティーを侵害する可能性のあるシステムコールを実行できない機能です。
KASLR (Kernel Address Space Randomization)
カーネルイメージを展開する物理アドレスおよび仮想アドレスをランダム化できるようにします。したがって、KASLR は、カーネルオブジェクトの場所に基づいて、ゲストのセキュリティーが悪用されるのを防ぎます。

15.5. 仮想化のブール値

RHEL 8 システムにおける仮想マシンのセキュリティーの詳細な設定には、ハイパーバイザーが特定の方法で機能するように、ホストで SELinux のブール値を設定できます。

仮想化関連のブール値とそのステータスの一覧を表示するには、getsebool -a | grep virt コマンドを実行します。

$ getsebool -a | grep virt
[...]
virt_sandbox_use_netlink --> off
virt_sandbox_use_sys_admin --> off
virt_transition_userdomain --> off
virt_use_comm --> off
virt_use_execmem --> off
virt_use_fusefs --> off
[...]

特定のブール値を有効にするには、root で setsebool -P boolean_name on コマンドを実行します。ブール値を無効にするには、setsebool -P boolean_name off を使用します。

以下の表は、RHEL 8 で利用可能な仮想化関連のブール値と、その値が有効な場合の動作を示しています。

表15.1 SELinux 仮想化ブール値

SELinux のブール値説明

staff_use_svirt

非 root ユーザーが仮想マシンを作成して、sVirt に移行できるようになります。

unprivuser_use_svirt

非特権ユーザーが仮想マシンを作成して、sVirt に移行できるようになります。

virt_sandbox_use_audit

サンドボックスコンテナーが監査メッセージを送信できるようになります。

virt_sandbox_use_netlink

サンドボックスコンテナーでネットリンクシステム呼び出しが使用できるようになります。

virt_sandbox_use_sys_admin

サンドボックスコンテナーで sys_admin システム呼び出し (mount 等) が使用できるようになります。

virt_transition_userdomain

仮想プロセスをユーザードメインとして実行できるようになります。

virt_use_comm

virt でシリアルおよびパラレルの通信ポートが使用できるようになります。

virt_use_execmem

制限された仮想ゲストが実行可能メモリーおよび実行可能スタックを使用できるようになります。

virt_use_fusefs

FUSE がマウントしたファイルを virt が読み取りできるようになります。

virt_use_nfs

NFS がマウントしたファイルを virt が管理できるようになります。

virt_use_rawip

virt で rawip ソケットとの通信ができるようになります。

virt_use_samba

CIFS がマウントしたファイルを virt が管理できるようになります。

virt_use_sanlock

制限された仮想ゲストが sanlock と相互作用できるようになります。

virt_use_usb

virt で USB デバイスが使用できるようになります。

virt_use_xserver

仮想マシンで X Window System と相互作用できるようになります。

第16章 仮想マシンのパフォーマンスの最適化

仮想マシンでは、ホストと比べて、パフォーマンス低下が常に見られます。以下のセクションでは、この低下の理由を説明します。また、ハードウェアのインフラストラクチャーリソースを可能な限り効率的に使用できるように、RHEL 8 での仮想化によるパフォーマンスへの影響を最小限に抑える方法を説明します。

16.1. 仮想マシンのパフォーマンスに影響を及ぼすもの

仮想マシンは、ホストのユーザー空間プロセスとして実行します。したがって、ハイパーバイザーは、仮想マシンがホストシステムのリソースを使用できるように、ホストのシステムリソースを変換する必要があります。したがって、変換によりリソースの一部が消費されるため、仮想マシンのパフォーマンス効率は、ホストと同じにはなりません。

システムパフォーマンスにおける仮想化の影響

仮想マシンのパフォーマンス低下の理由には、以下のようなものがあります。

  • 仮想 CPU (vCPU) がホスト上のスレッドとして実装され、Linux スケジューラーで処理される。
  • 仮想マシンは、ホストカーネルから NUMA や Huge Page などの最適化機能を自動的に継承しない。
  • ホストのディスクおよびネットワーク I/O の設定が、仮想マシンのパフォーマンスに大きく影響する可能性がある。
  • ネットワークトラフィックは、一般的に、ソフトウェアベースのブリッジから仮想マシンに流れる。
  • ホストデバイスとそのモデルによっては、その特定のハードウェアのエミュレーションにより、オーバーヘッドが著しくなる可能性がある。

仮想化が仮想マシンのパフォーマンスに与える影響の重大度は、次のようなさまざまな要因の影響を受けます。

  • 同時に実行している仮想マシンの数
  • 各仮想マシンで使用される仮想デバイスのサイズ
  • 仮想マシンが使用するデバイスの種類

仮想マシンのパフォーマンス損失を減らす

RHEL 8は、仮想化のパフォーマンスへの悪影響を減らすのに使用できる多くの機能を提供します。以下に例を示します。

重要

仮想マシンのパフォーマンスのチューニングは、その他の仮想化機能に悪影響を与える可能性があります。たとえば、変更した仮想マシンの移行がより困難になります。

16.2. tuned で仮想マシンのパフォーマンスの最適化

tuned ユーティリティーは、CPU 集中型タスクや、ストレージネットワークスループットの応答などの特定のワークロードの特性に対して RHEL を調整するプロファイル配信メカニズムです。これにより、特定のユースケースで、パフォーマンスを強化し、電力消費を減らすように事前設定されたチューニングプロファイルを多数利用できます。これらのプロファイルを編集するか、または新規プロファイルを作成して、仮想化環境に適したパフォーマンスソリューション (仮想化環境を含む) を作成できます。

Red Hat は、RHEL 8 で仮想化を使用する場合は、次のプロファイルの使用を推奨します。

  • RHEL 8 仮想マシンの場合は、virtual-guest プロファイルを使用します。これは、一般的に適用された throughput-performance プロファイルをベースにしていますが、仮想メモリーのスワップは減少します。
  • RHEL 8 仮想ホストの場合は、virtual-host プロファイルを使用します。これにより、ダーティーメモリーページのより集中的なライトバックが有効になり、ホストのパフォーマンスを活用できます。

前提条件

手順

特定の tuned プロファイルを有効にするには、以下を実行します。

  1. 利用可能な tuned プロファイルを一覧表示します。

    # tuned-adm list
    
    Available profiles:
    - balanced             - General non-specialized tuned profile
    - desktop              - Optimize for the desktop use-case
    [...]
    - virtual-guest        - Optimize for running inside a virtual guest
    - virtual-host         - Optimize for running KVM guests
    Current active profile: balanced
  2. (必要に応じて) 新しい tuned プロファイルを作成するか、既存の tuned プロファイルを編集します。

    詳細は「tuned プロファイルのカスタマイズ」を参照してください。

  3. tuned プロファイルをアクティベートします。

    # tuned-adm profile selected-profile
    • 仮想化ホストを最適化するには、virtual-host プロファイルを使用します。

      # tuned-adm profile virtual-host
    • RHEL ゲストオペレーティングシステムで、virtual-guest プロファイルを使用します。

      # tuned-adm profile virtual-guest

関連情報

16.3. 仮想マシンのメモリーの設定

仮想マシンのパフォーマンスを改善するために、追加のホスト RAM を仮想マシンに割り当てることができます。同様に、仮想マシンに割り当てるメモリー量を減らして、ホストメモリーを他の仮想マシンやタスクに割り当てることができます。

これらのアクションを実行するには、Web コンソール または コマンドラインインターフェース を使用します。

16.3.1. Web コンソールで仮想マシンのメモリーの追加と削除

仮想マシンのパフォーマンスを向上させるか、または仮想マシンが使用するホストリソースを解放するために、Web コンソールを使用して、仮想マシンに割り当てられたメモリーの量を調整できます。

前提条件

  • ゲスト OS がメモリーバルーンドライバーを実行している。これを確認するには、以下を実行します。

    1. 仮想マシンの設定に memballoon デバイスが含まれていることを確認します。

      # virsh dumpxml testguest | grep memballoon
      <memballoon model='virtio'>
          </memballoon>

      このコマンドで出力が表示され、モデルが none に設定されていない場合は、memballoon デバイスが存在します。

    2. ballon ドライバーがゲスト OS で実行されていることを確認します。

  • オプション: 最大メモリーと、仮想マシンに現在使用されているメモリーに関する情報を取得します。これは、変更のベースラインとしても、検証のためにも機能します。

    # virsh dominfo testguest
    Max memory:     2097152 KiB
    Used memory:    2097152 KiB
  • Web コンソールの仮想マシンプラグイン をインストールして、Web コンソールを使用して仮想マシンを管理できるようにしてある。

手順

  1. 仮想マシン インターフェースで、仮想 CPU パラメーターを表示および設定する仮想マシンの名前がある行をクリックします。

    行が展開され、Overview ペインが表示されます。このペインには、選択した仮想マシンの基本情報が含まれます。

  2. 概要ペインで メモリー 行の値をクリックします。

    メモリー調整 ダイアログが表示されます。

    virt memory cockpit
  3. 選択した仮想マシンの仮想 CPU を設定します。

    • 最大割り当て - 仮想マシンがそのプロセスに使用できるホストメモリーの最大量を設定します。この値を増やすと、仮想マシンのパフォーマンスが低下する可能性が向上し、値を減らすことで、仮想マシンがホスト上にあるパフォーマンスフットプリントが低減します。

      最大メモリー割り当ての調整は、シャットダウンした仮想マシンでのみ可能です。

    • 現在の割り当て - 次回の仮想マシンの再起動まで、最大割り当てまでメモリー制限を設定します。これを使用して、仮想マシンへの最大割り当てを変更せずに、仮想マシンが持つメモリー負荷を一時的に調整できます。
  4. 保存 をクリックします。

    仮想マシンのメモリー割り当てが調整されます。

関連情報

16.3.2. コマンドラインインターフェースで仮想マシンのメモリーの追加と削除

仮想マシンのパフォーマンスを改善したり、使用しているホストリソースを解放したりするために、CLI を使用して仮想マシンに割り当てられたメモリーの量を調整できます。

前提条件

  • ゲスト OS がメモリーバルーンドライバーを実行している。これを確認するには、以下を実行します。

    1. 仮想マシンの設定に memballoon デバイスが含まれていることを確認します。

      # virsh dumpxml testguest | grep memballoon
      <memballoon model='virtio'>
          </memballoon>

      このコマンドで出力が表示され、モデルが none に設定されていない場合は、memballoon デバイスが存在します。

    2. ballon ドライバーがゲスト OS で実行されていることを確認します。

  • オプション: 最大メモリーと、仮想マシンに現在使用されているメモリーに関する情報を取得します。これは、変更のベースラインとしても、検証のためにも機能します。

    # virsh dominfo testguest
    Max memory:     2097152 KiB
    Used memory:    2097152 KiB

手順

  1. 仮想マシンに割り当てる最大メモリーを調整します。この値を増やすと、仮想マシンのパフォーマンスが低下する可能性が向上し、値を減らすことで、仮想マシンがホスト上にあるパフォーマンスフットプリントが低減します。この変更は、停止している仮想マシンでのみ実行できるため、実行中の仮想マシンを調整するには再起動する必要があります。

    たとえば、仮想マシン testguest が使用可能な最大メモリーを 4096 MiB に変更するには、次のコマンドを実行します。

    # virt-xml testguest --edit --memory 4096
    Domain 'testguest' defined successfully.
    Changes will take effect after the domain is fully powered off.
  1. 必要に応じて、仮想マシンが現在使用しているメモリーを最大割り当てまで調整することもできます。これにより、仮想マシンの最大割り当てを変更せずに、仮想マシンが次回の再起動までホスト上にあるメモリー負荷が調整されます。

    # virsh setmem testguest --current 2048

検証

  1. 仮想マシンが使用するメモリーが更新されていることを確認します。

    # virsh dominfo testguest
    Max memory:     4194304 KiB
    Used memory:    2097152 KiB
  2. (必要に応じて) 現在の仮想マシンメモリーを調整すると、仮想マシンのメモリーバルーンの統計を取得して、そのメモリー使用量をどの程度効果的に調整するかを評価できます。

     # virsh domstats --balloon testguest
    Domain: 'testguest'
      balloon.current=365624
      balloon.maximum=4194304
      balloon.swap_in=0
      balloon.swap_out=0
      balloon.major_fault=306
      balloon.minor_fault=156117
      balloon.unused=3834448
      balloon.available=4035008
      balloon.usable=3746340
      balloon.last-update=1587971682
      balloon.disk_caches=75444
      balloon.hugetlb_pgalloc=0
      balloon.hugetlb_pgfail=0
      balloon.rss=1005456

関連情報

16.3.3. 関連情報

  • 実行中の仮想マシンの最大メモリーを増やすには、仮想マシンにメモリーデバイスを割り当てます。これは、メモリーホットプラグ とも呼ばれます。詳細は「仮想マシンへのデバイスの割り当て」を参照してください。

    メモリーのホットアンプラグ とも呼ばれる仮想マシンからメモリーデバイスを削除することは、RHEL 8 では対応していないため、Red Hat はこの使用を強く推奨しません。

16.4. 仮想マシンの I/O パフォーマンスの最適化

仮想マシンの入出力 (I/O) 機能は、仮想マシンの全体的な効率を大幅に制限する可能性があります。これに対処するために、ブロック I/O パラメーターを設定して、仮想マシンの I/O を最適化できます。

16.4.1. 仮想マシンにおけるブロック I/O のチューニング

複数のブロックデバイスが、複数の仮想マシンで使用されている場合は、I/O ウェイト を変更して特定の仮想デバイスの I/O の優先度を調整することが重要になる場合があります。

デバイスの I/O ウェイトを上げると、I/O 帯域幅の優先度が高まるため、より多くのホストリソースが提供されます。同様に、デバイスのウェイトを下げると、ホストのリソースが少なくなります。

注記

各デバイスの ウェイト の値は 100 から 1000 の範囲内でなければなりません。もしくは、値を 0 にすると、各デバイスの一覧からそのデバイスを削除できます。

手順

仮想マシンのブロック I/O パラメーターを表示および設定するには、以下を行います。

  1. 仮想マシンの現在の <blkio> パラメーターを表示します。

    # virsh dumpxml VM-name

    <domain>
      [...]
      <blkiotune>
        <weight>800</weight>
        <device>
          <path>/dev/sda</path>
          <weight>1000</weight>
        </device>
        <device>
          <path>/dev/sdb</path>
          <weight>500</weight>
        </device>
      </blkiotune>
      [...]
    </domain>
  2. 指定したデバイスの I/O ウェイトを編集します。

    # virsh blkiotune VM-name --device-weights device, I/O-weight

    たとえば、以下では、liftrul 仮想マシンの /dev/sda デバイスのウェイトを 500 に変更します。

    # virsh blkiotune liftbrul --device-weights /dev/sda, 500

16.4.2. 仮想マシンのディスク I/O スロットリング

複数の仮想マシンが同時に実行する場合は、過剰なディスク I/O により、システムパフォーマンスに影響が及ぶ可能性があります。KVM 仮想化のディスク I/O スロットリングでは、仮想マシンからホストマシンに送られるディスク I/O 要求に制限を設定する機能を利用できます。これにより、仮想マシンが共有リソースを過剰に使用し、その他の仮想マシンのパフォーマンスに影響を及ぼすことを防ぐことができます。

ディスク I/O スロットリングを有効にするには、仮想マシンに割り当てられた各ブロックデバイスからホストマシンに送られるディスク I/O 要求に制限を設定します。

手順

  1. virsh domblklist コマンドを使用して、指定された仮想マシン上のすべてのディスクデバイスの名前を一覧表示します。

    # virsh domblklist rollin-coal
    Target     Source
    ------------------------------------------------
    vda        /var/lib/libvirt/images/rollin-coal.qcow2
    sda        -
    sdb        /home/horridly-demanding-processes.iso
  2. virsh blkdeviotune コマンドを使用して、仮想マシンに割り当てられているブロックデバイスの I/O 制限を設定します。

    # virsh blkdeviotune VM-name device --parameter limit

    たとえば、rollin-coal 仮想マシン上の sdb デバイスを 1 秒あたり 1000 の I/O 操作と、1 秒スループットあたり 50 MB にスロットリングするには、次のコマンドを実行します。

    # virsh blkdeviotune rollin-coal sdb --total-iops-sec 1000 --total-bytes-sec 52428800

関連情報

  • ディスク I/O スロットリングは、異なる顧客に属する仮想マシンが同じホストで実行されている場合や、異なる仮想マシンに QoS 保証が提供されている場合など、さまざまな状況で役立ちます。ディスク I/O スロットリングは、低速なディスクをシミュレートするために使用することもできます。
  • I/O スロットリングは、仮想マシンに割り当てられた各ブロックデバイスに個別に適用でき、スループットおよび I/O 操作の制限に対応します。

16.4.3. マルチキュー virtio-scsi の有効化

仮想マシンで virtio-scsi ストレージデバイスを使用する場合は、マルチキュー virtio-scsi 機能により、ストレージパフォーマンスおよびスケーラビリティーが向上します。このため、各仮想 CPU (vCPU) に別のキューを持たせることが可能になります。また仮想 CPU は、その他の vCPU に影響を及ぼすことなく使用するために、割り込みできるようになります。

手順

  • 特定の仮想マシンに対してマルチキュー virtio-scsi サポートを有効にするには、仮想マシンの XML 設定に以下を追加します。ここでの N は、vCPU キューの合計数です。

    <controller type='scsi' index='0' model='virtio-scsi'>
       <driver queues='N' />
    </controller>

16.5. 仮想マシンの CPU パフォーマンスの最適化

vCPU は、ホストマシンの物理 CPU と同様、仮想マシンのパフォーマンスにおいて極めて重要です。したがって、vCPU を最適化すると、仮想マシンのリソース効率に大きな影響を及ぼす可能性があります。vCPU を最適化するには、以下を実行します。

  1. 仮想マシンに割り当てられているホスト CPU の数を調整します。これは、CLI または Web コンソール を使用して実行できます。
  2. vCPU モデルが、ホストの CPU モデルに調整されていることを確認します。たとえば、仮想マシン testguest1 を、ホストの CPU モデルを使用するように設定するには、次のコマンドを実行します。

    # virt-xml testguest1 --edit --cpu host-model
  3. ホストマシンが Non-Uniform Memory Access (NUMA) を使用する場合は、その仮想マシンに対して NUMA を設定 することもできます。これにより、ホストの CPU およびメモリープロセスが、仮想マシンの CPU およびメモリープロセスにできるだけ近くにマッピングされます。事実上、NUMA チューニングにより、仮想マシンに割り当てられたシステムメモリーへのより効率的なアクセスが可能になります。これにより、vCPU 処理の効果が改善されます。

    詳細は「仮想マシンでの NUMA の設定」および「vCPU のパフォーマンスチューニングシナリオ例」を参照してください。

16.5.1. コマンドラインインターフェースを使用した仮想 CPU の追加と削除

仮想マシンの CPU パフォーマンスを増減するには、仮想マシンに割り当てられた仮想 CPU (vCPU) を追加または削除します。

実行中の仮想マシンで実行する場合、これは vCPU ホットプラグおよびホットアンプラグとも呼ばれます。ただし、RHEL 8 では vCPU のホットアンプラグに対応しておらず、Red Hat ではその使用を強く推奨していません。

前提条件

  • オプション: ターゲット仮想マシン内の vCPU の現在の状態を表示します。たとえば、仮想マシン testguest 上の仮想 CPU 数を表示するには、以下を実行します。

    # virsh vcpucount testguest
    maximum      config         4
    maximum      live           2
    current      config         2
    current      live           1

    この出力は、testguest が現在 1 vCPU を使用していることを示し、1 つ以上の vCPU をホットプラグして仮想マシンのパフォーマンスを向上できることを示しています。ただし、再起動後に使用される vCPU の testguest 数は 2 に変更され、2 以上の vCPU のホットプラグが可能になります。

手順

  1. 仮想マシンに割り当てることができる vCPU の最大数を調整します。これは、仮想マシンの次回起動時に有効になります。

    たとえば、仮想マシン testguest の vCPU の最大数を 8 に増やすには、次のコマンドを実行します。

    # virsh setvcpus testguest 8 --maximum --config

    最大値は、CPU トポロジー、ホストハードウェア、ハイパーバイザー、およびその他の要素によって制限される可能性があることに注意してください。

  2. 仮想マシンに割り当てられている現在の仮想 CPU の数を調整し、直前のステップで設定された最大数まで調整します。以下に例を示します。

    • 実行中の仮想マシン testguest にアタッチされている vCPU を 4 に増やすには、以下を実行します。

      # virsh setvcpus testguest 4 --live

      これにより、仮想マシンの次回の起動まで、仮想マシンのパフォーマンスおよび testguest のホスト負荷のフットプリントが高まります。

    • testguest 仮想マシンにアタッチされている vCPU の数を永続的に 1 に減らすには、次のコマンドを実行します。

      # virsh setvcpus testguest 1 --config

      これにより、仮想マシンの次回の起動後に、仮想マシンのパフォーマンスおよび testguest のホスト負荷のフットプリントが低下します。ただし、必要に応じて、仮想マシンに追加の vCPU をホットプラグして、一時的にパフォーマンスを向上させることができます。

検証

  • 仮想マシンの vCPU の現在の状態に変更が反映されていることを確認します。

    # virsh vcpucount testguest
    maximum      config         8
    maximum      live           4
    current      config         1
    current      live           4

関連情報

16.5.2. Web コンソールで仮想 CPU の管理

RHEL 8 Web コンソールを使用して、Web コンソールが接続している仮想マシンが使用する仮想 CPU を確認し、設定できます。

前提条件

手順

  1. 仮想マシン インターフェースで、仮想 CPU パラメーターを表示および設定する仮想マシンの名前がある行をクリックします。

    行が展開され、概要ペインが表示されます。このペインには、選択した仮想マシンの基本情報 (仮想 CPU の数など) が記載され、仮想マシンのシャットダウンおよび削除を制御できます。

  2. 概要ペインの仮想 CPU の数をクリックします。

    vCPU の詳細ダイアログが表示されます。

    cockpit での vCPU の設定
    注記

    vCPU の詳細ダイアログの警告は、仮想 CPU 設定を変更しないと表示されません。

  3. 選択した仮想マシンの仮想 CPU を設定します。

    • vCPU 数 - 現在使用中の vCPU の数

      注記

      vCPU 数は、vCPU 最大値以下にする必要があります。

    • vCPU 最大値 - 仮想マシンに設定できる仮想 CPU の最大数を入力します。この値が vCPU 数 よりも大きい場合、追加の vCPU を仮想マシンに割り当てることができます。
    • ソケット - 仮想マシンに公開するソケットの数を選択します。
    • ソケットごとのコア - 仮想マシンに公開する各ソケットのコア数を選択します。
    • コアあたりのスレッド - 仮想マシンに公開する各コアのスレッド数を選択します。

      SocketsCores per socket、および Threads per core オプションは、仮想マシンの CPU トポロジーを調整することに注意してください。これは、vCPU のパフォーマンスにメリットがあり、ゲスト OS の特定のソフトウェアの機能に影響を与える可能性があります。デプロイメントで異なる設定が必要ない場合、Red Hat はデフォルト値を維持することを推奨します。

  4. 適用 をクリックします。

    仮想マシンに仮想 CPU が設定されます。

    注記

    仮想 CPU 設定の変更は、仮想マシンの再起動後にのみ有効になります。

関連情報:

16.5.3. 仮想マシンでの NUMA の設定

以下の方法は、RHEL 8 ホストで、仮想マシンの Non-Uniform Memory Access (NUMA) 設定の構成に使用できます。

前提条件

  • ホストは NUMA 対応のマシンである必要があります。これを確認するには、virsh nodeinfo コマンドを使用して、NUMA cell(2) の行を確認します。

    # virsh nodeinfo
    CPU model:           x86_64
    CPU(s):              48
    CPU frequency:       1200 MHz
    CPU socket(s):       1
    Core(s) per socket:  12
    Thread(s) per core:  2
    NUMA cell(s):        2
    Memory size:         67012964 KiB

    行の値が 2 以上であると、そのホストは NUMA に対応しています。

手順

使いやすさのため、自動化ユーティリティーとサービスを使用して、仮想マシンの NUMA を設定できます。ただし、手動で NUMA を設定すると、パフォーマンスが大幅に向上する可能性が高くなります。

自動方式

  • 仮想マシンの NUMA ポリシーを Preferred に設定します。たとえば、仮想マシン testguest5 に対してこれを行うには、次のコマンドを実行します。

    # virt-xml testguest5 --edit --vcpus placement=auto
    # virt-xml testguest5 --edit --numatune mode=preferred
  • ホストで NUMA の自動負荷分散を有効にします。

    # echo 1 > /proc/sys/kernel/numa_balancing
  • numad コマンドを使用して、メモリーリソースで仮想マシンの CPU を自動的に調整します。

    # numad

手動方式

  1. 特定ホストの CPU、またはある範囲の CPU に特定の vCPU スレッドをピニングします。これは、NUMA 以外のホストおよび仮想マシンでも可能で、vCPU のパフォーマンスを向上させる安全な方法として推奨されています。

    たとえば、次のコマンドでは、仮想マシン testguest6 の vCPU スレッドの 0 から 5 を、ホストの CPU 1、3、5、7、9、11 にそれぞれピニングします。

    # virsh vcpupin testguest6 0 1
    # virsh vcpupin testguest6 1 3
    # virsh vcpupin testguest6 2 5
    # virsh vcpupin testguest6 3 7
    # virsh vcpupin testguest6 4 9
    # virsh vcpupin testguest6 5 11

    その後、これが成功したかどうかを確認できます。

    # virsh vcpupin testguest6
    VCPU   CPU Affinity
    ----------------------
    0      1
    1      3
    2      5
    3      7
    4      9
    5      11
  2. vCPU スレッドのピニング後に、指定の仮想マシンに関連付けられた QEMU プロセススレッドを、特定ホスト CPU、またはある範囲の CPU に固定することもできます。たとえば、以下のコマンドは、testguest6 の QEMU プロセススレッドを CPU 13 および 15 にピニングし、これが成功したことを確認します。

    # virsh emulatorpin testguest6 13,15
    # virsh emulatorpin testguest6
    emulator: CPU Affinity
    ----------------------------------
           *: 13,15
  3. これで、特定の仮想マシンに対して割り当てられるホストの NUMA ノードを指定することができます。これにより、仮想マシンの vCPU によるホストメモリーの使用率が向上します。たとえば、次のコマンドでは、ホスト NUMA ノード 3 ~ 5 を使用するように testguest6 を設定し、これが成功したかどうかを確認します。

    # virsh numatune testguest6 --nodeset 3-5
    # virsh numatune testguest6

関連情報

16.5.4. vCPU のパフォーマンスチューニングシナリオ例

最適な vCPU パフォーマンスを得るためにも、以下のシナリオなど、手動で vcpupinemulatorpin、および numatune 設定をまとめて使用することが推奨されます。

開始シナリオ

  • ホストには以下のハードウェア仕様があります。

    • 2 つの NUMA ノード
    • 各ノードにある 3 つの CPU コア
    • 各コアにある 2 スレッド

    このようなマシンの virsh nodeinfo の出力は以下のようになります。

    # virsh nodeinfo
    CPU model:           x86_64
    CPU(s):              12
    CPU frequency:       3661 MHz
    CPU socket(s):       2
    Core(s) per socket:  3
    Thread(s) per core:  2
    NUMA cell(s):        2
    Memory size:         31248692 KiB
  • 既存の仮想マシンを変更して、8 つの vCPU を使用できるようにします。これは、1 つの NUMA ノードに収まらないことを意味します。

    したがって、各 NUMA ノードに 4 つの vCPU を分散し、vCPU トポロジーをホストトポロジーに可能な限り近づけるようにする必要があります。つまり、指定の物理 CPU のシブリングスレッドとして実行される vCPU は、同じコア上のホストスレッドに固定 (ピニング) される必要があります。詳細は、以下の ソリューション を参照してください。

ソリューション

  1. ホストトポロジーに関する情報を取得します。

    # virsh capabilities

    この出力には、以下のようなセクションが含まれます。

    <topology>
      <cells num="2">
        <cell id="0">
          <memory unit="KiB">15624346</memory>
          <pages unit="KiB" size="4">3906086</pages>
          <pages unit="KiB" size="2048">0</pages>
          <pages unit="KiB" size="1048576">0</pages>
          <distances>
            <sibling id="0" value="10" />
            <sibling id="1" value="21" />
          </distances>
          <cpus num="6">
            <cpu id="0" socket_id="0" core_id="0" siblings="0,3" />
            <cpu id="1" socket_id="0" core_id="1" siblings="1,4" />
            <cpu id="2" socket_id="0" core_id="2" siblings="2,5" />
            <cpu id="3" socket_id="0" core_id="0" siblings="0,3" />
            <cpu id="4" socket_id="0" core_id="1" siblings="1,4" />
            <cpu id="5" socket_id="0" core_id="2" siblings="2,5" />
          </cpus>
        </cell>
        <cell id="1">
          <memory unit="KiB">15624346</memory>
          <pages unit="KiB" size="4">3906086</pages>
          <pages unit="KiB" size="2048">0</pages>
          <pages unit="KiB" size="1048576">0</pages>
          <distances>
            <sibling id="0" value="21" />
            <sibling id="1" value="10" />
          </distances>
          <cpus num="6">
            <cpu id="6" socket_id="1" core_id="3" siblings="6,9" />
            <cpu id="7" socket_id="1" core_id="4" siblings="7,10" />
            <cpu id="8" socket_id="1" core_id="5" siblings="8,11" />
            <cpu id="9" socket_id="1" core_id="3" siblings="6,9" />
            <cpu id="10" socket_id="1" core_id="4" siblings="7,10" />
            <cpu id="11" socket_id="1" core_id="5" siblings="8,11" />
          </cpus>
        </cell>
      </cells>
    </topology>
  2. (必要に応じて) 適用可能なツールおよびユーティリティー を使用して、仮想マシンのパフォーマンスをテストします。
  3. ホストに 1 GiB の Huge Page を設定してマウントします。

    1. ホストのカーネルコマンドラインに次の行を追加します。

      default_hugepagesz=1G hugepagesz=1G
    2. /etc/systemd/system/hugetlb-gigantic-pages.service ファイルを以下の内容で作成します。

      [Unit]
      Description=HugeTLB Gigantic Pages Reservation
      DefaultDependencies=no
      Before=dev-hugepages.mount
      ConditionPathExists=/sys/devices/system/node
      ConditionKernelCommandLine=hugepagesz=1G
      
      [Service]
      Type=oneshot
      RemainAfterExit=yes
      ExecStart=/etc/systemd/hugetlb-reserve-pages.sh
      
      [Install]
      WantedBy=sysinit.target
    3. /etc/systemd/hugetlb-reserve-pages.sh ファイルを以下の内容で作成します。

      #!/bin/sh
      
      nodes_path=/sys/devices/system/node/
      if [ ! -d $nodes_path ]; then
      	echo "ERROR: $nodes_path does not exist"
      	exit 1
      fi
      
      reserve_pages()
      {
      	echo $1 > $nodes_path/$2/hugepages/hugepages-1048576kB/nr_hugepages
      }
      
      reserve_pages 4 node1
      reserve_pages 4 node2

      これにより、4 つの 1GiB の Huge Page が node1 から予約され、さらに別の 4 つの 1 GiB の Huge Page が node2 から予約されます。

    4. 前の手順で作成したスクリプトを実行ファイルにします。

      # chmod +x /etc/systemd/hugetlb-reserve-pages.sh
    5. システムの起動時に Huge Page 予約を有効にします。

      # systemctl enable hugetlb-gigantic-pages
  4. virsh edit コマンドを使用して、最適化する仮想マシンの XML 設定 (この例では super-VM) を編集します。

    # virsh edit super-vm
  5. 次の方法で仮想マシンの XML 設定を調整します。

    1. 仮想マシンが 8 つの静的 vCPU を使用するように設定します。これを行うには、<vcpu/> 要素を使用します。
    2. トポロジーでミラーリングする、対応するホスト CPU スレッドに、各 vCPU スレッドをピニングします。これを行うには、<cputune> セクションの <vcpupin/> 要素を使用します。

      上記の virsh 機能 ユーティリティーで示されているように、ホストの CPU スレッドは、各コアで連続的に順次付けされません。また、vCPU スレッドは、同じ NUMA ノード上のホストのコアの利用可能な最大セットに固定される必要があります。表の図については、以下の 関連情報 セクションを参照してください。

      手順 a と b の XML 構成は次のようになります。

      <cputune>
        <vcpupin vcpu='0' cpuset='1'/>
        <vcpupin vcpu='1' cpuset='4'/>
        <vcpupin vcpu='2' cpuset='2'/>
        <vcpupin vcpu='3' cpuset='5'/>
        <vcpupin vcpu='4' cpuset='7'/>
        <vcpupin vcpu='5' cpuset='10'/>
        <vcpupin vcpu='6' cpuset='8'/>
        <vcpupin vcpu='7' cpuset='11'/>
        <emulatorpin cpuset='6,9'/>
      </cputune>
    3. 1 GiB の Huge Page を使用するように仮想マシンを設定します。

      <memoryBacking>
        <hugepages>
          <page size='1' unit='GiB'/>
        </hugepages>
      </memoryBacking>
    4. ホスト上で対応する NUMA ノードからメモリーを使用するように、仮想マシンの NUMA ノードを設定します。これを行うには、<numatune/> セクションの <memnode/> 要素を使用します。

      <numatune>
        <memory mode="preferred" nodeset="1"/>
        <memnode cellid="0" mode="strict" nodeset="0"/>
        <memnode cellid="1" mode="strict" nodeset="1"/>
      </numatune>
    5. CPU モードが host-passthrough に設定され、CPU が パススルー モードでキャッシュを使用していることを確認します。

      <cpu mode="host-passthrough">
        <topology sockets="2" cores="2" threads="2"/>
        <cache mode="passthrough"/>
  6. 作成される仮想マシンの XML 設定には、以下のようなセクションが含まれます。

    [...]
      <memoryBacking>
        <hugepages>
          <page size='1' unit='GiB'/>
        </hugepages>
      </memoryBacking>
      <vcpu placement='static'>8</vcpu>
      <cputune>
        <vcpupin vcpu='0' cpuset='1'/>
        <vcpupin vcpu='1' cpuset='4'/>
        <vcpupin vcpu='2' cpuset='2'/>
        <vcpupin vcpu='3' cpuset='5'/>
        <vcpupin vcpu='4' cpuset='7'/>
        <vcpupin vcpu='5' cpuset='10'/>
        <vcpupin vcpu='6' cpuset='8'/>
        <vcpupin vcpu='7' cpuset='11'/>
        <emulatorpin cpuset='6,9'/>
      </cputune>
      <numatune>
        <memory mode="preferred" nodeset="1"/>
        <memnode cellid="0" mode="strict" nodeset="0"/>
        <memnode cellid="1" mode="strict" nodeset="1"/>
      </numatune>
      <cpu mode="host-passthrough">
        <topology sockets="2" cores="2" threads="2"/>
        <cache mode="passthrough"/>
        <numa>
          <cell id="0" cpus="0-3" memory="2" unit="GiB">
            <distances>
              <sibling id="0" value="10"/>
              <sibling id="1" value="21"/>
            </distances>
          </cell>
          <cell id="1" cpus="4-7" memory="2" unit="GiB">
            <distances>
              <sibling id="0" value="21"/>
              <sibling id="1" value="10"/>
            </distances>
          </cell>
        </numa>
      </cpu>
    </domain>
  7. (必要に応じて) アプリケーションツールおよびユーティリティー を使用して仮想マシンのパフォーマンスをテストし、仮想マシンの最適化への影響を評価します。

関連情報

  • 以下の表は、ピニングされる必要のある vCPU とホストCPU 間の接続を示しています。

    表16.1 ホストトポロジー

    CPU スレッド

    0

    3

    1

    4

    2

    5

    6

    9

    7

    10

    8

    11

    コア

    0

    1

    2

    3

    4

    5

    ソケット

    0

    1

    NUMA ノード

    0

    1

    表16.2 仮想マシントポロジー

    vCPU スレッド

    0

    1

    2

    3

    4

    5

    6

    7

    コア

    0

    1

    2

    3

    ソケット

    0

    1

    NUMA ノード

    0

    1

    表16.3 ホストと仮想マシントポロジーの組み合わせ

    vCPU スレッド

     

    0

    1

    2

    3

     

    4

    5

    6

    7

    ホストの CPU スレッド

    0

    3

    1

    4

    2

    5

    6

    9

    7

    10

    8

    11

    コア

    0

    1

    2

    3

    4

    5

    ソケット

    0

    1

    NUMA ノード

    0

    1

    このシナリオでは、2 つの NUMA ノードと 8 つの vCPU があります。したがって、4 つの vCPU スレッドは各ノードに固定 (ピニング) される必要があります。

    また、Red Hat では、ホストシステムの操作に対して、各ノードに少なくとも 1 つの CPU スレッドを使用することを推奨します。

    以下の例では、NUMA ノードにはそれぞれ 3 コアで、2 個のホスト CPU スレッドがあるため、ノード 0 のセットは、以下のように変換できます。

    <vcpupin vcpu='0' cpuset='1'/>
    <vcpupin vcpu='1' cpuset='4'/>
    <vcpupin vcpu='2' cpuset='2'/>
    <vcpupin vcpu='3' cpuset='5'/>

16.6. 仮想マシンのネットワークパフォーマンスの最適化

仮想マシンのネットワークインターフェースカード (NIC) の性質上、仮想マシンは、割り当てられているホストネットワークの帯域幅の一部を失います。これにより、仮想マシンの全体的なワークロード効率が削減されることがあります。以下のヒントは、仮想 NIC (vNIC) のスループットで仮想化の影響を最小限に抑えることができます。

手順

以下の方法のいずれかを使用し、仮想マシンのネットワークパフォーマンスにメリットがあるかどうかを調べます。

vhost_net モジュールの有効化

ホストで vhost_net カーネル機能が有効になっていることを確認します。

# lsmod | grep vhost
vhost_net              32768  1
vhost                  53248  1 vhost_net
tap                    24576  1 vhost_net
tun                    57344  6 vhost_net

このコマンドの出力が空白である場合は、vhost_net カーネルモジュールを有効にします。

# modprobe vhost_net
マルチキュー virtio-net の設定

仮想マシンに マルチキュー virtio-net 機能を設定するには、virsh edit コマンドを使用して、仮想マシンの XML 設定を編集します。XML で、以下を <devices> セクションに追加し、N を、仮想マシンの vCPU 数 (最大 16) に変更します。

<interface type='network'>
      <source network='default'/>
      <model type='virtio'/>
      <driver name='vhost' queues='N'/>
</interface>

仮想マシンが実行中の場合は、再起動して変更を適用します。

vhost のゼロコピー送信の設定

大規模なパケットサイズでネットワークを使用している場合は、vhost のゼロコピー送信 機能を有効にします。

この機能は、ゲストネットワークと外部ネットワークとの間で大規模なパケットを送信する場合に限りパフォーマンスが向上することに注意してください。これは、ゲストとゲスト間、およびゲストとホスト間のワークロードのパフォーマンスには影響を与えません。また、おそらく、小さいパケットのワークロードのパフォーマンスに影響を及ぼす可能性があります。

また、ゼロコピー送信を有効にすると、パケットの HOT (head-of-line) ブロッキングが発生するため、セキュリティーリスクが発生する可能性があります。

vhost のゼロコピー送信を有効にするには、以下を実行します。

  1. ホストで、vhost-net カーネルモジュールを無効にします。

    # modprobe -r vhost_net
  2. ゼロコピーパラメーターを有効にして、vhost-net モジュールを再度有効にします。

    # modprobe vhost-net experimental_zcopytx=1
  3. ゼロコピー送信を有効にできたかどうかを確認します。

    # cat /sys/module/vhost_net/parameters/experimental_zcopytx
    1
ネットワークパケットのバッチ処理

転送パスが長い Linux の仮想マシン設定では、パケットをバッチ処理してからカーネルに送信することで、キャッシュが有効に活用される場合があります。パケットバッチ機能を設定するには、ホストで次のコマンドを実行し、tap0 を、仮想マシンが使用するネットワークインターフェースの名前に置き換えます。

# ethtool -C tap0 rx-frames 128
SR-IOV
ホストの NIC が SR-IOV に対応している場合は、vNIC に SR-IOV デバイス割り当てを使用します。詳細は「SR-IOV デバイスの管理」を参照してください。

関連情報

16.7. 仮想マシンのパフォーマンス監視ツール

最も多くの仮想マシンリソースを消費するものと、仮想マシンで最適化を必要とする部分を認識するために、一般的なパフォーマンス診断ツールや仮想マシン固有のパフォーマンス診断ツールを使用できます。

デフォルトの OS パフォーマンス監視ツール

標準のパフォーマンス評価には、ホストおよびゲストのオペレーティングシステムでデフォルトで提供されるユーティリティーを使用できます。

  • RHEL 8 ホストで、root として top ユーティリティーまたは システムモニター アプリケーションを使用し、出力結果から qemuvirt を見つけます。これは、仮想マシンが消費しているホストシステムのリソースのサイズを示します。

    • 監視ツールにおいて、qemu プロセスまたは virt プロセスのいずれかで、ホストの CPU またはメモリーの容量を大幅に消費していることが示されている場合は、perf ユーティリティを使用して調査を行います。詳細は以下を参照してください。
    • また、vhost_net スレッドプロセス (例: vhost_net-1234) が、ホストの CPU 容量を過剰に消費する際に表示される場合は、マルチキュー virtio-net などの 仮想ネットワークの最適化機能 を使用することを検討してください。
  • ゲストオペレーティングシステムでは、システムで利用可能なパフォーマンスユーティリティーとアプリケーションを使用して、どのプロセスが最も多くのシステムリソースを消費するかを評価します。

    • Linux システムでは、top ユーティリティを使用できます。
    • Windows システムでは、Task Manager アプリケーションを使用できます。

perf kvm

perf ユーティリティーを使用して、RHEL 8 ホストのパフォーマンスに関する仮想化固有の統計を収集および分析できます。これを行うには、以下のように行います。

  1. ホストに、perf パッケージをインストールします。

    # yum install perf
  2. perf kvm stat コマンドを使用して、仮想化ホストの perf 統計を表示します。

    • お使いのハイパーバイザーのリアルタイム監視には、perf kvm stat live コマンドを使用します。
    • 一定期間でハイパーバイザーの perf データをログに記録するには、perf kvm stat record コマンドを使用してロギングを有効にします。コマンドをキャンセルまたは中断した後、データは perf.data.guest ファイルに保存されます。これは、perf kvm stat report コマンドを使用して分析できます。
  3. VM-EXIT イベントとそのディストリビューションのタイプについて perf 出力を分析します。たとえば、PAUSE_INSTRUCTION イベントは頻繁に存在すべきではありませんが、以下の出力では、このイベントが頻繁に現れ、ホスト CPU が vCPU を適切に処理していないことを示しています。このようなシナリオでは、アクティブな一部の仮想マシンの電源オフ、その仮想マシンからの vCPU の削除、または vCPU のパフォーマンスの調整 を検討してください。

    # perf kvm stat report
    
    Analyze events for all VMs, all VCPUs:
    
    
                 VM-EXIT    Samples  Samples%     Time%    Min Time    Max Time         Avg time
    
      EXTERNAL_INTERRUPT     365634    31.59%    18.04%      0.42us  58780.59us    204.08us ( +-   0.99% )
               MSR_WRITE     293428    25.35%     0.13%      0.59us  17873.02us      1.80us ( +-   4.63% )
        PREEMPTION_TIMER     276162    23.86%     0.23%      0.51us  21396.03us      3.38us ( +-   5.19% )
       PAUSE_INSTRUCTION     189375    16.36%    11.75%      0.72us  29655.25us    256.77us ( +-   0.70% )
                     HLT      20440     1.77%    69.83%      0.62us  79319.41us  14134.56us ( +-   0.79% )
                  VMCALL      12426     1.07%     0.03%      1.02us   5416.25us      8.77us ( +-   7.36% )
           EXCEPTION_NMI         27     0.00%     0.00%      0.69us      1.34us      0.98us ( +-   3.50% )
           EPT_MISCONFIG          5     0.00%     0.00%      5.15us     10.85us      7.88us ( +-  11.67% )
    
    Total Samples:1157497, Total events handled time:413728274.66us.

    perf kvm stat の出力で問題を知らせる他のイベントタイプには、以下が含まれます。

perf を使用した仮想パフォーマンスを監視する方法は、man ページの perf-kvm を参照してください。

numastat

システムの現在の NUMA 設定を表示するには、numastat ユーティリティーを使用できます。これは numactl パッケージをインストールすることで利用できます。

以下は、4 つの実行中の仮想マシンが含まれるホストを示しています。それぞれは、複数の NUMA ノードからメモリーを取得しています。これは、vCPU のパフォーマンスに対して最適なのではなく、保証調整 です。

# numastat -c qemu-kvm

Per-node process memory usage (in MBs)
PID              Node 0 Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Node 7 Total
---------------  ------ ------ ------ ------ ------ ------ ------ ------ -----
51722 (qemu-kvm)     68     16    357   6936      2      3    147    598  8128
51747 (qemu-kvm)    245     11      5     18   5172   2532      1     92  8076
53736 (qemu-kvm)     62    432   1661    506   4851    136     22    445  8116
53773 (qemu-kvm)   1393      3      1      2     12      0      0   6702  8114
---------------  ------ ------ ------ ------ ------ ------ ------ ------ -----
Total              1769    463   2024   7462  10037   2672    169   7837 32434

一方、以下では、1 つのノードで各仮想マシンに提供されているメモリーを示しています。これは、より一層効率的です。

# numastat -c qemu-kvm

Per-node process memory usage (in MBs)
PID              Node 0 Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Node 7 Total
---------------  ------ ------ ------ ------ ------ ------ ------ ------ -----
51747 (qemu-kvm)      0      0      7      0   8072      0      1      0  8080
53736 (qemu-kvm)      0      0      7      0      0      0   8113      0  8120
53773 (qemu-kvm)      0      0      7      0      0      0      1   8110  8118
59065 (qemu-kvm)      0      0   8050      0      0      0      0      0  8051
---------------  ------ ------ ------ ------ ------ ------ ------ ------ -----
Total                 0      0   8072      0   8072      0   8114   8110 32368

第17章 Windows 仮想マシンのインストールおよび管理

RHEL 8 ホスト上の仮想マシンでゲストオペレーティングシステムとして Microsoft Windows を使用するには、この仮想マシンが正しく実行されるように追加の手順を実行することが推奨されます。

このため、以下のセクションでは、ホストマシンに Windows 仮想マシンをインストールし、最適化する方法を説明します。また、Windows 仮想マシンにドライバーをインストールし、設定する方法を説明します。

17.1. Windows 仮想マシンのインストール

ここでは、RHEL 8 ホストで完全仮想化 Windows マシンを作成し、仮想マシン内でグラフィカル Windows インストーラーを起動し、インストールした Windows ゲストオペレーティングシステム (OS) を最適化する方法を説明します。

仮想マシンを作成して、virt-install コマンドまたは RHEL 8 Web コンソールを使用してインストールできます。

前提条件

  • ローカルまたはネットワークで利用可能な OS のインストールソースがある。次のいずれかになります。

    • インストールメディアの ISO イメージ
    • 既存の仮想マシンインストールのディスクイメージ
  • KVM virtio ドライバーを備えた記憶媒体がある。

    このメディアを作成するには、「ホストマシンでの virtio ドライバーインストールメディアの準備」を参照してください。

手順

  1. 仮想マシンを作成します。手順は「仮想マシンの作成」を参照してください。

    • virt-install ユーティリティーを使用して仮想マシンを作成する場合は、次のオプションをコマンドに追加します。

      • KVM virtio ドライバーを備えた記憶媒体。以下に例を示します。

        --disk path=/usr/share/virtio-win/virtio-win.iso,device=disk,bus=virtio
      • インストールする Windows バージョン。たとえば、Windows 10 の場合は以下のようになります。

        --os-variant win10

        Windows のバージョンと、適切なオプションの一覧を表示するには、次のコマンドを実行します。

        # osinfo-query os
    • Web コンソールを使用して仮想マシンを作成する場合は、仮想マシンの新規作成 画面の オペレーティングシステム フィールドで Windows のバージョンを指定します。仮想マシンを作成してゲスト OS をインストールしたら、Disks インターフェースを使用して virtio ドライバーを含むストレージメディアを仮想マシンに接続します。手順は「Web コンソールで既存ディスクを仮想マシンに割り当て」を参照してください。
  2. 仮想マシンに Windows OS をインストールします。

    Windows オペレーティングシステムのインストール方法は、関連する Microsoft インストールドキュメントを参照してください。

  3. Windows ゲスト OS で、KVM virtio ドライバーを構成します。詳細は「Windows 仮想マシン用の KVM 準仮想化ドライバーのインストール」を参照してください。

関連情報

17.2. Windows 仮想マシンの最適化

RHEL 8 でホストされる仮想マシンで Microsoft Windows をゲストオペレーティングシステムとして使用すると、ゲストのパフォーマンスが悪影響を受ける可能性があります。

そのため、Red Hat は、以下のいずれかを組み合わせて実行して Windows 仮想マシンを最適化することを推奨しています。

17.2.1. Windows 仮想マシン用の KVM 準仮想化ドライバーのインストール

Windows 仮想マシンのパフォーマンスを改善する主な方法は、Windows 用の KVM 準仮想化 (virtio) ドライバーをゲストオペレーティングシステム (OS) にインストールすることです。

改善点を報告する場合は、以下のように行います。

  1. ホストマシンにインストールメディアを準備します。詳細は「ホストマシンでの virtio ドライバーインストールメディアの準備」を参照してください。
  2. インストールメディアを既存の Windows 仮想マシンに添付するか、新しいWindows 仮想マシンを作成する ときに添付します。
  3. Windows ゲストオペレーティングシステムに virtio ドライバーをインストールします。詳細は「Windows ゲストへの virtio ドライバーのインストール」を参照してください。

17.2.1.1. Windows virtio ドライバーの仕組み

準仮想化ドライバーは仮想マシンのパフォーマンスを向上し、I/O レイテンシーを下げ、ベアメタルレベルまでスループットを増加させます。Red Hat は、I/O 負荷の高いタスクとアプリケーションを実行する仮想マシンには、準仮想化ドライバーを使用することを推奨します。

virtio ドライバーは、KVM ホストで実行する Windows 仮想マシンで利用可能な、KVM の準仮想化デバイスドライバーです。これらのドライバーは、virtio-win パッケージにより提供されます。これには、以下のドライバーが含まれます。

  • ブロック (ストレージ) デバイス
  • ネットワークインターフェースコントローラー
  • ビデオコントローラー
  • メモリーバルーニングデバイス
  • 準仮想化シリアルポートデバイス
  • エントロピーソースデバイス
  • 準仮想化パニックデバイス
  • マウス、キーボード、タブレットなどの入力デバイス
  • エミュレートされたデバイスの小規模セット
注記

エミュレートされたデバイス、virtio デバイス、および割り当てられたデバイスの詳細は、10章仮想デバイスの管理を参照してください。

KVM の virtio ドライバーを使用すると、以下の Microsoft Windows バージョンが、物理システムと同様のバージョンのように動作することが見込まれます。

  • Windows Server バージョン - Red Hat ナレッジベースの「Red Hat Enterprise Linux の KVM で認定されているゲスト OS」を参照してください。
  • Windows Desktop (サーバー以外の) バージョン:

    • Windows 7 (32 ビットおよび 64 ビットバージョン)
    • Windows 8 (32 ビットおよび 64 ビットバージョン)
    • Windows 8.1 (32 ビットおよび 64 ビットバージョン)
    • Windows 10 (32 ビットおよび 64 ビットバージョン)

17.2.1.2. ホストマシンでの virtio ドライバーインストールメディアの準備

KVM virtio ドライバーを Windows 仮想マシンにインストールするには、まずホストマシン上に virtio ドライバーのインストールメディアを準備する必要があります。これを行うには、ホストマシンに virtio-win パッケージをインストールし、仮想マシンのストレージとして提供される .iso ファイルを使用します。

前提条件

  • RHEL 8 ホストシステムで仮想化が 有効 になっていることを確認します。

手順

  1. ドライバーをダウンロードします。

    1. Red Hat Enterprise Linux のダウンロード に進みます。
    2. システムアーキテクチャーに関連する 製品バリアント を選択します。たとえば、Intel 64 および AMD64 の場合は、Red Hat Enterprise Linux for x86_64 を選択します。
    3. Version8 であることを確認します。
    4. Packages で、virtio-win を検索します。
    5. 最新のダウンロード をクリックします。

      RPM ファイルがダウンロードされます。

  2. ダウンロードディレクトリーから virtio-win パッケージをインストールします。以下に例を示します。

    # yum install ~/Downloads/virtio-win-1.9.9-3.el8.noarch.rpm
    [...]
    Installed:
      virtio-win-1.9.9-3.el8.noarch

    インストールが成功すると、virtio-win ドライバーファイルが /usr/share/virtio-win/ ディレクトリーに置かれます。これには、ISO ファイルと、ディレクトリーにドライバーファイルを持つ drivers ディレクトリー (各アーキテクチャーと対応している Windows バージョン用のファイル) が含まれます。

    # ls /usr/share/virtio-win/
    drivers/  guest-agent/  virtio-win-1.9.9.iso  virtio-win.iso
  3. virtio-win.iso ファイルを Windows 仮想マシンに割り当てます。これを行うには、以下のいずれかを行います。

    • Windows 仮想マシンを新たに作成する 際に、ファイルをディスクとして使用します。
    • ファイルを CD-ROM として既存の Windows 仮想マシンに追加します。以下に例を示します。

      # virt-xml WindowsVM --add-device --disk virtio-win.iso,device=cdrom
      Domain 'WindowsVM' defined successfully.

関連情報

17.2.1.3. Windows ゲストへの virtio ドライバーのインストール

KVM virtio ドライバーを Windows ゲストオペレーティングシステムにインストールするには、仮想マシンの作成時またはその後にドライバーを含むストレージデバイスを追加し、Windows ゲストオペレーティングシステムにドライバーをインストールする必要があります。

前提条件

手順

  1. Windows ゲスト OS で、File Explorer アプリケーションを開きます。
  2. この PC をクリックします。
  3. デバイスおよびドライブ ペインで、virtio-win メディアを開きます。
  4. 仮想マシンの vCPU のアーキテクチャーに基づいて、メディア上でインストーラーのいずれかを実行します。

    • 32 ビット vCPU を使用している場合は、virtio-win-gt-x86 インストーラーを実行します。
    • 64 ビット vCPU を使用している場合は、virtio-win-gt-x64 インストーラーを実行します。
    virtio win インストーラー 1
  5. 表示された Virtio-win-guest-tools セットアップウィザードで表示される指示に従い、カスタムセットアップ まで進みます。

    virtio win インストーラー 2
  6. カスタムセットアップ画面で、インストールするデバイスドライバーを選択します。推奨されるドライバーセットが自動的に選択され、ドライバーの説明が一覧の右側に表示されます。
  7. 次へ をクリックして、インストール をクリックします。
  8. インストールが完了したら、完了 をクリックします。
  9. 仮想マシンを再起動してドライバーのインストールを完了します。

検証

  1. この PC で、システムディスクを開きます。通常、これは (C:) です。
  2. Program Files ディレクトリーで、Virtio-Win ディレクトリーを開きます。

    Virtio-Win ディレクトリーが存在し、選択したドライバーのサブディレクトリーが含まれている場合は、インストールが成功しています。

    virtio win インストーラー 3

関連情報

  • グラフィカルインターフェースではなく、Microsoft Windows Installer (MSI) コマンドラインインターフェース (CLI) を使用してドライバーをインストールできます。MSI の詳細は、Microsoft のドキュメント を参照してください。
  • NetKVM ドライバーをインストールする場合は、Windows ゲストのネットワークパラメーターを設定する必要もあります。手順は「NetKVM ドライバーパラメーターの設定」を参照してください。

17.2.2. Hyper-V Enlightenment の有効化

Hyper-V Enlightenment では、KVM が Microsoft Hyper-V ハイパーバイザーをエミュレートするための方法を利用できます。これにより、Windows 仮想マシンのパフォーマンスが向上します。

以下のセクションは、対応している Hyper-V Enlightenment と、その有効化に関する情報を提供します。

17.2.2.1. Windows 仮想マシンでの Hyper-V Englightenment の有効化

Hyper-V Enlightenment により、RHEL 8 ホストで実行している Windows 仮想マシンでパフォーマンスが向上します。それを有効にする方法は、次を参照してください。

手順

  1. 仮想マシンの XML 設定を編集し、Hyper-V Enlightenment を追加します。次のコマンドでは、$VMNAME を、Windows 仮想マシンの名前に置き換えます。

    # virt-xml $VMNAME --edit --features hyperv_relaxed=on,hyperv_vapic=on,hyperv_spinlocks=on,hyperv_spinlocks_retries=8191,hyperv_vpindex=on,hyperv_runtime=on,hyperv_synic=on,hyperv_stimer=on,hyperv_frequencies=on
    
    # virt-xml $VMNAME --edit --clock hypervclock_present=yes
  2. 仮想マシンを起動します。

検証

  • virsh dumpxml コマンドを使用して、変更された仮想マシンの XML 構成を表示します。次のセグメントが含まれている場合は、Hyper-V Enlightenment が仮想マシンで有効になります。

    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
      <vpindex state='on'/>
      <runtime state='on' />
      <synic state='on'/>
      <stimer state='on'/>
      <frequencies state='on'/>
    </hyperv>
    
    <clock offset='localtime'>
      <timer name='hypervclock' present='yes'/>
    </clock>

17.2.2.2. 対応している Hyper-V Enlightenment

以下は、各 Enlightenment の機能の説明とともに Hyper-V Englightenment のリストです。

Hyper-V Enlightenment

clock
Windows 仮想マシンで使用する仮想タイムソースとオフセットを定義します。
frequencies
Hyper-V 周波数 MSR (Machine Specific Registeres) を有効にします。
relaxed
仮想マシンを高負荷のホストで実行すると、一般的に BSOD に陥る Windows のサニティチェックを無効化します。これは、Linux カーネルオプション no_timer_check と似ています。これは、Linux が KVM で実行している場合に自動的に有効になります。
runtime
仮想プロセッサーの実行時間を指定します。
spinlock
  • 仮想マシンのオペレーティングシステムによって使用され、呼び出し仮想プロセッサーが同じパーティション内の別の仮想プロセッサーで保持する可能性があるリソースを取得することをハイパーバイザーに通知します。
  • ハイパーバイザーに過度のスピン状況を示す前に、スピンロックの取得が施行されるべき回数についてを仮想マシンのオペレーティングシステムに示すためにハイパーバイザーによって使用されます。
synic
stimer とともに、synic タイマーをアクティブにします。Windows 8 では、この機能は定期的なモードで使用します。
vapic
高負荷のメモリーマッピングされた APIC (Advanced Programmable Interrupt Controller) レジスターへのアクセラレート MSR アクセスを提供します。
vpindex
仮想プロセッサーのインデックスを指定します。

17.2.3. NetKVM ドライバーパラメーターの設定

NetKVM ドライバーをインストールした後は、ご使用の環境に応じて設定を行うことができます。本セクションのパラメーターは、Windows デバイスマネージャー (devmgmt.msc) を使用して設定できます。

重要

ドライバーのパラメーターを変更すると、Windows はそのドライバーを再読み込みします。これにより、既存のネットワークアクティビティーが中断します。

前提条件

手順

  1. Windows デバイスマネージャーを開きます。

    Device Manager を開く方法は、Windows のドキュメントを参照してください。

  2. Red Hat VirtIO Ethernet Adapter を見つけます。

    1. Device Manager 画面で、Network アダプターの隣にある + をクリックします。
    2. ネットワークアダプターの一覧で、Red Hat VirtIO Ethernet Adapter をダブルクリックします。デバイスのプロパティー画面が開きます。
  3. デバイスパラメーターを表示します。

    プロパティー画面で、詳細 タブをクリックします。

  4. デバイスパラメーターを変更します。

    1. 変更するパラメーターをクリックします。そのパラメーターのオプションが表示されます。
    2. 必要に応じてオプションを変更します。

      NetKVM パラメーターオプションの詳細は、「NetKVM ドライバーパラメーター」を参照してください。

    3. OK をクリックして変更を保存します。

17.2.4. NetKVM ドライバーパラメーター

以下の表は、設定可能な NetKVM ドライバーのロギングパラメーターに関する情報を提供します。

表17.1 ロギングパラメーター

パラメーター説明 2

logging.Enable

ロギングが有効であるかどうかを決定するブール値。デフォルト値は Enabled です。

logging.Level

ロギングレベルを定義する整数。この整数を高くすると、ログの詳細度が上がります。

  • デフォルト値は 0 (エラーのみ) です。
  • 1-2 は設定メッセージを追加します。
  • 3-4 は、パケットフロー情報を追加します。
  • 5-6 は割り込みおよび DPC レベルのトレース情報を追加します。
注記

ロギングレベルが高くなると、仮想マシンの速度が低下します。

以下の表は、設定可能な NetKVM ドライバーの初期パラメーターに関する情報を提供します。

表17.2 初期パラメーター

パラメーター説明

Assign MAC

準仮想化 NIC のローカル管理 MAC アドレスを定義する文字列。これはデフォルトでは設定されません。

Init.ConnectionRate(Mb)

1 秒あたりのメガバイト単位の接続速度を表す整数。Windows 2008 以降のデフォルト値は 10G (10,000/秒)です。

Init.Do802.1PQ

Priority/VLAN タグポピュレーションと削除サポートを有効にするブール値。デフォルト値は Enabled です。

Init.MTUSize

最大伝送単位 (MTU) を定義する整数。デフォルト値は 1500 です。500 から 65500 までの値はすべて受け入れ可能です。

Init.MaxTxBuffers

割り当てられた TX リング記述子の数を表す整数。

デフォルト値は 1024 です。

有効な値は、16、32、64、128、256、512、1024 です。

Init.MaxRxBuffers

割り当てられた RX リング記述子の数を表す整数。

デフォルト値は 256 です。

有効な値は、16、32、64、128、256、512、1024 です。

Offload.Tx.Checksum

TX チェックサムオフロードモードを指定します。

Red Hat Enterprise Linux 8 では、このパラメーターの有効な値は次のとおりです。

* IPv4 と IPv6 の両方で IP、TCP、および UDP チェックサムオフロードを有効にするすべて (デフォルト)

* IPv4 と IPv6 の両方で TCP および UDP チェックサムオフロードを有効にする TCP/UDP (v4,v6)

* IPv4 でのみ TCP および UDP チェックサムオフロードを有効にする TCP/UDP (v4)

* IPv4 でのみ TCP (v4) チェックサムオフロードを有効にする TCP (v4)

第18章 入れ子仮想マシンの作成

RHEL 8.2 以降では、Intel ホストで KVM の ネストされた仮想化 機能に完全に対応します。これにより、RHEL 8 物理ホスト (レベル 0 または L0) で実行される仮想マシン (レベル 1 または L1) がハイパーバイザーとして機能し、独自の仮想マシン (レベル 2 または L2) を作成できるようになります。

つまり、RHEL 8 ホストは L1 仮想マシンを実行でき、各仮想マシンはネストされた L2 仮想マシンをホストできます。

ネストされた仮想化は、制約のある環境でハイパーバイザーをデバッグしたり、一定量の物理リソースで大規模な仮想デプロイメントをテストするなど、さまざまなシナリオで役立ちます。ただし、ネストされた仮想化は実稼働環境では推奨されないため、機能上の制限 を受けており、主に開発およびテストを目的としています。

複数のアーキテクチャーでネストされた仮想マシンを作成することはできますが、現在、Red Hat は、