Windows 仮想マシンの設定と管理


Red Hat Enterprise Linux 10

ホストのセットアップ、仮想マシンの作成と管理、仮想化機能の詳細

Red Hat Customer Content Services

概要

Red Hat Enterprise Linux (RHEL) の仮想化機能を使用すると、仮想マシン (VM) を実行するようにホストを設定できます。仮想マシンを使用すると、さまざまなオペレーティングシステムを使用したり、ローカルホスト上で個別のコンピューティング環境を構築したりできます。

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

Red Hat ドキュメントに関するご意見やご感想をお寄せください。また、改善点があればお知らせください。

Jira からのフィードバック送信 (アカウントが必要)

  1. Jira の Web サイトにログインします。
  2. 上部のナビゲーションバーで Create をクリックします。
  3. Summary フィールドにわかりやすいタイトルを入力します。
  4. Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
  5. ダイアログの下部にある Create をクリックします。

第1章 RHEL における仮想化の基本概念

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

1.1. 仮想化とは

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

つまり、仮想化により、オペレーティングシステム内にオペレーティングシステムを配置することが可能になります。

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

仮想化の詳細は、仮想化のトピックページ を参照してください。

次のステップ

1.2. 仮想化の利点

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

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

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

    たとえば、ゲスト OS がディスクとして認識するものは、ホストファイルシステム上のファイルとして表すことができ、そのディスクのサイズは、物理ディスクで使用可能なサイズよりも制約が少なくなります。

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

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

    また、仮想マシンの現在の状態は、スナップショットとしていつでもバックアップできます。次に、スナップショットを読み込んで、保存された状態にシステムを復元できます。

  • ホストからの分離

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

  • 領域とコスト効率

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

  • ソフトウェアの互換性

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

    注記

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

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

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

ハイパーバイザー

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

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

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

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

XML 設定

ホストベースの XML 設定ファイル (ドメイン XML ファイルとも呼ばれます) では、個別の仮想マシンの設定およびデバイスをすべて決定します。設定には以下が含まれます。

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

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

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

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

注記

QEMU はアーキテクチャーの重要なコンポーネントですが、セキュリティー上の懸念から、RHEL 10 システムで直接使用することは想定されていません。そのため、qemu-* コマンドは Red Hat のサポート対象外です。libvirt を使用して QEMU を操作することを強く推奨します。

ホストベースのインターフェイスの詳細は、仮想化管理用のツールとインターフェイス を参照してください。

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

仮想化アーキテクチャー

1.4. 仮想化管理用のツールとインターフェイス

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

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

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

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

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

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

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

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

RHEL 10 では、次の GUI を使用して仮想化を管理できます。

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

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

1.5. 仮想化のユーザー空間接続タイプ

ホスト上の仮想マシン (VM) は、RHEL 10 ユーザー空間への libvirt 接続タイプとして、次のいずれかを使用します。

システム接続 (qemu:///system)
RHEL 10 の仮想マシン管理に利用可能なすべての機能へのアクセスを提供します。システム 接続で仮想マシンを作成または使用するには、システムに対する root 特権を持っているか、libvirt ユーザーグループに属している必要があります。
セッション接続 (qemu:///session)
libvirt グループに属していない非 root ユーザーは、セッション 接続でのみ仮想マシンを作成できます。セッション接続は、リソースにアクセスする際に、ローカルユーザーのアクセス権を尊重する必要があります。セッション 接続を使用する場合、たとえば、システム接続で作成された仮想マシンや、他のユーザーによって作成された仮想マシンを検出したりアクセスしたりすることはできません。

さらに、session 接続中の仮想マシンでは、次のような root 特権を必要とする機能を使用できません。

  • 高度なネットワーク - システムブリッジや TAP デバイスを設定することはできません。ユーザーはユーザーモード (passt) ネットワークに制限され、仮想マシンの完全な外部可視性を設定することはできません。
  • PCI デバイスパススルー - 仮想マシンの PCI ホストハードウェアのデバイス割り当てを変更することはできません。
  • 自動起動 - セッション 接続の仮想マシンは、システムの起動時に自動的に起動できません。
  • システムレベルのストレージプールと仮想マシンログ - システム 接続では、ストレージプールと仮想マシンのログファイルが、/etc/libvirt/var/lib/libvirt などのシステムディレクトリーに保存されます。セッション 接続では、ユーザーが扱えるファイルが home ディレクトリーに保存されているファイルに制限されます。そのため、ホスト全体のストレージを管理したり、ログを一元的に確認したりすることはできません。

現在の接続タイプを表示するには、ホストで virsh uri コマンドを使用します。

注記

特に明記されていない限り、このドキュメントの情報は、ユーザーが root 特権を持ち、libvirt のシステム接続を使用できることを前提としています。

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

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

OpenShift Virtualization

KubeVirt テクノロジーに基づいて、OpenShift Virtualization は Red Hat OpenShift Container Platform の一部であり、仮想マシンをコンテナーで実行することができます。

OpenShift Virtualization の詳細は、Red Hat ハイブリッドクラウド のページを参照してください。

Red Hat OpenStack Platform (RHOSP)

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

Red Hat OpenStack Platform の詳細は、Red Hat カスタマーポータル または Red Hat OpenStack Platform ドキュメントスイート を参照してください。

第2章 仮想マシンをホストするための RHEL の準備

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

2.1. 仮想マシンをホストするための AMD64 または Intel 64 システムの準備

RHEL 10 を実行する AMD64 または Intel 64 システムで KVM ハイパーバイザーをセットアップし、仮想マシン (VM) を作成するには、必要なサービスを起動します。

前提条件

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

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

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

手順

  1. 仮想化ハイパーバイザーパッケージをインストールします。

    # dnf install qemu-kvm libvirt virt-install virt-viewer
    Copy to Clipboard Toggle word wrap
  2. 仮想化サービスを起動します。

    # for drv in qemu network nodedev nwfilter secret storage interface; do systemctl start virt${drv}d{,-ro,-admin}.socket; done
    Copy to Clipboard Toggle word wrap

検証

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

    # 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)
    Copy to Clipboard Toggle word wrap
  2. virt-host-validate のすべての項目で PASS 値が返された場合は、システムに 仮想マシンを作成 する準備ができています。

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

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

トラブルシューティング

  • KVM 仮想化がホスト CPU でサポートされていない場合は、virt-host-validate は以下の出力を生成します。

    QEMU: Checking for hardware virtualization: FAIL (Only emulated CPUs are available, performance will be significantly limited)
    Copy to Clipboard Toggle word wrap

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

    これを回避するには、仮想マシンの XML 設定の <domain type> 値を qemu に変更します。ただし、Red Hat は qemu ドメインタイプを使用する仮想マシンに対応していないため、実稼働環境ではこれを設定しないことを強く推奨している点に注意してください。

2.2. 仮想マシンでの QEMU ゲストエージェント機能の有効化

RHEL 10 システムでホストされている仮想マシンの特定の機能を使用するには、まず QEMU ゲストエージェント (GA) を使用するように仮想マシンを設定する必要があります。

これらの機能の完全なリストは、QEMU ゲストエージェントを必要とする仮想化機能 を参照してください。

2.2.1. Windows ゲストでの QEMU ゲストエージェントの有効化

Windows 仮想マシンで 一部の操作 を実行することを RHEL ホストに許可するには、QEMU ゲストエージェント (GA) を有効にする必要があります。これを行うには、QEMU ゲストエージェントインストーラーを含むストレージデバイスを、既存の仮想マシンに追加するか、新しい仮想マシンを作成するときに追加し、Windows ゲストオペレーティングシステムにドライバーをインストールします。

グラフィカルインターフェイスを使用してゲストエージェント (GA) をインストールするには、以下の手順を参照してください。GA をコマンドラインでインストールするには、Microsoft Windows インストーラー (MSI) を使用します。

前提条件

手順

  1. Windows ゲストオペレーティングシステムで、File Explorer アプリケーションを開きます。
  2. This PC をクリックします。
  3. Devices and drives ペインで、virtio-win メディアを開きます。
  4. guest-agent フォルダーを開きます。
  5. 仮想マシンにインストールされているオペレーティングシステムに基づいて、次のいずれかのインストーラーを実行します。

    • 32 ビットオペレーティングシステムを使用している場合は、qemu-ga-i386.msi インストーラーを実行します。
    • 64 ビットオペレーティングシステムを使用している場合は、qemu-ga-x86_64.msi インストーラーを実行します。
  6. オプション: ホストと Windows ゲスト間の通信インターフェイスとして準仮想化シリアルドライバー (virtio-serial) を使用する場合は、virtio-serial ドライバーが Windows ゲストにインストールされていることを確認します。

    virtio ドライバーのインストールの詳細は、Windows ゲストへの virtio ドライバーのインストール を参照してください。

検証

  1. Windows 仮想マシンで、Services ウィンドウに移動します。

    Computer Management > Services

  2. QEMU Guest Agent のステータスが Running であることを確認します。

2.2.2. QEMU ゲストエージェントを必要とする仮想化機能

仮想マシン (VM) で QEMU ゲストエージェント (GA) を有効にすると、ホスト上で次のコマンドを使用して仮想マシンを管理できます。

virsh shutdown --mode=agent
このシャットダウン方法は、virsh shutdown --mode=acpi よりも信頼性が高くなります。これは、QEMU GA で使用する virsh shutdown は、確実にクリーンな状態で協調ゲストをシャットダウンするためです。
virsh domfsfreeze および virsh domfsthaw
ゲストファイルシステムを分離してフリーズします。
virsh domfstrim

ゲストにファイルシステムをトリミングするように指示します。これにより、移行中に転送する必要のあるデータを削減できます。

重要

このコマンドを使用して Linux 仮想マシンを管理する場合は、ゲストオペレーティングシステムで次の SELinux ブール値も設定する必要があります。

# setsebool virt_qemu_ga_read_nonsecurity_files on
Copy to Clipboard Toggle word wrap
virsh domtime
ゲストの時計をクエリーまたは設定します。
virsh setvcpus --guest
ゲストに CPU をオフラインにするように指示します。これは、CPU をホットアンプラグできない場合に便利です。
virsh domifaddr --source agent
QEMU GA を使用してゲストオペレーティングシステムの IP アドレスをクエリーします。たとえば、ゲストインターフェイスがホストインターフェイスに直接割り当てられている場合に便利です。
virsh domfsinfo
実行中のゲストにマウントされているファイルシステムのリストを表示します。
virsh set-user-password
ゲストの特定のユーザーアカウントのパスワードを設定します。
virsh set-user-sshkeys

ゲストの特定のユーザーの認可された SSH 鍵ファイルを編集します。

重要

このコマンドを使用して Linux 仮想マシンを管理する場合は、ゲストオペレーティングシステムで次の SELinux ブール値も設定する必要があります。

# setsebool virt_qemu_ga_manage_ssh on
Copy to Clipboard Toggle word wrap

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

RHEL 10 Web コンソールを使用して仮想マシン (VM) を管理する前に、ホストに Web コンソールの仮想マシンプラグインをインストールする必要があります。

前提条件

手順

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

    # dnf install cockpit-machines
    Copy to Clipboard Toggle word wrap

検証

  1. RHEL 10 Web コンソールにログインします。
  2. インストールに成功すると、仮想マシン が Web コンソールのサイドメニューに表示されます。

    Web コンソールの仮想マシンタブを表示するイメージ

第3章 仮想マシンの作成

RHEL 10 で仮想マシン (VM) を作成するには、コマンドラインまたは RHEL 10 Web コンソールを使用できます。

3.1. コマンドラインを使用した仮想マシンの作成

virt-install ユーティリティーを使用して、RHEL 10 ホスト上に仮想マシン (VM) を作成できます。

前提条件

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

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

      警告

      RHEL 10 では、ホストの CD-ROM または DVD-ROM デバイスからインストールすることはできません。RHEL 10 で使用可能な仮想マシンインストール方法を使用するときに、インストールソースとして CD-ROM または DVD-ROM を選択すると、インストールが失敗します。詳細は Red Hat ナレッジベース を参照してください。

      また、Red Hat がサポートするのは、一部のゲストオペレーティングシステム のみであることに注意してください。

  • libvirt の system 接続を使用する仮想マシンを作成するには、root 特権を持っているか、ホスト上の libvirt ユーザーグループに属している必要があります。詳細は、仮想化のユーザー空間接続タイプ を参照してください。
  • 任意: インストールをより速く、簡単に設定するために、キックスタートファイルを利用できます。

手順

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

    --name
    新しいマシンの名前
    --memory
    割り当てるメモリーの量
    --vcpus
    割り当てる仮想 CPU の数
    --disk
    割り当てるストレージの種類とサイズ
    --cdrom または --location
    OS インストールソースの種類と場所
    --osinfo

    インストールする OS の種類とバージョン

    注記

    --osinfo 引数に使用可能なすべての値をリスト表示するには、virt-install --osinfo list コマンドを実行します。

    osinfo-query os コマンドを実行して詳細を参照することもできます。ただし、先に libosinfo-bin パッケージをインストールする必要がある場合があります。

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

  • 仮想マシンを作成し、ローカルの ISO ファイルから 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 --osinfo win10 \
          --cdrom /home/username/Downloads/Win10install.iso
      Copy to Clipboard Toggle word wrap
  • 仮想マシンを作成し、ライブ CD から OS をインストールして、永続ディスクは作成しない:

    • 次のコマンドは、demo-guest2 という名前の仮想マシンを作成し、/home/username/Downloads/rhel10.iso イメージを使用して、ライブ CD から RHEL 10 OS を実行します。この仮想マシンにはディスク領域が割り当てられないため、セッション中に行った変更は保持されません。また、仮想マシンには、4096 MiB の RAM と、4 つの vCPU が割り当てられます。

      # virt-install \
          --name demo-guest2 --memory 4096 --vcpus 4 \
          --disk none --livecd --osinfo rhel10.0 \
          --cdrom /home/username/Downloads/rhel10.iso
      Copy to Clipboard Toggle word wrap
  • 仮想マシンを作成し、既存のディスクイメージをインポートする:

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

      # virt-install \
          --name demo-guest3 --memory 2048 --vcpus 2 \
          --osinfo rhel10.0 --import \
          --disk /home/username/backup/disk.qcow2
      Copy to Clipboard Toggle word wrap

      ディスクイメージをインポートする場合、--osinfo オプションを使用する必要があることに注意してください。このオプションを指定しないと、作成された仮想マシンのパフォーマンスに影響を及ぼします。

  • 仮想マシンを作成し、リモート URL から OS をインストールする:

    • 次のコマンドは、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 \
          --osinfo rhel10.0 --location http://example.com/OS-install \
          --initrd-inject /home/username/ks.cfg --extra-args="inst.ks=file:/ks.cfg console=tty0 console=ttyS0,115200n8"
      Copy to Clipboard Toggle word wrap
  • 仮想マシンを作成し、テキストのみのモードで OS をインストールする:

    • 次のコマンドは、demo-guest5 という名前の仮想マシンを作成し、グラフィックスがない、テキストのみのモードである RHEL10.iso イメージファイルからインストールします。ゲストコンソールをシリアルコンソールに接続します。仮想マシンには、16384 MiB のメモリー、16 個の vCPU、および 280 GiB のディスクが割り当てられます。このようなインストールは、低速なネットワークリンクを介してホストに接続する際に便利です。

      # virt-install \
          --name demo-guest5 --memory 16384 --vcpus 16 --disk size=280 \
          --osinfo rhel10.0 --location RHEL10.iso \
          --graphics none --extra-args='console=ttyS0'
      Copy to Clipboard Toggle word wrap
  • 仮想マシンを作成し、グラフィカルモードで OS をインストールする:

    • 次のコマンドは、demo-guest-6 という名前の仮想マシンを作成します。この仮想マシンは demo-guest5 と同じ設定ですが、ネットワーク用にホストデバイス pci_0003_00_00_0 を提供し、グラフィカルインストール用にグラフィックスを設定します。

      # virt-install \
          --name demo-guest6 --memory 16384 --vcpus 16 --disk size=280 \
          --os-info rhel10.0 --location RHEL10.iso --graphics vnc,listen=0.0.0.0,5901 \
          --input keyboard,bus=virtio --input mouse,bus=virtio \
          --hostdev pci_0003_00_00_0 --network none
      Copy to Clipboard Toggle word wrap

      なお、インストールに使用できるホストデバイスの名前は、virsh nodedev-list --cap pci コマンドを使用して取得できます。インストール GUI を使用するには、インストールの開始時に、任意の VNC ビューアーを VNC ポート 5901 でホストの IP に接続できます。ただし、先にファイアウォールでこのポートを開く必要がある場合があります。次に例を示します。

      # firewall-cmd --add-port 5901/tcp
      Copy to Clipboard Toggle word wrap
  • リモートホストに仮想マシンを作成します。

    • 次のコマンドは、demo-guest7 という名前の仮想マシンを作成します。この仮想マシンは demo-guest5 と同じ設定ですが、リモートホスト 192.0.2.1 上に配置されます。

      # virt-install \
          --connect qemu+ssh://root@192.0.2.1/system --name demo-guest7 --memory 16384 \
          --vcpus 16 --disk size=280 --osinfo rhel10.0 --location RHEL10.iso \
          --graphics none --extra-args='console=ttyS0'
      Copy to Clipboard Toggle word wrap
  • リモートホストに仮想マシンを作成し、DASD 仲介デバイスをストレージとして使用する:

    • 次のコマンドは、demo-guest-8 という名前の仮想マシンを作成します。この仮想マシンは demo-guest5 と同じ設定ですが、ストレージには DASD 仲介デバイス mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8 を使用し、デバイス番号 1111 を割り当てる点が異なります。

      # virt-install \
          --name demo-guest8 --memory 16384 --vcpus 16 --disk size=280 \
          --osinfo rhel10.0 --location RHEL10.iso --graphics none \
          --disk none --hostdev mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8,address.type=ccw,address.cssid=0xfe,address.ssid=0x0,address.devno=0x1111,boot-order=1 \
          --extra-args 'rd.dasd=0.0.1111'
      Copy to Clipboard Toggle word wrap

      インストールに利用可能な仲介デバイスの名前は、virsh nodedev-list --cap mdev コマンドを使用して取得できることに注意してください。

  • virt-install コマンドの追加オプションと例は、システム上の virt-install(1) man ページを参照してください。

検証

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

トラブルシューティング

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

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

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

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

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

        error: failed to get network 'default'
        error: Network not found: no network with matching name 'default'
        Copy to Clipboard Toggle word wrap

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

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

        error: Failed to start network default
        error: internal error: Network is already in use by interface ens2
        Copy to Clipboard Toggle word wrap

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

3.2. Web コンソールを使用した仮想マシンの作成

Web コンソールを使用して、RHEL 10 ホストの GUI で仮想マシン (VM) を作成できます。

3.2.1. Web コンソールを使用した新しい仮想マシンの作成

RHEL 10 Web コンソールを使用して、事前に準備したホストマシンに新しい仮想マシン (VM) を作成できます。

前提条件

手順

  1. Web コンソールの Virtual Machines インターフェイスで、Create VM をクリックします。

    Create new virtual machine ダイアログが表示されます。

    仮想マシンの新規作成ダイアログボックスを表示しているイメージ
  2. 作成する仮想マシンの基本設定を入力します。

    • Name - 仮想マシンの名前。
    • Connection - セッションに付与される特権のレベル。詳細は、Web コンソールの関連するダイアログボックスを開いてください。
    • Installation type - インストールには、ローカルのインストールメディア、URL、PXE ネットワークブート、クラウドのベースイメージを使用できます。または、限定されたゲストオペレーティングシステムのセット からオペレーティングシステムをダウンロードすることもできます。
    • Operating system - 仮想マシンで実行するゲストオペレーティングシステム。Red Hat がサポートするのは、一部のゲストオペレーティングシステム のみであることに注意してください。

      注記

      Web コンソールから Red Hat Enterprise Linux を直接ダウンロードしてインストールする場合は、Offline token フィールドにオフライントークンを追加する必要があります。

    • Storage - ストレージのタイプ。
    • Storage Limit - ストレージ領域の容量。
    • Memory - メモリーの容量。
  3. 仮想マシンを作成します。

    • 仮想マシンでオペレーティングシステムを自動的にインストールする場合は、Create and run をクリックします。
    • オペレーティングシステムをインストールする前に仮想マシンを編集する場合は、Create and edit をクリックします。
    注記

    仮想マシンの作成後すぐにオペレーティングシステムをインストールしない場合は、Virtual Machines インターフェイスで仮想マシンを選択し、Install ボタンをクリックすると、後でインストールできます。

3.2.2. Web コンソールでディスクイメージをインポートして仮想マシンを作成する

RHEL 10 Web コンソールで既存の仮想マシンインストールのディスクイメージをインポートすることで、仮想マシン (VM) を作成できます。

前提条件

手順

  1. Web コンソールの Virtual Machines インターフェイスで、Import VM をクリックします。

    Import a virtual machine ダイアログが表示されます。

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

    • Name - 仮想マシンの名前。
    • ディスクイメージ - ホストシステム上の仮想マシンに存在するディスクイメージのパスです。
    • Operating system - 仮想マシンディスク上で実行されているオペレーティングシステム。Red Hat がサポートするのは、一部のゲストオペレーティングシステム のみであることに注意してください。
    • Memory - 仮想マシンによる使用のために割り当てるメモリーの容量。
  3. 仮想マシンをインポートします。

    • 仮想マシン設定をさらに編集せずに仮想マシンにオペレーティングシステムをインストールするには、Import and run をクリックします。
    • オペレーティングシステムのインストール前に仮想マシン設定を編集するには、Import and edit をクリックします。

3.2.3. Web コンソールを使用したクラウドイメージ認証による仮想マシンの作成

デフォルトでは、ディストリビューションクラウドイメージにはログインアカウントがありません。ただし、RHEL Web コンソールを使用して、仮想マシンを作成し、root アカウントとユーザーアカウントのログイン認証情報を指定して、cloud-init に渡すことができるようになりました。

前提条件

手順

  1. RHEL 10 Web コンソールにログインします。
  2. Web コンソールの Virtual Machines インターフェイスで、Create VM をクリックします。

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

  3. 名前 フィールドに、仮想マシンの名前を入力します。
  4. Details タブの Installation type フィールドで、Cloud base image を選択します。
  5. インストールソース フィールドで、ホストシステム上のイメージファイルへのパスを設定します。
  6. 作成する仮想マシンの設定を入力します。

    • オペレーティングシステム - 仮想マシンのオペレーティングシステム。Red Hat がサポートするのは、一部のゲストオペレーティングシステム のみであることに注意してください。
    • ストレージ - 仮想マシンを設定するストレージの種類
    • ストレージのサイズ - 仮想マシンを設定するストレージ容量
    • メモリー - 仮想マシンを設定するメモリーのサイズ
  7. Automation タブをクリックし、クラウド認証情報を設定します。

    • root password - 仮想マシンの root パスワードを入力します。root パスワードを設定しない場合は、フィールドを空白のままにしておきます。
    • User login - cloud-init ユーザーのログインを入力します。ユーザーアカウントを作成しない場合は、このフィールドを空白のままにしておきます。
    • User password - パスワードを入力します。ユーザーアカウントを作成しない場合は、このフィールドを空白のままにしておきます。
  8. Create and run をクリックします。

    仮想マシンが作成されます。

3.3. Windows 仮想マシンの作成

完全に仮想化された Windows マシンを RHEL 10 ホストに作成し、仮想マシン (VM) 内でグラフィカルな Windows インストーラーを起動できます。また、インストールした Windows ゲストオペレーティングシステム (OS) を最適化できます。

仮想マシンを作成し、Windows ゲスト OS をインストールするには、virt-install コマンドまたは RHEL 10 Web コンソールを使用します。

前提条件

  • ローカルまたはネットワークで利用可能な OS のインストールソースがある。次のいずれかになります。

    • インストールメディアの ISO イメージ
    • 既存の仮想マシンインストールのディスクイメージ
  • KVM virtio ドライバーを備えた記憶媒体がある。

    このメディアを作成するには、ホストマシンでの virtio ドライバーインストールメディアの準備 を参照してください。

  • Windows 11 をインストールする場合は、edk2-ovmf パッケージ、swtpm パッケージ、および libtpms パッケージをホストにインストールする必要があります。

手順

  1. 仮想マシンを作成します。手順は、仮想マシンの作成 を参照してください。ただし、次の点に注意してください。

    • virt-install ユーティリティーを使用して仮想マシンを作成する場合は、コマンドに次のオプションを追加します。

      • KVM virtio ドライバーを備えた記憶媒体。以下に例を示します。

        --disk path=/usr/share/virtio-win/virtio-win.iso,device=cdrom
        Copy to Clipboard Toggle word wrap
      • インストールする Windows バージョン。たとえば、Windows 10 および 11 の場合は、以下のようになります。

        --os-variant win10
        Copy to Clipboard Toggle word wrap

        Windows のバージョンと、適切なオプションのリストを表示するには、次のコマンドを実行します。

        # osinfo-query os
        Copy to Clipboard Toggle word wrap
      • Windows 11 をインストールする場合は、Unified Extensible Firmware Interface (UEFI) および 仮想 Trusted Platform Module (vTPM) を有効にします。

        --boot uefi
        Copy to Clipboard Toggle word wrap
    • Web コンソールを使用して仮想マシンを作成する場合は、仮想マシンの新規作成 画面の オペレーティングシステム フィールドで Windows のバージョンを指定します。

      • Windows 11 および Windows Server 2022 よりも前のバージョンの Windows をインストールする場合は、Create and run をクリックしてインストールを開始します。
      • Windows 11 をインストールする場合、または追加の Windows Server 2022 機能を使用する場合は、Create and edit をクリックして確認し、CLI を使用して UEFI および vTPM を有効にします。

        1. 仮想マシンの XML 設定を開きます。

          # virsh edit windows-vm
          Copy to Clipboard Toggle word wrap
        2. firmware='efi' オプションを os 要素に追加します。

          <os firmware='efi'>
            <type arch='x86_64' machine='pc-q35-6.2'>hvm</type>
            <boot dev='hd'/>
          </os>
          Copy to Clipboard Toggle word wrap
        3. devices 要素内に tpm デバイスを追加します。

          <devices>
            <tpm model='tpm-crb'>
              <backend type='emulator' version='2.0'/>
            </tpm>
          </devices>
          Copy to Clipboard Toggle word wrap
        4. Virtual machines テーブルで Install をクリックして、Windows のインストールを開始します。
  2. 仮想マシンに Windows OS をインストールします。

    Windows オペレーティングシステムのインストール方法は、関連する Microsoft インストールドキュメントを参照してください。

  3. Web コンソールを使用して仮想マシンを作成する場合は、Disks インターフェイスを使用して、virtio ドライバーを含むストレージメディアを仮想マシンに割り当てます。

    手順は、Web コンソールで既存ディスクを仮想マシンに割り当てる手順 を参照してください。

  4. Windows ゲスト OS で、KVM virtio ドライバーを設定します。詳細は、Windows 仮想マシン用の KVM 準仮想化ドライバーのインストール を参照してください。
  5. オプション: Windows 仮想マシンのパフォーマンスを最適化します。詳細は、Windows 仮想マシンの最適化 を参照してください。

第4章 Windows 仮想マシンの最適化

RHEL 10 でホストされる仮想マシン (VM) でゲストオペレーティングシステムとして Microsoft Windows を使用すると、ゲストのパフォーマンスに悪影響が出る可能性があります。

そのため、以下の対策を組み合わせて実施することで、Windows 仮想マシンのパフォーマンスを最適化できます。

4.1. Windows 仮想マシン用の KVM 準仮想化ドライバーのインストール

Windows 仮想マシンのパフォーマンスを改善する主な方法は、Windows 用の KVM 準仮想化 (virtio) ドライバーをゲストオペレーティングシステムにインストールすることです。

注記

virtio-win ドライバーは、各 virtio-win リリースの時点で利用可能な Windows 10 および 11 の最新リリースに対して認定 (WHQL) されています。ただし、virtio-win ドライバーは広くテストされており、Windows 10 および 11 の以前のビルドでも正しく機能することが期待されます。

Windows 仮想マシンにドライバーをインストールするには、次の操作を実行します。

  1. ホストマシンにインストールメディアを準備します。詳細は、ホストマシンでの virtio ドライバーインストールメディアの準備 を参照してください。
  2. インストールメディアを既存の Windows 仮想マシンに割り当てるか、新しい Windows 仮想マシンを作成するときに割り当てます。詳細は、RHEL への Windows 仮想マシンのインストール を参照してください。
  3. Windows ゲストオペレーティングシステムに virtio ドライバーをインストールします。詳細は、Windows ゲストへの virtio ドライバーのインストール を参照してください。
  4. Windows ゲストオペレーティングシステムで QEMU Guest Agent を有効にします。詳細は、Windows ゲストへの QEMU ゲストエージェントのインストール を参照してください。

4.1.1. Windows virtio ドライバーの仕組み

準仮想化ドライバーは、I/O レイテンシーを下げ、スループットをほぼベアメタルレベルまで上げることで、仮想マシン (VM) のパフォーマンスを向上させます。I/O 負荷の高いタスクやアプリケーションを実行する仮想マシンには、準仮想化ドライバーを使用できます。

virtio ドライバーは、KVM の準仮想化デバイスドライバーであり、KVM ホスト上で稼働する Windows 仮想マシンで利用できます。このドライバーは、次のドライバーを含む virtio-win パッケージによって提供されます。

  • ブロック (ストレージ) デバイス
  • ネットワークインターフェイスコントローラー
  • ビデオコントローラー
  • メモリーバルーニングデバイス
  • 準仮想化メモリーデバイス
  • 準仮想化シリアルポートデバイス
  • エントロピーソースデバイス
  • 準仮想化パニックデバイス
  • マウス、キーボード、タブレットなどの入力デバイス
  • VirtIO FS Device
  • QEMU FwCfg Device
  • エミュレートされたデバイスの小規模セット
注記

エミュレートされたデバイス、virtio デバイス、および割り当てられたデバイスの詳細は、仮想マシンへのホストデバイスの接続 を参照してください。

KVM の virtio ドライバーを使用すると、以下の Microsoft Windows バージョンが、物理システムのように動作することが見込まれます。

4.1.2. ホストマシンでの virtio ドライバーインストールメディアの準備

KVM virtio ドライバーを Windows 仮想マシン (VM) にインストールまたは更新するには、最初にホストマシンで virtio ドライバーインストールメディアを準備する必要があります。これを行うには、virtio-win パッケージによって提供される .iso ファイルを、ストレージデバイスとして Windows 仮想マシンに割り当てます。

前提条件

手順

  1. サブスクリプションデータを更新します。

    # subscription-manager refresh
    All local data refreshed
    Copy to Clipboard Toggle word wrap
  2. virtio-win パッケージの最新バージョンを入手します。

    • virtio-win がインストールされていない場合:

      # dnf install -y virtio-win
      Copy to Clipboard Toggle word wrap
    • virtio-win がインストールされている場合:

      # dnf upgrade -y virtio-win
      Copy to Clipboard Toggle word wrap

      インストールが成功すると、virtio-win ドライバーファイルが /usr/share/virtio-win/ ディレクトリーで使用可能になります。これには、ISO ファイルと drivers ディレクトリーが含まれます。このディレクトリー内の各ディレクトリーに、各アーキテクチャーとサポートされている Windows バージョン用のドライバーファイルが格納されます。

      # ls /usr/share/virtio-win/
      agents.json drivers/ guest-agent/ info.json /installer /qxl-wddm-dod release-drivers-versions.txt /spice-vdagent /tools virtio-win-1.9.45.iso virtio-win.iso
      Copy to Clipboard Toggle word wrap
  3. virtio-win.iso ファイルをストレージデバイスとして Windows 仮想マシンに割り当てます。

    • 新しい Windows 仮想マシンを作成 する場合は、virt-install コマンドオプションを使用してファイルを割り当てます。
    • 既存の Windows 仮想マシンにドライバーをインストールする場合は、virt-xml ユーティリティーを使用してファイルを CD-ROM として割り当てます。

      # virt-xml WindowsVM --add-device --disk virtio-win.iso,device=cdrom
      Domain 'WindowsVM' defined successfully.
      Copy to Clipboard Toggle word wrap

4.1.3. Windows ゲストへの virtio ドライバーのインストール

KVM virtio ドライバーを Windows ゲストオペレーティングシステムにインストールするには、ドライバーを含むストレージデバイスを (仮想マシン (VM) の作成時または作成後に) 追加し、Windows ゲストオペレーティングシステムにドライバーをインストールする必要があります。

この手順では、グラフィカルインターフェイスを使用してドライバーをインストールする手順を説明します。Microsoft Windows Installer (MSI) コマンドラインインターフェイスを使用することもできます。

前提条件

手順

  1. Windows ゲストオペレーティングシステムで、File Explorer アプリケーションを開きます。
  2. This PC をクリックします。
  3. Devices and drives ペインで、virtio-win メディアを開きます。
  4. 仮想マシンにインストールされているオペレーティングシステムに基づいて、次のいずれかのインストーラーを実行します。

    • 32 ビットオペレーティングシステムを使用している場合は、virtio-win-gt-x86.msi インストーラーを実行します。
    • 64 ビットオペレーティングシステムを使用している場合は、virtio-win-gt-x64.msi インストーラーを実行します。
  5. 表示された Virtio-win-driver-installer セットアップウィザードで、表示される指示に従い、Custom Setup ステップまで進みます。

    Virtio-win-guest-tools セットアップウィザードを表示しているイメージ。
  6. カスタムセットアップ画面で、インストールするデバイスドライバーを選択します。推奨されるドライバーセットが自動的に選択され、ドライバーの説明がリストの右側に表示されます。
  7. 次へ をクリックして、インストール をクリックします。
  8. インストールが完了したら、完了 をクリックします。
  9. 仮想マシンを再起動してドライバーのインストールを完了します。

検証

  1. Windows 仮想マシンで、Device Manager に移動します。

    1. Start をクリックします。
    2. Device Manager を検索します。
  2. デバイスが正しいドライバーを使用していることを確認します。

    1. デバイスをクリックして Driver Properties ウィンドウを開きます。
    2. Driver タブに移動します。
    3. Driver Details をクリックします。

次のステップ

  • NetKVM ドライバーをインストールした場合は、Windows ゲストのネットワークパラメーターの設定も必要になる場合があります。詳細は、NetKVM ドライバーパラメーターの設定 を参照してください。

4.1.4. Windows ゲストでの virtio ドライバーの更新

Windows ゲストオペレーティングシステム (OS) で KVM virtio ドライバーを更新するには、Windows OS バージョンでサポートされている場合は Windows Update サービスを使用できます。そうでない場合は、Windows 仮想マシン (VM) に割り当てられている virtio ドライバーインストールメディアからドライバーを再インストールします。

前提条件

手順

  • Windows 10、Windows Server 2016 以降のオペレーティングシステムでは、Windows Update グラフィカルインターフェイスを使用して、ドライバーの更新が利用可能かどうかを確認します。

    1. Windows 仮想マシンを起動し、ゲスト OS にログインします。
    2. Optional updates ページに移動します。

      Settings → Windows Update → Advanced options → Optional updates

    3. Red Hat, Inc. からのすべての更新をインストールします。
  • Windows 10 および Windows Server 2016 より前のオペレーティングシステムの場合、または OS が Windows Update にアクセスできない場合は、ドライバーを再インストールします。

    これにより、Windows ゲスト OS のネットワーク設定がデフォルト (DHCP) に復元されます。カスタマイズしたネットワーク設定を保持する場合は、バックアップを作成し、netsh ユーティリティーを使用して復元する必要もあります。

    1. Windows 仮想マシンを起動し、ゲスト OS にログインします。
    2. Windows コマンドプロンプトを開きます。

      1. Super+R キーボードショートカットを使用します。
      2. 表示されるウィンドウで cmd と入力し、Ctrl+Shift+Enter を押して管理者として実行します。
    3. Windows コマンドプロンプトを使用して、OS ネットワーク設定をバックアップします。

      C:\WINDOWS\system32\netsh dump > backup.txt
      Copy to Clipboard Toggle word wrap
    4. 割り当てられているインストールメディアから KVM virtio ドライバーを再インストールします。次のいずれかを行います。

      • Windows コマンドプロンプトを使用してドライバーを再インストールします。ここで、X はインストールメディアのドライブ文字です。次のコマンドは、すべての virtio ドライバーをインストールします。

        • 64 ビット vCPU を使用している場合:

          C:\WINDOWS\system32\msiexec.exe /i X:\virtio-win-gt-x64.msi /passive /norestart
          Copy to Clipboard Toggle word wrap
        • 32 ビット vCPU を使用している場合:

          C:\WINDOWS\system32\msiexec.exe /i X:\virtio-win-gt-x86.msi /passive /norestart
          Copy to Clipboard Toggle word wrap
      • 仮想マシンを再起動せずに、グラフィカルインターフェイスを使用 してドライバーを再インストールします。
    5. Windows コマンドプロンプトを使用して、OS ネットワーク設定を復元します。

      C:\WINDOWS\system32\netsh -f backup.txt
      Copy to Clipboard Toggle word wrap
    6. 仮想マシンを再起動してドライバーのインストールを完了します。

4.2. Hyper-V enlightenments の有効化

Hyper-V enlightenments は、Microsoft Hyper-V ハイパーバイザーをエミュレートする方法を KVM に提供します。このハイパーバイザーは、Windows 仮想マシンのパフォーマンスを向上させます。

4.2.1. Windows 仮想マシンでの Hyper-V enlightenments の有効化

Hyper-V enlightenments を有効にすると、RHEL 10 ホストで実行されている Windows 仮想マシン (VM) のパフォーマンスが向上します。

手順

  1. virsh edit コマンドを使用して、仮想マシンの XML 設定を開きます。以下に例を示します。

    # virsh edit windows-vm
    Copy to Clipboard Toggle word wrap
  2. XML の <features> セクションに、以下の <hyperv> サブセクションを追加します。

    <features>
      [...]
      <hyperv>
        <relaxed state='on'/>
        <vapic state='on'/>
        <spinlocks state='on' retries='8191'/>
        <vendor_id state='on' value='KVM Hv'/>
        <vpindex state='on'/>
        <runtime state='on' />
        <synic state='on'/>
        <stimer state='on'>
          <direct state='on'/>
        </stimer>
        <frequencies state='on'/>
        <reset state='on'/>
        <tlbflush state='on'/>
        <reenlightenment state='on'/>
        <ipi state='on'/>
        <evmcs state='on'/>
      </hyperv>
      [...]
    </features>
    Copy to Clipboard Toggle word wrap

    XML に <hyperv> サブセクションが含まれている場合は、上記のように変更します。

  3. 設定の clock セクションを次のように変更します。

    <clock offset='localtime'>
      ...
      <timer name='hypervclock' present='yes'/>
    </clock>
    Copy to Clipboard Toggle word wrap
  4. XML 設定を保存して終了します。
  5. 仮想マシンが実行中の場合は再起動します。

検証

  • virsh dumpxml コマンドを使用して、実行中の仮想マシンの XML 設定を表示します。次のセグメントが含まれている場合、仮想マシンで Hyper-V enlightenments が有効になっています。

    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
      <vendor_id state='on' value='KVM Hv'/>
      <vpindex state='on'/>
      <runtime state='on' />
      <synic state='on'/>
      <frequencies state='on'/>
      <reset state='on'/>
      <tlbflush state='on'/>
      <reenlightenment state='on'/>
      <stimer state='on'>
        <direct state='on'/>
      </stimer>
      <ipi state='on'/>
      <evmcs state='on'/>
    </hyperv>
    
    <clock offset='localtime'>
      ...
      <timer name='hypervclock' present='yes'/>
    </clock>
    Copy to Clipboard Toggle word wrap

4.2.2. 設定可能な Hyper-V enlightenments

特定の Hyper-V 機能を設定して Windows 仮想マシンを最適化できます。以下の表では、設定可能な Hyper-V 機能およびその値に関する情報を提供します。

Expand
表4.1 設定可能な Hyper-V 機能
Enlightenment説明

evmcs

L0 (KVM) と L1 (Hyper-V) ハイパーバイザーとの間で準仮想化プロトコルを実装し、L2 を終了してハイパーバイザーに移動する時間を短縮できます。

注記

この機能は Intel プロセッサーのみを対象とします。

on、off

frequencies

Hyper-V 周波数 MSR (Machine Specific Registers) を有効にします。

on、off

ipi

IPI (準仮想化された相互プロセッサー割り込み) サポートを有効にします。

on、off

reenlightenment

タイムスタンプカウンター (TSC) 周波数の変更がある場合に (移行時のみ) 通知します。新しい周波数に切替える準備ができるまで、ゲストでそのまま以前の周波数を使用することも可能です。

on、off

relaxed

仮想マシンを高負荷のホストで実行すると、一般的に BSOD に陥る Windows のサニティーチェックを無効化します。これは、Linux カーネルオプション no_timer_check と似ています。これは、Linux が KVM で実行している場合に自動的に有効になります。

on、off

runtime

ゲストコードの実行に費やすプロセッサー時間および、ゲストコードの代わりに費やすプロセッサー時間を設定します。

on、off

spinlocks

  • 仮想マシンのオペレーティングシステムによって使用され、呼び出し仮想プロセッサーが同じパーティション内の別の仮想プロセッサーで保持する可能性があるリソースを取得することを Hyper-V に通知します。
  • 過剰なスピン状況を Hyper-V に通知する前に、スピンロックの取得を試行する回数を仮想マシンのオペレーティングシステムに示すために、Hyper-V によって使用されます。

on、off

stimer

仮想プロセッサーの合成タイマーを有効にします。この Enlightenment が指定されない場合には、特定の Windows バージョンが、HPET (HPET が利用できない場合には RTC も使用) を使用するように戻るため、仮想 CPU がアイドル状態であっても、CPU の消費量が大幅に消費される可能性があることに注意してください。

on、off

stimer-direct

有効期限イベントが通常の割り込みで配信されると合成タイマーを有効にします。

on、off

synic

stimer とともに、synthetic タイマーをアクティブにします。Windows 8 では、この機能は定期的なモードで使用します。

on、off

time

仮想マシンでできるように、以下の Hyper-V 固有のクロックソースを有効にします。

  • MSR ベースの 82 Hyper-V クロックソース (HV_X64_MSR_TIME_REF_COUNT, 0x40000020)
  • MSR で有効にされる Reference TSC 83 ページ (HV_X64_MSR_REFERENCE_TSC, 0x40000021)

on、off

tlbflush

仮想プロセッサーの TLB をフラッシュします。

on、off

vapic

仮想 APIC を有効にして、高負荷のメモリーマッピングされた APIC (Advanced Programmable Interrupt Controller) レジスターへのアクセラレート MSR アクセスを提供します。

on、off

vendor_id

Hyper-V ベンダー ID を設定します。

  • on、off
  • ID 値: 文字列 (最大 12 文字)

vpindex

仮想プロセッサーのインデックスを有効にします。

on、off

4.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 をクリックして変更を保存します。

4.4. NetKVM ドライバーパラメーター

次の表に、設定可能な NetKVM ドライバーのロギングパラメーターに関する情報を示します。

Expand
表4.2 ロギングパラメーター
パラメーター説明 2

Logging.Enable

ロギングが有効であるかどうかを決定するブール値。デフォルト値は Enabled です。

Logging.Level

ロギングレベルを定義する整数。この整数を高くすると、ログの詳細度が上がります。

  • デフォルト値は 0 (エラーのみ) です。
  • 1-2 は設定メッセージを追加します。
  • 3-4 は、パケットフロー情報を追加します。
  • 5-6 は割り込みおよび DPC レベルのトレース情報を追加します。
注記

ロギングレベルが高くなると、仮想マシンの速度が低下します。

次の表に、設定可能な NetKVM ドライバーの初期パラメーターに関する情報を示します。

Expand
表4.3 初期パラメーター
パラメーター説明

Assign MAC

準仮想化 NIC のローカル管理 MAC アドレスを定義する文字列。これはデフォルトでは設定されません。

Init.Do802.1PQ

Priority/VLAN タグポピュレーションと削除サポートを有効にするブール値。デフォルト値は Enabled です。

Init.MaxTxBuffers

割り当てられる TX リング記述子の数を表す整数。この値は、QEMU の Tx キューのサイズによって制限されます。

デフォルト値は 1024 です。

有効な値は、16、32、64、128、256、512、1024 です。

Init.MaxRxBuffers

割り当てられる RX リング記述子の数を表す整数。この値は、QEMU の Tx キューのサイズによって制限されます。

デフォルト値は 1024 です。

有効な値は、16、32、64、128、256、512、1024、2048、および 4096 です。

Offload.Tx.Checksum

TX チェックサムオフロード機能を指定します。

Red Hat Enterprise Linux 10 では、このパラメーターの有効な値は次のとおりです。

  • IPv4 と IPv6 の両方で IP、TCP、および UDP チェックサムオフロードを有効にする All (デフォルト)
  • IPv4 と IPv6 の両方で TCP および UDP チェックサムオフロードを有効にする TCP/UDP (v4,v6)
  • IPv4 でのみ TCP および UDP チェックサムオフロードを有効にする TCP/UDP (v4)
  • IPv4 でのみ TCP (v4) チェックサムオフロードを有効にする TCP (v4)

Offload.Rx.Checksum

RX チェックサムオフロード機能を指定します。

Red Hat Enterprise Linux 10 では、このパラメーターの有効な値は次のとおりです。

  • IPv4 と IPv6 の両方で IP、TCP、および UDP チェックサムオフロードを有効にする All (デフォルト)
  • IPv4 と IPv6 の両方で TCP および UDP チェックサムオフロードを有効にする TCP/UDP (v4,v6)
  • IPv4 でのみ TCP および UDP チェックサムオフロードを有効にする TCP/UDP (v4)
  • IPv4 でのみ TCP (v4) チェックサムオフロードを有効にする TCP (v4)

Offload.Tx.LSO

TX ラージセグメントオフロード (LSO) 機能を指定します。

Red Hat Enterprise Linux 10 では、このパラメーターの有効な値は次のとおりです。

  • TCPv4 と TCPv6 の両方で LSO オフロードを有効にする Maximal (デフォルト)
  • TCPv4 でのみ LSO オフロードを有効にする IPv4
  • LSO オフロードを無効にする Disable

MinRxBufferPercent

RX キュー内の使用可能なバッファーの最小量を、RX バッファーの合計量に対するパーセントで指定します。使用可能なバッファーの実際の数がこの値よりも少ない場合、NetKVM ドライバーは、オペレーティングシステムにリソース不足状態を通知します (できるだけ早く RX バッファーを返すように要求します)。

最小値 (デフォルト) - 0。ドライバーがリソース不足状態を示さないことを意味します。

最大値 - 100。ドライバーが常にリソース不足状態を示すことを意味します。

4.5. Windows 仮想マシンでのバックグラウンドプロセスの最適化

Windows OS を実行している仮想マシンのパフォーマンスを最適化するには、さまざまな Windows プロセスを設定するか、無効化してください。

警告

設定を変更すると、プロセスによっては、予想通り機能しない場合があります。

手順

  • 次の組み合わせを実行すると、Windows 仮想マシンを最適化できます。

    • USB や CD-ROM などの未使用のデバイスを削除して、ポートを無効にします。
  • SuperFetch や Windows Search などのバックグラウンドサービスを無効にします。サービスの停止に関する詳細は、システムサービスの無効化 または サービス停止 を参照してください。
  • useplatformclock を無効にします。これには以下のコマンドを実行します。

    # bcdedit /set useplatformclock No
    Copy to Clipboard Toggle word wrap
  • スケジュール済みのディスクのデフラグなど、不要なスケジュールタスクを確認して無効にします。方法は、スケジュール済みタスクの無効化 を参照してください。
  • ディスクが暗号化されていないことを確認します。
  • 定期的なサーバーアプリケーションのアクティビティーを減らします。これには、各タイマーを編集します。詳細は Multimedia Timers を参照してください。
  • 仮想マシンで Server Manager アプリケーションを閉じます。
  • ウイルス対策ソフトウェアを無効にします。ウイルス対策ソフトウェアを無効にすると、仮想マシンのセキュリティーが侵害される可能性があることに注意してください。
  • スクリーンセーバーを無効にします。
  • 使用時以外は、Windows OS のサインイン画面のままにします。

第5章 仮想マシンの起動

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

前提条件

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

5.1. コマンドラインを使用した仮想マシンの起動

コマンドラインインターフェイス (CLI) を使用して、シャットダウンした仮想マシン (VM) を起動するか、保存した仮想マシンを復元します。CLI を使用すると、ローカル仮想マシンとリモート仮想マシンの両方を起動できます。

前提条件

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

    • 仮想マシンが置かれているホストの IP アドレス
    • ホストへの root アクセス特権
  • libvirt の system 接続を使用する仮想マシンを起動する場合は、root 特権を持っているか、ホスト上の libvirt ユーザーグループに属している。詳細は、仮想化のユーザー空間接続タイプ を参照してください。

手順

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

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

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

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

    # virsh -c qemu+ssh://root@192.0.2.1/system start demo-guest1
    
    root@192.0.2.1's password:
    
    Domain 'demo-guest1' started
    Copy to Clipboard Toggle word wrap

5.2. Web コンソールを使用した仮想マシンの起動

仮想マシンが 停止 状態にある場合は、RHEL 10 Web コンソールを使用して起動できます。ホストの起動時に、仮想マシンが自動的に起動するように設定することもできます。

前提条件

手順

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

    選択した仮想マシンの詳細情報を含む新しいページが開き、仮想マシンのシャットダウンおよび削除を制御できます。

  2. Run をクリックします。

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

  3. オプション: ホスト起動時に仮想マシンが自動的に起動するように設定するには、Overview セクションの Autostart チェックボックスを切り替えます。

    libvirt が管理していないネットワークインターフェイスを使用する場合は、systemd 設定も変更する必要があります。そうしないと、影響を受ける仮想マシンが起動に失敗する可能性があります。ホストの起動時に仮想マシンを自動的に起動する を参照してください。

5.3. ホストの起動時に仮想マシンを自動的に起動する

実行中の仮想マシン (VM) のホストが再起動すると、仮想マシンはシャットダウンされるため、デフォルトで手動で再起動する必要があります。ホストの実行中に仮想マシンがアクティブであることを確認するには、仮想マシンが自動的に起動するように設定できます。

手順

  1. virsh autostart ユーティリティーを使用して、ホストの起動時に仮想マシンが自動的に起動するように設定します。

    たとえば、次のコマンドは、demo-guest1 仮想マシンを自動的に起動するように設定します。

    # virsh autostart demo-guest1
    Domain 'demo-guest1' marked as autostarted
    Copy to Clipboard Toggle word wrap
  2. libvirt が管理していないネットワークインターフェイスを使用する場合は、systemd 設定にも追加の変更を行う必要があります。これを行わないと、影響を受ける仮想マシンの起動に失敗する可能性があります。

    注記

    このようなインターフェイスには、以下の例が含まれます。

    • NetworkManager が作成したブリッジデバイス
    • <forward mode='bridge'/> を使用するように設定されたネットワーク
    1. systemd 設定ディレクトリーツリーに、virtqemud.service.d ディレクトリーが存在しない場合は作成します。

      # mkdir -p /etc/systemd/system/virtqemud.service.d/
      Copy to Clipboard Toggle word wrap
    2. 以前に作成したディレクトリーに、10-network-online.conf systemd ユニットオーバーライドファイルを作成します。このファイルのコンテンツは、virtqemud サービスのデフォルトの systemd 設定を上書きします。

      # touch /etc/systemd/system/virtqemud.service.d/10-network-online.conf
      Copy to Clipboard Toggle word wrap
    3. 10-network-online.conf ファイルに以下の行を追加します。この設定変更により、ホストのネットワークの準備ができてから、systemd が virtqemud サービスを起動するようになります。

      [Unit]
      After=network-online.target
      Copy to Clipboard Toggle word wrap

検証

  1. 仮想マシンの設定を表示し、自動開始 オプションが有効になっていることを確認します。

    たとえば、次のコマンドは、自動開始 オプションなど、demo-guest1 仮想マシンの基本情報を表示します。

    # virsh dominfo demo-guest1
    Id:             2
    Name:           demo-guest1
    UUID:           e46bc81c-74e2-406e-bd7a-67042bae80d1
    OS Type:        hvm
    State:          running
    CPU(s):         2
    CPU time:       385.9s
    Max memory:     4194304 KiB
    Used memory:    4194304 KiB
    Persistent:     yes
    Autostart:      enable
    Managed save:   no
    Security model: selinux
    Security DOI:   0
    Security label: system_u:system_r:svirt_t:s0:c873,c919 (enforcing)
    Copy to Clipboard Toggle word wrap
  2. libvirt が管理していないネットワークインターフェイスを使用する場合は、10-network-online.conf ファイルの内容が次の出力と一致するかどうかを確認してください。

    $ cat /etc/systemd/system/virtqemud.service.d/10-network-online.conf
    [Unit]
    After=network-online.target
    Copy to Clipboard Toggle word wrap

第6章 Q35 マシンタイプへの仮想マシンの変換

RHEL 10 では、i440fx マシンタイプが非推奨になりました。このタイプは今後の RHEL メジャーバージョンで削除される予定です。また、q35 マシンタイプを使用すると、i440fx と比較して、Advanced Host Controller Interface (AHCI) や仮想入出力メモリー管理ユニット (vIOMMU) エミュレーションなど、追加の利点が得られます。

したがって、Red Hat では、i440fx を使用する仮想マシン (VM) を、q35 を使用するように変換することを推奨しています。なお、まだ定義していない仮想マシン設定を変換することもできます。

重要

仮想マシンのマシンタイプを変更することは、物理マシンのマザーボードを変更することに似ています。そのため、仮想マシンのマシンタイプを i440fx から q35 に変換すると、場合によってはゲストオペレーティングシステムの機能に問題が発生する可能性があります。

前提条件

  • RHEL 10 ホスト上の仮想マシンが i440fx マシンタイプを使用している。これを確認するには、次のコマンドを使用します。

    # virsh dumpxml <vm-name> | grep machine
    
    <type arch='x86_64' machine='pc-i440fx-10.0.0'>hvm</type>
    Copy to Clipboard Toggle word wrap
  • 仮想マシンの元の設定がバックアップ済みであり、その設定を必要に応じて変換や障害復旧に使用できる。

    # virsh dumpxml <vm-name> > <vm-name>-backup.xml
    Copy to Clipboard Toggle word wrap

手順

  • 未定義の仮想マシンについては、次の手順を実行します。

    1. Q35 を使用するように仮想マシンの設定を調整します。元の設定として、以前に作成したバックアップファイルを使用します。

      # cat <vm-name>-backup.xml | virt-xml --edit --convert-to-q35 > <vm-name-q35>.xml
      Copy to Clipboard Toggle word wrap
    2. 仮想マシンを定義します。

      # virsh define <vm-name-q35>.xml
      Copy to Clipboard Toggle word wrap
  • 定義済みの仮想マシンについては、次の手順を実行します。

    1. Q35 を使用するように仮想マシンの設定を調整します。

      # virt-xml <vm-name> --edit --convert-to-q35
      Copy to Clipboard Toggle word wrap
    2. 仮想マシンが実行中の場合はシャットダウンします。

      # virsh shutdown <vm-name>
      Copy to Clipboard Toggle word wrap

検証

  1. 仮想マシンのマシンタイプを表示します。

    # virsh dumpxml <vm-name> | grep machine
    
        <type arch='x86_64' machine='q35'>hvm</type>
    Copy to Clipboard Toggle word wrap
  2. 仮想マシンを起動し、ゲストオペレーティングシステムにログインできることを確認します。

トラブルシューティング

  • Windows ゲストオペレーティングシステムを使用しており、変換後に仮想マシンがブートデバイスを検出できない場合は、セーフモードで起動してから仮想マシンを再起動します。
  • マシンタイプを変更したことにより仮想マシンが機能しなくなった場合は、バックアップした設定に基づいて新しい仮想マシンを定義します。

    # virsh define <vm-name>-backup.xml
    Copy to Clipboard Toggle word wrap

第7章 仮想マシンへの接続

RHEL 10 で仮想マシン (VM) を操作するには、次のいずれかの方法で仮想マシンに接続する必要があります。

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

前提条件

7.1. Web コンソールを使用した仮想マシンへの接続

Web コンソールインターフェイスを使用して、実行中の KVM 仮想マシンに接続できます。

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

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

前提条件

手順

  1. RHEL 10 Web コンソールにログインします。
  2. 仮想マシン インターフェイスで、グラフィカルコンソールを表示する仮想マシンをクリックします。

    仮想マシンの OverviewConsole セクションを含む新しいページが開きます。

  3. コンソールドロップダウンメニューで VNC コンソール を選択します。

    Web インターフェイスのメニューの下に VNC コンソールが表示されます。

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

  4. Expand をクリックします。

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

    注記

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

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

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

    • オプション: 選択した仮想マシンのグラフィカルコンソールを、Virt Viewer などのリモートビューアーに表示することもできます。

      1. コンソールのドロップダウンメニューで Desktop viewer を選択します。
      2. Launch Remote Viewer をクリックします。

        virt ビューアー (.vv) ファイルをダウンロードします。

      3. ファイルを開き、Virt Viewer を起動します。

        注記

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

トラブルシューティング

  • グラフィカルコンソールをクリックしても効果がない場合は、コンソールを全画面表示にします。これは、マウスカーソルオフセットの既知の問題です。
  • Web コンソールでリモートビューアーを起動することができない場合、または最適ではない場合は、以下のプロトコルを使用して、任意のビューアーアプリケーションに手動で接続できます。

    • アドレス - デフォルトのアドレスーは 127.0.0.1 です。/etc/libvirt/qemu.confvnc_listen パラメーターを変更して、ホストの IP アドレスに変更できます。
    • VNC ポート - 5901

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

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

シリアルコンソールの詳細は、コマンドラインインターフェイスを使用して仮想マシンのシリアルコンソールを開く を参照してください。

前提条件

手順

  1. RHEL 10 Web コンソールにログインします。
  2. Virtual Machines ペインで、シリアルコンソールを表示する仮想マシンをクリックします。

    仮想マシンの OverviewConsole セクションを含む新しいページが開きます。

  3. コンソールドロップダウンメニューで シリアルコンソール を選択します。

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

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

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

7.2. コマンドラインを使用して仮想マシンのグラフィカルコンソールを開く

Virt Viewer ユーティリティーで KVM 仮想マシン (VM) のグラフィカルコンソールを開くと、そのコンソールに接続できます。

前提条件

  • システム、および接続している仮想マシンが、グラフィカルディスプレイに対応している。
  • ターゲット仮想マシンがリモートホストにある場合は、ホストへの接続と root アクセス特権がある。
  • オプション: ターゲット仮想マシンがリモートホストにある場合は、リモートホストにアクセスしやすくなる ように libvirt と SSH を設定した。

手順

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

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

    # virt-viewer --direct --connect qemu+ssh://root@192.0.2.1/system guest-name
    root@192.0.2.1's password:
    Copy to Clipboard Toggle word wrap

検証

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

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

トラブルシューティング

  • グラフィカルコンソールをクリックしても効果がない場合は、コンソールを全画面表示にします。これは、マウスカーソルオフセットの既知の問題です。

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

SSH 接続プロトコルを使用して、仮想マシン (VM) のターミナルを操作できます。

前提条件

  • ターゲット仮想マシンへのネットワーク接続と root アクセス特権がある。
  • ターゲット仮想マシンがリモートホストにある場合は、そのホストへの接続と root アクセス特権もある。
  • 仮想マシンネットワークが、libvirt によって生成された dnsmasq によって IP アドレスを割り当てている。これは、たとえば、libvirt NAT ネットワーク などに該当します。

    特に、仮想マシンが次のネットワーク設定のいずれかを使用している場合、SSH を使用して仮想マシンに接続することはできません。

    • hostdev インターフェイス
    • ダイレクトインターフェイス
    • ブリッジインターフェイス
  • libvirt-nss コンポーネントを仮想マシンのホストにインストールして有効にしている。そうでない場合は、以下を行います。

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

      # dnf install libvirt-nss
      Copy to Clipboard Toggle word wrap
    2. /etc/nsswitch.conf ファイルを編集し、libvirt_guesthosts 行に追加します。

      ...
      passwd:      compat
      shadow:      compat
      group:       compat
      hosts:       files libvirt_guest dns
      ...
      Copy to Clipboard Toggle word wrap

手順

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

    # ssh root@192.0.2.1
    root@192.0.2.1's password:
    Last login: Mon Sep 24 12:05:36 2021
    root~#
    Copy to Clipboard Toggle word wrap
  2. 仮想マシンの名前とユーザーアクセスの認証情報を使用して、仮想マシンに接続します。たとえば、以下は、root 認証情報を使用して、仮想マシン testguest1 に接続します。

    # ssh root@testguest1
    root@testguest1's password:
    Last login: Wed Sep 12 12:05:36 2018
    root~]#
    Copy to Clipboard Toggle word wrap

トラブルシューティング

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

    # virsh list --all
    Id    Name                           State
    ----------------------------------------------------
    2     testguest1                    running
    -     testguest2                    shut off
    Copy to Clipboard Toggle word wrap

7.4. コマンドラインを使用して仮想マシンのシリアルコンソールを開く

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

これは、仮想マシンが以下に該当する場合に便利です。* VNC プロトコルを提供しないため、GUI ツールのビデオ表示に対応していない。

  • ネットワーク接続がないため、SSH を使用 して操作できない。

前提条件

  • ホスト上の GRUB ブートローダーは、シリアルコンソールを使用するように設定する必要があります。確認するには、ホスト上の /etc/default/grub ファイルに GRUB_TERMINAL=serial パラメーターが含まれていることを確認します。

    $ sudo grep GRUB_TERMINAL /etc/default/grub
    GRUB_TERMINAL=serial
    Copy to Clipboard Toggle word wrap
  • 仮想マシンには、console type='pty' などのシリアルコンソールデバイスが設定されている必要がある。確認するには、以下の手順を実施します。

    # virsh dumpxml vm-name | grep console
    
    <console type='pty' tty='/dev/pts/2'>
    </console>
    Copy to Clipboard Toggle word wrap
  • 仮想マシンに、カーネルコマンドラインでシリアルコンソールが設定されている。これを確認するには、仮想マシン上の cat /proc/cmdline コマンド出力に console=<console-name> が含まれている必要があります。<console-name> はアーキテクチャー固有です。

    • AMD64 および Intel 64 の場合: ttyS0

      注記

      この手順の次のコマンドは ttyS0 を使用します。

      # cat /proc/cmdline
      BOOT_IMAGE=/vmlinuz-6.12.0-0.el10_0.x86_64 root=/dev/mapper/rhel-root ro console=tty0 console=ttyS0,9600n8 rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb
      Copy to Clipboard Toggle word wrap

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

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

      1. 仮想マシンで、console=ttyS0 カーネルオプションを有効にします。

        # grubby --update-kernel=ALL --args="console=ttyS0"
        Copy to Clipboard Toggle word wrap
      2. 変更を反映させない可能性があるカーネルオプションをクリアします。

        # grub2-editenv - unset kernelopts
        Copy to Clipboard Toggle word wrap
      3. 仮想マシンを再起動します。
  • serial-getty@<console-name> サービスを有効にする必要があります。たとえば、AMD64 および Intel 64 の場合は、以下を実行します。

    # systemctl status serial-getty@ttyS0.service
    
    ○ serial-getty@ttyS0.service - Serial Getty on ttyS0
         Loaded: loaded (/usr/lib/systemd/system/serial-getty@.service; enabled; preset: enabled)
    Copy to Clipboard Toggle word wrap

手順

  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:
    Copy to Clipboard Toggle word wrap
  2. 標準のコマンドラインインターフェイスと同じように、virsh コンソールを操作できます。

7.5. リモートの仮想化ホストへのアクセスを容易にするための設定

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

# virsh -c qemu+ssh://root@192.0.2.1/system list
root@192.0.2.1's password:

Id   Name              State
---------------------------------
1    remote-guest      running
Copy to Clipboard Toggle word wrap

ただし、SSH および libvirt の設定を変更すれば、接続の詳細を完全に指定する必要がなくなります。以下に例を示します。

# virsh -c remote-host list
root@192.0.2.1's password:

Id   Name              State
---------------------------------
1    remote-guest      running
Copy to Clipboard Toggle word wrap

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

手順

  1. ~/.ssh/config ファイルを以下のように編集します。ここで、host-alias は特定のリモートホストに関連付けられた短縮名および root@192.0.2.1 のエイリアス、hosturl は host の URL アドレスです。

    # vi ~/.ssh/config
    Host example-host-alias
      User                    root
      Hostname                192.0.2.1
    Copy to Clipboard Toggle word wrap
  2. /etc/libvirt/libvirt.conf ファイルを以下のように編集します。example-qemu-host-alias は、QEMU および libvirt ユーティリティーが qemu+ssh://192.0.2.1/system に目的のホスト example-host-alias を関連付けるホストエイリアスです。

    # vi /etc/libvirt/libvirt.conf
    uri_aliases = [
      "example-qemu-host-alias=qemu+ssh://example-host-alias/system",
    ]
    Copy to Clipboard Toggle word wrap

検証

  1. ローカルシステムで libvirt ベースのユーティリティーを使用し、-c qemu-host-alias パラメーターを追加することで、リモートの仮想マシンを管理できることを確認します。これにより、リモートホストの SSH でコマンドが自動的に実行されます。

    たとえば、以下のコマンドにより、前の手順で example-qemu-host-alias としてセットアップした接続である、192.0.2.1 リモートホスト上の仮想マシンがリスト表示されることを確認します。

    # virsh -c example-qemu-host-alias list
    
    root@192.0.2.1's password:
    
    Id   Name                       State
    ----------------------------------------
    1    example-remote-guest      running
    Copy to Clipboard Toggle word wrap
    注記

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

次のステップ

libvirt ユーティリティーを、1 台のリモートホストで排他的に使用する場合は、libvirt ベースのユーティリティーのデフォルトターゲットとして特定の接続を設定することもできます。

ただし、ローカルホスト上または別のリモートホスト上の仮想マシンも管理する場合、これを行うことはできません。

  • /etc/libvirt/libvirt.conf ファイルを編集して、uri_default パラメーターの値を、デフォルトの libvirt ターゲットとして example-qemu-host-alias に設定できます。

    # 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 = "example-qemu-host-alias"
    Copy to Clipboard Toggle word wrap

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

    $ virsh list
    root@192.0.2.1's password:
    
    Id   Name              State
    ---------------------------------
    1   example-remote-guest      running
    Copy to Clipboard Toggle word wrap
  • リモートホストに接続する場合、リモートシステムへの root パスワードの入力を回避できます。そのためには、以下の方法を 1 つ以上行います。

  • -c (または --connect) オプションを使用して、リモートホストで virt-installvirt-viewer、および virsh コマンドを実行できます。

7.6. コマンドラインを使用して SPICE リモートディスプレイプロトコルを VNC に置き換える

SPICE リモートディスプレイプロトコルは、RHEL 10 ホストではサポートされていません。SPICE プロトコルを使用するように設定された仮想マシン (VM) がある場合は、コマンドラインを使用して SPICE プロトコルを VNC プロトコルに置き換えることができます。そうしないと、仮想マシンが起動に失敗します。

ただし、オーディオや USB パススルーなどの一部の SPICE デバイスは、VNC プロトコルに適切な代替機能が存在しないため、仮想マシンから削除されます。詳細は、RHEL 9 の採用における考慮事項 を参照してください。

前提条件

  • SPICE リモートディスプレイプロトコルを使用するように設定され、すでにシャットダウンされている既存の仮想マシンがある。

手順

  • ホスト上で次のコマンドを実行します。`<vm-name>` は、VNC に変換する仮想マシンの名前に置き換えます。

    # virt-xml <vm-name> --edit --convert-to-vnc
    
    Domain 'vm-name' defined successfully
    Copy to Clipboard Toggle word wrap

検証

  • 変換した仮想マシンの設定を検査し、graphics type に vnc と表示されることを確認します。

    # virsh dumpxml -xml <vm-name> | grep "graphics"
    
    <graphics type='vnc' port='5900' autoport='yes' listen='127.0.0.1'>
    Copy to Clipboard Toggle word wrap

第8章 仮想マシンのシャットダウンと再起動

RHEL 10 では、コマンドラインまたは Web コンソールの GUI を使用して仮想マシンをシャットダウンまたは再起動できます。

8.1. コマンドラインを使用した仮想マシンのシャットダウン

仮想マシン (VM) をシャットダウンするには、仮想マシンが応答するかどうかに応じて異なる手順が必要です。

  • 応答する仮想マシンのシャットダウン:

    • ゲストに接続している 場合は、ゲストオペレーティングシステムに応じたシャットダウンコマンドまたは GUI 要素を使用します。

      注記

      GNOME デスクトップを使用する Linux ゲストなどの一部の環境では、ゲストをサスペンドまたはハイバネート状態にするために GUI 電源ボタンを使用すると、代わりに仮想マシンがシャットダウンされることがあります。

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

      # virsh shutdown demo-guest1
      Domain 'demo-guest1' is being shutdown
      Copy to Clipboard Toggle word wrap

      仮想マシンがリモートホスト (この例では 192.0.2.1) にある場合は、以下のコマンドを実行します。

      # virsh -c qemu+ssh://root@192.0.2.1/system shutdown demo-guest1
      
      root@192.0.2.1's password:
      Domain 'demo-guest1' is being shutdown
      Copy to Clipboard Toggle word wrap
  • 応答しない場合など、仮想マシンを強制的にシャットダウンする場合は、そのホストで virsh destroy コマンドを実行します。

    # virsh destroy demo-guest1
    Domain 'demo-guest1' destroyed
    Copy to Clipboard Toggle word wrap
    注記

    virsh destroy コマンドは、仮想マシンの設定またはディスクイメージを削除するわけではありません。物理マシンから電源コードを抜くのと同様に、仮想マシンの実行中のインスタンスを終了するだけです。

    virsh destroy によって、仮想マシンのファイルシステムが破損することがまれにあります。そのため、他のすべてのシャットダウン方法が失敗した場合にのみ、このコマンドを使用してください。

検証

  • ホスト上で、仮想マシンのリストを表示してステータスを確認します。

    # virsh list --all
    
     Id    Name                 State
    ------------------------------------------
     1     demo-guest1          shut off
    Copy to Clipboard Toggle word wrap

8.2. Web コンソールを使用した仮想マシンのシャットダウン

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

前提条件

手順

  1. 仮想マシン インターフェイスで、シャットダウンする仮想マシンがある行を見つけます。
  2. 行の右側で、Shut Down をクリックします。

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

トラブルシューティング

  • 仮想マシンがシャットダウンしない場合は、Shut Down ボタンの横にある をクリックし、Force Shut Down を選択します。
  • 応答しない仮想マシンをシャットダウンするには、メニューの Send non-maskable interrupt ボタンをクリックして、マスク不可割り込みを送信することもできます。

8.3. コマンドラインを使用した仮想マシンの再起動

仮想マシン (VM) を再起動するには、仮想マシンが応答するかどうかに応じて異なる手順が必要です。

手順

  • 応答する仮想マシンの再起動

    • ゲストに接続している 場合は、ゲストオペレーティングシステムに応じた再起動コマンドまたは GUI 要素を使用します。
    • または、ホスト上で virsh reboot コマンドを使用します。

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

        # virsh reboot demo-guest1
        Domain 'demo-guest1' is being rebooted
        Copy to Clipboard Toggle word wrap
      • 仮想マシンがリモートホスト (この例では 192.0.2.1) にある場合は、以下のコマンドを実行します。

        # virsh -c qemu+ssh://root@192.0.2.1/system reboot demo-guest1
        
        root@192.0.2.1's password:
        Domain 'demo-guest1' is being rebooted
        Copy to Clipboard Toggle word wrap
  • 応答しない仮想マシンの再起動

    1. 仮想マシンを強制的にシャットダウンします。

      # virsh destroy demo-guest1
      Domain 'demo-guest1' destroyed
      Copy to Clipboard Toggle word wrap
      注記

      virsh destroy コマンドは、仮想マシンの設定またはディスクイメージを削除するわけではありません。物理マシンから電源コードを抜くのと同様に、仮想マシンの実行中のインスタンスを終了するだけです。

      virsh destroy によって、仮想マシンのファイルシステムが破損することがまれにあります。そのため、他のすべてのシャットダウン方法が失敗した場合にのみ、このコマンドを使用してください。

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

      # virsh start demo-guest1
      Domain 'demo-guest1' started
      Copy to Clipboard Toggle word wrap

検証

  • ホスト上で、仮想マシンのリストを表示してステータスを確認します。

    # virsh list --all
    
     Id    Name                 State
    ------------------------------------------
     1     demo-guest1          running
    Copy to Clipboard Toggle word wrap

8.4. Web コンソールを使用した仮想マシンの再起動

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

前提条件

手順

  1. Virtual Machines インターフェイスで、再起動する仮想マシンの行を見つけます。
  2. 行の右側にあるメニューボタン をクリックします。

    アクションのドロップダウンメニューが表示されます。

  3. ドロップダウンメニューで、Reboot をクリックします。

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

トラブルシューティング

  • 仮想マシンが再起動しない場合には Reboot ボタンのとなりにある をクリックして Force Reboot を選択します。
  • 応答しない仮想マシンをシャットダウンするには、メニューの Send non-maskable interrupt ボタンをクリックして、マスク不可割り込みを送信することもできます。

第9章 仮想マシンの削除

RHEL 10 で仮想マシンを削除するには、コマンドラインインターフェイス または Web コンソールの GUI を使用します。

9.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.
    Copy to Clipboard Toggle word wrap

検証

  • 仮想マシンがホスト上に存在しないことを確認します。

    # virsh list --all
    Copy to Clipboard Toggle word wrap

9.2. Web コンソールを使用した仮想マシンの削除

RHEL 10 Web コンソールを使用して、仮想マシン (VM) とそれに関連するストレージファイルをホストから削除できます。

前提条件

  • RHEL 10 Web コンソールがインストールされている。

    手順は、Web コンソールのインストールおよび有効化 を参照してください。

  • Web コンソールの仮想マシンプラグインが システムにインストールされている
  • 仮想マシンからの重要なデータのバックアップを作成している。
  • 他の仮想マシンが同じ関連ストレージを使用していないことを確認します。
  • オプション: 仮想マシンをシャットダウンします。

手順

  1. RHEL 10 Web コンソールにログインします。
  2. 仮想マシン インターフェイスで、削除する仮想マシンのメニューボタン をクリックします。

    仮想マシン操作を制御するためのドロップダウンメニューが表示されます。

  3. Delete をクリックします。

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

  4. オプション: 仮想マシンに関連付けられているストレージファイルのすべてまたは一部を削除するには、削除するストレージファイルの横にあるチェックボックスをオンにします。
  5. Delete をクリックします。

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

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

RHEL 10 での仮想化デプロイメントのあらゆる側面を調整またはトラブルシューティングする必要がある場合、通常、最初に実行する必要がある手順は、仮想マシン (VM) の現在の状態と設定に関する情報を表示することです。これは、コマンドライン または Web コンソール を使用して実行できます。仮想マシンの XML 設定 で情報を表示することもできます。

10.1. コマンドラインを使用した仮想マシン情報の表示

ホスト上の仮想マシン (VM) とその設定に関する情報を取得するには、virsh コマンドラインユーティリティーを使用できます。

手順

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

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

    # 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)
    Copy to Clipboard Toggle word wrap
  • 特定の仮想マシンの XML 設定をすべて取得するには、次のコマンドを実行します。

    # virsh dumpxml testguest2
    
    <domain type='kvm' id='1'>
      <name>testguest2</name>
      <uuid>a973434f-2f6e-4ěša-8949-76a7a98569e1</uuid>
      <metadata>
    [...]
    Copy to Clipboard Toggle word wrap

    仮想マシンの XML 設定の例と注釈は、仮想マシンの XML 設定例 を参照してください。

  • 仮想マシンのディスクおよびその他のブロックデバイスに関する情報は、次のコマンドを実行します。

    # 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
    Copy to Clipboard Toggle word wrap

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

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

    # virsh domfsinfo testguest3
    Mountpoint   Name   Type   Target
    ------------------------------------
     /            dm-0   xfs   vda
     /boot        vda2   xfs   vda
     /boot/efi    vda1   vfat  vda
    Copy to Clipboard Toggle word wrap
  • 特定の仮想マシンの 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
    Copy to Clipboard Toggle word wrap

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

  • 特定の仮想マシンのすべてのネットワークインターフェイスをリスト表示するには、次のコマンドを実行します。

    # virsh domiflist testguest5
    Interface   Type      Source    Model    MAC
    -------------------------------------------------------------
     vnet0       network   default   virtio   52:54:00:ad:23:fd
     vnet1       bridge    br0       virtio   52:54:00:40:d4:9d
    Copy to Clipboard Toggle word wrap

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

  • ホスト上のストレージプールとストレージボリュームに関する情報を表示する手順は、CLI を使用した仮想マシンのストレージ情報の表示 を参照してください。

10.2. Web コンソールを使用した仮想マシン情報の表示

Web コンソールを使用すると、使用可能な仮想マシン (VM)、ディスク、ストレージプール、およびネットワークに関する概要情報を含む仮想化の概要にアクセスできます。

前提条件

手順

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

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

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

    • Storage Pools - Web コンソールからアクセスできるアクティブまたは非アクティブなストレージプールの数とその状態。
    • Networks - Web コンソールからアクセスできるアクティブまたは非アクティブなネットワークの数とその状態。
    • Name - 仮想マシンの名前。
    • Connection - libvirt 接続のタイプ (システムまたはセッション)。
    • State - 仮想マシンの状態。
    • Resource usage - 仮想マシンのメモリーと仮想 CPU の使用量。
    • Disks - 仮想マシンに割り当てられたディスクの詳細情報。

      注記

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

      また、MAC アドレスは、仮想マシンがシャットダウンしている場合にのみ変更できます。

10.3. 仮想マシンの XML 設定例

仮想マシンの XML 設定 (ドメイン XML とも呼ばれる) は、仮想マシンの設定およびコンポーネントを決定します。以下の表は、仮想マシンの XML 設定例の各セクションと、コンテンツを説明しています。

仮想マシンの XML 設定を取得するには、virsh dumpxml コマンドの後に仮想マシンの名前を指定します。

# virsh dumpxml testguest1
Copy to Clipboard Toggle word wrap
Expand
表10.1 XML 設定のサンプル
ドメイン XML セクション説明
<domain type='kvm'>
 <name>Testguest1</name>
 <uuid>ec6fbaa1-3eb4-49da-bf61-bb02fbec4967</uuid>
 <memory unit='KiB'>1048576</memory>
 <currentMemory unit='KiB'>1048576</currentMemory>
Copy to Clipboard Toggle word wrap

これは、1024 MiB のメモリーが割り当てられている KVM 仮想マシン Testguest1 です。

 <vcpu placement='static'>1</vcpu>
Copy to Clipboard Toggle word wrap

仮想マシンには、仮想 CPU (vCPU) が 1 つ割り当てられます。

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

 <os>
  <type arch='x86_64' machine='pc-q35-rhel10.0.0'>hvm</type>
  <boot dev='hd'/>
 </os>
Copy to Clipboard Toggle word wrap

マシンアーキテクチャーは AMD64 および Intel 64 のアーキテクチャーに設定され、Intel Q35 マシン種別を使用して機能の互換性を決定します。OS は、ハードディスクドライブから起動するように設定されています。

 <features>
  <acpi/>
  <apic/>
 </features>
Copy to Clipboard Toggle word wrap

acpi および apic ハイパーバイザー機能が有効になります。

ハイパーバイザー機能の設定の詳細は、Hyper-V enlightenments の有効化 を参照してください。

 <cpu mode='host-model' check='partial'/>
Copy to Clipboard Toggle word wrap

機能 XML (virsh domcapabilities で取得可能) のホスト CPU 定義は、仮想マシンの XML 設定に自動的にコピーされます。したがって、仮想マシンの起動時に、libvirt はホストの CPU と似た CPU モデルを選択し、さらに機能を追加してホストモデルに可能な限り近づけます。

 <clock offset='utc'>
  <timer name='rtc' tickpolicy='catchup'/>
  <timer name='pit' tickpolicy='delay'/>
  <timer name='hpet' present='no'/>
 </clock>
Copy to Clipboard Toggle word wrap

仮想マシンの仮想ハードウェアクロックは UTC タイムゾーンを使用します。また、QEMU ハイパーバイザーと同期するために、異なるタイマーが 3 つ設定されます。

クロック設定の詳細は、Hyper-V enlightenments の有効化 を参照してください。

 <on_poweroff>destroy</on_poweroff>
 <on_reboot>restart</on_reboot>
 <on_crash>destroy</on_crash>
Copy to Clipboard Toggle word wrap

仮想マシンの電源が切れた場合や、仮想マシンの OS が突然終了すると、libvirt が仮想マシンを終了し、割り当てられているリソースをすべて解放します。仮想マシンの再起動時に、libvirt は同じ設定で仮想マシンを起動します。

 <pm>
  <suspend-to-mem enabled='no'/>
  <suspend-to-disk enabled='no'/>
 </pm>
Copy to Clipboard Toggle word wrap

この仮想マシンでは、S3 および S4 ACPI のスリープ状態が無効になっています。

<devices>
 <emulator>/usr/libexec/qemu-kvm</emulator>
 <disk type='file' device='disk'>
  <driver name='qemu' type='qcow2'/>
  <source file='/var/lib/libvirt/images/Testguest.qcow2'/>
  <target dev='vda' bus='virtio'/>
 </disk>
 <disk type='file' device='cdrom'>
  <driver name='qemu' type='raw'/>
  <target dev='sdb' bus='sata'/>
  <readonly/>
 </disk>
Copy to Clipboard Toggle word wrap

仮想マシンは、エミュレーションに /usr/libexec/qemu-kvm バイナリーファイルを使用します。この仮想マシンには 2 つのディスクデバイスが割り当てられます。

最初のディスクは、ホストに保存されている /var/lib/libvirt/images/Testguest.qcow2 をベースにした仮想ハードドライブで、その論理デバイス名は vda に設定されています。

2 番目のディスクは仮想化 CD-ROM で、その論理デバイス名は sdb に設定されています。

  <controller type='usb' index='0' model='qemu-xhci' ports='15'/>
  <controller type='sata' index='0'/>
  <controller type='pci' index='0' model='pcie-root'/>
  <controller type='pci' index='1' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='1' port='0x10'/>
  </controller>
  <controller type='pci' index='2' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='2' port='0x11'/>
  </controller>
  <controller type='pci' index='3' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='3' port='0x12'/>
  </controller>
  <controller type='pci' index='4' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='4' port='0x13'/>
  </controller>
  <controller type='pci' index='5' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='5' port='0x14'/>
  </controller>
  <controller type='pci' index='6' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='6' port='0x15'/>
  </controller>
  <controller type='pci' index='7' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='7' port='0x16'/>
  </controller>
  <controller type='virtio-serial' index='0'/>
Copy to Clipboard Toggle word wrap

仮想マシンは、USB デバイスの割り当てにコントローラーを 1 つ、PCI-Express (PCIe) デバイスにルートコントローラーを使用します。さらに、virtio-serial コントローラーが利用できるため、仮想マシンは、シリアルコンソールなど、各種方法でホストを操作できます。

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

 <interface type='network'>
  <mac address='52:54:00:65:29:21'/>
  <source network='default'/>
  <model type='virtio'/>
 </interface>
Copy to Clipboard Toggle word wrap

ネットワークインターフェイスは、default の仮想ネットワークおよび virtio ネットワークデバイスモデルを使用する仮想マシンに設定されます。

ネットワークインターフェイスの設定に関する詳細は、仮想マシンのネットワークパフォーマンスの最適化 を参照してください。

  <serial type='pty'>
   <target type='isa-serial' port='0'>
    <model name='isa-serial'/>
   </target>
  </serial>
  <console type='pty'>
   <target type='serial' port='0'/>
  </console>
  <channel type='unix'>
   <target type='virtio' name='org.qemu.guest_agent.0'/>
   <address type='virtio-serial' controller='0' bus='0' port='1'/>
  </channel>
Copy to Clipboard Toggle word wrap

pty シリアルコンソールが仮想マシンに設定されているので、ホストとの基本的な仮想マシン通信が可能になります。コンソールは、ポート 1 で UNIX チャンネルを使用します。この設定は自動で設定されており、設定の変更は推奨されません。

仮想マシンを操作する方法の詳細は、Web コンソールを使用した仮想マシンの操作 を参照してください。

  <input type='tablet' bus='usb'>
   <address type='usb' bus='0' port='1'/>
  </input>
  <input type='mouse' bus='ps2'/>
  <input type='keyboard' bus='ps2'/>
Copy to Clipboard Toggle word wrap

仮想マシンは、タブレット入力を受信するように設定された仮想 usb ポートと、マウスとキーボード入力を受け取るように設定された仮想 ps2 ポートを使用します。この設定は自動で設定されており、設定の変更は推奨されません。

  <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'>
   <listen type='address' address='127.0.0.1'/>
  </graphics>
Copy to Clipboard Toggle word wrap

仮想マシンは、グラフィカル出力をレンダリングするために vnc プロトコルを使用します。

  <redirdev bus='usb' type='tcp'>
   <source mode='connect' host='localhost' service='4000'/>
   <protocol type='raw'/>
  </redirdev>
  <memballoon model='virtio'>
   <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
  </memballoon>
 </devices>
</domain>
Copy to Clipboard Toggle word wrap

仮想マシンは、USB デバイスのリモート割り当てに tcp リダイレクターを使用します。メモリーバルーンがオンになります。この設定は自動で設定されており、設定の変更は推奨されません。

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

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

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

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

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

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

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

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

手順は、Creating virtual machines templates を参照してください。

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

正常に機能する複数のクローン仮想マシンを作成するには、SSH 鍵や永続的なネットワーク MAC 設定などの、ソース仮想マシンに固有の情報および設定を削除します。これにより、仮想マシンのクローンを簡単かつ安全に作成するのに使用できる仮想マシンの テンプレート が得られます。

仮想マシンのテンプレートは、virt-sysprep ユーティリティーを使用して作成 することも、要件に基づいて 手動で作成 することもできます。

11.2.1. virt-sysprep を使用した仮想マシンテンプレートの作成

既存の仮想マシン (VM) から複製テンプレートを作成するには、virt-sysprep ユーティリティーを使用できます。これにより、特定のネットワーク設定やシステム登録メタデータなど、クローンが正しく機能しない可能性がある特定の設定が削除されます。その結果、virt-sysprep は仮想マシンのクローンをより効率的に作成し、クローンがより確実に動作するようにします。

前提条件

  • virt-sysprep ユーティリティーを含む guestfs-tools パッケージがホストにインストールされます。

    # dnf install guestfs-tools
    Copy to Clipboard Toggle word wrap
  • テンプレートとして使用するソース仮想マシンがシャットダウンしている。
  • ソース仮想マシンのディスクイメージの場所を把握しており、その仮想マシンのディスクイメージファイルの所有者である。

    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
    Copy to Clipboard Toggle word wrap
  • オプション: ソース仮想マシンのディスク上の重要なデータがすべてバックアップされている。ソース仮想マシンをそのまま保持する場合は、クローンを作成 してから、そのクローンをテンプレートに変換します。

手順

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

    # whoami
    root
    Copy to Clipboard Toggle word wrap
  2. オプション: 仮想マシンのディスクイメージをコピーします。

    # cp /var/lib/libvirt/images/vm-name.qcow2 /var/lib/libvirt/images/vm-name-original.qcow2
    Copy to Clipboard Toggle word wrap

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

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

    # virt-sysprep -a /var/lib/libvirt/images/vm-name.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" ...
    [...]
    Copy to Clipboard Toggle word wrap

    必要に応じて、virt-sysprep ユーティリティーがディスクイメージに対して実行する変更を調整することもできます。詳細は、システム上の virt-sysprep man ページの OPERATIONS セクションを参照してください。

検証

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

    # 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
    [...]
    Copy to Clipboard Toggle word wrap

11.2.2. 仮想マシンテンプレートの手動による作成

既存の仮想マシンからテンプレートを作成する場合は、ゲスト仮想マシンを手動でリセットまたは設定解除して、クローン作成の準備をします。

前提条件

  • ソースの仮想マシンのディスクイメージの場所を把握しており、仮想マシンのディスクイメージファイルの所有者であることを確認します。

    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
    Copy to Clipboard Toggle word wrap
  • 仮想マシンがシャットダウンしていることを確認します。
  • オプション: 仮想マシンのディスク上の重要なデータがすべてバックアップされている。ソース仮想マシンをそのまま保持する場合は、クローンを作成 してから、そのクローンを編集してテンプレートを作成します。

手順

  1. クローンを作成するように仮想マシンを設定します。

    1. クローンに必要なソフトウェアをインストールします。
    2. オペレーティングシステムに一意でない設定を設定します。
    3. 固有でないアプリケーション設定を設定します。
  2. ネットワーク設定を削除します。

    1. 以下のコマンドを使用して、永続的な udev ルールを削除します。

      # rm -f /etc/udev/rules.d/70-persistent-net.rules
      Copy to Clipboard Toggle word wrap
      注記

      udev ルールを削除しないと、最初の NIC の名前が eth0 ではなく eth1 になる場合があります。

    2. /etc/NetworkManager/system-connections/ ディレクトリーの NMConnection ファイルから一意の情報を削除します。

      1. MAC アドレス、IP アドレス、DNS、ゲートウェイ、およびその他の 一意 の情報または望ましくない設定を削除します。

        *ID=ExampleNetwork
        BOOTPROTO="dhcp"
        HWADDR="AA:BB:CC:DD:EE:FF"                  <- REMOVE
        NM_CONTROLLED="yes"
        ONBOOT="yes"
        TYPE="Ethernet"
        UUID="954bd22c-f96c-4b59-9445-b39dd86ac8ab" <- REMOVE
        Copy to Clipboard Toggle word wrap
      2. 同様の 一意 の情報と望ましくない設定を /etc/hosts および /etc/resolv.conf ファイルから削除します。
  3. 登録の詳細を削除します。

    • Red Hat ネットワーク (RHN) に登録されている仮想マシンの場合:

      # rm /etc/sysconfig/rhn/systemid
      Copy to Clipboard Toggle word wrap
    • Red Hat Subscription Manager (RHSM) に登録されている仮想マシンの場合:

      • 元の仮想マシンを使用しない場合は、次のコマンドを実行します。

        # subscription-manager unsubscribe --all # subscription-manager unregister # subscription-manager clean
        Copy to Clipboard Toggle word wrap
      • 元の仮想マシンを使用する場合は、以下を行います。

        # subscription-manager clean
        Copy to Clipboard Toggle word wrap
        注記

        元の RHSM プロファイルは、ID コードとともにポータルに残ります。クローンの作成後、次のコマンドを使用して仮想マシンで RHSM 登録を再アクティブ化します。

        # subscription-manager register --consumerid=71rd64fx-6216-4409-bf3a-e4b7c7bd8ac9
        Copy to Clipboard Toggle word wrap
  4. その他の固有の詳細を削除します。

    1. SSH 公開鍵と秘密鍵のペアを削除します。

      # rm -rf /etc/ssh/ssh_host_example
      Copy to Clipboard Toggle word wrap
    2. LVM デバイスの設定を削除します。

      # rm /etc/lvm/devices/system.devices
      Copy to Clipboard Toggle word wrap
    3. 複数のマシンで実行している場合に、競合する可能性があるその他のアプリケーション固有の識別子や設定を削除します。
  5. gnome-initial-setup-done ファイルを削除し、次回のシステムの起動時に設定ウィザードを実行するように仮想マシンを設定します。

    # rm ~/.config/gnome-initial-setup-done
    Copy to Clipboard Toggle word wrap
    注記

    次回の起動時に実行するウィザードは、仮想マシンから削除された設定によって異なります。また、クローンの初回起動時には、ホスト名を変更することが推奨されます。

11.3. コマンドラインを使用した仮想マシンのクローン作成

テスト用に、特定のプロパティーセットを使用して新しい仮想マシン (VM) を作成するには、コマンドラインを使用して既存の仮想マシンのクローンを作成できます。

前提条件

  • 移行元の仮想マシンがシャットダウンしている。
  • クローンとして作成したディスクイメージを保存するのに十分なディスク領域があることを確認します。
  • virt-install パッケージがホストにインストールされている。
  • オプション: 仮想マシンのクローンを複数作成する場合は、クローンとして作成した仮想マシンが適切に動作するように、ソース仮想マシンから固有のデータと設定を削除します。手順は、仮想マシンテンプレートの作成 を参照してください。

手順

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

    サンプルのユースケース

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

      # virt-clone --original example-VM-1 --auto-clone
      Allocating 'example-VM-1-clone.qcow2'                            | 50.0 GB  00:05:37
      
      Clone 'example-VM-1-clone' created successfully.
      Copy to Clipboard Toggle word wrap
    • 次のコマンドは、example-VM-2 という名前で仮想マシンのクローンを作成し、example-VM-3 という名前でローカル仮想マシンを作成します。この仮想マシンは、example-VM-2 の複数ディスクのうち 2 つだけを使用します。

      # virt-clone --original example-VM-2 --name example-VM-3 --file /var/lib/libvirt/images/disk-1-example-VM-2.qcow2 --file /var/lib/libvirt/images/disk-2-example-VM-2.qcow2
      Allocating 'disk-1-example-VM-2.qcow2'                                      | 78.0 GB  00:05:37
      Allocating 'disk-2-example-VM-2.qcow2'                                      | 80.0 GB  00:05:37
      
      Clone 'example-VM-3' created successfully.
      Copy to Clipboard Toggle word wrap
    • 仮想マシンを別のホストにクローンするには、ローカルホストで定義を解除せずに仮想マシンを移行します。たとえば、次のコマンドは、以前に作成した仮想マシン example-VM-3192.0.2.1 リモートシステムにローカルディスクを含めてクローンします。192.0.2.1 に対して次のコマンドを実行するには root 権限が必要であることに注意してください。

      # virsh migrate --offline --persistent example-VM-3 qemu+ssh://root@192.0.2.1/system
      root@192.0.2.1's password:
      
      # scp /var/lib/libvirt/images/<disk-1-example-VM-2-clone>.qcow2 root@192.0.2.1/<user@remote_host.com>://var/lib/libvirt/images/
      
      # scp /var/lib/libvirt/images/<disk-2-example-VM-2-clone>.qcow2 root@192.0.2.1/<user@remote_host.com>://var/lib/libvirt/images/
      Copy to Clipboard Toggle word wrap
      注記

      virt-clone の使用に関する詳細と例は、システム上の virt-clone(1) man ページを参照してください。

検証

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

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

      # virsh list --all
      Id   Name                  State
      ---------------------------------------
      -    example-VM-1          shut off
      -    example-VM-1-clone    shut off
      Copy to Clipboard Toggle word wrap
    2. クローンを起動し、起動しているかどうかを確認します。

      # virsh start example-VM-1-clone
      Domain 'example-VM-1-clone' started
      Copy to Clipboard Toggle word wrap

11.4. Web コンソールを使用した仮想マシンのクローン作成

特定のプロパティーセットで新しい仮想マシンを作成するには、Web コンソールを使用して事前に設定した仮想マシンのクローンを作成します。

注記

仮想マシンのクローンを作成すると、その仮想マシンに関連付けられたディスクのクローンも作成されます。

前提条件

手順

  1. RHEL 10 Web コンソールにログインします。
  2. Web コンソールの仮想マシンインターフェイスで、クローンを作成する仮想マシンのメニューボタン をクリックします。

    さまざまな仮想マシン操作を制御するドロップダウンメニューが表示されます。

  3. Clone をクリックします。

    Create a clone VM ダイアログが表示されます。

  4. オプション: 仮想マシンクローンの新しい名前を入力します。
  5. Clone をクリックします。

    ソースの仮想マシンに基づいて、新しい仮想マシンが作成されます。

検証

  • クローンとして作成された仮想マシンが、ホストで利用可能な仮想マシンのリストに表示されるかどうかを確認します。

第12章 仮想マシンの移行

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

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

ライブ マイグレーションを使用すると、ワークロードを中断することなく、わずかなダウンタイムのみで実行中の仮想マシン (VM) を移行できます。デフォルトでは移行された仮想マシンは、宛先ホスト上では一時的なもので、ソースホストでもそのまま定義されたままとなります。ライブ マイグレーションの重要な部分は、仮想マシンのメモリーと接続されている仮想化デバイスの状態を宛先ホストに転送することです。宛先ホストで仮想マシンが機能し続けるには、仮想マシンのディスクイメージが利用可能なままである必要があります。

シャットオフされた仮想マシンを移行するには、仮想マシンの設定を宛先ホストにコピーする オフライン マイグレーションを使用する必要があります。詳細は、以下の表を参照してください。

Expand
表12.1 仮想マシンの移行タイプ
移行タイプ説明ユースケースストレージ要件

ライブマイグレーション

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

常に稼働する必要がある仮想マシンに役に立ちます。ただし、I/O 負荷が高い仮想マシンなど、KVM がメモリーページを転送するよりも速くメモリーページを変更する仮想マシンの場合、ライブマイグレーションは失敗する可能性があります。(1)

移行中、仮想マシンのディスクイメージに、ソースホストと宛先ホストの両方からアクセスできる必要があります。(2)

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

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

シャットダウンした仮想マシンや、仮想マシンをシャットダウンしてもワークロードを中断しない場合に推奨されます。

仮想マシンのディスクイメージは、移行中にソースホストまたは宛先ホストからアクセスできる必要はなく、代わりに宛先ホストに手動でコピーまたは移動できます。

(1) 可能な解決策は、ライブマイグレーション用の virsh migrate の追加オプション を参照してください。

(2) これを実現するには、次のいずれかを使用します。

  • 共有ネットワーク上 にあるストレージ
  • virsh migrate コマンドの --copy-storage-all パラメーターで、ネットワーク経由でソースから宛先にディスクイメージの内容をコピーします。
  • ストレージエリアネットワーク (SAN) の論理ユニット (LUN)。
  • Ceph Storage クラスター
注記

大規模な移行をより簡単に管理するには、次のような他の Red Hat 製品を検討してください。

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

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

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

12.3. 仮想マシンの移行の制限事項

RHEL 10 で仮想マシン (VM) を移行する前に、移行の制限事項を理解しておく必要があります。

  • 特定の機能と設定を使用する仮想マシンは、移行すると正しく機能しなくなるか、移行が失敗します。このような機能は次のとおりです。

  • NUMA (Non-Uniform Memory Access) ピニングを使用するホスト間の移行は、ホストのトポロジーが類似している場合にのみ機能します。ただし、実行中のワークロードのパフォーマンスは、移行の影響を受ける可能性があります。
  • 移行元ホストと移行先ホストの両方が、仮想マシン移行のサポート対象となる特定の RHEL バージョンを使用している必要があります。仮想マシン移行のサポート対象となるホスト を参照してください。
  • ソース仮想マシンとターゲット仮想マシンの両方の物理 CPU は、同一である必要があります。そうでない場合、移行は失敗する可能性があります。以下の CPU 関連領域の仮想マシン間で相違があると、移行の問題が発生する可能性があります。

    • CPU モデル

      • Intel 64 ホストと AMD64 ホスト間の移行は、x86-64 命令セットを共有している場合でもサポートされていません。
      • 別の CPU モデルを持つホストに移行した後に仮想マシンが正しく機能することを確認する手順は、仮想マシンの移行におけるホスト CPU の互換性の確認 を参照してください。
    • 物理マシンのファームウェアバージョンと設定
  • 現在、ARM 64 ホスト間での仮想マシンの移行は、CPU、ファームウェア、およびメモリーページサイズが同じホスト間でのみサポートされています。

12.4. コマンドラインを使用した仮想マシンの移行

仮想マシンの現在のホストが不安定な場合や使用できない場合や、ホストワークロードを再分散する場合は、仮想マシンを別の KVM ホストに移行できます。ライブマイグレーション または オフラインマイグレーション を実行できます。2 つの手順の違いは、仮想マシンの移行の仕組み を参照してください。

前提条件

ハイパーバイザー
移行元ホストと移行先ホストはいずれも KVM ハイパーバイザーを使用します。
ネットワーク接続
移行元ホストと移行先のホストは、ネットワーク経由で相互に通信できなければなりません。ping ユーティリティーを使用してこれを確認します。
ポートの開放

移行先ホストで次のポートが開いていることを確認します。

  • ポート 22 は、SSH を使用して宛先ホストに接続するために必要です。
  • ポート 16514 は、TLS を使用して宛先ホストに接続するために必要です。
  • ポート 16509 は、TCP を使用して宛先ホストに接続するために必要です。
  • ポート 49152 - 49215 は、QEMU がメモリーおよびディスク移行データを転送するために必要です。
ホスト
移行に関する Red Hat のサポートを受けるには、移行元ホストと移行先ホストで特定のオペレーティングシステムとマシンタイプが使用されている必要があります。これを確認するには、仮想マシン移行のサポート対象となるホスト を参照してください。
CPU
仮想マシンは、移行先ホストの CPU 機能と互換性がある必要があります。これを確認するには、仮想マシンの移行におけるホスト CPU の互換性の確認 を参照してください。
ストレージ

移行する仮想マシンのディスクイメージに、移行元ホストと移行先ホストの両方からアクセスできる。オフラインマイグレーションの場合は任意ですが、実行中の仮想マシンの移行に必要になります。両方のホストのストレージアクセスを確保するには、次のいずれかに該当している必要があります。

ネットワーク帯域幅

仮想マシンの実行中に移行する場合は、ネットワークの帯域幅が、仮想マシンがダーティーメモリーページを生成する速度を超える必要があります。

ライブマイグレーションを開始する前に仮想マシンのダーティーページ速度を取得するには、次の手順を実行します。

  • 短期間、仮想マシンのダーティーページ生成速度を監視します。

    # virsh domdirtyrate-calc <example_VM> 30
    Copy to Clipboard Toggle word wrap
  • 監視が終了したら、結果を取得します。

    # virsh domstats <example_VM> --dirtyrate
    Domain: 'example-VM'
      dirtyrate.calc_status=2
      dirtyrate.calc_start_time=200942
      dirtyrate.calc_period=30
      dirtyrate.megabytes_per_second=2
    Copy to Clipboard Toggle word wrap

    この例では、仮想マシンが 1 秒あたり 2MB のダーティーメモリーページを生成しています。帯域幅が 2MB/s 以下のネットワーク上でこのような仮想マシンをライブマイグレーションしようとすると、仮想マシンを一時停止したり、ワークロードを低くしたりしないと、ライブマイグレーションが進行しません。

    ライブマイグレーションが正常に完了するように、仮想マシンのダーティーページの生成速度を大幅に上回るネットワーク帯域幅が必要です。

    注記

    calc_period オプションの値は、ワークロードとダーティーページ速度により異なる場合があります。いくつかの calc_period 値を試して、環境のダーティーページ速度に合わせた最適な期間を決定できます。

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

VM 移行を実行する場合、ソースホスト上の virsh クライアントは、いくつかのプロトコルの 1 つを使用して、宛先ホスト上の libvirt デーモンに接続できます。次の手順の例では SSH 接続を使用していますが、別の接続を選択することもできます。

  • libvirt で SSH 接続を使用する場合は、virtqemud ソケットが有効になっていて、宛先ホストで実行されていることを確認してください。

    # systemctl enable --now virtqemud.socket
    Copy to Clipboard Toggle word wrap
  • libvirt で TLS 接続を使用する場合は、virtproxyd-tls ソケットが有効になっていて、宛先ホストで実行していることを確認してください。

    # systemctl enable --now virtproxyd-tls.socket
    Copy to Clipboard Toggle word wrap
  • libvirt で TCP 接続を使用する場合は、virtproxyd-tcp ソケットが有効になっていて、宛先ホストで実行していることを確認してください。

    # systemctl enable --now virtproxyd-tcp.socket
    Copy to Clipboard Toggle word wrap

手順

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

    • 次のコマンドは、SSH トンネルを使用して、シャットオフされた example-VM 仮想マシンをローカルホストから example-destination ホストのシステム接続に移行します。

      # virsh migrate --offline --persistent <example_VM> qemu+ssh://example-destination/system
      Copy to Clipboard Toggle word wrap
  • ライブマイグレーション

    1. 次のコマンドは、SSH トンネルを使用して、example-VM 仮想マシンをローカルホストから example-destination ホストのシステム接続に移行します。仮想マシンは移行中も稼働し続けます。

      # virsh migrate --live --persistent <example_VM> qemu+ssh://example-destination/system
      Copy to Clipboard Toggle word wrap
    2. 移行が完了するまで待ちます。ネットワーク帯域幅、システム負荷、仮想マシンのサイズによっては、このプロセスに時間がかかる場合があります。virsh migrate--verbose オプションが使用されていないと、CLI はエラー以外の進捗インジケーターを表示しません。

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

  • マルチ FD ライブマイグレーション

    • ライブマイグレーション中に、宛先ホストへの複数の並列接続を使用できます。これは、複数のファイル記述子 (マルチ FD) マイグレーションとも呼ばれます。マルチ FD 移行では、移行プロセスに利用可能なネットワーク帯域幅をすべて利用することで、移行を高速化できます。

      # virsh migrate --live --persistent --parallel --parallel-connections 4 <example_VM> qemu+ssh://<example-destination>/system
      Copy to Clipboard Toggle word wrap

      この例では、4 つのマルチ FD チャネルを使用して <example_VM> 仮想マシンを移行します。利用可能なネットワーク帯域幅 10 Gbps ごとに 1 つのチャネルを使用することを推奨します。デフォルト値は 2 チャネルです。

  • ダウンタイム制限を延長したライブマイグレーション

    • ライブマイグレーション中に仮想マシンを一時停止できる最大時間 (ミリ秒単位) を指定する maxdowntime パラメーターを設定することで、ライブマイグレーションの信頼性を向上できます。ダウンタイムを長く設定すると、マイグレーションが正常に完了するようになります。

      # virsh migrate-setmaxdowntime <example_VM> <time_interval_in_milliseconds>
      Copy to Clipboard Toggle word wrap
  • Post-copy migration

    • 仮想マシンのメモリーフットプリントが大きい場合は、コピー後 のマイグレーションを実行できます。これにより、まずソース仮想マシンの CPU 状態が転送され、移行された仮想マシンが宛先ホスト上ですぐに起動されます。移行された仮想マシンが宛先ホスト上ですでに実行された後に、ソース仮想マシンのメモリーページが転送されます。このため、コピー後 のマイグレーションでは、移行された仮想マシンのダウンタイムが短くなる可能性があります。

      ただし、宛先ホスト上で実行中の仮想マシンが、まだ転送されていないメモリーページにアクセスしようとする可能性があり、これにより、ページフォールト が発生します。移行中の ページフォールト の発生が多すぎると、移行された仮想マシンのパフォーマンスが大幅に低下する可能性があります。

      コピー後 の移行が複雑になる可能性があることを考慮すると、次のコマンドを使用するのが適切です。このコマンドは、通常は標準のライブマイグレーションを開始し、指定時間内にライブマイグレーションを完了できない場合は コピー後 の移行に切り替えます。

      # virsh migrate --live --persistent --postcopy --timeout <time_interval_in_seconds> --timeout-postcopy <example_VM> qemu+ssh://<example-destination>/system
      Copy to Clipboard Toggle word wrap
  • 自動コンバージドライブマイグレーション

    • 仮想マシンのメモリーワークロードが高い場合は、--auto-converge オプションを使用できます。このオプションは、仮想マシンの CPU の実行速度を自動的に低下させます。その結果、この CPU スロットリングはメモリー書き込み速度を低下させるのに役立ちます。これにより、メモリーワークロードの高い仮想マシンでもライブマイグレーションが成功する可能性があります。

      ただし、CPU スロットリングは、メモリー書き込みが CPU 実行速度に直接関係しないワークロードの解決には役立たず、ライブマイグレーション中に仮想マシンのパフォーマンスに悪影響を与える可能性があります。

      # virsh migrate --live --persistent --auto-converge <example_VM> qemu+ssh://<example-destination>/system
      Copy to Clipboard Toggle word wrap

検証

  • オフライン マイグレーションの場合:

    • 宛先ホストで、利用可能な仮想マシンをリスト表示して、仮想マシンが正常に移行されたことを確認します。

      # virsh list --all
      Id      Name             State
      ----------------------------------
      10    example-VM-1      shut off
      Copy to Clipboard Toggle word wrap
  • ライブ マイグレーションの場合:

    • 宛先ホストで、利用可能な仮想マシンをリスト表示して、宛先仮想マシンの状態を確認します。

      # virsh list --all
      Id      Name             State
      ----------------------------------
      10    example-VM-1      running
      Copy to Clipboard Toggle word wrap

      仮想マシンの状態が running と表示されている場合、移行が完了したことを意味します。ただし、ライブマイグレーションがまだ進行中の場合、宛先仮想マシンの状態は paused と表示されます。

  • コピー後 のマイグレーションの場合:

    1. ソースホストで、利用可能な仮想マシンをリスト表示して、ソース仮想マシンの状態を確認します。

      # virsh list --all
      Id      Name             State
      ----------------------------------
      10    example-VM-1      shut off
      Copy to Clipboard Toggle word wrap
    2. 宛先ホストで、利用可能な仮想マシンをリスト表示して、宛先仮想マシンの状態を確認します。

      # virsh list --all
      Id      Name             State
      ----------------------------------
      10    example-VM-1      running
      Copy to Clipboard Toggle word wrap

      ソース仮想マシンの状態が shut off と表示され、宛先仮想マシンの状態が running と表示されている場合、移行は完了していることを意味します。

12.5. Web コンソールを使用した仮想マシンのライブ移行

継続的に実行する必要があるタスクを実行している仮想マシン (VM) を移行する場合は、シャットダウンせずに、その仮想マシンを別の KVM ホストに移行できます。これはライブマイグレーションとも呼ばれます。仮想マシンのライブマイグレーションは Web コンソールを使用して実行できます。

前提条件

  • RHEL 10 Web コンソールがインストールされている。

    手順は、Web コンソールのインストールおよび有効化 を参照してください。

  • Web コンソールの仮想マシンプラグインが システムにインストールされている
  • ハイパーバイザー: ソースホストと宛先ホストの両方が KVM ハイパーバイザーを使用します。
  • ホスト: ソースホストと宛先ホストが実行中です。
  • 開いているポート: 宛先ホストで次のポートが開いていることを確認します。

    • ポート 22 は、SSH を使用して宛先ホストに接続するために必要です。
    • ポート 16514 は、TLS を使用して宛先ホストに接続するために必要です。
    • ポート 16509 は、TCP を使用して宛先ホストに接続するために必要です。
    • ポート 49152-49215 は、QEMU がメモリーおよびディスク移行データを転送するために必要です。
  • CPU: 仮想マシンは、宛先ホストの CPU 機能と互換性がある必要があります。これを確認するには、仮想マシンの移行におけるホスト CPU の互換性の確認 を参照してください。
  • ストレージ: 移行される仮想マシンのディスクイメージは、ソースホストと宛先ホストの両方からアクセスできます。オフラインマイグレーションの場合は任意ですが、実行中の仮想マシンの移行に必要になります。両方のホストのストレージアクセスを確保するには、次のいずれかに該当している必要があります。

  • ネットワーク帯域幅: 実行中の仮想マシンを移行する場合、ネットワーク帯域幅は仮想マシンがダーティーメモリーページを生成する速度を超える必要があります。

    ライブマイグレーションを開始する前に仮想マシンのダーティーページ生成速度を取得するには、コマンドラインで次の手順を実行します。

    1. 短期間、仮想マシンのダーティーページ生成速度を監視します。

      # virsh domdirtyrate-calc vm-name 30
      Copy to Clipboard Toggle word wrap
    2. 監視が終了したら、結果を取得します。

      # virsh domstats vm-name --dirtyrate
      Domain: 'vm-name'
        dirtyrate.calc_status=2
        dirtyrate.calc_start_time=200942
        dirtyrate.calc_period=30
        dirtyrate.megabytes_per_second=2
      Copy to Clipboard Toggle word wrap

      この例では、仮想マシンが 1 秒あたり 2MB のダーティーメモリーページを生成しています。帯域幅が 2MB/s 以下のネットワーク上でこのような仮想マシンをライブマイグレーションしようとすると、仮想マシンを一時停止したり、ワークロードを低くしたりしないと、ライブマイグレーションが進行しません。

      ライブマイグレーションが正常に完了するように、仮想マシンのダーティーページの生成速度を大幅に上回るネットワーク帯域幅が必要です。

      注記

      calc_period オプションの値は、ワークロードとダーティーページ速度により異なる場合があります。いくつかの calc_period 値を試して、環境のダーティーページ速度に合わせた最適な期間を決定できます。

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

手順

  1. Web コンソールの仮想マシンインターフェイスで、移行する仮想マシンのメニューボタン をクリックします。

    仮想マシン操作を制御するためのドロップダウンメニューが表示されます。

  2. Migrate をクリックします。

    仮想マシンを別のホストに移行ダイアログボックスが表示されます。

    仮想マシンを別のホストに移行ダイアログボックスにフィールドを追加し、宛先ホストの URI を入力して、移行期間を設定します。
  3. 宛先ホストの URI を入力します。
  4. 移行の期間を設定します。

    • Permanent - 仮想マシンを永続的に移行する場合はチェックを外します。永続的な移行では、ソースホストから仮想マシンの設定が完全に削除されます。
    • Temporary - 一時的な移行では、仮想マシンのコピーを宛先ホストに移行します。このコピーは、仮想マシンのシャットダウン時に宛先ホストから削除されます。元の仮想マシンは、ソースホストに残ります。
  5. Migrate をクリックします。

    仮想マシンが宛先ホストに移行されます。

検証

仮想マシンの移行に成功し、正常に機能しているかどうかを確認するには、次のコマンドを実行します。

  • 宛先ホストで利用可能な仮想マシンのリストに仮想マシンが表示されているかどうかを確認します。
  • 移行した仮想マシンを起動し、起動するかどうかを確認します。

12.6. Mellanox Virtual Function が割り当てられた仮想マシンのライブマイグレーション

Mellanox ネットワークデバイスの Virtual Function (VF) が割り当てられた仮想マシン (VM) のライブマイグレーションを利用できます。

Red Hat は、Mellanox ネットワークデバイスの割り当て済み VF を使用して、仮想マシンライブマイグレーションの一般的な機能を実装します。ただし、機能は特定の Mellanox デバイスモデルとファームウェアバージョンによって異なります。

現在、VF 移行は Mellanox CX-7 ネットワークデバイスでのみサポートされています。

Mellanox CX-7 ネットワークデバイス上の VF は、ライブマイグレーションに必要な機能を追加する新しい mlx5_vfio_pci ドライバーを使用します。この新しいドライバーは、libvirt によって VF に自動的にバインドされます。

Red Hat は、付属の mlx5_vfio_pci ドライバーのみを使用して Mellanox VF ライブマイグレーションを直接サポートしています。

制限事項

Virtual Function が割り当てられた仮想マシンのライブマイグレーションを実行する場合、一部の仮想化機能を使用できません。

  • 仮想マシンのダーティーメモリーページレート生成の計算

    現在、Mellanox VF が接続された仮想マシンを移行する場合、virsh domjobinfo および virsh domdirtyrate-calc コマンドによって提供されるライブマイグレーションデータと統計情報は正確ではありません。計算では、接続された VF の影響を含めずにゲスト RAM のみがカウントされるためです。

  • コピー後のライブマイグレーションの使用
  • 仮想マシンでの仮想 I/O Memory Management Unit (vIOMMU) デバイスの使用

Mellanox CX-7 ネットワークデバイスに固有の追加の制限:

  • Parameter-Set Identification (PSID) と同じファームウェアバージョンを持つ CX-7 デバイスを、移行元ホストと移行先ホストの両方で使用する必要があります。

    次のコマンドでデバイスの PSID を確認できます。

    # mstflint -d <device_pci_address> query | grep -i PSID
    
    PSID: MT_1090111019
    Copy to Clipboard Toggle word wrap
  • 1 つの CX-7 Physical Function で、最大 4 つの VF を同時にライブマイグレーションに使用できます。たとえば、4 つの VF が割り当てられた 1 台の仮想マシンを移行することも、各仮想マシンに 1 つの VF が割り当てられた 4 台の仮想マシンを移行することもできます。

前提条件

  • ファームウェアバージョンが 28.36.1010 以上の Mellanox CX-7 ネットワークデバイスを使用している。

    Mellanox のドキュメント でサポートされているファームウェアバージョンを参照し、最新バージョンのファームウェアを使用していることを確認してください。

  • ホストが、Intel 64、AMD64、または ARM 64 CPU アーキテクチャーを使用している。
  • ソースホスト上の Mellanox ファームウェアバージョンは、宛先ホスト上のものと同じである必要があります。
  • mstflint パッケージが、移行元ホストと移行先ホストの両方にインストールされている。

    # dnf install mstflint
    Copy to Clipboard Toggle word wrap
  • Mellanox CX-7 ネットワークデバイスで、VF_MIGRATION_MODEMIGRATION_ENABLED に設定されている。

    # mstconfig -d <device_pci_address> query | grep -i VF_migration
    
    VF_MIGRATION_MODE                           MIGRATION_ENABLED(2)
    Copy to Clipboard Toggle word wrap
    • 次のコマンドを使用して、VF_MIGRATION_MODEMIGRATION_ENABLED に設定できます。

      # mstconfig -d <device_pci_address> set VF_MIGRATION_MODE=2
      Copy to Clipboard Toggle word wrap
  • openvswitch パッケージが、移行元ホストと移行先ホストの両方にインストールされている。

    # dnf install openvswitch
    Copy to Clipboard Toggle word wrap
  • すべての一般的な SR-IOV デバイスの前提条件。詳細は、仮想マシンへの SR-IOV ネットワークデバイスの割り当て を参照してください。
  • すべての一般的な仮想マシン移行の前提条件。詳細は、コマンドラインを使用した仮想マシンの移行 を参照してください。

手順

  1. 移行元ホストで、Mellanox ネットワークデバイスを switchdev モードに設定します。

    # devlink dev eswitch set pci/<device_pci_address> mode switchdev
    Copy to Clipboard Toggle word wrap
  2. 移行元ホストで、Mellanox デバイス上に Virtual Function を作成します。

    # echo 1 > /sys/bus/pci/devices/0000\:e1\:00.0/sriov_numvfs
    Copy to Clipboard Toggle word wrap

    ファイルパスの /0000\:e1\:00.0/ の部分は、デバイスの PCI アドレスに基づいています。この例では、0000:e1:00.0 です。

  3. 移行元ホストで、VF をそのドライバーからバインド解除します。

    # virsh nodedev-detach <vf_pci_address> --driver pci-stub
    Copy to Clipboard Toggle word wrap

    次のコマンドを使用して、VF の PCI アドレスを表示できます。

    # lshw -c network -businfo
    
    Bus info            Device         Class          Description
    =============================================================================
    pci@0000:e1:00.0    enp225s0np0    network        MT2910 Family [ConnectX-7]
    pci@0000:e1:00.1    enp225s0v0     network        ConnectX Family mlx5Gen Virtual Function
    Copy to Clipboard Toggle word wrap
  4. 移行元ホストで、VF の移行機能を有効にします。

    # devlink port function set pci/0000:e1:00.0/1 migratable enable
    Copy to Clipboard Toggle word wrap

    この例の pci/0000:e1:00.0/1 は、指定の PCI アドレスを持つ Mellanox デバイス上の最初の VF を示しています。

  5. 移行元ホストで、VF の移行用に Open vSwitch (OVS) を設定します。Mellanox デバイスが switchdev モードの場合、ネットワーク経由でデータを転送できません。

    1. openvswitch サービスが実行中であることを確認します。

      # systemctl start openvswitch
      Copy to Clipboard Toggle word wrap
    2. ネットワークのパフォーマンスを向上させるために、ハードウェアオフロードを有効にします。

      # ovs-vsctl set Open_vSwitch . other_config:hw-offload=true
      Copy to Clipboard Toggle word wrap
    3. 移行中にネットワーク接続が開いたままになるように、最大アイドル時間を増やします。

      # ovs-vsctl set Open_vSwitch . other_config:max-idle=300000
      Copy to Clipboard Toggle word wrap
    4. OVS インスタンスに新しいブリッジを作成します。

      # ovs-vsctl add-br <bridge_name>
      Copy to Clipboard Toggle word wrap
    5. openvswitch サービスを再起動します。

      # systemctl restart openvswitch
      Copy to Clipboard Toggle word wrap
    6. 物理的な Mellanox デバイスを OVS ブリッジに追加します。

      # ovs-vsctl add-port <bridge_name> enp225s0np0
      Copy to Clipboard Toggle word wrap

      この例では、enp225s0np0 は Mellanox デバイスのネットワークインターフェイス名です。

    7. Mellanox デバイスの VF を OVS ブリッジに追加します。

      # ovs-vsctl add-port <bridge_name> enp225s0npf0vf0
      Copy to Clipboard Toggle word wrap

      この例では、enp225s0npf0vf0 は VF のネットワークインターフェイス名です。

  6. 移行先ホスト でステップ 1 - 5 を繰り返します。
  7. 移行元ホストで、mlx_vf.xml などの新しいファイルを開き、次のような VF の XML 設定を追加します。

     <interface type='hostdev' managed='yes'>
          <mac address='52:54:00:56:8c:f7'/>
          <source>
            <address type='pci' domain='0x0000' bus='0xe1' slot='0x00' function='0x1'/>
          </source>
     </interface>
    Copy to Clipboard Toggle word wrap

    この例では、VF のパススルーを仮想マシンのネットワークインターフェイスとして設定します。MAC アドレスが一意であることを確認し、ソースホスト上の VF の PCI アドレスを使用します。

  8. 移行元ホストで、VF の XML ファイルを仮想マシンに割り当てます。

    # virsh attach-device <vm_name> mlx_vf.xml --live --config
    Copy to Clipboard Toggle word wrap

    この例の mlx_vf.xml は、VF 設定を含む XML ファイルの名前です。実行中の仮想マシンにデバイスを接続するために、--live オプションを使用します。

  9. 移行元ホストで、VF が割り当てられた実行中の仮想マシンのライブマイグレーションを開始します。

    # virsh migrate --live --domain <vm_name> --desturi qemu+ssh://<destination_host_ip_address>/system
    Copy to Clipboard Toggle word wrap

    ライブマイグレーションの実行の詳細は、コマンドラインを使用した仮想マシンの移行 を参照してください。

検証

  1. 移行した仮想マシンで、Mellanox VF のネットワークインターフェイス名を表示します。

    # ifconfig
    
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255
            inet6 fe80::a00:27ff:fe4e:66a1  prefixlen 64  scopeid 0x20<link>
            ether 08:00:27:4e:66:a1  txqueuelen 1000  (Ethernet)
            RX packets 100000  bytes 6543210 (6.5 MB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 100000  bytes 6543210 (6.5 MB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    enp4s0f0v0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.3.10  netmask 255.255.255.0  broadcast 192.168.3.255
            inet6 fe80::a00:27ff:fe4e:66c3  prefixlen 64  scopeid 0x20<link>
            ether 08:00:27:4e:66:c3  txqueuelen 1000  (Ethernet)
            RX packets 200000  bytes 12345678 (12.3 MB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 200000  bytes 12345678 (12.3 MB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    Copy to Clipboard Toggle word wrap
  2. 移行した仮想マシンで、Mellanox VF が動作することを確認します。次に例を示します。

    # ping -I <VF_interface_name> 8.8.8.8
    
    PING 8.8.8.8 (8.8.8.8) from 192.168.3.10 <VF_interface_name>: 56(84) bytes of data.
    64 bytes from 8.8.8.8: icmp_seq=1 ttl=57 time=27.4 ms
    64 bytes from 8.8.8.8: icmp_seq=2 ttl=57 time=26.9 ms
    
    --- 8.8.8.8 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1002ms
    rtt min/avg/max/mdev = 26.944/27.046/27.148/0.102 ms
    Copy to Clipboard Toggle word wrap

12.7. NVIDIA vGPU が割り当てられた仮想マシンのライブマイグレーション

仮想化ワークロードで仮想 GPU (vGPU) を使用する場合は、vGPU が割り当てられた実行中の仮想マシン (VM) を別の KVM ホストにライブマイグレーションできます。現在、これは NVIDIA GPU でのみ可能です。

前提条件

  • この機能をサポートする NVIDIA 仮想 GPU ソフトウェアドライバーバージョンを搭載した NVIDIA GPU がある。詳細は、関連する NVIDIA vGPU ドキュメント を参照してください。
  • 正しく設定された NVIDIA vGPU が仮想マシンに割り当てられている。手順は、NVIDIA vGPU デバイスのセットアップ を参照してください。
注記

複数の vGPU デバイスが接続された仮想マシンをライブマイグレーションすることも可能です。

  • ホストが Intel 64 または AMD64 CPU アーキテクチャーを使用している。
  • NVIDIA によって文書化されているすべての vGPU 移行の前提条件。詳細は、関連する NVIDIA vGPU ドキュメントを参照してください。
  • すべての一般的な仮想マシン移行の前提条件。詳細は、コマンドラインを使用した仮想マシンの移行 を参照してください。

制限事項

  • 特定の NVIDIA GPU 機能により移行が無効になる場合があります。詳細は、ご利用中のグラフィックカードに対応する NVIDIA の特定のドキュメントを参照してください。
  • 一部の GPU ワークロードは、移行中に発生するダウンタイムと互換性がありません。その結果、GPU ワークロードが停止したりクラッシュしたりする可能性があります。vGPU ライブマイグレーションを試みる前に、ワークロードがダウンタイムと互換性があるかどうかをテストすることを推奨します。
  • 現在、ソースホストと宛先ホストで vGPU ドライバーのバージョンが異なる場合、vGPU ライブマイグレーションは失敗します。
  • 現在、vGPU が接続された仮想マシンをライブマイグレーションする場合、一部の一般的な仮想化機能は使用できません。

    • 仮想マシンのダーティーメモリーページレート生成の計算

      現在、vGPU が接続された仮想マシンを移行する場合、virsh domjobinfo および virsh domdirtyrate-calc コマンドによって提供されるライブマイグレーションデータと統計情報は正確ではありません。計算では、vGPU の vRAM を含めずにゲスト RAM のみがカウントされるためです。

    • コピー後のライブマイグレーションの使用
    • 仮想マシンでの仮想 I/O Memory Management Unit (vIOMMU) デバイスの使用

手順

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

サポートされている KVM ホスト 間で仮想マシン (VM) のライブマイグレーションを実行するには、移行プロセス中に仮想マシンがストレージの読み取りと書き込みを行えるように、実行中の仮想マシンのストレージも移行する必要があります。

これを行う方法の 1 つに、共有仮想マシンストレージを使用する方法があります。次の手順では、NFS プロトコルを使用して、ローカルに保存された仮想マシンイメージをソースホストおよび宛先ホストと共有する方法を説明します。

前提条件

  • 移行に使用する仮想マシンがシャットダウンしている。
  • オプション: ソースホストまたは宛先ホストではないストレージをホストするためのホストシステムを使用でき、ソースホストまたは宛先ホストの両方がネットワーク経由でそのホストにアクセスできる。これは共有ストレージに最適なソリューションです。
  • KVM では対応していないため、NFS ファイルのロック機能を使用しない。
  • NFS プロトコルが、ソースホストと宛先ホストにインストールされ、有効化されている。NFS サーバーのデプロイ を参照してください。
  • virt_use_nfs SELinux ブール値が on に設定されている。

    # setsebool virt_use_nfs 1
    Copy to Clipboard Toggle word wrap

手順

  1. 共有ストレージを提供するホストに接続します。この例では、example-shared-storage ホストです。

    # ssh root@example-shared-storage
    root@example-shared-storage's password:
    Last login: Mon Sep 24 12:05:36 2019
    root~#
    Copy to Clipboard Toggle word wrap
  2. example-shared-storage ホスト上に、ディスクイメージを保持し、移行ホストと共有されるディレクトリーを作成します。

    # mkdir /var/lib/libvirt/shared-images
    Copy to Clipboard Toggle word wrap
  3. ソースホストから新規作成されたディレクトリーに仮想マシンのディスクイメージをコピーします。次の例では、仮想マシンのディスクイメージ example-disk-1example-shared-storage ホストの /var/lib/libvirt/shared-images/ ディレクトリーにコピーします。

    # scp /var/lib/libvirt/images/example-disk-1.qcow2 root@example-shared-storage:/var/lib/libvirt/shared-images/example-disk-1.qcow2
    Copy to Clipboard Toggle word wrap
  4. ストレージを共有するのに使用するホストで、/etc/exports ファイルに共有ディレクトリーを追加します。次の例では、/var/lib/libvirt/shared-images ディレクトリーを example-source-machine ホストおよび example-destination-machine ホストと共有します。

    # /var/lib/libvirt/shared-images example-source-machine(rw,no_root_squash) example-destination-machine(rw,no\_root_squash)
    Copy to Clipboard Toggle word wrap
  5. /etc/exports ファイルの変更を有効にするには、exportfs -a コマンドを実行します。

    # exportfs -a
    Copy to Clipboard Toggle word wrap
  6. ソースホストと宛先ホストの両方で、共有ディレクトリーを /var/lib/libvirt/images ディレクトリーにマウントします。

    # mount example-shared-storage:/var/lib/libvirt/shared-images /var/lib/libvirt/images
    Copy to Clipboard Toggle word wrap

検証

  • ソースホストで仮想マシンを起動し、正常に起動するか確認します。

12.9. 仮想マシンの移行におけるホスト CPU の互換性の確認

移行した仮想マシン (VM) が宛先ホストで正しく機能するには、移行元および移行先のホストの CPU の互換性が必要です。これを確認するには、移行を開始する前に、共通の CPU ベースラインを計算します。

注記

このセクションの手順では、以下のホスト CPU で移行シナリオの例を使用します。

  • ソースホスト: Intel Core i7-8650U
  • 宛先ホスト: Intel Xeon CPU E5-2620 v2

また、この手順は 64 ビット ARM システムには適用されません。

前提条件

手順

  1. ソースホストで、CPU 機能を取得し、domCaps-CPUs.xml などの新しい XML ファイルに貼り付けます。

    # virsh domcapabilities | xmllint --xpath "//cpu/mode[@name='host-model']" - > domCaps-CPUs.xml
    Copy to Clipboard Toggle word wrap
  2. XML ファイルで、<mode> </mode> タグを <cpu> </cpu> に置き換えます。
  3. オプション: domCaps-CPUs.xml ファイルの内容が次のようになっていることを確認します。

    # cat domCaps-CPUs.xml
    
        <cpu>
              <model fallback="forbid">Skylake-Client-IBRS</model>
              <vendor>Intel</vendor>
              <feature policy="require" name="ss"/>
              <feature policy="require" name="vmx"/>
              <feature policy="require" name="pdcm"/>
              <feature policy="require" name="hypervisor"/>
              <feature policy="require" name="tsc_adjust"/>
              <feature policy="require" name="clflushopt"/>
              <feature policy="require" name="umip"/>
              <feature policy="require" name="md-clear"/>
              <feature policy="require" name="stibp"/>
              <feature policy="require" name="arch-capabilities"/>
              <feature policy="require" name="ssbd"/>
              <feature policy="require" name="xsaves"/>
              <feature policy="require" name="pdpe1gb"/>
              <feature policy="require" name="invtsc"/>
              <feature policy="require" name="ibpb"/>
              <feature policy="require" name="ibrs"/>
              <feature policy="require" name="amd-stibp"/>
              <feature policy="require" name="amd-ssbd"/>
              <feature policy="require" name="rsba"/>
              <feature policy="require" name="skip-l1dfl-vmentry"/>
              <feature policy="require" name="pschange-mc-no"/>
              <feature policy="disable" name="hle"/>
              <feature policy="disable" name="rtm"/>
        </cpu>
    Copy to Clipboard Toggle word wrap
  4. 宛先ホストで以下のコマンドを使用して CPU 機能を取得します。

    # virsh domcapabilities | xmllint --xpath "//cpu/mode[@name='host-model']" -
    
        <mode name="host-model" supported="yes">
                <model fallback="forbid">IvyBridge-IBRS</model>
                <vendor>Intel</vendor>
                <feature policy="require" name="ss"/>
                <feature policy="require" name="vmx"/>
                <feature policy="require" name="pdcm"/>
                <feature policy="require" name="pcid"/>
                <feature policy="require" name="hypervisor"/>
                <feature policy="require" name="arat"/>
                <feature policy="require" name="tsc_adjust"/>
                <feature policy="require" name="umip"/>
                <feature policy="require" name="md-clear"/>
                <feature policy="require" name="stibp"/>
                <feature policy="require" name="arch-capabilities"/>
                <feature policy="require" name="ssbd"/>
                <feature policy="require" name="xsaveopt"/>
                <feature policy="require" name="pdpe1gb"/>
                <feature policy="require" name="invtsc"/>
                <feature policy="require" name="ibpb"/>
                <feature policy="require" name="amd-ssbd"/>
                <feature policy="require" name="skip-l1dfl-vmentry"/>
                <feature policy="require" name="pschange-mc-no"/>
        </mode>
    Copy to Clipboard Toggle word wrap
  5. 宛先ホストからソースホストの domCaps-CPUs.xml ファイルに取得した CPU 機能を追加します。ここでも、<mode> </mode> タグを <cpu> </cpu> に置き換え、ファイルを保存します。
  6. オプション: XML ファイルに両方のホストの CPU 機能が含まれていることを確認します。

    # cat domCaps-CPUs.xml
    
        <cpu>
              <model fallback="forbid">Skylake-Client-IBRS</model>
              <vendor>Intel</vendor>
              <feature policy="require" name="ss"/>
              <feature policy="require" name="vmx"/>
              <feature policy="require" name="pdcm"/>
              <feature policy="require" name="hypervisor"/>
              <feature policy="require" name="tsc_adjust"/>
              <feature policy="require" name="clflushopt"/>
              <feature policy="require" name="umip"/>
              <feature policy="require" name="md-clear"/>
              <feature policy="require" name="stibp"/>
              <feature policy="require" name="arch-capabilities"/>
              <feature policy="require" name="ssbd"/>
              <feature policy="require" name="xsaves"/>
              <feature policy="require" name="pdpe1gb"/>
              <feature policy="require" name="invtsc"/>
              <feature policy="require" name="ibpb"/>
              <feature policy="require" name="ibrs"/>
              <feature policy="require" name="amd-stibp"/>
              <feature policy="require" name="amd-ssbd"/>
              <feature policy="require" name="rsba"/>
              <feature policy="require" name="skip-l1dfl-vmentry"/>
              <feature policy="require" name="pschange-mc-no"/>
              <feature policy="disable" name="hle"/>
              <feature policy="disable" name="rtm"/>
        </cpu>
        <cpu>
              <model fallback="forbid">IvyBridge-IBRS</model>
              <vendor>Intel</vendor>
              <feature policy="require" name="ss"/>
              <feature policy="require" name="vmx"/>
              <feature policy="require" name="pdcm"/>
              <feature policy="require" name="pcid"/>
              <feature policy="require" name="hypervisor"/>
              <feature policy="require" name="arat"/>
              <feature policy="require" name="tsc_adjust"/>
              <feature policy="require" name="umip"/>
              <feature policy="require" name="md-clear"/>
              <feature policy="require" name="stibp"/>
              <feature policy="require" name="arch-capabilities"/>
              <feature policy="require" name="ssbd"/>
              <feature policy="require" name="xsaveopt"/>
              <feature policy="require" name="pdpe1gb"/>
              <feature policy="require" name="invtsc"/>
              <feature policy="require" name="ibpb"/>
              <feature policy="require" name="amd-ssbd"/>
              <feature policy="require" name="skip-l1dfl-vmentry"/>
              <feature policy="require" name="pschange-mc-no"/>
        </cpu>
    Copy to Clipboard Toggle word wrap
  7. XML ファイルを使用して、移行する仮想マシンの CPU 機能ベースラインを計算します。

    # virsh hypervisor-cpu-baseline domCaps-CPUs.xml
    
        <cpu mode='custom' match='exact'>
          <model fallback='forbid'>IvyBridge-IBRS</model>
          <vendor>Intel</vendor>
          <feature policy='require' name='ss'/>
          <feature policy='require' name='vmx'/>
          <feature policy='require' name='pdcm'/>
          <feature policy='require' name='pcid'/>
          <feature policy='require' name='hypervisor'/>
          <feature policy='require' name='arat'/>
          <feature policy='require' name='tsc_adjust'/>
          <feature policy='require' name='umip'/>
          <feature policy='require' name='md-clear'/>
          <feature policy='require' name='stibp'/>
          <feature policy='require' name='arch-capabilities'/>
          <feature policy='require' name='ssbd'/>
          <feature policy='require' name='xsaveopt'/>
          <feature policy='require' name='pdpe1gb'/>
          <feature policy='require' name='invtsc'/>
          <feature policy='require' name='ibpb'/>
          <feature policy='require' name='amd-ssbd'/>
          <feature policy='require' name='skip-l1dfl-vmentry'/>
          <feature policy='require' name='pschange-mc-no'/>
        </cpu>
    Copy to Clipboard Toggle word wrap
  8. 移行する仮想マシンの XML 設定を開き、<cpu> セクションの内容を直前の手順で取得した設定に置き換えます。

    # virsh edit <vm_name>
    Copy to Clipboard Toggle word wrap
  9. 仮想マシンが実行中の場合は、仮想マシンをシャットダウンして再起動します。

    # virsh shutdown <vm_name>
    
    # virsh start <vm_name>
    Copy to Clipboard Toggle word wrap

12.10. 仮想マシン移行のサポート対象となるホスト

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

RHEL バージョンが同じホスト間の、サポートされているマシンタイプ上の仮想マシン移行もサポートされています。

Expand
表12.2 ライブマイグレーションの互換性
移行の方法リリースタイプ将来バージョンの例サポート状況

前方

マイナーリリース

10.0.1 → 10.1

サポートされている RHEL 10 システムおよびマシンタイプ

前方

メジャーリリース

9.7 → 10.1

サポートされている RHEL システムおよびマシンタイプ

後方

マイナーリリース

10.1 → 10.0.1

サポートされている RHEL 10 システムおよびマシンタイプ

後方

メジャーリリース

10.1 → 9.7

サポートされている RHEL システムおよびマシンタイプ

注記

サポート状況は、RHOSP や OpenShift Virtualization など、Red Hat が提供する他の仮想化ソリューションによって異なる場合があります。

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

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

13.1. 仮想マシンへのストレージの接続に使用できる方法

RHEL 10 ホスト上で実行されている仮想マシン (VM) にストレージを提供するには、複数のタイプのストレージハードウェアとサービスを使用できます。タイプごとに要件、利点、ユースケースが異なります。

ファイルベースのストレージ

ファイルベースの仮想ディスクは、ホストファイルシステム上のディスクイメージファイルです。このファイルは、ディレクトリーベースの libvirt ストレージプールに保存されます。

ファイルベースのディスクはセットアップが速く、移行が簡単です。一方、ローカルファイルシステムのオーバーヘッドが増加し、パフォーマンスに悪影響が生じる可能性があります。

さらに、スナップショットなどの特定の libvirt 機能には、ファイルベースの仮想ディスクが必要です。

ファイルベースのストレージを仮想マシンに接続する手順は、コマンドラインを使用してファイルベースの仮想ディスクを仮想マシンに接続する または Web コンソールを使用してファイルベースの仮想ディスクを仮想マシンに接続する を参照してください。

ディスクベースのストレージ

仮想マシンは、仮想ディスクの代わりに、物理ディスク全体またはパーティション全体を使用できます。

ディスクベースのストレージは、利用可能なストレージタイプの中で最も優れたパフォーマンスを提供し、ホストディスクへの直接アクセスも提供します。ただし、ディスクベースのストレージのスナップショットを作成することはできず、移行が困難です。

ディスクベースのストレージを仮想マシンに接続する手順は、コマンドラインを使用してディスクベースのストレージを仮想マシンに接続する または Web コンソールを使用してディスクベースのストレージを仮想マシンに接続する を参照してください。

LVM ベースのストレージ

仮想マシンは、論理ボリュームマネージャー (LVM) を使用して、ボリュームグループ (VG) から直接ストレージを割り当てることができます。

LVM ストレージはファイルベースのディスクよりもパフォーマンスが優れており、サイズの変更が簡単ですが、移行が難しくなることがあります。

LVM ベースのストレージを仮想マシンに接続する手順は、コマンドラインを使用して LVM ベースのストレージを仮想マシンに接続する または Web コンソールを使用して LVM ベースのストレージを仮想マシンに接続する を参照してください。

ネットワークベースのストレージ

ローカルハードウェアの代わりに、ネットワークファイルシステム (NFS) などのリモートストレージを使用できます。

これは、クラスターまたは高可用性環境の共有ストレージに役立ちます。ただし、ネットワークベースのストレージは一般にローカルストレージよりも遅く、ネットワーク帯域幅によってパフォーマンスがさらに制限されることがあります。

NFS ベースのストレージを仮想マシンに接続するる手順は、コマンドラインを使用して NFS ベースのストレージを仮想マシンに接続する または Web コンソールを使用して NFS ベースのストレージを仮想マシンに接続する を参照してください。

13.2. Web コンソールを使用した仮想マシンのストレージ情報の表示

Web コンソールを使用して、仮想マシン (VM) で使用可能なストレージリソースに関する詳細情報を表示できます。

前提条件

手順

  1. RHEL 10 Web コンソールにログインします。
  2. ホストで使用可能なストレージプールのリストを表示するには、Virtual Machines インターフェイスの上部にある Storage Pools をクリックします。

    Storage pools 画面が表示され、設定されているストレージプールの一覧が示されます。

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

    • Name - ストレージプールの名前。
    • Size - ストレージプールの現在の割り当てと合計容量。
    • Connection - ストレージプールへのアクセスに使用される接続。
    • State - ストレージプールの状態。
  3. 情報を表示するストレージプールの横にある矢印をクリックします。

    行がデプロイメントされ、選択したストレージプールに関する詳細情報を含む概要ペインが表示されます。

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

    • Target path - ストレージプールの場所です。
    • Persistent - ストレージプールの設定が永続的であるかどうかを示します。
    • Autostart - システムの起動時にストレージプールが自動的に起動するかどうかを示します。
    • Type - ストレージプールの種類。
  4. ストレージプールに関連付けられているストレージボリュームのリストを表示する場合は、ストレージボリューム をクリックします。

    ストレージボリュームペインが表示され、設定したストレージボリュームのリストが表示されます。

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

    • Name - ストレージボリュームの名前。
    • Used by - 現在ストレージボリュームを使用している仮想マシン。
    • Size - ボリュームのサイズ。
  5. 特定の仮想マシンに接続されている仮想ディスクを表示するには、次の手順を実行します。

    1. 左側のメニューで Virtual machines をクリックします。
    2. 情報を表示する仮想マシンをクリックします。

      新しいページが開き、選択した仮想マシンに関する基本情報を含む Overview セクションと、仮想マシンのグラフィカルインターフェイスにアクセスするための Console セクションが表示されます。

  6. Disks までスクロールします。

    ディスクセクションには、仮想マシンに割り当てられたディスクに関する情報と、ディスクの Add、または Edit のオプションが表示されます。

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

    • Device - ディスクのデバイスの種類。
    • Used - 現在割り当てられているディスク容量。
    • Capacity - ストレージボリュームの最大サイズ。
    • Bus - エミュレートされているディスクデバイスの種類。
    • Access - ディスクが Writeable 可能か Read-only か。raw ディスクの場合、アクセスを Writeable and shared に設定することもできます。
    • Source - ディスクデバイスまたはファイル。

13.3. コマンドラインを使用した仮想マシンのストレージ情報の表示

コマンドラインを使用して、仮想マシン (VM) で使用可能なストレージリソースに関する詳細情報を表示できます。

手順

  1. ホスト上で使用可能なストレージプールを表示するには、必要なリストの粒度オプションを指定して 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
     RHEL-Storage-Pool   running  yes        yes         214.62 GiB   93.02 GiB  168.60 GiB
    Copy to Clipboard Toggle word wrap
    • ストレージプール情報を表示するために使用できる追加オプションは、virsh pool-list --help コマンドを使用してください。
  2. 指定したストレージプール内のストレージボリュームをリスト表示するには、virsh vol-list コマンドを使用します。

    # virsh vol-list --pool <RHEL-Storage-Pool> --details
     Name                Path                                               Type   Capacity  Allocation
    ---------------------------------------------------------------------------------------------
    
      RHEL_Volume.qcow2   /home/VirtualMachines/RHEL8_Volume.qcow2  file  60.00 GiB   13.93 GiB
    Copy to Clipboard Toggle word wrap
  3. 仮想マシンに接続されているすべてのブロックデバイスを表示するには、virsh domblklist コマンドを使用します。

    # *virsh domblklist --details <vm-name>
    
     Type   Device   Target   Source
    -----------------------------------------------------------------------------
     file   disk     hda      /home/VirtualMachines/vm-name.qcow2
     file   cdrom    hdb      -
     file   disk     vdc      /home/VirtualMachines/test-disk2.qcow2
    Copy to Clipboard Toggle word wrap

13.4. 仮想マシンへのストレージの接続

仮想マシン (VM) にストレージを追加するには、ストレージリソースを仮想ディスクとして仮想マシンに接続します。仮想ディスクは、物理ストレージデバイスと同様に、接続されている仮想マシンから独立しており、他の仮想マシンに移動できます。

複数の種類のストレージリソースを使用して、仮想ディスクを仮想マシンに追加できます。

13.4.1. コマンドラインを使用してファイルベースの仮想ディスクを仮想マシンに接続する

仮想マシンにローカルストレージを提供する最も簡単な方法は、通常、.qcow2 または .raw 形式のファイルベースの仮想ディスクを接続することです。

コマンドラインでこれを行うには、次のいずれかの方法を使用できます。

  • libvirt によって管理されるディレクトリーベースのストレージプールに、ファイルベースのストレージボリュームを作成します。これには複数のステップが必要ですが、ハイパーバイザーとの統合が強化されます。

    RHEL 10 ホストで最初の仮想マシンを作成するときに、デフォルトのディレクトリーベースのストレージボリュームが自動的に作成されることに注意してください。このストレージプールの名前は、ディスクイメージを保存するディレクトリーの名前に基づいています。たとえば、libvirtsystem セッションでは、デフォルトでディスクイメージが /var/lib/libvirt/images/ ディレクトリーに保存され、ストレージプールの名前が images になります。

  • qemu-img コマンドを使用して、ホストファイルシステム上のファイルとして仮想ディスクを作成します。これはより高速な方法ですが、libvirt との統合は提供されません。

    そのため、qemu-img を使用して仮想ディスクを作成すると、作成後にディスクを管理するのが難しくなります。

注記

コマンドラインで新しい仮想マシンを作成するときに、ファイルベースの仮想ディスクを作成して接続することもできます。これを行うには、virt-install ユーティリティーで --disk オプションを使用します。詳細な手順は、仮想マシンの作成 を参照してください。

手順

  1. オプション: 仮想ディスクをストレージボリュームとして作成するが、ホスト上のデフォルトの images ストレージプールまたは別の既存のストレージプールを使用しない場合は、新しいディレクトリーベースのストレージプールを作成して設定します。

    1. ディレクトリータイプのストレージプールを設定します。たとえば、/guest_images ディレクトリーを使用する guest_images_dir という名前のストレージプールを作成するには、次のコマンドを実行します。

      # virsh pool-define-as guest_images_dir dir --target "/guest_images"
      Pool guest_images_dir defined
      Copy to Clipboard Toggle word wrap
    2. 以前に定義した設定に基づいて、ストレージプールのターゲットパスを作成します。

      # virsh pool-build guest_images_dir
        Pool guest_images_dir built
      Copy to Clipboard Toggle word wrap
    3. ストレージプールを起動します。

      # virsh pool-start guest_images_dir
        Pool guest_images_dir started
      Copy to Clipboard Toggle word wrap
    4. オプション: ホストの起動時にストレージプールが起動するように設定します。

      # virsh pool-autostart guest_images_dir
        Pool guest_images_dir marked as autostarted
      Copy to Clipboard Toggle word wrap
    5. オプション: ストレージプールが running 状態であることを確認します。報告されるサイズが期待どおりであるか、また、自動開始が正しく設定されているかを確認してください。

      # virsh pool-info guest_images_dir
        Name:           guest_images_dir
        UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
        State:          running
        Persistent:     yes
        Autostart:      yes
        Capacity:       458.39 GB
        Allocation:     197.91 MB
        Available:      458.20 GB
      Copy to Clipboard Toggle word wrap
  2. ファイルベースの仮想ディスクを作成します。これを行うには、以下のいずれかの方法を使用します。

    • libvirt によって管理されないファイルベースの仮想マシンディスクをすばやく作成するには、qemu-img ユーティリティーを使用します。

      たとえば、次のコマンドは、サイズが 30 ギガバイトの test-image という名前の qcow2 ディスクイメージを作成します。

      # qemu-img create -f qcow2 test-image 30G
      
      Formatting 'test-image', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=32212254720 lazy_refcounts=off refcount_bits=16
      Copy to Clipboard Toggle word wrap
    • libvirt によって管理されるファイルベースの仮想マシンディスクを作成するには、既存のディレクトリーベースのストレージプールに基づいてディスクをストレージボリュームとして定義します。

      たとえば、次のコマンドは、guest_images_dir ストレージプールに基づいて、vm-disk1 という名前の 20 GB の qcow2 ボリュームを作成します。

      # virsh vol-create-as --pool guest_images_dir --name vm-disk1 --capacity 20GB --format qcow2
      
      Vol vm-disk1 created
      Copy to Clipboard Toggle word wrap
  3. 作成した仮想ディスクの場所を確認します。

    • qemu-img で作成した仮想マシンディスクの場合、これは通常カレントディレクトリーです。
    • ストレージボリュームの場合は、ボリュームが属するストレージプールを調べます。

      # virsh vol-list --pool guest_images_dir --details
      
       Name        Path                          Type   Capacity    Allocation
      --------------------------------------------------------------------------
       vm-disk1    /guest-images/vm-disk1      file   20.00 GiB   196.00 KiB
      Copy to Clipboard Toggle word wrap
  4. ディスクを接続する仮想マシンですでに使用されているターゲットデバイスを確認します。

    # virsh domblklist --details <vm-name> Type Device Target Source ---------------------------------------------------------------- file disk *vda      /home/VirtualMachines/vm-name.qcow2
     file   cdrom    vdb      -
    Copy to Clipboard Toggle word wrap
  5. オプション: データの破損やディスクの断片化の問題を回避するために、ディスクの整合性を確認します。手順は、仮想ディスクの整合性のチェック を参照してください。
  6. virsh attach-disk コマンドを使用してディスクを仮想マシンに接続します。仮想マシンで使用されていないターゲットデバイスを指定します。

    たとえば、次のコマンドは、以前に作成した test-disk1vdc デバイスとして testguest1 仮想マシンに接続します。

    # virsh attach-disk testguest1 /guest-images/vm-disk1 vdc --persistent
    Copy to Clipboard Toggle word wrap

検証

  1. ディスクを接続した仮想マシンの XML 設定を調べて、設定が正しいかどうかを確認します。

    # virsh dumpxml testguest1
    
    ...
        <disk type='file' device='disk'>
          <driver name='qemu' type='qcow2' discard='unmap'/>
          <source file='/guest-images/vm-disk1' index='1'/>
          <backingStore/>
          <target dev='vdc' bus='virtio'/>
          <alias name='virtio-disk2'/>
          <address type='drive' controller='0' bus='0' target='0' unit='0'/>
        </disk>
    ...
    Copy to Clipboard Toggle word wrap
  2. 仮想マシンのゲストオペレーティングシステムで、ディスクイメージが未フォーマットかつ未割り当てのディスクとして利用できるようになっていることを確認します。

13.4.2. Web コンソールを使用してファイルベースの仮想ディスクを仮想マシンに接続する

仮想マシンにローカルストレージを提供する最も簡単な方法は、通常、.qcow2 または .raw 形式のファイルベースの仮想ディスクを接続することです。

これを行うには、libvirt によって管理されるディレクトリーベースのストレージプールに、ファイルベースのストレージボリュームを作成します。RHEL 10 ホストで最初の仮想マシンを作成するときに、デフォルトのディレクトリーベースのストレージボリュームが自動的に作成されます。このストレージプールの名前は、ディスクイメージを保存するディレクトリーの名前に基づいています。たとえば、libvirtsystem セッションでは、デフォルトでディスクイメージが /var/lib/libvirt/images/ ディレクトリーに保存され、ストレージプールの名前が images になります。

注記

Web コンソールで新しい仮想マシンを作成するときに、ファイルベースの仮想ディスクを作成して接続することもできます。これを行うには、Create virtual machine ダイアログの Storage オプションを使用します。詳細な手順は、Web コンソールを使用した仮想マシンの作成 を参照してください。

前提条件

手順

  1. RHEL 10 Web コンソールにログインします。
  2. オプション: デフォルトの images ストレージプールを使用して新しい仮想ディスクを作成しない場合は、新しいストレージプールを作成します。

    1. Virtual Machines インターフェイスの上部にある Storage PoolsCreate storage pool をクリックします。
    2. Create Storage Pool ダイアログで、ストレージプールの名前を入力します。
    3. Type ドロップダウンメニューで、Filesystem directory を選択します。
    4. 以下の情報を入力します。

      • Target path - ストレージプールの場所です。
      • 起動 - ホストの起動時にストレージプールが起動するかどうか
    5. Create をクリックします。

      ストレージプールが作成され、Create Storage Pool ダイアログが閉じて、新しいストレージプールがストレージプールのリストに表示されます。

  3. 既存のストレージプールに基づいて新しいストレージボリュームを作成します。

    1. Storage Pools ウィンドウで、ストレージボリュームの作成元とするストレージプールをクリックし、Storage VolumesCreate volume を選択します。
    2. Create Storage Volume ダイアログに次の情報を入力します。

      • Name - ストレージボリュームの名前。
      • サイズ - ストレージボリュームのサイズ (MiB または GiB)。
      • フォーマット - ストレージボリュームの形式。サポートされているタイプは qcow2 および raw です。
    3. Create をクリックします。
  4. オプション: データの破損やディスクの断片化の問題を回避するために、ディスクの整合性を確認します。手順は、仮想ディスクの整合性のチェック を参照してください。
  5. 作成したストレージボリュームをディスクとして仮想マシンに追加します。

    1. Virtual Machines インターフェイスで、新しいディスクを作成して接続する仮想マシンをクリックします。

      新しいページが開き、選択した仮想マシンに関する基本情報を含む Overview セクションと、仮想マシンのグラフィカルインターフェイスにアクセスするための Console セクションが表示されます。

    2. Disks までスクロールします。
    3. Disks セクションで、Add disk をクリックします。
    4. Add disks ダイアログで、Use existing を選択します。
    5. ディスクに使用するストレージプールとストレージボリュームを選択します。
    6. ディスクを永続化するかどうかを選択します。

      注記

      一時的なデバイスは、稼働中の仮想マシンにのみ追加できます。

    7. オプション: Show additional options をクリックし、ストレージボリュームのキャッシュタイプ、バスタイプ、ディスク識別子を調整します。
    8. Add をクリックします。

検証

  • 仮想マシンのゲストオペレーティングシステムで、ディスクイメージが未フォーマットかつ未割り当てのディスクとして利用できるようになっていることを確認します。

13.4.3. コマンドラインを使用してディスクベースのストレージを仮想マシンに接続する

仮想マシン (VM) にローカルストレージを提供する場合、ディスクベースのディスクイメージを使用できます。このタイプのディスクイメージは、ホスト上のディスクパーティションに基づいており、.qcow2 または .raw 形式を使用します。

コマンドラインを使用してディスクベースのストレージを仮想マシンに接続するには、次のいずれかの方法を使用します。

  • 新しい仮想マシンを作成する場合は、--disk オプションを使用して、virt-install コマンドによる操作の一部として新しいディスクを作成して接続します。詳細な手順は、仮想マシンの作成 を参照してください。
  • 既存の仮想マシンの場合は、ディスクベースのストレージボリュームを作成し、それを仮想マシンに接続します。次の手順を参照してください。

前提条件

  • ハイパーバイザーがディスクベースのストレージプールをサポートしていることを確認します。

    # virsh pool-capabilities | grep "'disk' supported='yes'"
    Copy to Clipboard Toggle word wrap

    コマンドの出力が表示される場合には、ディスクベースのプールはサポートの対象です。

  • ストレージプールのベースとなるデバイスを準備します。この目的のために、パーティション (/dev/sdb1 など) または LVM ボリュームを優先します。ディスク全体またはブロックデバイス (/dev/sdb など) への書き込みアクセスを仮想マシンに提供すると、その仮想マシンはそれをパーティション分割するか、その上に独自の LVM グループを作成する可能性があります。これにより、ホストでシステムエラーが発生する可能性があります。

    ただし、ストレージプールにブロックデバイス全体を使用する必要がある場合、Red Hat は、デバイス上の重要なパーティションを GRUB の os-prober 機能から保護することを推奨します。これを行うには、/etc/default/grub ファイルを編集して、次のいずれかの設定を適用します。

    • os-prober を無効にします。

      GRUB_DISABLE_OS_PROBER=true
      Copy to Clipboard Toggle word wrap
    • 使用するパーティションが os-prober によって検出されないようにします。以下に例を示します。

      GRUB_OS_PROBER_SKIP_LIST="5ef6313a-257c-4d43@/dev/sdb1"
      Copy to Clipboard Toggle word wrap
  • ストレージプールを作成する前に、選択したストレージデバイス上のデータをバックアップします。使用されている libvirt のバージョンによっては、ディスクをストレージプール専用にすると、ディスクデバイスに現在保存されているすべてのデータが再フォーマットされ、消去される可能性があります。

手順

  1. ディスクベースのストレージプールがまだない場合は、新しいディスクベースのストレージプールを作成して設定します。

    1. ディスクタイプのストレージプールを定義および作成します。次の例では、/dev/sdb デバイスを使用し、/dev ディレクトリーにマウントされる guest_images_disk という名前のストレージプールを作成します。

      # virsh pool-define-as guest_images_disk disk --source-format=gpt --source-dev=/dev/sdb --target /dev
      Pool guest_images_disk defined
      Copy to Clipboard Toggle word wrap
    2. フォーマット済みのファイルシステムストレージプールのストレージプールターゲットパスを作成し、ストレージソースデバイスを初期化して、データのフォーマットを定義します。

      # virsh pool-build guest_images_disk
        Pool guest_images_disk built
      Copy to Clipboard Toggle word wrap
    3. オプション: プールが作成されたことを確認します。

      # virsh pool-list --all
      
        Name                 State      Autostart
        -----------------------------------------
        default              active     yes
        guest_images_disk    inactive   no
      Copy to Clipboard Toggle word wrap
    4. ストレージプールを起動します。

      # virsh pool-start guest_images_disk
        Pool guest_images_disk started
      Copy to Clipboard Toggle word wrap
      注記

      virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。

    5. オプション: 自動起動をオンにします。

      デフォルトでは、virsh で定義したストレージプールは、仮想化サービスが起動するたびに自動的に起動するように設定されません。virsh pool-autostart コマンドを使用して、ストレージプールを自動的に起動するように設定します。

      # virsh pool-autostart guest_images_disk
        Pool guest_images_disk marked as autostarted
      Copy to Clipboard Toggle word wrap
  2. ディスクベースのストレージボリュームを作成します。たとえば、次のコマンドは、guest_images_disk ストレージプールに基づいて、vm-disk1 という名前の 20 GB の qcow2 ボリュームを作成します。

    # virsh vol-create-as --pool guest_images_disk --name sdb1 --capacity 20GB --format extended
    
    Vol vm-disk1 created
    Copy to Clipboard Toggle word wrap
  3. ストレージボリュームを仮想ディスクとして仮想マシンに接続します。

    1. 作成したストレージボリュームの場所を確認します。これを行うには、ボリュームが属するストレージプールを調べます。

      # virsh vol-list --pool guest_images_disk --details
      
       Name        Path                      Type   Capacity    Allocation
      ---------------------------------------------------------------------
       sdb1      /dev/sdb1                  block   20.00 GiB   20.00 GiB
      Copy to Clipboard Toggle word wrap
    2. ディスクを接続する仮想マシンですでに使用されているターゲットデバイスを確認します。

      # virsh domblklist --details <vm-name> Type Device Target Source ---------------------------------------------------------------- file disk *vda      /home/VirtualMachines/vm-name.qcow2
       file   cdrom    vdb      -
      Copy to Clipboard Toggle word wrap
    3. オプション: データの破損やディスクの断片化の問題を回避するために、ディスクの整合性を確認します。手順は、仮想ディスクの整合性のチェック を参照してください。
    4. virsh attach-disk コマンドを使用してディスクを仮想マシンに接続します。仮想マシンで使用されていないターゲットデバイスを指定します。

      たとえば、次のコマンドは、以前に作成した vm-disk1vdc デバイスとして testguest1 仮想マシンに接続します。

      # virsh attach-disk testguest1 /dev/sdb1 vdc --persistent
      Copy to Clipboard Toggle word wrap

検証

  1. ディスクを接続した仮想マシンの XML 設定を調べて、設定が正しいかどうかを確認します。

    # virsh dumpxml testguest1
    
    ...
      <disk type="block" device="disk">
        <driver name="qemu" type="raw"/>
        <source dev="/dev/sdb1" index="2"/>
        <backingStore/>
        <target dev="vdc" bus="virtio"/>
        <alias name="virtio-disk2"/>
        <address type="pci" domain="0x0000" bus="0x07" slot="0x00" function="0x0"/>
      </disk>
    ...
    Copy to Clipboard Toggle word wrap
  2. 仮想マシンのゲストオペレーティングシステムで、ディスクイメージが未フォーマットかつ未割り当てのディスクとして利用できるようになっていることを確認します。

13.4.4. Web コンソールを使用してディスクベースのストレージを仮想マシンに接続する

仮想マシンにローカルストレージを提供する最も簡単な方法は、通常、.qcow2 または .raw 形式のファイルベースの仮想ディスクを接続することです。

Web コンソールを使用してディスクベースのストレージを仮想マシンに接続するには、次のいずれかの方法を使用します。

  • 新しい仮想マシンを作成する場合は、Create virtual machine ダイアログの Storage オプションを使用して新しいディスクを作成し、接続します。詳細な手順は、Web コンソールを使用した仮想マシンの作成 を参照してください。
  • 既存の仮想マシンの場合は、ディスクベースのストレージボリュームを作成し、それを仮想マシンに接続します。次の手順を参照してください。

前提条件

手順

  1. RHEL 10 Web コンソールにログインします。
  2. ディスクベースのストレージプールがまだない場合は、新しいディスクベースのストレージプールを作成して設定します。

    1. Virtual Machines インターフェイスの上部にある Storage PoolsCreate storage pool をクリックします。
    2. Create Storage Pool ダイアログで、ストレージプールの名前を入力します。
    3. Type ドロップダウンメニューで、Physical disk device を選択します。

      注記

      ドロップダウンメニューに Physical disk device オプションが表示されない場合、ハイパーバイザーによってディスクベースのストレージプールがサポートされていません。

    4. 以下の情報を入力します。

      • Target Path - ターゲットデバイスを指定するパス。ストレージプールに使用されるパスになります。
      • Source path - ストレージデバイスを指定するパス。たとえば、/dev/sdb です。
      • Format - パーティションテーブルのタイプ。
      • 起動 - ホストの起動時にストレージプールが起動するかどうか
    5. Create をクリックします。

      ストレージプールが作成され、Create Storage Pool ダイアログが閉じて、新しいストレージプールがストレージプールのリストに表示されます。

  3. 既存のストレージプールに基づいて新しいストレージボリュームを作成します。

    1. Storage Pools ウィンドウで、ストレージボリュームの作成元とするストレージプールをクリックし、Storage VolumesCreate volume を選択します。
    2. Create Storage Volume ダイアログに次の情報を入力します。

      • Name - ストレージボリュームの名前。
      • サイズ - ストレージボリュームのサイズ (MiB または GiB)。
      • フォーマット - ストレージボリュームの形式。
    3. Create をクリックします。
  4. オプション: データの破損やディスクの断片化の問題を回避するために、ディスクの整合性を確認します。手順は、仮想ディスクの整合性のチェック を参照してください。
  5. 作成したストレージボリュームをディスクとして仮想マシンに追加します。

    1. Virtual Machines インターフェイスで、新しいディスクを作成して接続する仮想マシンをクリックします。

      新しいページが開き、選択した仮想マシンに関する基本情報を含む Overview セクションと、仮想マシンのグラフィカルインターフェイスにアクセスするための Console セクションが表示されます。

    2. Disks までスクロールします。
    3. Disks セクションで、Add disk をクリックします。
    4. Add disks ダイアログで、Use existing を選択します。
    5. ディスクに使用するストレージプールとストレージボリュームを選択します。
    6. ディスクを永続化するかどうかを選択します。

      注記

      一時的なデバイスは、稼働中の仮想マシンにのみ追加できます。

    7. オプション: Show additional options をクリックし、ストレージボリュームのキャッシュタイプ、バスタイプ、ディスク識別子を調整します。
    8. Add をクリックします。

検証

  • 仮想マシンのゲストオペレーティングシステムで、ディスクイメージが未フォーマットかつ未割り当てのディスクとして利用できるようになっていることを確認します。

13.4.5. コマンドラインを使用して LVM ベースのストレージを仮想マシンに接続する

仮想マシン (VM) にローカルストレージを提供する場合、LVM ベースのストレージボリュームを使用できます。このタイプのディスクイメージは LVM ボリュームグループに基づいており、.qcow2 または .raw 形式を使用します。

コマンドラインを使用して LVM ベースのストレージを仮想マシンに接続するには、次のいずれかの方法を使用します。

  • 新しい仮想マシンを作成する場合は、Create virtual machine ダイアログの Storage オプションを使用して新しいディスクを作成し、接続します。詳細な手順は、Web コンソールを使用した仮想マシンの作成 を参照してください。
  • 既存の仮想マシンの場合は、LVM ベースのストレージボリュームを作成し、それを仮想マシンに接続します。次の手順を参照してください。
重要

LVM ベースのストレージボリュームには次の制限があることに注意してください。

  • LVM ベースのストレージプールは、LVM の柔軟性を完全には提供しません。
  • LVM ベースのストレージプールは、ボリュームグループです。virsh ユーティリティーを使用してボリュームグループを作成できますが、この方法では、作成したボリュームグループには 1 つのデバイスしか作成できません。複数のデバイスを持つボリュームグループを作成する場合は、代わりに LVM ユーティリティーを使用します。詳細は、How to create a volume group in Linux with LVM を参照してください。
  • LVM ベースのストレージプールには、完全なディスクパーティションが必要です。virsh コマンドを使用して新しいパーティションまたはデバイスをアクティブにすると、パーティションがフォーマットされ、すべてのデータが消去されます。次の手順で説明しているように、ホストの既存のボリュームグループを使用している場合は、何も消去されません。

前提条件

  • ハイパーバイザーが LVM ベースのストレージプールをサポートしていることを確認します。

    # virsh pool-capabilities | grep "'logical' supported='yes'"
    Copy to Clipboard Toggle word wrap

    コマンドの出力が表示される場合には、LVM ベースのストレージプールはサポートの対象です。

  • ホスト上に LVM ボリュームグループが存在することを確認します。作成手順は、LVM ボリュームグループの作成 を参照してください。
  • ストレージプールを作成する前に、選択したストレージデバイス上のデータをバックアップします。ディスクパーティションをストレージプール専用にすると、ディスクデバイスに現在保存されているすべてのデータが再フォーマットされ、消去されます。

手順

  1. LVM ベースのストレージプールがまだない場合は、新しい LVM ベースのストレージプールを作成して設定します。

    1. LVM タイプのストレージプールを定義します。たとえば、次のコマンドは、lvm_vg ボリュームグループを使用し、/dev/lvm_vg ディレクトリーにマウントされる guest_images_lvm という名前のストレージプールを定義します。

      # virsh pool-define-as guest_images_lvm logical --source-dev /dev/sdb --target /dev/lvm_vg
      Pool guest_images_lvm defined
      Copy to Clipboard Toggle word wrap
    2. 以前に定義した設定に基づいてストレージプールを作成します。

      # virsh pool-build guest_images_lvm
        Pool guest_images_lvm built
      Copy to Clipboard Toggle word wrap
    3. オプション: プールが作成されたことを確認します。

      # virsh pool-list --all
      
        Name                   State      Autostart
        -------------------------------------------
        default                active     yes
        guest_images_lvm       inactive   no
      Copy to Clipboard Toggle word wrap
    4. ストレージプールを起動します。

      # virsh pool-start guest_images_lvm
        Pool guest_images_lvm started
      Copy to Clipboard Toggle word wrap
      注記

      virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。

    5. オプション: 自動起動をオンにします。

      デフォルトでは、virsh で定義したストレージプールは、仮想化サービスが起動するたびに自動的に起動するように設定されません。virsh pool-autostart コマンドを使用して、ストレージプールを自動的に起動するように設定します。

      # virsh pool-autostart guest_images_lvm
        Pool guest_images_lvm marked as autostarted
      Copy to Clipboard Toggle word wrap
  2. LVM ベースのストレージボリュームを作成します。たとえば、次のコマンドは、guest_images_lvm ストレージプールに基づいて、vm-disk1 という名前の 20 GB の qcow2 ボリュームを作成します。

    # virsh vol-create-as --pool guest_images_lvm --name vm-disk1 --capacity 20GB --format qcow2
    
    Vol vm-disk1 created
    Copy to Clipboard Toggle word wrap
  3. ストレージボリュームを仮想ディスクとして仮想マシンに接続します。

    1. 作成したストレージボリュームの場所を確認します。これを行うには、ボリュームが属するストレージプールを調べます。

      # virsh vol-list --pool guest_images_lvm --details
      
       Name        Path                            Type   Capacity    Allocation
      -----------------------------------------------------------------------------
       vm-disk1   /dev/guest_images_lvm/vm-disk1   block   20.00 GiB   196.00 KiB
      Copy to Clipboard Toggle word wrap
    2. ディスクを接続する仮想マシンですでに使用されているターゲットデバイスを確認します。

      # virsh domblklist --details <vm-name> Type Device Target Source ---------------------------------------------------------------- file disk *vda      /home/VirtualMachines/vm-name.qcow2
       file   cdrom    vdb      -
      Copy to Clipboard Toggle word wrap
    3. オプション: データの破損やディスクの断片化の問題を回避するために、ディスクの整合性を確認します。手順は、仮想ディスクの整合性のチェック を参照してください。
    4. virsh attach-disk コマンドを使用してディスクを仮想マシンに接続します。仮想マシンで使用されていないターゲットデバイスを指定します。

      たとえば、次のコマンドは、以前に作成した vm-disk1vdc デバイスとして testguest1 仮想マシンに接続します。

      # virsh attach-disk testguest1 /dev/guest_images_lvm/vm-disk1 vdc --persistent
      Copy to Clipboard Toggle word wrap

検証

  1. ディスクを接続した仮想マシンの XML 設定を調べて、設定が正しいかどうかを確認します。

    # virsh dumpxml testguest1
    
    ...
        <disk type="block" device="disk">
          <driver name="qemu" type="raw"/>
          <source dev="/dev/guest_images_lvm/vm-disk1" index="3"/>
          <backingStore/>
          <target dev="vdc" bus="virtio"/>
          <alias name="virtio-disk2"/>
          <address type="pci" domain="0x0000" bus="0x07" slot="0x00" function="0x0"/>
        </disk>
    
    ...
    Copy to Clipboard Toggle word wrap
  2. 仮想マシンのゲストオペレーティングシステムで、ディスクイメージが未フォーマットかつ未割り当てのディスクとして利用できるようになっていることを確認します。

13.4.6. Web コンソールを使用して LVM ベースのストレージを仮想マシンに接続する

仮想マシン (VM) にローカルストレージを提供する場合、LVM ベースのストレージボリュームを使用できます。このタイプのディスクイメージは LVM ボリュームグループに基づいており、.qcow2 または .raw 形式を使用します。

Web コンソールを使用してディスクベースのストレージを仮想マシンに接続するには、次のいずれかの方法を使用します。

  • 新しい仮想マシンを作成する場合は、Create virtual machine ダイアログの Storage オプションを使用して新しいディスクを作成し、接続します。詳細な手順は、Web コンソールを使用した仮想マシンの作成 を参照してください。
  • 既存の仮想マシンの場合は、LVM ベースのストレージボリュームを作成し、それを仮想マシンに接続します。次の手順を参照してください。
重要

LVM ベースのストレージボリュームには次の制限があることに注意してください。

  • LVM ベースのストレージプールは、LVM の柔軟性を完全には提供しません。
  • LVM ベースのストレージプールは、ボリュームグループです。virsh ユーティリティーを使用してボリュームグループを作成できますが、この方法では、作成したボリュームグループには 1 つのデバイスしか作成できません。複数のデバイスを持つボリュームグループを作成する場合は、代わりに LVM ユーティリティーを使用します。詳細は、How to create a volume group in Linux with LVM を参照してください。
  • LVM ベースのストレージプールには、完全なディスクパーティションが必要です。virsh コマンドを使用して新しいパーティションまたはデバイスをアクティブにすると、パーティションがフォーマットされ、すべてのデータが消去されます。次の手順で説明しているように、ホストの既存のボリュームグループを使用している場合は、何も消去されません。

前提条件

手順

  1. RHEL 10 Web コンソールにログインします。
  2. ディレクトリーベースのストレージプールがまだない場合は、新しいディレクトリーベースのストレージプールを作成して設定します。

    1. Virtual Machines インターフェイスの上部にある Storage PoolsCreate storage pool をクリックします。
    2. Create Storage Pool ダイアログで、ストレージプールの名前を入力します。
    3. Type ドロップダウンメニューで、LVM volume group を選択します。

      注記

      ドロップダウンメニューに LVM volume group オプションが表示されない場合、ハイパーバイザーによってディスクベースのストレージプールがサポートされていません。

    4. 以下の情報を入力します。

      • Source volume group - 使用する LVM ボリュームグループの名前。
      • 起動 - ホストの起動時にストレージプールが起動するかどうか
    5. Create をクリックします。

      ストレージプールが作成され、Create Storage Pool ダイアログが閉じて、新しいストレージプールがストレージプールのリストに表示されます。

  3. 既存のストレージプールに基づいて新しいストレージボリュームを作成します。

    1. Storage Pools ウィンドウで、ストレージボリュームの作成元とするストレージプールをクリックし、Storage VolumesCreate volume を選択します。
    2. Create Storage Volume ダイアログに次の情報を入力します。

      • Name - ストレージボリュームの名前。
      • サイズ - ストレージボリュームのサイズ (MiB または GiB)。
      • フォーマット - ストレージボリュームの形式。サポートされているタイプは qcow2 および raw です。
    3. Create をクリックします。
  4. オプション: データの破損やディスクの断片化の問題を回避するために、ディスクの整合性を確認します。手順は、仮想ディスクの整合性のチェック を参照してください。
  5. 作成したストレージボリュームをディスクとして仮想マシンに追加します。

    1. Virtual Machines インターフェイスで、新しいディスクを作成して接続する仮想マシンをクリックします。

      新しいページが開き、選択した仮想マシンに関する基本情報を含む Overview セクションと、仮想マシンのグラフィカルインターフェイスにアクセスするための Console セクションが表示されます。

    2. Disks までスクロールします。
    3. Disks セクションで、Add disk をクリックします。
    4. Add disks ダイアログで、Use existing を選択します。
    5. ディスクに使用するストレージプールとストレージボリュームを選択します。
    6. ディスクを永続化するかどうかを選択します。

      注記

      一時的なデバイスは、稼働中の仮想マシンにのみ追加できます。

    7. オプション: Show additional options をクリックし、ストレージボリュームのキャッシュタイプ、バスタイプ、ディスク識別子を調整します。
    8. Add をクリックします。

検証

  • 仮想マシンのゲストオペレーティングシステムで、ディスクイメージが未フォーマットかつ未割り当てのディスクとして利用できるようになっていることを確認します。

13.4.7. コマンドラインを使用して仮想マシンに NFS ベースのストレージを接続する

仮想マシン (VM) にネットワークストレージを提供する場合、ネットワークファイルシステム (NFS) サーバーに基づくストレージボリュームを使用できます。

コマンドラインを使用して NFS ベースのストレージを仮想マシンに接続するには、次のいずれかの方法を使用します。

  • 新しい仮想マシンを作成する場合は、Create virtual machine ダイアログの Storage オプションを使用して新しいディスクを作成し、接続します。詳細な手順は、Web コンソールを使用した仮想マシンの作成 を参照してください。
  • 既存の仮想マシンの場合は、NFS ベースのストレージボリュームを作成し、それを仮想マシンに接続します。次の手順を参照してください。

前提条件

  • ハイパーバイザーが NFS ベースのストレージプールに対応していることを確認します。

    # virsh pool-capabilities | grep "<value>nfs</value>"
    Copy to Clipboard Toggle word wrap

    コマンドの出力が表示される場合には、NFS ベースのストレージプールはサポートの対象です。

  • 使用できる NFS が必要です。詳細は、NFS 共有のマウント を参照してください。

手順

  1. NFS ベースのストレージプールがまだない場合は、新しい NFS ベースのストレージプールを作成して設定します。

    1. NFS タイプのストレージプールを定義および作成します。たとえば、ターゲットディレクトリー /var/lib/libvirt/images/nfspool を使用してサーバーディレクトリー /home/net_mount にマウントされ、IP が 111.222.111.222 の NFS サーバーを使用するストレージプールを、guest_images_netfs という名前で作成するには、以下を実行します。

      # virsh pool-define-as --name guest_images_netfs \
         --type netfs --source-host='111.222.111.222' \
         --source-path='/home/net_mount' --source-format='nfs' \
         --target='/var/lib/libvirt/images/nfspool'
      
      Pool guest_images_netfs defined
      Copy to Clipboard Toggle word wrap
    2. 以前に定義した設定に基づいてストレージプールを作成します。

      # virsh pool-build guest_images_netfs
        Pool guest_images_netfs built
      Copy to Clipboard Toggle word wrap
    3. オプション: プールが作成されたことを確認します。

      # virsh pool-list --all
      
        Name                   State      Autostart
        -------------------------------------------
        default                active     yes
        guest_images_netfs     inactive   no
      Copy to Clipboard Toggle word wrap
    4. ストレージプールを起動します。

      # virsh pool-start guest_images_netfs
        Pool guest_images_netfs started
      Copy to Clipboard Toggle word wrap
    5. オプション: 自動起動をオンにします。

      デフォルトでは、virsh で定義したストレージプールは、仮想化サービスが起動するたびに自動的に起動するように設定されません。virsh pool-autostart コマンドを使用して、ストレージプールを自動的に起動するように設定します。

      # virsh pool-autostart guest_images_netfs
        Pool guest_images_netfs marked as autostarted
      Copy to Clipboard Toggle word wrap
  2. NFS ベースのストレージボリュームを作成します。たとえば、次のコマンドは、guest_images_netfs ストレージプールに基づいて、vm-disk1 という名前の 20 GB の qcow2 ボリュームを作成します。

    # virsh vol-create-as --pool guest_images_netfs --name vm-disk1 --capacity 20GB --format qcow2
    
    Vol vm-disk1 created
    Copy to Clipboard Toggle word wrap
  3. ストレージボリュームを仮想ディスクとして仮想マシンに接続します。

    1. 作成したストレージボリュームの場所を確認します。これを行うには、ボリュームが属するストレージプールを調べます。

      # virsh vol-list --pool guest_images_netfs --details
      
       Name        Path                                       Type   Capacity    Allocation
      -------------------------------------------------------------------------------------
       vm-disk1   /var/lib/libvirt/images/nfspool/vm-disk1    file  20.00 GiB   196.00 KiB
      Copy to Clipboard Toggle word wrap
    2. ディスクを接続する仮想マシンですでに使用されているターゲットデバイスを確認します。

      # virsh domblklist --details <vm-name> Type Device Target Source ---------------------------------------------------------------- file disk *vda      /home/VirtualMachines/vm-name.qcow2
       file   cdrom    vdb      -
      Copy to Clipboard Toggle word wrap
    3. オプション: データの破損やディスクの断片化の問題を回避するために、ディスクの整合性を確認します。手順は、仮想ディスクの整合性のチェック を参照してください。
    4. virsh attach-disk コマンドを使用してディスクを仮想マシンに接続します。仮想マシンで使用されていないターゲットデバイスを指定します。

      たとえば、次のコマンドは、以前に作成した vm-disk1vdc デバイスとして testguest1 仮想マシンに接続します。

      # virsh attach-disk testguest1 /var/lib/libvirt/images/nfspool/vm-disk1 vdc --persistent
      Copy to Clipboard Toggle word wrap

検証

  1. ディスクを接続した仮想マシンの XML 設定を調べて、設定が正しいかどうかを確認します。

    # virsh dumpxml testguest1
    
    ...
        <disk type='file' device='disk'>
          <driver name='qemu' type='qcow2' discard='unmap'/>
          <source file='/var/lib/libvirt/images/nfspool/vm-disk1' index='1'/>
          <backingStore/>
          <target dev='vdc' bus='virtio'/>
          <alias name='virtio-disk2'/>
          <address type='drive' controller='0' bus='0' target='0' unit='0'/>
        </disk>
    ...
    Copy to Clipboard Toggle word wrap
  2. 仮想マシンのゲストオペレーティングシステムで、ディスクイメージが未フォーマットかつ未割り当てのディスクとして利用できるようになっていることを確認します。

13.4.8. Web コンソールを使用して仮想マシンに NFS ベースのストレージを接続する

仮想マシン (VM) にネットワークストレージを提供する場合、ネットワークファイルシステム (NFS) サーバーに基づくストレージボリュームを使用できます。

Web コンソールを使用して NFS ベースのストレージを仮想マシンに接続するには、次のいずれかの方法を使用します。

  • 新しい仮想マシンを作成する場合は、Create virtual machine ダイアログの Storage オプションを使用して新しいディスクを作成し、接続します。詳細な手順は、Web コンソールを使用した仮想マシンの作成 を参照してください。
  • 既存の仮想マシンの場合は、NFS ベースのストレージボリュームを作成し、それを仮想マシンに接続します。次の手順を参照してください。

前提条件

手順

  1. RHEL 10 Web コンソールにログインします。
  2. NFS ベースのストレージプールがまだない場合は、新しい NFS ベースのストレージプールを作成して設定します。

    1. Virtual Machines インターフェイスの上部にある Storage PoolsCreate storage pool をクリックします。
    2. Create Storage Pool ダイアログで、ストレージプールの名前を入力します。
    3. Type ドロップダウンメニューで、Network file system を選択します。

      注記

      ドロップダウンメニューに Network file system オプションが表示されない場合、ハイパーバイザーによって NFS ベースのストレージプールがサポートされていません。

    4. 以下の情報を入力します。

      • Target path - ターゲットを指定するパス。ストレージプールに使用されるパスになります。
      • Host - マウントポイントがあるネットワークサーバーのホスト名。これは、ホスト名または IP アドレスになります。
      • Source path - ネットワークサーバーで使用されるディレクトリー。
      • 起動 - ホストの起動時にストレージプールが起動するかどうか
    5. Create をクリックします。

      ストレージプールが作成され、Create Storage Pool ダイアログが閉じて、新しいストレージプールがストレージプールのリストに表示されます。

  3. 既存のストレージプールに基づいて新しいストレージボリュームを作成します。

    1. Storage Pools ウィンドウで、ストレージボリュームの作成元とするストレージプールをクリックし、Storage VolumesCreate volume を選択します。
    2. Create Storage Volume ダイアログに次の情報を入力します。

      • Name - ストレージボリュームの名前。
      • サイズ - ストレージボリュームのサイズ (MiB または GiB)。
      • フォーマット - ストレージボリュームの形式。サポートされているタイプは qcow2 および raw です。
    3. Create をクリックします。
  4. オプション: データの破損やディスクの断片化の問題を回避するために、ディスクの整合性を確認します。手順は、仮想ディスクの整合性のチェック を参照してください。
  5. 作成したストレージボリュームをディスクとして仮想マシンに追加します。

    1. Virtual Machines インターフェイスで、新しいディスクを作成して接続する仮想マシンをクリックします。

      新しいページが開き、選択した仮想マシンに関する基本情報を含む Overview セクションと、仮想マシンのグラフィカルインターフェイスにアクセスするための Console セクションが表示されます。

    2. Disks までスクロールします。
    3. Disks セクションで、Add disk をクリックします。
    4. Add disks ダイアログで、Use existing を選択します。
    5. ディスクに使用するストレージプールとストレージボリュームを選択します。
    6. ディスクを永続化するかどうかを選択します。

      注記

      一時的なデバイスは、稼働中の仮想マシンにのみ追加できます。

    7. オプション: Show additional options をクリックし、ストレージボリュームのキャッシュタイプ、バスタイプ、ディスク識別子を調整します。
    8. Add をクリックします。

検証

  • 仮想マシンのゲストオペレーティングシステムで、ディスクイメージが未フォーマットかつ未割り当てのディスクとして利用できるようになっていることを確認します。

13.5. 仮想ディスクの整合性のチェック

ディスクイメージを仮想マシンにアタッチする前に、ディスクイメージに破損や著しい断片化などの問題がないことを確認します。確認には、qemu-img check コマンドを使用します。

必要に応じて、このコマンドを使用してディスクイメージの修復を試みることもできます。

前提条件

  • ディスクイメージを使用する仮想マシンがすべてシャットダウンしている。

手順

  1. テストするイメージに対して qemu-img check コマンドを使用します。以下に例を示します。

    # qemu-img check <test-name.qcow2>
    
    No errors were found on the image.
    327434/327680 = 99.92% allocated, 0.00% fragmented, 0.00% compressed clusters
    Image end offset: 21478375424
    Copy to Clipboard Toggle word wrap

    チェックでディスクイメージに問題が見つかった場合、コマンドの出力は次のようになります。

    167 errors were found on the image.
    Data may be corrupted, or further writes to the image may corrupt it.
    
    453368 leaked clusters were found on the image.
    This means waste of disk space, but no harm to data.
    
    259 internal errors have occurred during the check.
    Image end offset: 21478375424
    Copy to Clipboard Toggle word wrap
  2. 検出された問題の修復を試みるために、-r all オプションを指定した qemu-img check コマンドを使用します。ただし、問題の一部しか解決されない可能性があることに注意してください。

    警告

    ディスクイメージを修復すると、データの破損やその他の問題が発生する可能性があります。修復を試みる前に、ディスクイメージをバックアップしてください。

    # qemu-img check -r all <test-name.qcow2>
    
    [...]
    122 errors were found on the image.
    Data may be corrupted, or further writes to the image may corrupt it.
    
    250 internal errors have occurred during the check.
    Image end offset: 27071414272
    Copy to Clipboard Toggle word wrap

    この出力は、修復後にディスクイメージで見つかった問題の数を示しています。

  3. さらにディスクイメージの修復が必要な場合は、guestfish シェル のさまざまな libguestfs ツールを使用できます。

13.6. 仮想ディスクのサイズ変更

既存のディスクイメージに追加の領域が必要な場合は、qemu-img resize ユーティリティーを使用して、ユースケースに合わせてイメージのサイズを変更できます。

前提条件

  • ディスクイメージのバックアップを作成済みである。
  • ディスクイメージを使用する仮想マシンがすべてシャットダウンしている。

    警告

    実行中の仮想マシンのディスクイメージのサイズを変更すると、データの破損やその他の問題が発生する可能性があります。

  • ホストのハードディスクに、意図したディスクイメージサイズに対して十分な空き領域がある。
  • オプション: ディスクイメージにデータの破損や同様の問題がないことを確認済みである。手順は、仮想ディスクの整合性のチェック を参照してください。

手順

  1. サイズを変更する仮想マシンのディスクイメージファイルの場所を判別します。以下に例を示します。

    # virsh domblklist <vm-name>
    
     Target   Source
    ----------------------------------------------------------
     vda      /home/username/disk-images/example-image.qcow2
    Copy to Clipboard Toggle word wrap
  2. オプション: 現在のディスクイメージをバックアップします。

    # cp <example-image.qcow2> <example-image-backup.qcow2>
    Copy to Clipboard Toggle word wrap
  3. qemu-img resize ユーティリティーを使用して、イメージのサイズを変更します。

    たとえば、<example-image.qcow2> のサイズを 10 GB 増やすには、次のようにします。

    # qemu-img resize <example-image.qcow2> +10G
    Copy to Clipboard Toggle word wrap
  4. ディスクイメージ内のファイルシステム、パーティション、または物理ボリュームのサイズを変更して、使用する領域を追加します。RHEL ゲストオペレーティングシステムでこれを行うには、ストレージデバイスの管理 および ファイルシステムの管理 の手順を使用します。

検証

  1. サイズを変更したイメージに関する情報を表示し、意図したサイズになっているかを確認します。

    # qemu-img info <converted-image.qcow2>
    
    image: converted-image.qcow2
    file format: qcow2
    virtual size: 30 GiB (32212254720 bytes)
    disk size: 196 KiB
    cluster_size: 65536
    Format specific information:
        compat: 1.1
        compression type: zlib
        lazy refcounts: false
        refcount bits: 16
        corrupt: false
        extended l2: false
    Copy to Clipboard Toggle word wrap
  2. サイズを変更したディスクイメージに潜在的なエラーがないか確認します。手順は、仮想ディスクの整合性のチェック を参照してください。

13.7. 仮想ディスク形式の変換

qemu-img convert コマンドを使用して、仮想ディスクイメージを別の形式に変換できます。たとえば、別のハイパーバイザーで実行している仮想マシンにディスクイメージをアタッチする場合、仮想ディスクイメージの形式の変換が必要になることがあります。

前提条件

  • ディスクイメージを使用する仮想マシンがすべてシャットダウンしている。
  • QEMU による変換を行うには、ソースディスクイメージ形式がサポートされている必要があります。詳細なリストは、サポートされているディスクイメージ形式 を参照してください。

手順

  • qemu-img convert コマンドを使用して、既存の仮想ディスクイメージを別の形式に変換します。たとえば、raw ディスクイメージを QCOW2 ディスクイメージに変換するには、次のようにします。

    # qemu-img convert -f raw <original-image.img> -O qcow2 <converted-image.qcow2>
    Copy to Clipboard Toggle word wrap

検証

  1. 変換したイメージに関する情報を表示し、意図した形式とサイズであるかどうかを確認します。

    # qemu-img info <converted-image.qcow2>
    
    image: converted-image.qcow2
    file format: qcow2
    virtual size: 30 GiB (32212254720 bytes)
    disk size: 196 KiB
    cluster_size: 65536
    Format specific information:
        compat: 1.1
        compression type: zlib
        lazy refcounts: false
        refcount bits: 16
        corrupt: false
        extended l2: false
    Copy to Clipboard Toggle word wrap
  2. ディスクイメージに潜在的なエラーがないか確認します。手順は、仮想ディスクの整合性のチェック を参照してください。

13.8. コマンドラインを使用した仮想マシンのストレージの削除

仮想マシン (VM) に接続した仮想ディスクが不要になった場合、またはホストのストレージリソースを解放する場合は、コマンドラインを使用して次のいずれかを実行できます。

  • 仮想ディスクを仮想マシンから接続解除します。
  • 仮想ディスクとその内容を削除します。
  • 仮想ディスクに関連するストレージプールを非アクティブ化します。
  • 仮想ディスクに関連するストレージプールを削除します。

手順

  1. 仮想マシンから仮想ディスクを接続解除するには、virsh detach-disk コマンドを使用します。

    1. オプション: 仮想マシンに接続されているすべてのストレージデバイスをリスト表示します。

      # *virsh domblklist --details <vm-name>
      
       Type   Device   Target   Source
      -----------------------------------------------------------------------------
       file   disk     hda      /home/VirtualMachines/vm-name.qcow2
       file   cdrom    hdb      -
       file   disk     vdc      /home/VirtualMachines/test-disk2.qcow2
      Copy to Clipboard Toggle word wrap
    2. ディスクを接続解除するには、target パラメーターを使用します。たとえば、vdc として接続されているディスクを testguest 仮想マシンから接続解除するには、次のコマンドを使用します。

      # virsh detach-disk testguest vdc --persistent
      Copy to Clipboard Toggle word wrap
  2. ディスクを削除するには、次のいずれかを実行します。

    1. ディスクがストレージボリュームとして管理されている場合は、virsh vol-delete コマンドを使用します。たとえば、ストレージプール RHEL-storage-pool に関連付けられたボリューム test-disk2 を削除するには、次のコマンドを実行します。

      # virsh vol-delete --pool RHEL-storage-pool test-disk2
      Copy to Clipboard Toggle word wrap
    2. ディスクが純粋にファイルベースの場合は、ファイルを削除します。

      # rm /home/VirtualMachines/test-disk2.qcow2
      Copy to Clipboard Toggle word wrap
  3. ストレージプールを非アクティブ化するには、virsh pool-destroy コマンドを使用します。

    ストレージプールを非アクティブ化すると、そのプールに新しいボリュームを作成できなくなります。ただし、そのプール内にボリュームがある仮想マシンは、引き続き実行されます。これは、たとえば、システムパフォーマンスを向上させるためにプール内に作成できるボリュームの数を制限する場合に役立ちます。

    # virsh pool-destroy RHEL-storage-pool
    
    Pool RHEL-storage-pool destroyed
    Copy to Clipboard Toggle word wrap
  4. ストレージプールを完全に削除するには、virsh pool-undefine コマンドを使用してその定義を削除します。

    # virsh pool-undefine RHEL-storage-pool
    
    Pool RHEL-storage-pool has been undefined
    Copy to Clipboard Toggle word wrap

検証

13.9. Web コンソールを使用した仮想マシンのストレージの削除

仮想マシン (VM) に接続した仮想ディスクが不要になった場合、またはホストのストレージリソースを解放する場合は、Web コンソールを使用して次のいずれかを実行できます。

  • 仮想ディスクを仮想マシンから接続解除します。
  • 仮想ディスクとその内容を削除します。
  • 仮想ディスクに関連するストレージプールを非アクティブ化します。
  • 仮想ディスクに関連するストレージプールを削除します。

前提条件

手順

  1. 仮想マシンから仮想ディスクを接続解除するには、次の手順に従います。

    1. 仮想マシン インターフェイスで、ディスクの割り当てを解除する仮想マシンを選択します。

      新しいページが開き、選択した仮想マシンに関する基本情報を含む Overview セクションと、仮想マシンのグラフィカルインターフェイスにアクセスするための Console セクションが表示されます。

    2. Disks までスクロールします。

      ディスクセクションには、仮想マシンに割り当てられたディスクに関する情報と、ディスクの Add、または Edit のオプションが表示されます。

    3. 接続解除するディスクの行の右側にあるメニューボタン をクリックします。
    4. 表示されるドロップダウンメニューで、Remove ボタンをクリックします。

      Remove disk from VM? 確認ダイアログボックスが表示されます。

    5. 確認ダイアログボックスで、削除 をクリックします。オプションで、ディスクイメージも削除する場合は、Remove and delete file をクリックします。

      仮想マシンから、仮想ディスクの接続が解除されます。

  2. ディスクを削除するには、次のいずれかを実行します。

    1. ディスクがストレージボリュームとして管理されている場合は、Virtual Machines タブの上部にある Storage Pools → ディスクが含まれているストレージプールの名前 → Storage Volumes → 削除するストレージボリューム → Delete 1 Volume をクリックします。

      # virsh vol-delete --pool RHEL-storage-pool test-disk2
      Copy to Clipboard Toggle word wrap
    2. ディスクがストレージボリュームとして管理されていないファイルの場合 (たとえば、qemu-img によって作成された場合)、グラフィカルファイルマネージャーまたはコマンドラインを使用して削除する必要があります。現在、RHEL Web コンソールでは個々のファイルの削除はサポートされていません。
  3. ストレージプールを非アクティブ化するには、次の手順に従います。

    ストレージプールを非アクティブ化すると、そのプールに新しいボリュームを作成できなくなります。ただし、そのプール内にボリュームがある仮想マシンは、引き続き実行されます。これは、たとえば、システムパフォーマンスを向上させるためにプール内に作成できるボリュームの数を制限する場合に役立ちます。

    1. 仮想マシンタブの上部にある ストレージプール をクリックします。ストレージプール画面が表示され、設定されているストレージプールのリストが示されます。
    2. ストレージプールの行で Deactivate をクリックします。

      ストレージプールは非アクティブになります。

  4. ストレージプールを完全に削除するには、次の手順に従います。

    1. Virtual Machines タブの Storage Pools をクリックします。

      Storage Pools 画面が表示され、設定されているストレージプールのリストが示されます。

    2. 削除するストレージプールのメニューボタン をクリックし、Delete をクリックします。

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

    3. オプション: プール内のストレージボリュームを削除するには、ダイアログで対応するチェックボックスをオンにします。
    4. Delete をクリックします。

      ストレージプールが削除されます。前のステップでチェックボックスをオンにした場合は、関連付けられているストレージボリュームも削除されます。

検証

13.10. サポートされているディスクイメージ形式

RHEL で仮想マシン (VM) を実行するには、サポートされている形式のディスクイメージを使用する必要があります。サポートされていない特定のディスクイメージをサポートされている形式に変換することもできます。

仮想マシンでサポートされているディスクイメージ形式

RHEL で仮想マシンを実行するには、次の形式のディスクイメージを使用できます。

  • qcow2 - 圧縮などの追加機能を提供します。
  • raw - より良いパフォーマンスが得られる可能性があります。
  • luks - Linux Unified Key Setup (LUKS) 仕様を使用して暗号化されたディスクイメージ。

変換でサポートされているディスクイメージ形式

  • 必要に応じて、qemu-img convert コマンドを使用 して、ディスクイメージを raw 形式と qcow2 形式間で変換できます。
  • vmdk ディスクイメージを raw または qcow2 形式に変換する必要がある場合は、virt-v2v ユーティリティーを使用 して、ディスクを使用する仮想マシンを KVM に変換します。
  • 他のディスクイメージ形式を raw または qcow2 に変換するには、qemu-img convert コマンド を使用できます。このコマンドで使用できる形式のリストは、QEMU のドキュメント を参照してください。

    ほとんどの場合、非 KVM 仮想マシンのディスクイメージ形式を qcow2 または raw に変換するだけでは、仮想マシンを RHEL KVM 上で正しく実行するのに十分ではないことに注意してください。ディスクイメージを変換するだけでなく、対応するドライバーを仮想マシンのゲストオペレーティングシステムにインストールして設定する必要があります。サポートされているハイパーバイザー変換には、virt-v2v ユーティリティーを使用します。

第14章 スナップショットを使用した仮想マシンの状態の保存と復元

仮想マシン (VM) の現在の状態を保存するには、仮想マシンの スナップショット を作成します。その後、スナップショットに戻すことで、仮想マシンを保存した状態に戻すことができます。

仮想マシンのスナップショットには、仮想マシンのディスクイメージが含まれます。実行中の仮想マシンからスナップショット (ライブスナップショット とも呼ばれます) を作成すると、そのスナップショットには、実行中のプロセスやアプリケーションを含む仮想マシンのメモリー状態も含まれます。

スナップショットを作成すると、たとえば次のタスクに役立ちます。

  • ゲストオペレーティングシステムのクリーンな状態を保存する
  • 仮想マシン上で破壊的な影響を与える可能性のある操作を実行する前に復元ポイントを確保する

仮想マシンのスナップショットを作成したり、スナップショットに戻したりするには、コマンドライン (CLI) または RHEL Web コンソールを使用できます。

14.1. 仮想マシンのスナップショットのサポート制限

Red Hat は、お客様が 外部 スナップショットを使用する場合にのみ、RHEL 上の仮想マシン (VM) のスナップショット機能をサポートします。現在、RHEL で外部スナップショットを作成できるのは、次の要件がすべて満たされている場合のみです。

  • 仮想マシンがファイルベースのストレージを使用している。
  • 次のいずれかの条件の下で仮想マシンのスナップショットを作成する。

    • 仮想マシンがシャットダウンされている。
    • 仮想マシンが実行中の場合は、--disk-only --quiesce オプションまたは --live --memspec オプションを使用する。
警告

他のほとんどの設定では、内部 スナップショットが作成されます。これは RHEL 10 では非推奨です。内部スナップショットはお客様のユースケースに適している可能性がありますが、Red Hat は内部スナップショットの完全なテストとサポートを提供していません。

実稼働環境では内部スナップショットを使用しないでください。

スナップショットがサポートされていることを確認するには、スナップショットの XML 設定を表示し、スナップショットの種類とストレージを確認します。

# virsh snapshot-dumpxml <vm-name> <snapshot-name>
Copy to Clipboard Toggle word wrap
  • サポートされているスナップショットの出力例:

    <domainsnapshot>
      <name>sample-snapshot-name-1<name>
      <state>shutoff</state>
      <creationTime>1706658764</creationTime>
      <memory snapshot='no'/>
      <disks>
        <disk name='vda' snapshot='external' type='file'>
          <driver type='qcow2'/>
          <source file='/var/lib/libvirt/images/vm-name.sample-snapshot-name-1'/>
        </disk>
      </disks>
      <domain type='kvm'>
      [...]
    Copy to Clipboard Toggle word wrap
  • サポートされていないスナップショットの出力例:

    <domainsnapshot>
      <name>sample-snapshot-name-2</name>
      <state>running</state>
      <creationTime>1653396424</creationTime>
      <memory snapshot='internal'/>
      <disks>
        <disk name='vda' snapshot='internal'/>
        <disk name='sda' snapshot='no'/>
      </disks>
      <domain type='kvm'>
      [...]
    Copy to Clipboard Toggle word wrap

14.2. コマンドラインを使用した仮想マシンのスナップショットの作成

仮想マシン (VM) の状態をスナップショットに保存するには、virsh snapshot-create-as コマンドを使用できます。

前提条件

  • 仮想マシンがファイルベースのストレージを使用している。これが当てはまるかどうかを確認するには、次のコマンドを使用して、disk デバイスの disk typefile と表示されることを確認します。

    # virsh dumpxml <vm-name> | grep "disk type"
        <disk type='file' device='disk'>
        <disk type='file' device='cdrom'>
    Copy to Clipboard Toggle word wrap
  • 実行中の仮想マシンのメモリーを含む仮想マシンスナップショットを作成する場合は、仮想マシンのメモリーを保存するための十分なディスク領域が必要です。

    • 仮想マシンのメモリーを保存するための推奨最小容量は、仮想マシンに割り当てられた RAM と同じ容量です。たとえば、32 GB の RAM を搭載した仮想マシンのメモリーを保存するには、最大 32 GB のディスク領域が必要です。
    • 仮想マシンの I/O 負荷が大きい場合、大幅な追加ディスク領域が必要になる可能性があります。
    • 仮想マシンに VFIO パススルーデバイスが割り当てられている場合、追加のディスク領域が必要になる可能性があります。
    • 仮想マシンを一時停止せずにスナップショットを作成すると、追加のディスク領域が必要になる場合があります。

      重要

      Red Hat では、非常に高いワークロードがかかっている実行中の仮想マシンのメモリーや、VFIO パススルーデバイスを使用している実行中の仮想マシンのメモリーを保存しないことを推奨しています。このような仮想マシンのメモリーを保存すると、ホストディスクがいっぱいになり、システムのデグレードが発生する可能性があります。このような仮想マシンは、代わりにメモリーなしでスナップショットを作成することを検討してください。

      また、すべての VFIO デバイスがメモリーを含むスナップショットの作成に対応しているわけではないことに注意してください。現在、メモリーを使用したスナップショットの作成は、次の状況でのみ正しく機能します。

      • 割り当てられている VFIO デバイスが、移行機能が有効な Mellanox VF である。
      • 割り当てられている VFIO デバイスが、移行機能が有効な NVIDIA vGPU である。

手順

  • 必要なパラメーターを指定して仮想マシンのスナップショットを作成するには、virsh snapshot-create-as コマンドを使用します。

    # virsh snapshot-create-as <vm-name> <snapshot-name> <optional-description> <additional-parameters>
    Copy to Clipboard Toggle word wrap
    • シャットダウンされた仮想マシンのスナップショットを作成するには、--disk-only パラメーターを使用します。たとえば、次のコマンドは、シャットダウンされた Testguest1 仮想マシンの現在のディスク状態から Snapshot1 を作成します。

      # virsh snapshot-create-as Testguest1 Snapshot1 --disk-only
      
      Domain snapshot Snapshot1 created.
      Copy to Clipboard Toggle word wrap
    • 実行中の仮想マシンのディスク状態をメモリーを除いて保存するスナップショットを作成するには、--disk-only --quiesce パラメーターを使用します。たとえば、次のコマンドは、実行中の Testguest2 仮想マシンの現在のディスク状態から、clean system install という説明を持つ Snapshot2 を作成します。

      # virsh snapshot-create-as Testguest2 Snapshot2 "clean system install" --disk-only --quiesce
      
      Domain snapshot Snapshot2 created.
      Copy to Clipboard Toggle word wrap
    • 実行中の仮想マシンを一時停止して、ディスク状態とメモリーを保存するスナップショットを作成するには、--memspec パラメーターを使用します。たとえば、次のコマンドは、Testguest3 仮想マシンを一時停止して、仮想マシンの現在のディスクとメモリーの状態から Snapshot3 を作成します。仮想マシンのメモリーは、/var/lib/libvirt/images/saved_memory.img ファイルに保存されます。スナップショットが完成すると、仮想マシンが自動的に操作を再開します。

      # virsh snapshot-create-as Testguest3 Snapshot3 --memspec /var/lib/libvirt/images/saved_memory.img
      
      Domain snapshot Snapshot3 created.
      Copy to Clipboard Toggle word wrap

      スナップショット作成時に仮想マシンを一時停止すると、ダウンタイムが発生します。しかし、特に負荷の高い仮想マシンの場合は、一時停止したほうが、実行中の仮想マシンのライブスナップショットを (--live オプションを使用して) 作成するよりも、確実に機能する可能性があります。

    • 実行中の仮想マシンのディスク状態とライブメモリーを保存するスナップショットを作成するには、--live --memspec パラメーターを使用します。たとえば、次のコマンドは、実行中の Testguest4 仮想マシンの現在のディスクとメモリーの状態から Snapshot4 を作成し、メモリーの状態を /var/lib/libvirt/images/saved_memory2.img ファイルに保存します。

      # virsh snapshot-create-as Testguest4 Snapshot4 --live --memspec /var/lib/libvirt/images/saved_memory2.img
      
      Domain snapshot Snapshot4 created.
      Copy to Clipboard Toggle word wrap
      警告

      仮想マシンのメモリーをスナップショットに保存すると、仮想マシンのゲストオペレーティングシステムで実行中のプロセスの状態が保存されます。ただし、このようなスナップショットに戻したときに、ネットワーク接続の喪失やシステム時間の同期の欠如など、さまざまな要因によりプロセスが失敗する可能性があります。

検証

  1. 指定した仮想マシンに関連付けられているスナップショットをリスト表示します。

    # virsh snapshot-list <Testguest1>
    
     Name                    Creation Time               State
    --------------------------------------------------------------
    Snapshot1               2024-01-30 18:34:58 +0100   shutoff
    Copy to Clipboard Toggle word wrap
  2. スナップショットが 外部 として作成されたことを確認します。

    # virsh snapshot-dumpxml <Testguest1> <Snapshot1> | grep external
    
      <disk name='vda' snapshot='external' type='file'>
    Copy to Clipboard Toggle word wrap

    このコマンドの出力に snapshot='external' が含まれている場合、スナップショットは外部スナップショットであり、Red Hat によって完全にサポートされます。

14.3. Web コンソールを使用した仮想マシンのスナップショットの作成

仮想マシン (VM) の状態をスナップショットに保存するには、RHEL Web コンソールを使用できます。

前提条件

  • RHEL 10 Web コンソールがインストールされている。

    手順は、Web コンソールのインストールおよび有効化 を参照してください。

  • Web コンソールの仮想マシンプラグインが システムにインストールされている
  • 仮想マシンがファイルベースのストレージを使用している。この条件を満たしていることを確認するには、次の手順を実行します。

    1. Web コンソールの Virtual machines インターフェイスで、スナップショットを作成する仮想マシンをクリックします。
    2. 管理概要の Disks ペインで、リストされているデバイスの Source 列を確認します。ソースが表示されているすべてのデバイスで、このソースが File である必要があります。

手順

  1. RHEL 10 Web コンソールにログインします。
  2. Web コンソールの Virtual machines インターフェイスで、スナップショットを作成する仮想マシンをクリックします。

    仮想マシンの管理概要が開きます。

  3. 管理概要の Snapshots ペインで、Create snapshot ボタンをクリックします。
  4. スナップショットの名前を入力し、必要に応じて説明を入力します。
  5. Create をクリックします。

検証

  1. スナップショットの作成が成功したことを確認するには、スナップショットが仮想マシンの Snapshots ペインに表示されていることを確認します。
  2. スナップショットが 外部 として作成されたことを確認します。これを行うには、ホストのコマンドラインで次のコマンドを使用します。

    # virsh snapshot-dumpxml <Testguest1> <Snapshot1> | grep external
    
      <disk name='vda' snapshot='external' type='file'>
    Copy to Clipboard Toggle word wrap

    このコマンドの出力に snapshot='external' が含まれている場合、スナップショットは外部スナップショットであり、Red Hat によってサポートされます。

14.4. コマンドラインを使用して仮想マシンのスナップショットに戻す

仮想マシン (VM) をスナップショットに保存された状態に戻すには、コマンドラインインターフェイス (CLI) を使用できます。

前提条件

  • 以前に Web コンソール または コマンドラインを使用 して作成した仮想マシンのスナップショットが利用可能である。
  • オプション: 仮想マシンの現在の状態のスナップショットを作成した。現在の状態を保存せずに以前のスナップショットに戻すと、最後のスナップショット以降に仮想マシンで実行された変更が失われます。

手順

  • virsh snapshot-revert ユーティリティーを使用して、仮想マシンの名前と、復元先のスナップショットの名前を指定します。たとえば、次のコマンドは、Testguest2 仮想マシンを clean-install スナップショットに戻します。

    # virsh snapshot-revert Testguest2 clean-install
    
    Domain snapshot clean-install reverted
    Copy to Clipboard Toggle word wrap

検証

  • 元に戻した仮想マシンの現在アクティブなスナップショットを表示します。

    # virsh snapshot-current Testguest2 --name
    
    clean-install
    Copy to Clipboard Toggle word wrap

14.5. Web コンソールを使用して仮想マシンのスナップショットに戻す

仮想マシン (VM) をスナップショットに保存された状態に戻すには、RHEL Web コンソールを使用できます。

前提条件

手順

  1. RHEL 10 Web コンソールにログインします。
  2. Web コンソールの Virtual machines インターフェイスで、状態を戻す仮想マシンをクリックします。

    仮想マシンの管理概要が開きます。

  3. 管理概要の Snapshots ペインで、復元先のスナップショットの横にある Revert ボタンをクリックします。
  4. 元に戻す操作が完了するまで待ちます。スナップショットのサイズや現在の状態との違いによっては、数分かかる場合があります。

検証

  • Snapshots ペインで、選択したスナップショットの左側に緑色のチェック記号が表示されていれば、そのスナップショットに正常に戻されています。

14.6. コマンドラインを使用した仮想マシンのスナップショットの削除

仮想マシン (VM) スナップショットが不要になった場合は、コマンドラインでスナップショットを削除して、そのスナップショットが使用しているディスク領域を解放できます。

前提条件

  • オプション: 削除するスナップショットの子スナップショットがある。

    アクティブなスナップショットがあるときに新しいスナップショットを作成すると、子スナップショットが自動的に作成されます。子を持たないスナップショットを削除すると、親スナップショットから作成された後にそのスナップショットに保存された変更がすべて失われます。

    仮想マシン内のスナップショットの親子構造を表示するには、virsh snapshot-list --tree コマンドを使用します。次の例では、Latest-snapshotRedundant-snapshot の子として表示されています。

    # virsh snapshot-list --tree <vm-name>
    
    Clean-install-snapshot
      |
      +- Redundant-snapshot
          |
          +- Latest-snapshot
    Copy to Clipboard Toggle word wrap

手順

  • スナップショットを削除するには、virsh snapshot-delete コマンドを使用します。たとえば、次のコマンドは、Testguest1 仮想マシンから Redundant-snapshot を削除します。

    # virsh snapshot-delete Testguest1 Redundant-snapshot
    
    Domain snapshot Redundant-snapshot deleted
    Copy to Clipboard Toggle word wrap

検証

  • 削除したスナップショットがなくなったことを確認するには、該当する仮想マシンの既存のスナップショットとその親子構造を表示します。

    # virsh snapshot-list --tree <Testguest1>
    
    Clean-install-snapshot
      |
      +- Latest-snapshot
    Copy to Clipboard Toggle word wrap

    この例では、Redundant-snapshot が削除され、Latest-snapshotClean-install-snapshot の子になっています。

14.7. Web コンソールを使用した仮想マシンのスナップショットの削除

仮想マシン (VM) スナップショットが不要になった場合は、Web コンソールでスナップショットを削除して、そのスナップショットが使用しているディスク領域を解放できます。

前提条件

  • RHEL 10 Web コンソールがインストールされている。

    手順は、Web コンソールのインストールおよび有効化 を参照してください。

  • Web コンソールの仮想マシンプラグインが システムにインストールされている
  • オプション: 削除するスナップショットの子スナップショットがある。

    アクティブなスナップショットがあるときに新しいスナップショットを作成すると、子スナップショットが自動的に作成されます。子を持たないスナップショットを削除すると、親スナップショットから作成された後にそのスナップショットに保存された変更がすべて失われます。

    スナップショットに子があるかどうかを確認するには、仮想マシンの Web コンソールの概要にあるスナップショットの Parent snapshot 列に Snapshots がリストされていることを確認します。

手順

  1. Web コンソールの Virtual machines インターフェイスで、スナップショットを削除する仮想マシンをクリックします。

    仮想マシンの管理概要が開きます。

  2. 管理概要の Snapshots ペインで、削除するスナップショットの横にある Delete ボタンをクリックします。
  3. 削除操作が完了するまで待ちます。スナップショットのサイズによっては、数分かかる場合があります。

検証

  • スナップショットが Snapshots ペインに表示されなくなれば、正常に削除されています。

第15章 仮想マシンへのホストデバイスの接続

ホストデバイスを仮想マシン (VM) に接続することで、仮想マシンの機能を拡張できます。ホストデバイスを仮想マシンに接続する場合、この目的のために、ハードウェアデバイスのソフトウェア抽象化である 仮想デバイス が使用されます。

15.1. 仮想デバイスの動作

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

仮想デバイスの基礎

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

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

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

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

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

デバイスの種類によっては、RHEL 10 は複数の実装をサポートしていますが、多くの場合、パフォーマンスと柔軟性の間でトレードオフが発生します。

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

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

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

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

15.2. 仮想デバイスの種類

RHEL 10 の仮想化では、仮想マシン (VM) に接続可能ないくつかの異なる種類の仮想デバイスを提供できます。

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

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

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

次の種類のエミュレートされたデバイスがサポートされています。

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

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

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

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

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

    • virtio-blk - ブロックデバイスエミュレーションを提供します。
    • virtio-scsi - より完全な SCSI エミュレーションを提供します。
  • 準仮想化されたクロック
  • 準仮想化されたシリアルデバイス (virtio-serial)
  • 仮想マシンとそのホスト間でメモリーを動的に分散するために使用されるバルーンデバイス (virtio-balloon)。
  • 準仮想化された乱数ジェネレーター (virtio-rng)
物理的に共有されているデバイス

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

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

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

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

  • 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) を作成する機能も提供されます。
注記

これらのタイプの一部のデバイスはサポート対象外であるか、RHEL と互換性がない可能性があります。仮想デバイスのセットアップについてサポートが必要な場合は、Red Hat サポートにお問い合わせください。

15.3. コマンドラインを使用した仮想マシンへの USB デバイスの接続

仮想マシン (VM) を使用する場合、ホストシステムに接続されているフラッシュドライブや Web カメラなどの USB デバイスにアクセスして制御できます。このような場合、ホストシステムはデバイスの制御を仮想マシンに渡します。これは 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
    [...]
    Copy to Clipboard Toggle word wrap
  2. --add-device 引数を指定して virt-xml ユーティリティーを使用します。

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

    # virt-xml example-VM-1 --add-device --hostdev 001.005
    Domain 'example-VM-1' defined successfully.
    Copy to Clipboard Toggle word wrap
    注記

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

検証

  1. virsh dumpxml コマンドを実行し、デバイスの XML 定義が、仮想マシンの XML 設定ファイルの <devices> セクションに追加されたかどうかを確認します。

    # virsh dumpxml example-VM-1
    [...]
    <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>
    [...]
    Copy to Clipboard Toggle word wrap
  2. 仮想マシンを実行し、デバイスが存在し、予想通りに機能しているかどうかをテストします。

15.4. コマンドラインを使用した仮想マシンへの PCI デバイスの接続

仮想マシン (VM) を使用する場合、ホストシステムに接続されているストレージコントローラーやネットワークコントローラーなどの PCI デバイスにアクセスして制御できます。このような場合、ホストシステムはデバイスの制御を仮想マシンに渡します。これは、PCI デバイス割り当て、または PCI パススルーとも呼ばれます。

ホストに接続された PCI ハードウェアデバイスを仮想マシン (VM) で使用するには、ホストからデバイスの接続を解除し、仮想マシンに接続します。

注記

この手順では、一般的な PCI デバイスの割り当て方法を説明します。特定の種類の PCI デバイスを割り当てる手順については、該当する手順を参照してください。

前提条件

  • ホストが IBM Z アーキテクチャーを使用している場合は、vfio カーネルモジュールをホストにロードする必要があります。確認するには、次のコマンドを使用します。

    # lsmod | grep vfio
    Copy to Clipboard Toggle word wrap

    出力に次のモジュールが含まれている必要があります。

    • vfio_pci
    • vfio_pci_core
    • vfio_iommu_type1

手順

  1. 使用するデバイスの PCI アドレス識別子を取得します。たとえば、ホストに接続されている NVME ディスクを使用する場合、このディスクは次の出力でデバイス 0000:65:00.0 として表示されます。

    # lspci -nkD
    
    0000:00:00.0 0600: 8086:a708 (rev 01)
    	Subsystem: 17aa:230e
    	Kernel driver in use: igen6_edac
    	Kernel modules: igen6_edac
    0000:00:02.0 0300: 8086:a7a1 (rev 04)
    	Subsystem: 17aa:230e
    	Kernel driver in use: i915
    	Kernel modules: i915, xe
    0000:00:04.0 1180: 8086:a71d (rev 01)
    	Subsystem: 17aa:230e
    	Kernel driver in use: thermal_pci
    	Kernel modules: processor_thermal_device_pci
    0000:00:05.0 0604: 8086:a74d (rev 01)
    	Subsystem: 17aa:230e
    	Kernel driver in use: pcieport
    0000:00:07.0 0604: 8086:a76e (rev 01)
    	Subsystem: 17aa:230e
    	Kernel driver in use: pcieport
    0000:65:00.0 0108: 144d:a822 (rev 01)
        DeviceName: PCIe SSD in Slot 0 Bay 2
        Subsystem: 1028:1fd9
        Kernel driver in use: nvme
        Kernel modules: nvme
    0000:6a:00.0 0108: 1179:0110 (rev 01)
        DeviceName: PCIe SSD in Slot 11 Bay 2
        Subsystem: 1028:1ffb
        Kernel driver in use: nvme
        Kernel modules: nvme
    Copy to Clipboard Toggle word wrap
  2. PCI デバイスを接続する仮想マシンの XML 設定を開きます。

    # virsh edit vm-name
    Copy to Clipboard Toggle word wrap
  3. 以下の <hostdev> 設定を XML ファイルの <devices> セクションに追加します。

    address 行の値を、デバイスの PCI アドレスに置き換えます。必要に応じて、デバイスが仮想マシン内で使用する PCI アドレスを変更するには、<address type="pci"> 行に別のアドレスを設定できます。

    たとえば、ホスト上のデバイスアドレスが 0000:65:00.0 で、ゲストでは 0000:02:00.0 を使用する場合は、次の設定を使用します。

    <hostdev mode="subsystem" type="pci" managed="yes">
      <driver name="vfio"/>
       <source>
        <address domain="0x0000" bus="0x65" slot="0x00" function="0x0"/>
       </source>
       <address type="pci" domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
    </hostdev>
    Copy to Clipboard Toggle word wrap
  4. オプション: IBM Z ホストでは、ゲストオペレーティングシステムが PCI デバイスを検出する方法を変更できます。これを行うには、<address> 要素に <zpci> サブ要素を追加します。<zpci> 行では、uid 値と fid 値を調整できます。これにより、ゲストオペレーティングシステムのデバイスの PCI アドレスと機能 ID が変更されます。

    <hostdev mode="subsystem" type="pci" managed="yes">
      <driver name="vfio"/>
       <source>
        <address domain="0x0000" bus="0x65" slot="0x00" function="0x0"/>
       </source>
       <address type="pci" domain='0x0000' bus='0x02' slot='0x00' function='0x0'>
         <zpci uid="0x0008" fid="0x001807"/>
       </address>
    </hostdev>
    Copy to Clipboard Toggle word wrap

    この例では、以下が適用されます。

    • uid="0x0008" は、仮想マシンのデバイスのドメイン PCI アドレスを 0008:00:00.0 に設定します。
    • fid="0x001807" は、デバイスのスロット値を 0x001807 に設定します。これにより、仮想マシンのファイルシステムのデバイス設定が /sys/bus/pci/slots/00001087/address に保存されます。

      これらの値が指定されていない場合は、libvirt がこれらの値を自動的に設定します。

  5. XML 設定を保存します。
  6. 仮想マシンが実行中の場合はシャットダウンします。

    # virsh shutdown vm-name
    Copy to Clipboard Toggle word wrap

検証

  1. 仮想マシンを起動し、ゲストオペレーティングシステムにログインします。
  2. ゲストオペレーティングシステムで、PCI デバイスがリストされていることを確認します。

    たとえば、ゲストデバイスのアドレスを 0000:02:00.0 に設定した場合は、PowerShell で次のコマンドを使用します。

    # Get-PnpDevice -PresentOnly | % { $loc=(Get-PnpDeviceProperty -InstanceId $.InstanceId -KeyName 'DEVPKEY_Device_LocationInfo' -EA SilentlyContinue).Data; if($loc -eq 'PCI bus 2, device 0, function 0'){ $ | Select Status,Class,FriendlyName,InstanceId,@{n='Location';e={$loc}} } }
    
    Status       : OK
    Class        : System
    FriendlyName : Intel(R) 100 Series/C230 Series Chipset Family PCI Express Root Port #1 - A110
    InstanceId   : PCI\VEN_8086&DEV_A110&SUBSYS_86941043&REV_F1\3&11583659&0&00
    Location     : PCI bus 2, device 0, function 0
    Copy to Clipboard Toggle word wrap

15.5. Web コンソールを使用した仮想マシンへのホストデバイスの接続

仮想マシン (VM) に特定の機能を追加するには、Web コンソールを使用してホストデバイスを仮想マシンに接続します。

前提条件

  • RHEL 10 Web コンソールがインストールされている。

    手順は、Web コンソールのインストールおよび有効化 を参照してください。

  • PCI デバイスを接続する場合は、hostdev 要素の managed 属性のステータスが yes に設定されていることを確認してください。

    注記

    PCI デバイスを仮想マシンに接続するときは、hostdev 要素の managed 属性を省略したり、no に設定したりしないでください。そうすると、PCI デバイスを仮想マシンに渡すときに、PCI デバイスがホストから自動的に接続解除されなくなります。また、仮想マシンをオフにしたときにホストに自動的に再接続することもできません。

    その結果、ホストが応答しなくなったり、予期せずシャットダウンしたりする可能性があります。

    managed 属性のステータスは、仮想マシンの XML 設定で確認できます。次の例では、example-VM-1 仮想マシンの XML 設定を開きます。

    # virsh edit example-VM-1
    Copy to Clipboard Toggle word wrap
  • 仮想マシンからの重要なデータのバックアップを作成している。
  • オプション: 仮想マシンの XML 設定をバックアップします。たとえば、example-VM-1 仮想マシンをバックアップするには、次のようにします。

    # virsh dumpxml example-VM-1 > example-VM-1.xml
    Copy to Clipboard Toggle word wrap
  • Web コンソールの仮想マシンプラグインがシステムにインストールされている

手順

  1. RHEL 10 Web コンソールにログインします。
  2. Virtual Machines インターフェイスで、ホストデバイスを接続する仮想マシンをクリックします。

    新しいページが開き、選択した仮想マシンに関する基本情報を含む Overview セクションと、仮想マシンのグラフィカルインターフェイスにアクセスするための Console セクションが表示されます。

  3. Host devices までスクロールします。

    Host devices セクションには、仮想マシンに接続されているデバイスに関する情報と、デバイスを 追加 または 削除 するためのオプションが表示されます。

  4. Add host device をクリックします。

    Add host device ダイアログが表示されます。

    Add host device ダイアログボックスを表示している画像。
  5. 仮想マシンに接続するデバイスを選択します。
  6. Add をクリックします。

    選択したデバイスが仮想マシンに接続されます。

検証

  • 仮想マシンを実行し、デバイスが Host devices セクションに表示されるかどうかを確認します。

15.6. コマンドラインを使用した仮想マシンからの 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
    [...]
    Copy to Clipboard Toggle word wrap
  2. --remove-device 引数を指定して virt-xml ユーティリティーを使用します。

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

    # virt-xml example-VM-1 --remove-device --hostdev 001.005
    Domain 'example-VM-1' defined successfully.
    Copy to Clipboard Toggle word wrap

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

検証

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

15.7. コマンドラインを使用した仮想マシンからの PCI デバイスの削除

仮想マシン (VM) から PCI デバイスを削除するには、仮想マシンの XML 設定からデバイス情報を削除します。

手順

  1. PCI デバイスが接続されている仮想マシンの XML 設定で、デバイスの設定がある <hostdev> セクションの <address domain> 行を見つけます。

    # virsh dumpxml <VM-name>
    
    [...]
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x65' slot='0x00' function='0x0'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
    </hostdev>
    [...]
    Copy to Clipboard Toggle word wrap
  2. --hostdev オプションとデバイスアドレスを指定した virsh detach-device コマンドを使用します。

    たとえば、次のコマンドは、前のステップで見つかったデバイスを永続的に削除します。

    # virt detach-device <VM-name> --hostdev 0000:65:00.0 --config
    Domain 'VM-name' defined successfully.
    Copy to Clipboard Toggle word wrap
    注記

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

  3. オプション: PCI デバイスをホストに再接続します。たとえば、次のコマンドは、前のステップで仮想マシンから削除したデバイスを再接続します。

    # virsh nodedev-reattach pci_0000_65_00_0
    Device pci_0000_65_00_0 re-attached
    Copy to Clipboard Toggle word wrap

検証

  1. 仮想マシンの XML 設定を再度表示し、デバイスの <hostdev> セクションが表示されなくなっていることを確認します。

    # virsh dumpxml <VM-name>
    Copy to Clipboard Toggle word wrap

15.8. Web コンソールを使用した仮想マシンからのホストデバイスの削除

リソースを解放するか、仮想マシンの機能を変更するか、その両方を行うには、Web コンソールを使用して仮想マシンを変更し、不要になったホストデバイスを削除します。

前提条件

  • RHEL 10 Web コンソールがインストールされている。

    手順は、Web コンソールのインストールおよび有効化 を参照してください。

  • Web コンソールの仮想マシンプラグインがシステムにインストールされている
  • オプション: virsh dumpxml example-VM-1 を使用して仮想マシンの XML 設定をバックアップし、出力をファイルに送信します。たとえば、以下は、testguest1 仮想マシンの設定のバックアップファイル testguest1.xml を作成します。

    # virsh dumpxml testguest1 > testguest1.xml
    # cat testguest1.xml
    <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
      <name>testguest1</name>
      <uuid>ede29304-fe0c-4ca4-abcd-d246481acd18</uuid>
      [...]
    </domain>
    Copy to Clipboard Toggle word wrap

手順

  1. Virtual Machines インターフェイスで、ホストデバイスを削除する仮想マシンをクリックします。

    新しいページが開き、選択した仮想マシンに関する基本情報を含む Overview セクションと、仮想マシンのグラフィカルインターフェイスにアクセスするための Console セクションが表示されます。

  2. Host devices までスクロールします。

    Host devices セクションには、仮想マシンに接続されているデバイスに関する情報と、デバイスを 追加 または 削除 するためのオプションが表示されます。

  3. 仮想マシンから削除するデバイスの横にある Remove ボタンをクリックします。

    デバイスの削除確認ダイアログが表示されます。

  4. Remove をクリックします。

    デバイスが VM から削除されます。

トラブルシューティング

  • ホストデバイスを取り外すことで、仮想マシンが起動できなくなる場合は、virsh define ユーティリティーを使用して、以前にバックアップした XML 設定ファイルを再ロードして XML 設定を復元します。

    # virsh define testguest1.xml
    Copy to Clipboard Toggle word wrap

15.9. 仮想マシンへの ISO イメージの接続

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

15.9.1. コマンドラインを使用した仮想マシンへの ISO イメージの接続

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

前提条件

  • ISO イメージのパスをホストマシンに保存してコピーしている。

手順

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

    たとえば、次のコマンドは、/home/username/Downloads ディレクトリーに保存されている example-ISO-name ISO イメージを example-VM-name 仮想マシンに接続します。

    # virt-xml example-VM-name --add-device --disk /home/username/Downloads/example-ISO-name.iso,device=cdrom
    
    Domain 'example-VM-name' defined successfully.
    Copy to Clipboard Toggle word wrap

検証

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

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

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

前提条件

  • ISO イメージをホストマシンに保存している。
  • ISO イメージへのパスを知っている。

手順

  1. ISO イメージが仮想マシンに接続されているターゲットデバイスを特定します。この情報は、仮想マシンの XML 設定ファイルにあります。

    たとえば、次のコマンドは、example-VM-name 仮想マシンの XML 設定ファイルを表示します。この場合、仮想光学ドライブのターゲットデバイスは sda です。

    # virsh dumpxml example-VM-name
    ...
    <disk>
      ...
      <source file='$(/home/username/Downloads/example-ISO-name.iso)'/>
      <target dev='sda' bus='sata'/>
      ...
    </disk>
    ...
    Copy to Clipboard Toggle word wrap
  2. --edit 引数を指定して virt-xml ユーティリティーを使用します。

    たとえば、次のコマンドは、ターゲットの sdaexample-VM-name 仮想マシンに接続されている example-ISO-name ISO イメージを、/dev/cdrom ディレクトリーに保存されている example-ISO-name-2 ISO イメージに置き換えます。

    # virt-xml example-VM-name --edit target=sda --disk /dev/cdrom/example-ISO-name-2.iso
    Domain 'example-VM-name' defined successfully.
    Copy to Clipboard Toggle word wrap

検証

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

15.9.3. コマンドラインを使用した仮想マシンからの ISO イメージの削除

仮想マシン (VM) に接続されている ISO イメージを削除するには、仮想マシンの XML 設定ファイルを編集します。

手順

  1. ISO イメージが仮想マシンに接続されているターゲットデバイスを特定します。この情報は、仮想マシンの XML 設定ファイルにあります。

    たとえば、次のコマンドは、example-VM-name 仮想マシンの XML 設定ファイルを表示します。この場合、仮想光学ドライブのターゲットデバイスは sda です。

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

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

    # virt-xml example-VM-name --remove-device --disk target=sda
    Domain 'example-VM-name' defined successfully.
    Copy to Clipboard Toggle word wrap

検証

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

15.10. Web コンソールを使用した仮想マシンへのウォッチドッグデバイスの接続

仮想マシン (VM) が応答を停止したときに指定されたアクションを強制的に実行するには、仮想ウォッチドッグデバイスを仮想マシンに接続します。

前提条件

手順

  1. コマンドラインでウォッチドッグサービスをインストールします。

    # dnf install watchdog

  2. 仮想マシンをシャットダウンしている。
  3. ウォッチドッグサービスを仮想マシンに追加します。

    # virt-xml vmname --add-device --watchdog action=reset --update

  4. 仮想マシンを実行します。
  5. RHEL 10 Web コンソールにログインします。
  6. Web コンソールの Virtual Machines インターフェイスで、ウォッチドッグデバイスを追加する仮想マシンをクリックします。
  7. 概要ペインの Watchdog フィールドの横にある add をクリックします。

    Add watchdog device type ダイアログが表示されます。

  8. 仮想マシンが応答を停止した場合にウォッチドッグデバイスが実行するアクションを選択します。
  9. Add をクリックします。

検証

  • 選択したアクションは、Overview ペインの Watchdog フィールドの横に表示されます。

第16章 仮想マシンのネットワーク接続の設定

ホストや、ホスト上の他の仮想マシン、外部ネットワークの場所に、ネットワーク経由で仮想マシンを接続する場合には、仮想マシンネットワークをそれぞれに合わせて設定する必要があります。仮想マシンのネットワークを提供するために、RHEL 10 ハイパーバイザーと新しく作成された仮想マシンには、デフォルトのネットワーク設定があります。この設定はさらに変更することができます。以下に例を示します。

  • 仮想マシンがホストと同じネットワーク上にあるかのように、ホスト上の仮想マシンを検出し、ホスト外の場所に接続できます。
  • 仮想マシンを受信ネットワークトラフィックから部分的に分離するか、完全に分離して、セキュリティーを強化し、仮想マシンに影響を及ぼすリスクを最小限に抑えることができます。

16.1. 仮想ネットワークの概要

仮想マシン (VM) をネットワーク上の他のデバイスや場所に接続することは、ホストのハードウェアによって支えられています。仮想マシンのネットワーク接続のメカニズムとデフォルトの仮想マシンネットワーク設定の詳細は、以下のセクションを参照してください。

16.1.1. 仮想ネットワークの仕組み

仮想ネットワークは、仮想ネットワークスイッチの概念を使用します。仮想ネットワークスイッチは、ホストマシンで動作するソフトウエア設定です。仮想マシンは、仮想ネットワークスイッチを介してネットワークに接続します。仮想スイッチの設定に基づいて、仮想マシンはハイパーバイザーによって管理される既存の仮想ネットワーク、または別のネットワーク接続メソッドを使用できます。

以下の図は、2 つの仮想マシンをネットワークに接続する仮想ネットワークスイッチを示しています。

vn 02 スイッチおよび 2 台のゲスト

ゲストオペレーティングシステムの視点から見ると、仮想ネットワーク接続は物理ネットワーク接続と同じです。ホストのマシンサーバーは、仮想ネットワークスイッチをネットワークインターフェイスとして表示します。virtnetworkd サービスを最初にインストールして起動すると、仮想マシンのデフォルトのネットワークインターフェイスである 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.0.2.1/24 brd 192.0.2.255 scope global virbr0
Copy to Clipboard Toggle word wrap

デフォルトでは、1 台のホストにあるすべての仮想マシンが、virbr0 インターフェイスを使用する default という名前の同じ NAT タイプ の仮想ネットワークに接続されています。詳細は、デフォルトの仮想ネットワーク設定 を参照してください。

仮想マシンからの基本的なアウトバウンドのみのネットワークアクセスでは、デフォルトのネットワークが libvirt-daemon-config-network パッケージと一緒にインストールされ、virtnetworkd サービスが起動すると自動的に開始するため、通常は追加のネットワーク設定は必要ありません。

別の仮想マシンのネットワーク機能が必要な場合は、仮想ネットワークおよびネットワークインターフェイスを追加で作成し、仮想マシンがその機能を使用するように設定できます。デフォルトの NAT に加えて、これらのネットワークとインターフェイスは以下のいずれかのモードを使用するように設定できます。

16.1.2. デフォルトの仮想マシンネットワーク設定

仮想化ホストに virtnetworkd サービスが最初にインストールされる際、これにはネットワークアドレス変換 (NAT) モードの仮想ネットワークの初期設定が含まれます。デフォルトでは、1 台のホストにあるすべての仮想マシンが、同じ libvirt 仮想ネットワーク (default) に接続されています。このネットワーク上の仮想マシンは、ホスト上およびホスト外のネットワーク上の場所の両方に接続できますが、以下の制限があります。

  • ネットワーク上の仮想マシンはホストと、ホスト上の他の仮想マシンに表示されますが、ネットワークトラフィックはゲストオペレーティングシステムのネットワークスタックのファイアウォールと、ゲストインターフェイスに接続されている libvirt ネットワークフィルタールールの影響を受けます。
  • ネットワーク上の仮想マシンは、ホスト外の場所に接続可能ですが、表示されません。送信トラフィックは NAT ルールおよびホストシステムのファイアウォールの影響を受けます。

以下の図は、仮想マシンのデフォルトのネットワーク設定を示しています。

vn 08 ネットワークの概要

16.2. 仮想マシンのネットワーク接続の種類

仮想マシンのネットワークプロパティーと動作を変更するには、仮想マシンが使用する仮想ネットワークまたはインターフェイスの種類を変更します。RHEL 10 の仮想マシンでは、次の接続の種類から選択できます。

16.2.1. ネットワークアドレス変換のある仮想ネットワーク

デフォルトでは、仮想ネットワークスイッチはネットワークアドレス変換 (NAT) モードで動作します。Source-NAT (SNAT) または Destination-NAT (DNAT) の代わりに IP マスカレードを使用します。IP マスカレードで接続されている仮想マシンは、外部ネットワークとの通信にホストマシンの IP アドレスを使用できるようになります。ホスト外のコンピューターは、仮想ネットワークスイッチが NAT モードで動作している場合に、ホスト内部の仮想マシンと通信ができません。

vn 04 NAT スイッチを使用するホスト
警告

仮想ネットワークスイッチは、ファイアウォールルールで設定された NAT を使用します。スイッチの実行中にこのルールを編集することは推奨されていません。誤ったルールがあると、スイッチが通信できなくなる可能性があるためです。

16.2.2. ルーティングモードの仮想ネットワーク

ルーティング モードを使用する場合は、仮想スイッチを、ホストマシンに接続された物理 LAN に接続し、NAT を使用せずにトラフィックをやり取りします。仮想スイッチは、すべてのトラフィックを調べ、ネットワークパケットに含まれる情報を使用して、ルーティングの決定を行うことができます。このモードを使用すると、仮想マシンはすべて 1 つのサブネット内に入り、ホストマシンから分離されます。仮想マシンサブネットは、ホストマシンにある仮想スイッチを介してルーティングされます。これにより、着信接続が有効になりますが、外部ネットワークのシステムに追加のルーティングテーブルエントリーが必要になります。

ルーティングモードは、IP アドレスベースのルーティングを使用します。

vn 06 ルーティングスイッチ

ルーティングモードを使用する一般的なトポロジーは、仮想サーバーホスティング (VSH) です。VSH プロバイダーには複数のホストマシンがあり、それぞれに 2 つの物理ネットワーク接続がある場合があります。管理とアカウンティングにはいずれかのインターフェイスが使用されており、もう 1 つは仮想マシンによる接続に使用されます。各仮想マシンには独自のパブリック IP アドレスがありますが、ホストマシンはプライベート IP アドレスを使用するため、内部管理者のみが仮想マシンを管理できます。

vn 10 ルーティングモードのデータセンター

16.2.3. ブリッジモードの仮想ネットワーク

ほとんどの仮想マシンネットワークモードでは、仮想マシンが自動的に virbr0 仮想ブリッジを作成して接続します。一方、ブリッジ モードでは、仮想マシンはホストの既存の Linux ブリッジに接続します。これにより、仮想マシンが物理ネットワークに直接表示されます。これにより、着信接続が有効になりますが、追加のルーティングテーブルエントリーは必要ありません。

ブリッジモードは、MAC アドレスをベースにした接続スイッチを使用します。

VN ブリッジモードダイアグラム

ブリッジモードでは、仮想マシンがホストマシンと同じサブネットに表示されます。同じ物理ネットワーク上にある他の物理マシンはすべて、仮想マシンを検出してアクセスできます。

ブリッジネットワークボンディング

ハイパーバイザーで複数の物理ブリッジインターフェイスを使用する場合は、ボンドで複数のインターフェイスを結合します。ボンドをブリッジに追加すると、仮想マシンをブリッジに追加できるようになります。ただし、ボンディングドライバーにはいくつかの動作モードがあり、このモードのすべてが、仮想マシンが使用されているブリッジで機能するわけではありません。

ボンディングモード 1、2、4 が使用可能です。

対照的に、モード 0、3、5、または 6 を使用すると、接続が失敗する可能性が高くなります。また、アドレス解決プロトコル (ARP) の監視が正しく機能しないため、MII (Media-Independent Interface) 監視を使用してボンディングモードを監視する必要があります。

ボンディングモードの詳細は、Red Hat ナレッジベースソリューション Which bonding modes work when used with a bridge that virtual machine guests or containers connect to? を参照してください。

一般的なシナリオ

ブリッジモードにおける最も一般的なユースケースには、たとえば以下のようなものがあります。

  • 既存のネットワークにホストマシンとともに仮想マシンをデプロイし、仮想マシンと物理マシンの違いをユーザーに見えないようにする。
  • 既存の物理ネットワーク設定を変更せずに仮想マシンをデプロイする。
  • 既存の物理ネットワークから簡単にアクセスできる必要がある仮想マシンをデプロイする。また、DHCP サービスにアクセスする必要のある物理ネットワークに仮想マシンを配置する。
  • 仮想 LAN (VLAN) が使用されている既存のネットワークに仮想マシンを接続する。
  • 非武装地帯 (DMZ) ネットワーク。仮想マシンを使用した DMZ デプロイメントの場合、Red Hat は、物理ネットワークのルーターとスイッチで DMZ を設定し、ブリッジモードを使用して仮想マシンを物理ネットワークに接続することを推奨しています。

16.2.4. 分離モードの仮想ネットワーク

分離 モードを使用すると、仮想スイッチに接続されている仮想マシンは相互に通信でき、ホストマシンとも通信できますが、トラフィックはホストマシンの外部を通過せず、ホストマシンの外部からトラフィックを受信することができません。DHCP などの基本的な機能には、このモードの dnsmasq を使用する必要があります。

vn 07 分離スイッチ

16.2.5. オープンモードの仮想ネットワーク

ネットワークに オープン モードを使用する場合、libvirt はネットワークにファイアウォールルールを生成しません。したがって、libvirt はホストが提供するファイアウォールルールを上書きせず、仮想マシンのファイアウォールルールを手動で管理できます。

16.2.6. 仮想マシンの接続タイプの比較

以下の表では、選択したタイプの仮想マシンネットワーク設定が接続できる場所と、表示できる内容を示します。

Expand
表16.1 仮想マシンの接続タイプ
 ホストへの接続ホスト上の他の仮想マシンへの接続外部ロケーションへの接続外部の場所に表示可能か

ブリッジモード

はい

はい

はい

はい

NAT

はい

はい

はい

いいえ

ルーティングモード

はい

はい

はい

はい

分離モード

はい

はい

いいえ

いいえ

オープンモード

ホストのファイアウォールルールにより異なります。

16.3. 外部に表示される仮想マシンの設定

多くの場合、デフォルトの仮想マシンのネットワーク設定だけで十分です。しかし、設定を調整する必要がある場合は、コマンドライン (CLI) または RHEL 10 Web コンソールを使用して調整できます。

16.3.1. コマンドラインを使用した外部に表示される仮想マシンの設定

デフォルトでは、新規作成された仮想マシンは、NAT タイプのネットワークに接続されます。このネットワークは、ホストのデフォルトの仮想ブリッジである virbr0 を使用します。これにより、仮想マシンはホストのネットワークインターフェイスコントローラー (NIC) を使用して外部ネットワークに接続できますが、外部システムから仮想マシンには到達できません。

仮想マシンをハイパーバイザーと同じ外部ネットワークに表示する必要がある場合は、代わりに ブリッジモード を使用する必要があります。これには、仮想マシンを、ハイパーバイザーの物理ネットワークデバイスに接続されているブリッジデバイスに割り当てます。

前提条件

  • デフォルトの NAT 設定を持つ 既存の仮想マシン のシャットダウン。
  • ハイパーバイザーの IP 設定。これは、ホストのネットワーク接続によって異なります。たとえば、以下の手順では、イーサネットケーブルを使用してホストがネットワークに接続され、ホストの物理 NIC MAC アドレスが DHCP サーバーの静的 IP に割り当てられるシナリオを使用します。したがって、イーサネットインターフェイスはハイパーバイザー IP として扱われます。

    イーサネットインターフェイスの IP 設定を取得するには、ip addr ユーティリティーを使用します。

    # ip addr
    [...]
    enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
        link/ether 54:ee:75:49:dc:46 brd ff:ff:ff:ff:ff:ff
        inet 192.0.2.1/24 brd 192.0.2.255 scope global dynamic noprefixroute enp0s25
    Copy to Clipboard Toggle word wrap

手順

  1. ホスト上の物理インターフェイスのブリッジ接続を作成して設定します。手順は、ネットワークブリッジの設定 を参照してください。

    静的 IP 割り当てが使用されるシナリオでは、物理イーサネットインターフェイスの IPv4 設定をブリッジインターフェイスに移行する必要があることに注意してください。

  2. 作成したブリッジインターフェイスを使用するように仮想マシンのネットワークを変更します。たとえば、以下のコマンドは、bridge0 を使用するように testguest を設定します。

    # virt-xml testguest --edit --network bridge=bridge0
    Domain 'testguest' defined successfully.
    Copy to Clipboard Toggle word wrap
  3. 仮想マシンを起動します。

    # virsh start testguest
    Copy to Clipboard Toggle word wrap
  4. ゲストオペレーティングシステムで、仮想マシンがハイパーバイザーと同じネットワーク内の別の物理システムであるかのように、システムのネットワークインターフェイスの IP および DHCP 設定を調整します。

    具体的な手順は、仮想マシンで使用されるゲストオペレーティングシステムによって異なります。たとえば、ゲストオペレーティングシステムが RHEL 10 の場合は、イーサネット接続の設定 を参照してください。

検証

  1. 新たに作成されたブリッジが実行中で、ホストの物理インターフェイスと仮想マシンのインターフェイスの両方が含まれていることを確認します。

    # ip link show master bridge0
    2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bridge0 state UP mode DEFAULT group default qlen 1000
        link/ether 54:ee:75:49:dc:46 brd ff:ff:ff:ff:ff:ff
    10: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bridge0 state UNKNOWN mode DEFAULT group default qlen 1000
        link/ether fe:54:00:89:15:40 brd ff:ff:ff:ff:ff:ff
    Copy to Clipboard Toggle word wrap
  2. 仮想マシンがハイパーバイザーと同じ外部ネットワークに表示されることを確認します。

    1. ゲストオペレーティングシステムで、システムのネットワーク ID を取得します。たとえば、これが Linux ゲストの場合は、次のコマンドを実行します。

      # ip addr
      [...]
      enp0s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
          link/ether 52:54:00:09:15:46 brd ff:ff:ff:ff:ff:ff
          inet 192.0.2.1/24 brd 192.0.2.255 scope global dynamic noprefixroute enp0s0
      Copy to Clipboard Toggle word wrap
    2. ローカルネットワークに接続された外部システムから、取得した ID を使用して仮想マシンに接続します。

      # ssh root@192.0.2.1
      root@192.0.2.1's password:
      Last login: Mon Sep 24 12:05:36 2019
      root~#*
      Copy to Clipboard Toggle word wrap

      接続が機能している場合にはネットワークが正常に設定されています。

トラブルシューティング

  • 仮想マシンがクライアントでホストされる間に、クライアントからサイトへの VPN を使用するなどの特定の状況では、外部ロケーションで仮想マシンを利用可能にするブリッジモードを使用することはできません。

    この問題を回避するには、仮想マシンの nftables を使用して宛先 NAT を設定 します。

16.3.2. Web コンソールを使用した外部に表示される仮想マシンの設定

デフォルトでは、新規作成された仮想マシンは、NAT タイプのネットワークに接続されます。このネットワークは、ホストのデフォルトの仮想ブリッジである virbr0 を使用します。これにより、仮想マシンはホストのネットワークインターフェイスコントローラー (NIC) を使用して外部ネットワークに接続できますが、外部システムから仮想マシンには到達できません。

仮想マシンをハイパーバイザーと同じ外部ネットワークに表示する必要がある場合は、代わりに ブリッジモード を使用する必要があります。これには、仮想マシンを、ハイパーバイザーの物理ネットワークデバイスに接続されているブリッジデバイスに割り当てます。RHEL 10 Web コンソールを使用してこれを行うには、以下の手順に従います。

前提条件

  • RHEL 10 Web コンソールがインストールされている。

    手順は、Web コンソールのインストールおよび有効化 を参照してください。

  • Web コンソールの仮想マシンプラグインが システムにインストールされている
  • デフォルトの NAT 設定を持つ 既存の仮想マシン のシャットダウン。
  • ハイパーバイザーの IP 設定。これは、ホストのネットワーク接続によって異なります。たとえば、以下の手順では、イーサネットケーブルを使用してホストがネットワークに接続され、ホストの物理 NIC MAC アドレスが DHCP サーバーの静的 IP に割り当てられるシナリオを使用します。したがって、イーサネットインターフェイスはハイパーバイザー IP として扱われます。

    イーサネットインターフェイスの IP 設定を取得するには、Web コンソールの Networking タブに移動し、Interfaces セクションを確認します。

手順

  1. ホスト上の物理インターフェイスのブリッジ接続を作成して設定します。手順は、Web コンソールでのネットワークブリッジの設定 を参照してください。

    静的 IP 割り当てが使用されるシナリオでは、物理イーサネットインターフェイスの IPv4 設定をブリッジインターフェイスに移行する必要があることに注意してください。

  2. ブリッジインターフェイスを使用するように仮想マシンのネットワークを変更します。仮想マシンの Network Interfaces タブで次の操作を行います。

    1. Add Network Interface をクリックします。
    2. Add Virtual Network Interface ダイアログで、以下を設定します。

      • Interface Type: Bridge to LAN
      • Source: 新しく作成するブリッジ (例: bridge0)
    3. Add をクリックします。
    4. オプション: 仮想マシンに接続されている他のすべてのインターフェイスの Unplug をクリックします。
  3. 実行 をクリックして、仮想マシンを起動します。
  4. ゲストオペレーティングシステムで、仮想マシンがハイパーバイザーと同じネットワーク内の別の物理システムであるかのように、システムのネットワークインターフェイスの IP および DHCP 設定を調整します。

    具体的な手順は、仮想マシンで使用されるゲストオペレーティングシステムによって異なります。たとえば、ゲストオペレーティングシステムが RHEL 10 の場合は、イーサネット接続の設定 を参照してください。

検証

  1. ホストの Web コンソールの Networking タブで、新たに作成されたブリッジがある行をクリックして、ホストの物理インターフェイスと仮想マシンのインターフェイスの両方が含まれていることを確認します。
  2. 仮想マシンがハイパーバイザーと同じ外部ネットワークに表示されることを確認します。

    1. ゲストオペレーティングシステムで、システムのネットワーク ID を取得します。たとえば、これが Linux ゲストの場合は、次のコマンドを実行します。

      # ip addr
      [...]
      enp0s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
          link/ether 52:54:00:09:15:46 brd ff:ff:ff:ff:ff:ff
          inet 192.0.2.1/24 brd 192.0.2.255 scope global dynamic noprefixroute enp0s0
      Copy to Clipboard Toggle word wrap
    2. ローカルネットワークに接続された外部システムから、取得した ID を使用して仮想マシンに接続します。

      # ssh root@192.0.2.1
      root@192.0.2.1's password:
      Last login: Mon Sep 24 12:05:36 2019
      root~#*
      Copy to Clipboard Toggle word wrap

      接続が機能している場合にはネットワークが正常に設定されています。

トラブルシューティング

  • 仮想マシンがクライアントでホストされる間に、クライアントからサイトへの VPN を使用するなどの特定の状況では、外部ロケーションで仮想マシンを利用可能にするブリッジモードを使用することはできません。

16.3.3. macvtap 接続の置き換え

macvtap は、仮想ネットワークインターフェイスを作成する Linux ネットワークデバイスドライバーです。これにより、仮想マシンがホストマシン上の物理ネットワークインターフェイスに直接アクセスできるようになります。macvtap 接続の使用は RHEL 10 でサポートされています。

ただし、他の利用可能な仮想マシン (VM) ネットワーク設定と比較すると、macvtap のパフォーマンスは最適ではなく、正しく設定するのがより困難です。したがって、ユースケースで macvtap が明示的に必要とされない場合は、サポートされている別のネットワーク設定を使用してください。

仮想マシンで macvtap モードを使用している場合は、代わりに次のネットワーク設定を使用することを検討してください。

  • macvtap ブリッジモードの代わりに、Linux ブリッジ 設定を使用します。
  • macvtap パススルーモードの代わりに、PCI パススルー を使用します。

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

RHEL 10 Web コンソールを使用して、Web コンソールが接続されている仮想マシンの仮想ネットワークインターフェイスを管理できます。

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

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

前提条件

手順

  1. RHEL 10 Web コンソールにログインします。
  2. 仮想マシン インターフェイスで、情報を表示する仮想マシンを選択します。

    新しいページが開き、選択した仮想マシンに関する基本情報を含む Overview セクションと、仮想マシンのグラフィカルインターフェイスにアクセスするための Console セクションが表示されます。

  3. Network Interfaces までスクロールします。

    Networks Interfaces セクションには、仮想マシンに設定されている仮想ネットワークインターフェイスに関する情報と、ネットワークインターフェイスの AddDeleteEdit、または Unplug オプションが表示されます。

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

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

      注記

      汎用イーサネット接続は、RHEL 10 以降ではサポートされていません。

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

    注記

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

    また、MAC アドレスは、仮想マシンがシャットダウンしている場合にのみ変更できます。

16.4.2. Web コンソールでの仮想ネットワークインターフェイスの追加および接続

RHEL 10 Web コンソールを使用して、仮想ネットワークインターフェイスを作成し、これに仮想マシン (VM) を接続できます。

前提条件

手順

  1. RHEL 10 Web コンソールにログインします。
  2. 仮想マシン インターフェイスで、情報を表示する仮想マシンを選択します。

    新しいページが開き、選択した仮想マシンに関する基本情報を含む Overview セクションと、仮想マシンのグラフィカルインターフェイスにアクセスするための Console セクションが表示されます。

  3. Network Interfaces までスクロールします。

    Networks Interfaces セクションには、仮想マシンに設定されている仮想ネットワークインターフェイスに関する情報と、ネットワークインターフェイスの AddEdit、または Plug オプションが表示されます。

  4. 接続する仮想ネットワークインターフェイスの行にある Plug をクリックします。

    選択した仮想ネットワークインターフェイスが仮想マシンに接続します。

16.4.3. Web コンソールでの仮想ネットワークインターフェイスの接続解除および削除

RHEL 10 Web コンソールを使用して、選択した仮想マシン (VM) に接続されている仮想ネットワークインターフェイスを接続解除できます。

前提条件

手順

  1. RHEL 10 Web コンソールにログインします。
  2. 仮想マシン インターフェイスで、情報を表示する仮想マシンを選択します。

    新しいページが開き、選択した仮想マシンに関する基本情報を含む Overview セクションと、仮想マシンのグラフィカルインターフェイスにアクセスするための Console セクションが表示されます。

  3. Network Interfaces までスクロールします。

    Networks Interfaces セクションには、仮想マシンに設定されている仮想ネットワークインターフェイスに関する情報と、ネットワークインターフェイスの AddDeleteEdit、または Unplug オプションが表示されます。

  4. 切断する仮想ネットワークインターフェイスの行で アンプラグ をクリックします。

    選択した仮想ネットワークインターフェイスが仮想マシンから切断されます。

16.5. SR-IOV ネットワークデバイスの管理

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

16.5.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 は、物理ネットワークカードがホストシステムに表示されるのと同じように、割り当てられた仮想マシンへのネットワークカードとして表示されます。

図16.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 が割り当てたデバイスには仮想マシンのメモリーの固定 (ピニング) が必要になるため、仮想マシンのメモリー消費が増加し、仮想マシンのメモリーバルーンが使用できなくなります。

16.5.2. 仮想マシンへの SR-IOV ネットワークデバイスの割り当て

SR-IOV ネットワークデバイスを仮想マシン (VM) にアタッチするには、ホスト上の SR-IOV 対応ネットワークインターフェイスから Virtual Function (VF) を作成し、その 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
    [...]
    Copy to Clipboard Toggle word wrap
  • 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
    Copy to Clipboard Toggle word wrap
  • SR-IOV デバイス割り当てを有効にするには、ホスト BIOS およびカーネルで IOMMU 機能を有効にする必要があります。これを行うには、以下を行います。

    • Intel ホストで VT-d を有効にします。

      1. intel_iommu=on および iommu=pt パラメーターを使用して GRUB 設定を再生成します。

        # grubby --args="intel_iommu=on iommu=pt" --update-kernel=ALL
        Copy to Clipboard Toggle word wrap
      2. ホストを再起動します。
    • AMD ホストで、AMD-Vi を有効にします。

      1. iommu=pt パラメーターで GRUB 設定を再生成します。

        # grubby --args="iommu=pt" --update-kernel=ALL
        Copy to Clipboard Toggle word wrap
      2. ホストを再起動します。

手順

  1. オプション: ネットワークデバイスで使用できる VF の最大数を確認します。これを実行するには、次のコマンドを使用して、eth1 を SR-IOV 互換のネットワークデバイスに置き換えます。

    # cat /sys/class/net/eth1/device/sriov_totalvfs
    7
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行して、Virtual Function (VF) を作成します。

    # echo VF-number > /sys/class/net/network-interface/device/sriov_numvfs
    Copy to Clipboard Toggle word wrap

    上記コマンドでは、以下のようになります。

    • VF-number には、PF に作成する VF の数を入力します。
    • network-interface は、VF が作成されるネットワークインターフェイスの名前に置き換えます。

    以下の例では、eth1 ネットワークインターフェイスから 2 つの VF を作成します。

    # echo 2 > /sys/class/net/eth1/device/sriov_numvfs
    Copy to Clipboard Toggle word wrap
  3. VF が追加されたことを確認します。

    # lspci | grep Ethernet
    82:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
    82:00.1 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
    82:10.0 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)
    82:10.2 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)
    Copy to Clipboard Toggle word wrap
  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"
    Copy to Clipboard Toggle word wrap

    これにより、ホストの起動時に ixgbe ドライバーを使用する 2 つの VF が eth1 インターフェイスで自動的に利用できるようになります。永続的な SR-IOV デバイスが必要ない場合は、この手順を省略します。

    警告

    現在、Broadcom NetXtreme II BCM57810 アダプターで VF を永続化しようとすると、上記の設定が正しく機能しません。また、このアダプターに基づく VF を Windows 仮想マシンに接続することは、現在信頼性がありません。

  5. 新しく追加した VF インターフェイスデバイスの 1 つを、実行中の仮想マシンにホットプラグします。

    # virsh attach-interface <vm_name> hostdev 0000:82:10.0 --mac 52:54:00:00:01:01 --managed --live --config
    Copy to Clipboard Toggle word wrap

    --live オプションは、再起動後まで設定を維持することなく、実行中の仮想マシンにデバイスを接続します。--config オプションは、設定の変更を永続化します。シャットダウンした仮想マシンにデバイスを接続する場合は、--live オプションを使用しないでください。

    --mac オプションは、接続するインターフェイスの MAC アドレスを指定します。インターフェイスの MAC アドレスを指定しない場合、52:54:00 で始まる永続的な疑似ランダムアドレスが仮想マシンによって自動的に生成されます。

    重要

    仮想マシンの XML 設定ファイルの <hostdev> セクションにデバイスエントリーを手動で追加して SR-IOV VF を仮想マシンに割り当てる場合、MAC アドレスが永続的に割り当てられず、通常、ホストを再起動するたびにゲストのネットワーク設定を再設定する必要があります。

    このような複雑化を回避するには、この手順で説明されているように、virsh attach-interface コマンドを使用してください。

検証

  • 手順が成功すると、ゲストオペレーティングシステムが新しいネットワークインターフェイスコントローラーを検出します。

16.5.3. SR-IOV 割り当てに対応しているデバイス

すべてのデバイスを SR-IOV に使用できるわけではありません。以下のデバイスは、RHEL 10 の SR-IOV との互換性がテストおよび検証されています。

ネットワークデバイス

  • Intel 82599ES 10 Gigabit Ethernet Controller - ixgbe ドライバーを使用します。
  • Intel Ethernet Controller XL710 Series - i40e ドライバーを使用します。
  • Intel Ethernet Network Adapter XXV710 - i40e ドライバーを使用します。
  • Intel 82576 Gigabit Ethernet Controller - igb ドライバーを使用します。
  • Broadcom NetXtreme II BCM57810 - bnx2x ドライバーを使用します。
  • Ethernet Controller E810-C for QSFP - ice ドライバーを使用します。
  • SFC9220 10/40G Ethernet Controller - sfc ドライバーを使用します。
  • FastLinQ QL41000 Series 10/25/40/50GbE Controller - qede ドライバーを使用します。
  • Mellanox MT27710 イーサネットアダプターカード
  • Mellanox MT2892 ファミリー [ConnectX-6 Dx]
  • Mellanox MT2910 [ConnextX-7]

16.6. PXE サーバーからの仮想マシンの起動

PXE (Preboot Execution Environment) を使用する仮想マシンは、ネットワークから起動して設定を読み込むことができます。libvirt を使用すると、仮想ネットワークまたはブリッジネットワーク上の PXE サーバーから仮想マシンを起動できます。

警告

以下の手順は、例としてのみ提供されます。続行する前に、十分なバックアップがあることを確認してください。

16.6.1. 仮想ネットワークでの PXE ブートサーバーの設定

Preboot Execution Environment (PXE) を提供するように libvirt 仮想ネットワークを設定できます。これにより、ホストの仮想マシンを、仮想ネットワークで利用可能な起動イメージから起動するように設定できます。

前提条件

  • 次のようなローカルの PXE サーバー (DHCP および TFTP)

    • libvirt 内部サーバー
    • 手動で設定した dhcpd および tftpd
    • dnsmasq
    • Cobbler サーバー
  • Cobbler が設定した PXELINUX など、または手動で設定した PXE 起動イメージ。

手順

  1. PXE ブートイメージおよび設定を /var/lib/tftpboot フォルダーに置きます。
  2. フォルダーのパーミッションを設定する:

    # chmod -R a+r /var/lib/tftpboot
    Copy to Clipboard Toggle word wrap
  3. フォルダーの所有権を設定する:

    # chown -R nobody: /var/lib/tftpboot
    Copy to Clipboard Toggle word wrap
  4. SELinux コンテキストを更新します。

    # chcon -R --reference /usr/sbin/dnsmasq /var/lib/tftpboot
    # chcon -R --reference /usr/libexec/libvirt_leaseshelper /var/lib/tftpboot
    Copy to Clipboard Toggle word wrap
  5. 仮想ネットワークをシャットダウンします。

    # virsh net-destroy default
    Copy to Clipboard Toggle word wrap
  6. デフォルトエディターで仮想ネットワーク設定ファイルを開きます。

    # virsh net-edit default
    Copy to Clipboard Toggle word wrap
  7. <ip> 要素を編集して、適切なアドレス、ネットワークマスク、DHCP アドレス範囲、および起動ファイルを追加します。example-pxelinux は、ブートイメージファイルの名前になります。

    <ip address='192.0.2.1' netmask='255.255.255.0'>
       <tftp root='/var/lib/tftpboot'/>
       <dhcp>
          <range start='192.0.2.2' end='192.0.2.254' />
          <bootp file='example-pxelinux'/>
       </dhcp>
    </ip>
    Copy to Clipboard Toggle word wrap
  8. 仮想ネットワークを起動します。

    # virsh net-start default
    Copy to Clipboard Toggle word wrap

検証

  • default 仮想ネットワークが有効であることを確認します。

    # virsh net-list
    Name             State    Autostart   Persistent
    ---------------------------------------------------
    default          active   no          no
    Copy to Clipboard Toggle word wrap

16.6.2. PXE および仮想ネットワークを使用した仮想マシンの起動

仮想ネットワークで利用可能な PXE (Preboot Execution Environment) サーバーから仮想マシンを起動するには、PXE ブートを有効にする必要があります。

前提条件

手順

  • PXE 起動が有効になっている新しい仮想マシンを作成します。たとえば、default 仮想ネットワークで利用可能な PXE から、新しい 10 GB の QCOW2 イメージファイルにインストールするには、次のコマンドを実行します。

    # virt-install --pxe --network network=default --memory 2048 --vcpus 2 --disk size=10
    Copy to Clipboard Toggle word wrap
    • または、既存の仮想マシンの XML 設定ファイルを手動で編集できます。これを行うには、ゲストネットワークが仮想ネットワークを使用するように設定され、ネットワークがプライマリーブートデバイスとして設定されていることを確認します。

      <interface type='network'>
         <mac address='52:54:00:66:79:14'/>
         <source network='default'/>
         <target dev='vnet0'/>
         <alias name='net0'/>
         <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
         <boot order='1'/>
      </interface>
      Copy to Clipboard Toggle word wrap

検証

  • virsh start コマンドを使用して仮想マシンを起動します。PXE が正しく設定されていると、仮想マシンは、PXE サーバーで利用可能な起動イメージから起動します。

16.6.3. PXE およびブリッジネットワークを使用した仮想マシンの起動

ブリッジネットワークで利用可能な PXE (Preboot Execution Environment) サーバーから仮想マシンを起動するには、PXE ブートを有効にする必要があります。

前提条件

  • ネットワークブリッジが有効になっている。
  • ブリッジネットワークでは、PXE ブートサーバーが利用できます。

手順

  • PXE 起動が有効になっている新しい仮想マシンを作成します。たとえば、breth0 ブリッジネットワークで利用可能な PXE から、新しい 10 GB の QCOW2 イメージファイルにインストールするには、次のコマンドを実行します。

    # virt-install --pxe --network bridge=breth0 --memory 2048 --vcpus 2 --disk size=10
    Copy to Clipboard Toggle word wrap
    • または、既存の仮想マシンの XML 設定ファイルを手動で編集できます。これを行うには、仮想マシンがブリッジネットワークで設定され、ネットワークがプライマリーブートデバイスとして設定されていることを確認します。

      <interface type='bridge'>
         <mac address='52:54:00:5a:ad:cb'/>
         <source bridge='breth0'/>
         <target dev='vnet0'/>
         <alias name='net0'/>
         <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
         <boot order='1'/>
      </interface>
      Copy to Clipboard Toggle word wrap

検証

  • virsh start コマンドを使用して仮想マシンを起動します。PXE が正しく設定されていると、仮想マシンは、PXE サーバーで利用可能な起動イメージから起動します。

ネットワークブリッジは、仮想マシンをホストと同じネットワークに接続します。あるホスト上の仮想マシンを、別のホストや別のホスト上の仮想マシンに接続する場合は、ブリッジによってそれらの間の通信が確立されます。ただし、ブリッジはフェイルオーバーメカニズムを備えていません。

通信障害に対処するには、ネットワークボンディングによって、ネットワークインターフェイスの障害発生時に通信を処理します。フォールトトレランスと冗長性を確保するために、active-backup ボンディングメカニズムにより、ボンディング内で 1 つポートだけがアクティブであると判断されます。このとき、スイッチ設定は不要です。アクティブポートに障害が発生した場合、代替ポートがアクティブになり、ネットワーク内に設定されている仮想マシン間の通信が維持されます。

コマンドラインでネットワークボンディングを設定するには、nmcli ユーティリティーを使用します。

前提条件

  • サーバーに 2 台以上の物理デバイスがインストールされていて、それらが NetworkManager 接続プロファイルに設定されていない。

手順

  1. ボンドインターフェイスを作成します。

    # nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup"
    Copy to Clipboard Toggle word wrap

    このコマンドは、active-backup モードを使用する bond0 という名前のボンディングを作成します。

  2. イーサネットインターフェイスをボンディングに割り当てます。

    # nmcli connection add type ethernet slave-type bond con-name bond0-port1 ifname enp7s0 master bond0
    # nmcli connection add type ethernet slave-type bond con-name bond0-port2 ifname enp8s0 master bond0
    Copy to Clipboard Toggle word wrap

    これらのコマンドは、enp7s0 および enp8s0 のプロファイルを作成し、bond0 接続に追加します。

  3. IPv4 を設定します。

    • DHCP を使用するために必要な操作はありません。
    • 静的 IPv4 アドレス、ネットワークマスク、デフォルトゲートウェイ、および DNS サーバーを bond0 接続に設定するには、次のように実行します。

      # nmcli connection modify bond0 ipv4.addresses 192.0.2.1/24 ipv4.gateway 192.0.2.254 ipv4.dns 192.0.2.253 ipv4.dns-search example.com ipv4.method manual
      Copy to Clipboard Toggle word wrap
  4. IPv6 設定を行います。

    • ステートレスアドレス自動設定 (SLAAC) を使用する場合、アクションは必要ありません。
    • 静的 IPv6 アドレス、ネットワークマスク、デフォルトゲートウェイ、および DNS サーバーを bond0 接続に設定するには、次のように実行します。

      # nmcli connection modify bond0 ipv6.addresses 2001:db8:1::1/64 ipv6.gateway 2001:db8:1::fffe ipv6.dns 2001:db8:1::fffd ipv6.dns-search example.com ipv6.method manual
      Copy to Clipboard Toggle word wrap
  5. オプション: ボンディングポートにパラメーターを設定する場合は、次のコマンドを使用します。

    # nmcli connection modify bond0-port1 bond-port.<parameter> <value>
    Copy to Clipboard Toggle word wrap
  6. ボンディングが有効な場合に Red Hat Enterprise Linux がすべてのポートを自動的に有効にするように設定します。

    # nmcli connection modify bond0 connection.autoconnect-ports 1
    Copy to Clipboard Toggle word wrap
  7. ブリッジをアクティブ化します。

    # nmcli connection up bond0
    Copy to Clipboard Toggle word wrap

検証

  1. ホストからネットワークケーブルを一時的に削除します。

    ソフトウェアユーティリティーを使用して、リンク障害イベントを適切にテストする方法がないことに注意してください。nmcli などの接続を非アクティブにするツールでは、ポート設定の変更を処理するボンディングドライバーの機能のみが表示され、実際のリンク障害イベントは表示されません。

  2. ボンドのステータスを表示します。

    # cat /proc/net/bonding/bond0
    Copy to Clipboard Toggle word wrap

16.7.2. nmcli を使用してネットワークボンディング用のネットワークブリッジを設定する

ネットワークボンディング用のネットワークブリッジには、トラフィック処理を改善するために複数のネットワークインターフェイスを組み合わせたボンディングインターフェイスを設定する必要があります。そのため、仮想マシンはネットワークブリッジを使用して結合されたネットワークインターフェイスを介してネットワークにアクセスできます。nmcli ユーティリティーにより、設定に必要な接続ファイルをコマンドラインから作成および編集します。

手順

  1. ブリッジインターフェイスを作成します。

    # nmcli connection add type bridge con-name br0 ifname br0 ipv4.method disabled ipv6.method disabled
    Copy to Clipboard Toggle word wrap
  2. bond0 ボンディングを br0 ブリッジに追加します。

    # nmcli connection modify bond0 master br0
    Copy to Clipboard Toggle word wrap
  3. ブリッジが有効な場合に Red Hat Enterprise Linux がすべてのポートを自動的に有効にするように設定します。

    # nmcli connection modify br0 connection.autoconnect-ports 1
    Copy to Clipboard Toggle word wrap
  4. ブリッジを再度アクティブにします。

    # nmcli connection up br0
    Copy to Clipboard Toggle word wrap

検証

  • ip ユーティリティーを使用して、特定のブリッジのポートであるイーサネットデバイスのリンクステータスを表示します。

    # ip link show master br0
    6: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UP mode DEFAULT group default qlen 1000
        link/ether 52:54:00:38:a9:4d brd ff:ff:ff:ff:ff:ff
    ...
    Copy to Clipboard Toggle word wrap
  • bridge ユーティリティーを使用して、任意のブリッジデバイスのポートであるイーサネットデバイスの状態を表示します。

    # bridge link show
    6: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 master br0 state forwarding priority 32 cost 100
    ...
    Copy to Clipboard Toggle word wrap

    特定のイーサネットデバイスのステータスを表示するには、bridge link show dev <ethernet_device_name> コマンドを使用します。

仮想マシン (VM) がボンディングで br0 ブリッジを使用できるようにするには、まず、このブリッジを使用する libvirtd サービスに仮想ネットワークを追加します。

前提条件

  • libvirt をインストールした。
  • libvirtd を起動して有効にした。
  • Red Hat Enterprise Linux 上のボンディングを使用して br0 デバイスを設定した。

手順

  1. 次の内容を含む ~/bond0-bridge.xml ファイルを作成します。

    <network>
    	<name>bond0-bridge</name>
    	<forward mode="bridge" />
    	<bridge name="br0" />
    </network>
    Copy to Clipboard Toggle word wrap
  2. ~/bond0-bridge.xml ファイルを使用して、libvirt に新しい仮想ネットワークを作成します。

    # virsh net-define ~/bond0-bridge.xml
    Copy to Clipboard Toggle word wrap
  3. ~/bond0-bridge.xml ファイルを削除します。

    # rm ~/bond0-bridge.xml
    Copy to Clipboard Toggle word wrap
  4. bond0-bridge 仮想ネットワークを起動します。

    # virsh net-start bond0-bridge
    Copy to Clipboard Toggle word wrap
  5. libvirtd サービスの起動時に自動的に起動するように bond0-bridge 仮想ネットワークを設定します。

    # virsh net-autostart bond0-bridge
    Copy to Clipboard Toggle word wrap

検証

  • 仮想ネットワークのリストを表示します。

    # virsh net-list
    Name              State    Autostart   Persistent
    ----------------------------------------------------
    bond0-bridge      active      yes         yes
    ...
    Copy to Clipboard Toggle word wrap

16.7.4. ボンディングインターフェイスを使用するように仮想マシンを設定する

ホスト上のブリッジデバイスとボンディングインターフェイスを使用するように仮想マシンを設定するには、bond0-bridge 仮想ネットワークを使用する新しい仮想マシンを作成するか、このネットワークを使用するように既存の仮想マシンの設定を更新します。

RHEL ホストでこの手順を実行します。

前提条件

  • libvirtdbond0-bridge 仮想ネットワークを設定した。

手順

  1. 新しい仮想マシンを作成し、bond0-bridge ネットワークを使用するように設定するには、仮想マシンを作成するときに、virt-install ユーティリティーに --network network:bond0-bridge オプションを渡します。

    # virt-install ... --network network:bond0-bridge
    Copy to Clipboard Toggle word wrap
  2. 既存の仮想マシンのネットワーク設定を変更するには、次のコマンドを実行します。

    1. 仮想マシンのネットワークインターフェイスを bond0-bridge 仮想ネットワークに接続します。

      # virt-xml <example_vm> --edit --network network=bond0-bridge
      Copy to Clipboard Toggle word wrap
  3. 仮想マシンをシャットダウンして、再起動します。

    # virsh shutdown <example_vm>
    # virsh start <example_vm>
    Copy to Clipboard Toggle word wrap

検証

  • ホストの仮想マシンの仮想ネットワークインターフェイスを表示します。

    # virsh domiflist <example_vm>
    Interface   Type     Source           Model    MAC
    -------------------------------------------------------------------
    vnet1       bridge   bond0-bridge   virtio   52:54:00:c5:98:1c
    Copy to Clipboard Toggle word wrap
  • br0 ブリッジに接続されているインターフェイスを表示します。

    # ip link show master br0
    18: bond0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UNKNOWN mode DEFAULT group default qlen 1000
    link/ether 2a:53:bd:d5:b3:0a brd ff:ff:ff:ff:ff:ff
    
    19: vnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UNKNOWN mode DEFAULT group default qlen 1000
    link/ether 52:54:00:c5:98:1c brd ff:ff:ff:ff:ff:ff
    ...
    Copy to Clipboard Toggle word wrap

    libvirtd は、ブリッジの設定を動的に更新することに注意してください。bond0-bridge ネットワークを使用する仮想マシンを起動すると、ホスト上の対応する vnet* デバイスがブリッジのポートとして表示されます。

16.8. passt ユーザー空間接続の設定

仮想ネットワークへの非特権アクセスが必要な場合 (たとえば、libvirtsession 接続を使用する場合)、passt ネットワークバックエンドを使用するように仮想マシン (VM) を設定できます。

前提条件

  • passt パッケージがシステムにインストールされている。

    # dnf install passt
    Copy to Clipboard Toggle word wrap

手順

  1. passt 接続を使用する仮想マシンの XML 設定を開きます。以下に例を示します。

    # virsh edit <testguest1>
    Copy to Clipboard Toggle word wrap
  2. <devices> セクションに、バックエンドタイプとして passt を使用する <interface type='user'> 要素を追加します。

    たとえば、次の設定では、最初のデフォルトルートに関連付けられたホストインターフェイスからコピーされたアドレスとルートを使用する passt 接続を設定します。

    <devices>
      [...]
      <interface type='user'>
        <backend type='passt'/>
      </interface>
    </devices>
    Copy to Clipboard Toggle word wrap

    passt を使用する場合は、必要に応じて、複数の <portForward> 要素を指定して、ホストへの受信ネットワークトラフィックをこの仮想マシンインターフェイスに転送できます。インターフェイスの IP アドレスをカスタマイズすることもできます。以下に例を示します。

    <devices>
      [...]
      <interface type='user'>
        <backend type='passt'/>
        <mac address="52:54:00:98:d8:b7"/>
        <source dev='eth0'/>
        <ip family='ipv4' address='192.0.2.1' prefix='24'/>
        <ip family='ipv6' address='::ffff:c000:201'/>
        <portForward proto='tcp'>
          <range start='2022' to='22'/>
        </portForward>
        <portForward proto='udp' address='1.2.3.4'>
           <range start='5000' end='5020' to='6000'/>
           <range start='5010' end='5015' exclude='yes'/>
        </portForward>
        <portForward proto='tcp' address='2001:db8:ac10:fd01::1:10' dev='eth0'>
          <range start='8080'/>
          <range start='4433' to='3444'/>
        </portForward>
      </interface>
    </devices>
    Copy to Clipboard Toggle word wrap

    この設定例では、次のパラメーターを使用して passt 接続を設定します。

    • 仮想マシンは、eth0 ホストインターフェイスからトラフィックを転送するためのネットワークルートをコピーします。
    • インターフェイス MAC は 52:54:00:98:d8:b7 に設定します。設定されていない場合は、ランダムなものが生成されます。
    • IPv4 アドレスは 192.0.2.1/24 に設定し、IPv6 アドレスは ::ffff:c000:201 に設定します。
    • ホスト上の TCP ポート 2022 は、そのネットワークトラフィックを仮想マシン上のポート 22 に転送します。
    • ホストインターフェイス eth0 の TCP アドレス 2001:db8:ac10:fd01::1:10 とポート 8080 は、ネットワークトラフィックを仮想マシンのポート 8080 に転送します。ポート 4433 は仮想マシンのポート 3444 に転送します。
    • ホスト上の UDP アドレス 1.2.3.4 とポート 5000 - 5009 および 5016 - 5020 は、ネットワークトラフィックを仮想マシン上のポート 6000 - 6009 および 6016 - 6020 に転送します。
  3. XML 設定を保存します。

検証

  • passt を使用して設定した仮想マシンを起動または再起動します。

    # virsh reboot <vm-name>
    # virsh start <vm-name>
    Copy to Clipboard Toggle word wrap

    仮想マシンが正常に起動すると、passt ネットワークバックエンドが使用されます。

第17章 仮想マシンでの GPU デバイスの管理

AI ワークロードを実行するために仮想マシン (VM) を準備したり、仮想マシンのグラフィカルパフォーマンスを強化したりするために、RHEL ホストの GPU を仮想マシンに割り当てることができます。

  • GPU をホストから接続解除し、GPU の完全な制御を仮想マシンに直接渡すことができます。
  • 物理 GPU から複数の仲介デバイスを作成し、これらのデバイスを仮想 GPU (vGPU) として複数のゲストに割り当てることができます。これは現在、一部の NVIDIA GPU でのみサポートされています。
重要

GPU の割り当ては現在、Intel 64 システムおよび AMD64 システムでのみサポートされています。

17.1. 仮想マシンへの GPU の割り当て

ホストシステムに接続されている GPU にアクセスして制御するには、GPU の直接制御を仮想マシンに渡すようにホストシステムを設定する必要があります。

注記

仮想 GPU の割り当て方法の詳細は、NVIDIA vGPU デバイスの管理 を参照してください。

前提条件

  • ホストマシンカーネルで IOMMU サポートを有効にする必要があります。

    • Intel ホストでは、VT-d を有効にする必要があります。

      1. intel_iommu=on および iommu=pt パラメーターを使用して GRUB 設定を再生成します。

        # grubby --args="intel_iommu=on iommu_pt" --update-kernel DEFAULT
        Copy to Clipboard Toggle word wrap
      2. ホストを再起動します。
    • AMD ホストでは、AMD-Vi を有効にする必要があります。

      AMD ホストでは、IOMMU はデフォルトで有効になっているため、iommu=pt を追加してパススルーモードに切り替えることができます。

      1. iommu=pt パラメーターで GRUB 設定を再生成します。

        # grubby --args="iommu=pt" --update-kernel DEFAULT
        Copy to Clipboard Toggle word wrap
        注記

        pt オプションは、パススルーモードで使用されるデバイスにのみ IOMMU を有効にし、ホストパフォーマンスを向上させます。ただし、すべてのハードウェアがこのオプションに対応しているわけではありません。このオプションが有効になっていない場合でも、デバイスを割り当てることは可能です。

      2. ホストを再起動します。

手順

  1. ドライバーが GPU にバインドしないようにします。

    1. GPU の接続先である PCI バスアドレスを特定します。

      # lspci -Dnn | grep VGA
      0000:02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK106GL [Quadro K4000] [10de:11fa] (rev a1)
      Copy to Clipboard Toggle word wrap
    2. ホストのグラフィックドライバーが GPU を使用しないようにします。これには、pci-stub ドライバーで GPU の PCI ID を使用します。

      たとえば、次のコマンドは、ドライバーが 10de:11fa バスに接続された GPU にバインドされるのを防ぎます。

      # grubby --args="pci-stub.ids=10de:11fa" --update-kernel DEFAULT
      Copy to Clipboard Toggle word wrap
    3. ホストを再起動します。
  2. オプション: サポートの制限により、オーディオなどの特定の GPU 機能を仮想マシンにパススルーできない場合は、IOMMU グループ内のエンドポイントのドライバーバインディングを変更すると、必要な GPU 機能のみをパススルーできます。

    1. GPU 設定を XML に変換し、ホストドライバーに接続しないようにするエンドポイントの PCI アドレスを書き留めておきます。

      これを行うには、アドレスに pci_ 接頭辞を追加し、区切り文字をアンダースコアに変換することにより、GPU の PCI バスアドレスを libvirt 互換形式に変換します。

      たとえば、次のコマンドは、0000:02:00.0 バスアドレスに接続されている GPU の XML 設定を表示します。

      # virsh nodedev-dumpxml pci_0000_02_00_0
      Copy to Clipboard Toggle word wrap
      <device>
       <name>pci_0000_02_00_0</name>
       <path>/sys/devices/pci0000:00/0000:00:03.0/0000:02:00.0</path>
       <parent>pci_0000_00_03_0</parent>
       <driver>
        <name>pci-stub</name>
       </driver>
       <capability type='pci'>
        <domain>0</domain>
        <bus>2</bus>
        <slot>0</slot>
        <function>0</function>
        <product id='0x11fa'>GK106GL [Quadro K4000]</product>
        <vendor id='0x10de'>NVIDIA Corporation</vendor>
        <iommuGroup number='13'>
         <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
         <address domain='0x0000' bus='0x02' slot='0x00' function='0x1'/>
        </iommuGroup>
        <pci-express>
         <link validity='cap' port='0' speed='8' width='16'/>
         <link validity='sta' speed='2.5' width='16'/>
        </pci-express>
       </capability>
      </device>
      Copy to Clipboard Toggle word wrap
    2. エンドポイントがホストドライバーに接続されないようにします。

      この例では、GPU を仮想マシンに割り当て、オーディオ機能である <address domain='0x0000' bus='0x02' slot='0x00' function='0x1'/> に対応するエンドポイントがホストオーディオドライバーに接続されないようにし、代わりにエンドポイントを VFIO-PCI に接続します。

      # driverctl set-override 0000:02:00.1 vfio-pci
      Copy to Clipboard Toggle word wrap
  3. GPU の仮想マシンへの接続

    1. PCI バスアドレスを使用して GPU 用の XML 設定ファイルを作成します。

      たとえば、GPU のバスアドレスからパラメーターを使用して、次の XML ファイル GPU-Assign.xml を作成できます。

      <hostdev mode='subsystem' type='pci' managed='yes'>
       <driver name='vfio'/>
       <source>
        <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
       </source>
      </hostdev>
      Copy to Clipboard Toggle word wrap
    2. ホストシステムにファイルを保存します。
    3. ファイルを仮想マシンの XML 設定とマージします。

      たとえば、次のコマンドは、GPU XML ファイルの GPU-Assign.xml を、System1 仮想マシンの XML 設定ファイルにマージします。

      # virsh attach-device System1 --file /home/GPU-Assign.xml --persistent
      Device attached successfully.
      Copy to Clipboard Toggle word wrap
      注記

      GPU は、セカンダリーグラフィックスデバイスとして仮想マシンに接続されています。GPU をプライマリーグラフィックスデバイスとして割り当てることには対応していません。Red Hat では、仮想マシンの XML 設定で、エミュレートしているプライマリーグラフィックスデバイスを削除することは推奨しません。

検証

  • デバイスが仮想マシンの XML 設定の <devices> セクションに表示されます。

17.2. NVIDIA vGPU デバイスの管理

vGPU 機能により、仲介デバイス として参照される物理的な NVIDIA GPU デバイスを複数の仮想デバイスに分割できます。この仲介デバイスは、仮想 GPU として複数の仮想マシンに割り当てることができます。これにより、この仮想マシンが、1 つの物理 GPU のパフォーマンスを共有できます。

重要

仲介デバイスの使用にかかわらず、仮想マシンに物理 GPU を割り当てると、ホストが GPU を使用できなくなります。

17.2.1. NVIDIA vGPU デバイスのセットアップ

NVIDIA の vGPU 機能を設定するには、GPU デバイスの NVIDIA vGPU ドライバーをダウンロードして、仲介デバイスを作成し、使用する仮想マシンに割り当てる必要があります。

前提条件

  • GPU が vGPU 仲介デバイスをサポートしている。vGPU の作成をサポートする NVIDIA GPU の最新のリストは、NVIDIA vGPU ソフトウェアのドキュメント を参照してください。

    • ホストが使用している 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
      Copy to Clipboard Toggle word wrap

手順

  1. NVIDIA vGPU ドライバーをダウンロードして、システムにインストールします。手順は NVIDIA ドキュメント を参照してください。
  2. NVIDIA ソフトウェアのインストーラーで /etc/modprobe.d/nvidia-installer-disable-nouveau.conf ファイルが作成されなかった場合は、/etc/modprobe.d/ に任意の名前で conf ファイルを作成し、そのファイルに以下の行を追加します。

    blacklist nouveau
    options nouveau modeset=0
    Copy to Clipboard Toggle word wrap
  3. 現在のカーネルの初期 RAM ディスクを再生成し、再起動します。

    # dracut --force
    # reboot
    Copy to Clipboard Toggle word wrap
  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)
     [...]
    Copy to Clipboard Toggle word wrap

    さらに、Ampere (またはそれ以降の) アーキテクチャーベースの NVIDIA GPU デバイスで vGPU を作成する場合は、物理 GPU に対して Virtual Function が有効になっていることを確認してください。手順は NVIDIA ドキュメント を参照してください。

  5. デバイスの UUID を生成します。

    # uuidgen
    30820a6f-b1a5-4503-91ca-0c10ba58692a
    Copy to Clipboard Toggle word wrap
  6. 検出された GPU ハードウェアに基づいて、仲介されたデバイスの設定を含む XML ファイルを準備します。たとえば、次の例では、0000:01:00.0 PCI バスで実行され、前の手順で生成された UUID を使用する NVIDIA Tesla P4 カードで nvidia-63 vGPU タイプの仲介デバイスを設定します。

    <device>
        <parent>pci_0000_01_00_0</parent>
        <capability type="mdev">
            <type id="nvidia-63"/>
            <uuid>30820a6f-b1a5-4503-91ca-0c10ba58692a</uuid>
        </capability>
    </device>
    Copy to Clipboard Toggle word wrap
  7. 準備した XML ファイルに基づいて vGPU 仲介デバイスを定義します。以下に例を示します。

    # virsh nodedev-define vgpu-test.xml
    Node device mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 created from vgpu-test.xml
    Copy to Clipboard Toggle word wrap
  8. オプション: 仲介デバイスが非アクティブなデバイスとしてリストされることを確認します。

    # virsh nodedev-list --cap mdev --inactive
    mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Copy to Clipboard Toggle word wrap
  9. 作成した vGPU 仲介デバイスを起動します。

    # virsh nodedev-start mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Device mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 started
    Copy to Clipboard Toggle word wrap
  10. オプション: 仲介デバイスがアクティブなデバイスとしてリストされることを確認します。

    # virsh nodedev-list --cap mdev
    mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Copy to Clipboard Toggle word wrap
  11. ホストの再起動後に自動的に起動するように vGPU デバイスを設定します。

    # virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Device mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 marked as autostarted
    Copy to Clipboard Toggle word wrap
  12. vGPU リソースを共有する仮想マシンに仲介デバイスを割り当てます。これを行うには、以下の行を、仮想マシンの XML 設定の <devices/> セクションに追加します。

    • 単一の vGPU を仮想マシンに割り当てるには:

      ...
      <video>
        <model type='none'/>
      </video>
      ...
      
      <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci' display='on' ramfb="on">
        <source>
          <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/>
        </source>
      </hostdev>
      Copy to Clipboard Toggle word wrap

      各 UUID は、一度に 1 つの仮想マシンにしか割り当てることができないのでご注意ください。

    • 複数の vGPU を仮想マシンに割り当てるには:

      ...
      <video>
        <model type='none'/>
      </video>
      ...
      
      <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci' display='on' ramfb="on">
        <source>
          <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/>
        </source>
      </hostdev>
      
      <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci'>
        <source>
          <address uuid='751c2bd9-3322-4031-ad07-50a0d1367577'/>
        </source>
      </hostdev>
      Copy to Clipboard Toggle word wrap
  13. 割り当てられた仮想マシンに vGPU 仲介デバイスの全機能が提供されるように、これらの仮想マシンに NVIDIA vGPU ゲストソフトウェアのライセンスを設定します。詳細および手順は、NVIDIA の仮想 GPU ソフトウェアのライセンスサーバーユーザーガイド を参照してください。

検証

  1. 作成した vGPU の機能をクエリーし、アクティブで永続的な機能としてリストされていることを確認します。

    # virsh nodedev-info mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Name:           virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Parent:         pci_0000_01_00_0
    Active:         yes
    Persistent:     yes
    Autostart:      yes
    Copy to Clipboard Toggle word wrap
  2. 仮想マシンを起動し、ゲストオペレーティングシステムが仲介デバイスを NVIDIA GPU として検出することを確認します。たとえば、仮想マシンが Linux を使用している場合は、以下のとおりとなります。

    # lspci -d 10de: -k
    07:00.0 VGA compatible controller: NVIDIA Corporation GV100GL [Tesla V100 SXM2 32GB] (rev a1)
            Subsystem: NVIDIA Corporation Device 12ce
            Kernel driver in use: nvidia
            Kernel modules: nouveau, nvidia_drm, nvidia
    Copy to Clipboard Toggle word wrap

トラブルシューティング

  • 仮想マシンで RHEL 10 を使用する場合、使用できる表示プロトコルは Wayland のみです。ただし、Wayland は現在、Nvidia vGPU ゲストドライバーではサポートされていません。そのため、vGPU 上で動作する GNOME デスクトップを起動することはできません。詳細は、NVIDIA vGPU のドキュメント を参照してください。

17.2.2. NVIDIA vGPU デバイスの削除

割り当てられた vGPU 仲介デバイス の設定を変更するには、割り当てられた仮想マシンから既存のデバイスを削除する必要があります。

前提条件

  • デバイスを削除する仮想マシンがシャットダウンしている。

手順

  1. 削除する仲介デバイスの ID を取得します。

    # virsh nodedev-list --cap mdev
    mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Copy to Clipboard Toggle word wrap
  2. vGPU 仲介バイスの実行中のインスタンスを停止します。

    # virsh nodedev-destroy mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Destroyed node device 'mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0'
    Copy to Clipboard Toggle word wrap
  3. オプション: 仲介デバイスが非アクティブ化されていることを確認します。

    # virsh nodedev-info mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Name:           virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Parent:         pci_0000_01_00_0
    Active:         no
    Persistent:     yes
    Autostart:      yes
    Copy to Clipboard Toggle word wrap
  4. 仮想マシンの XML 設定からデバイスを削除します。これには、virsh edit ユーティリティーを使用して仮想マシンの XML 設定を編集し、mdev の設定セグメントを削除します。このセグメントは、以下のようになります。

    <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci'>
      <source>
        <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/>
      </source>
    </hostdev>
    Copy to Clipboard Toggle word wrap

    仲介デバイスを停止して接続解除しても、そのデバイスは削除されず、定義された とおりに保持されます。そのため、デバイスを 再起動 して別の仮想マシンに 接続 することができます。

  5. オプション: 停止した仲介デバイスを削除するには、デバイスの定義を削除します。

    # virsh nodedev-undefine mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Undefined node device 'mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0'
    Copy to Clipboard Toggle word wrap

検証

  • デバイスを停止して接続解除しただけの場合は、仲介デバイスが非アクティブとしてリストされていることを確認します。

    # virsh nodedev-list --cap mdev --inactive
    mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Copy to Clipboard Toggle word wrap
  • デバイスも削除した場合は、次のコマンドでデバイスが表示されないことを確認します。

    # virsh nodedev-list --cap mdev
    Copy to Clipboard Toggle word wrap

17.2.3. システムに関する NVIDIA vGPU 情報の取得

利用可能な vGPU 機能の機能を評価するには、お使いのシステムの仲介デバイスに関する以下のような追加情報を取得してください。

  • 特定タイプの仲介デバイスを何個作成できるか
  • お使いのシステムに設定済みの仲介デバイスはどれか

手順

  • vGPU 仲介デバイスをサポートできるホストで使用可能な GPU デバイスを確認するには、virsh nodedev-list --cap mdev_types コマンドを使用します。たとえば、以下は 2 つの NVIDIA Quadro RTX6000 デバイスを備えたシステムを示しています。

    # virsh nodedev-list --cap mdev_types
    pci_0000_5b_00_0
    pci_0000_9b_00_0
    Copy to Clipboard Toggle word wrap
  • 特定の GPU デバイスでサポートされている vGPU タイプと追加のメタデータを表示するには、virsh nodedev-dumpxml コマンドを使用します。

    # virsh nodedev-dumpxml pci_0000_9b_00_0
    <device>
      <name>pci_0000_9b_00_0</name>
      <path>/sys/devices/pci0000:9a/0000:9a:00.0/0000:9b:00.0</path>
      <parent>pci_0000_9a_00_0</parent>
      <driver>
        <name>nvidia</name>
      </driver>
      <capability type='pci'>
        <class>0x030000</class>
        <domain>0</domain>
        <bus>155</bus>
        <slot>0</slot>
        <function>0</function>
        <product id='0x1e30'>TU102GL [Quadro RTX 6000/8000]</product>
        <vendor id='0x10de'>NVIDIA Corporation</vendor>
        <capability type='mdev_types'>
          <type id='nvidia-346'>
            <name>GRID RTX6000-12C</name>
            <deviceAPI>vfio-pci</deviceAPI>
            <availableInstances>2</availableInstances>
          </type>
          <type id='nvidia-439'>
            <name>GRID RTX6000-3A</name>
            <deviceAPI>vfio-pci</deviceAPI>
            <availableInstances>8</availableInstances>
          </type>
          [...]
          <type id='nvidia-440'>
            <name>GRID RTX6000-4A</name>
            <deviceAPI>vfio-pci</deviceAPI>
            <availableInstances>6</availableInstances>
          </type>
          <type id='nvidia-261'>
            <name>GRID RTX6000-8Q</name>
            <deviceAPI>vfio-pci</deviceAPI>
            <availableInstances>3</availableInstances>
          </type>
        </capability>
        <iommuGroup number='216'>
          <address domain='0x0000' bus='0x9b' slot='0x00' function='0x3'/>
          <address domain='0x0000' bus='0x9b' slot='0x00' function='0x1'/>
          <address domain='0x0000' bus='0x9b' slot='0x00' function='0x2'/>
          <address domain='0x0000' bus='0x9b' slot='0x00' function='0x0'/>
        </iommuGroup>
        <numa node='2'/>
        <pci-express>
          <link validity='cap' port='0' speed='8' width='16'/>
          <link validity='sta' speed='2.5' width='8'/>
        </pci-express>
      </capability>
    </device>
    Copy to Clipboard Toggle word wrap

17.2.4. NVIDIA vGPU のリモートデスクトップストリーミングサービス

NVIDIA vGPU または NVIDIA GPU パススルーが有効な RHEL 10 ハイパーバイザーでは、次のリモートデスクトップストリーミングサービスがサポートされています。

  • HP ZCentral Remote Boost/Teradici
  • NICE DCV
  • Mechdyne TGX

サポートの詳細は、適切なベンダーサポートマトリックスを参照してください。

第18章 仮想マシンのパフォーマンスの最適化

仮想マシンでは、ホストと比べて、パフォーマンス低下が常に見られます。以下のセクションでは、このパフォーマンス低下の原因を説明します。また、ハードウェアのインフラストラクチャーリソースを可能な限り効率的に使用できるように、RHEL 10 での仮想化によるパフォーマンスへの影響を最小限に抑える方法を説明します。

18.1. 仮想マシンのパフォーマンスに影響を及ぼすもの

仮想マシン (VM) は、ホスト上でユーザー空間プロセスとして実行されます。したがって、ハイパーバイザーは、仮想マシンがホストシステムのリソースを使用できるように、ホストのシステムリソースを変換する必要があります。その結果、リソースの一部が変換によって消費され、仮想マシンがホストと同じパフォーマンス効率を実現できなくなります。

18.1.1. システムパフォーマンスにおける仮想化の影響

仮想マシンのパフォーマンス低下の理由には、以下のようなものがあります。

  • 仮想 CPU (vCPU) がホスト上のスレッドとして実装され、Linux スケジューラーで処理される。
  • 仮想マシンは、ホストカーネルから NUMA や Huge Page などの最適化機能を自動的に継承しない。
  • ホストのディスクおよびネットワーク I/O の設定が、仮想マシンのパフォーマンスに大きく影響する可能性がある。
  • ネットワークトラフィックは、一般的に、ソフトウェアベースのブリッジから仮想マシンに流れる。
  • ホストデバイスとそのモデルによっては、その特定のハードウェアのエミュレーションにより、オーバーヘッドが著しくなる可能性がある。

仮想化が仮想マシンのパフォーマンスに与える影響の重大度は、次のようなさまざまな要因の影響を受けます。

  • 同時に実行している仮想マシンの数
  • 各仮想マシンで使用される仮想デバイスのサイズ
  • 仮想マシンが使用するデバイスの種類

18.1.2. 仮想マシンのパフォーマンス損失を減らす

RHEL 10 には、仮想化によるパフォーマンスへの悪影響を軽減するために使用できる機能が多数用意されています。以下に例を示します。

重要

仮想マシンのパフォーマンスのチューニングは、その他の仮想化機能に悪影響を与える可能性があります。たとえば、変更した仮想マシンの移行がより困難になります。

18.2. TuneD を使用した仮想マシンのパフォーマンスの最適化

TuneD ユーティリティーは、CPU 集中型タスクや、ストレージネットワークスループットの応答などの特定のワークロードの特性に対して RHEL を調整するプロファイル配信メカニズムです。これにより、特定のユースケースで、パフォーマンスを強化し、電力消費を減らすように事前設定されたチューニングプロファイルを多数利用できます。これらのプロファイルを編集するか、新規プロファイルを作成して、仮想化環境に適したパフォーマンスソリューション (仮想化環境を含む) を作成できます。

RHEL 10 を仮想化用に最適化するには、次のプロファイルを使用します。

  • RHEL 10 仮想マシンの場合は、virtual-guest プロファイルを使用します。これは、一般的に適用された throughput-performance プロファイルをベースにしていますが、仮想メモリーのスワップは減少します。
  • RHEL 10 仮想化ホストの場合は、virtual-host プロファイルを使用します。これにより、ダーティーメモリーページのより集中的なライトバックが有効になり、ホストのパフォーマンスを活用できます。

手順

  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
    Copy to Clipboard Toggle word wrap
  2. オプション: 新しい TuneD プロファイルを作成するか、既存の TuneD プロファイルを編集します。

    詳細は、TuneD プロファイルの管理 を参照してください。

  3. TuneD プロファイルをアクティベートします。

    # tuned-adm profile selected-profile
    Copy to Clipboard Toggle word wrap
    • 仮想化ホストを最適化するには、virtual-host プロファイルを使用します。

      # tuned-adm profile virtual-host
      Copy to Clipboard Toggle word wrap
    • RHEL ゲストオペレーティングシステムで、virtual-guest プロファイルを使用します。

      # tuned-adm profile virtual-guest
      Copy to Clipboard Toggle word wrap

検証

  1. TuneD のアクティブなプロファイルを表示します。

    # tuned-adm active
    Current active profile: virtual-host
    Copy to Clipboard Toggle word wrap
  2. TuneD プロファイル設定がシステムに適用されていることを確認します。

    # tuned-adm verify
    Verification succeeded, current system settings match the preset profile. See tuned log file ('/var/log/tuned/tuned.log') for details.
    Copy to Clipboard Toggle word wrap

18.3. 特定のワークロードに合わせた仮想マシンのパフォーマンスの最適化

仮想マシン (VM) は、多くの場合、特定のワークロードを実行するために専用に使用されます。目的のワークロードに合わせて仮想マシンの設定を最適化することで、仮想マシンのパフォーマンスを向上させることができます。

Expand
表18.1 特定のユースケースに推奨される仮想マシン設定
ユースケースIOThread仮想 CPU ピニングvNUMA ピニングhuge pagemulti-queue

データベース

データベースディスク用

はい*

はい*

はい*

はい (multi-queue virtio-blk、virtio-scsi を参照)

仮想ネットワーク機能 (VNF)

なし

はい

はい

はい

はい (multi-queue virtio-net を参照)

ハイパフォーマンスコンピューティング (HPC)

なし

はい

はい

はい

なし

バックアップサーバー

バックアップディスク用

なし

なし

なし

はい (multi-queue virtio-blk、virtio-scsi を参照)

多数の CPU を搭載した仮想マシン (通常 32 個以上)

なし

はい*

はい*

なし

なし

大容量 RAM を搭載した仮想マシン (通常 128 GB 以上)

なし

なし

はい*

はい

なし

* 仮想マシンに複数の NUMA ノードを使用するのに十分な CPU と RAM がある場合。

注記

仮想マシンが複数のカテゴリーのユースケースに該当する場合もあります。その場合は、推奨される設定をすべて適用してください。

18.4. 仮想マシンのメモリーの設定

仮想マシンのパフォーマンスを改善するために、追加のホスト RAM を仮想マシンに割り当てることができます。同様に、仮想マシンに割り当てるメモリー量を減らして、ホストメモリーを他の仮想マシンやタスクに割り当てることができます。

18.4.1. メモリーのオーバーコミットメント

KVM ハイパーバイザー上で実行される仮想マシン (VM) には、専用の物理 RAM ブロックが割り当てられません。代わりに、各仮想マシンが Linux プロセスとして機能し、要求された場合にのみホストの Linux カーネルがメモリーを割り当てます。また、ホストのメモリーマネージャーが、仮想マシンのメモリーを独自の物理メモリーとスワップ領域間で移動できます。メモリーオーバーコミットが有効な場合、仮想マシンによって要求された量よりも少ない物理メモリーを割り当てることをカーネルが決定できます。これは、要求されたメモリー量が仮想マシンのプロセスによって完全に使用されないことが多いためです。

デフォルトでは、Linux カーネルでメモリーオーバーコミットが有効になっており、カーネルは仮想マシンの要求に対して安全なメモリーオーバーコミット量を推定します。ただし、メモリーを大量に消費するワークロードでは、オーバーコミットが頻繁に発生するため、システムが不安定になる可能性があります。

メモリーのオーバーコミットを行うには、すべての仮想マシンを収容するためにホスト物理マシンに十分なスワップ領域を割り当てるとともに、ホスト物理マシンのプロセスに十分なメモリーを割り当てる必要があります。推奨される基本的なスワップ領域のサイズは、What is the recommended swap size for Red Hat platforms? を参照してください。(Red Hat ナレッジベース)

ホストのメモリー不足に対処するには、次の方法が考えられます。

  • 仮想マシンごとに割り当てるメモリーを減らします。
  • ホストに物理メモリーを追加します。
  • より大きなスワップ領域を使用します。
重要

仮想マシンは頻繁にスワップされると実行速度が低下します。また、オーバーコミットによりシステムのメモリーが不足 (OOM) する可能性があります。これにより、Linux カーネルが重要なシステムプロセスをシャットダウンする可能性があります。

メモリーのオーバーコミットは、デバイスの割り当てでは対応していません。これは、デバイスの割り当てが使用中の場合に、割り当てられたデバイスでダイレクトメモリーアクセス (DMA) を有効にするには、仮想マシンのすべてのメモリーを静的に事前に割り当てる必要があるためです。

18.4.2. virtio-mem を使用した仮想マシンメモリーの追加および削除

RHEL 10 は、virtio-mem 準仮想化メモリーデバイスを提供します。このデバイスを使用すると、仮想マシン (VM) 内のホストメモリーを動的に追加または削除できます。

18.4.2.1. virtio-mem の概要

virtio-mem は、仮想マシンでホストメモリーを動的に追加または削除するために使用できる準仮想化メモリーデバイスです。たとえば、このデバイスを使用して、実行中の仮想マシン間でメモリーリソースを移動したり、現在の要件に基づいてクラウドセットアップの仮想マシンメモリーのサイズを変更したりできます。

virtio-mem を使用すると、使用されているメモリーバッキングと仮想マシン内で実行されているオペレーティングシステムに応じて、2 から数百メビバイト (MiB) の単位で、仮想マシンのメモリーを初期サイズより増やしたり、元のサイズに縮小したりできます。ただし、virtio-mem は、特にメモリーを確実にアンプラグするために、特定のゲストオペレーティングシステム設定にも依存していることに注意してください。

virtio-mem 機能の制限

virtio-mem は現在、以下の機能と互換性がありません。

  • ホスト上のリアルタイムアプリケーションのメモリーロックの使用
  • ホストでの暗号化された仮想化の使用
  • virtio-mem とホスト上での memballoon 膨張および収縮の組み合わせ
  • 仮想マシンでの virtio_mem ドライバーのアンロードまたはリロード
  • virtiofs を除く vhost-user デバイスの使用
18.4.2.2. 仮想マシンでのメモリーのオンライン化設定

virtio-mem を使用して実行中の仮想マシンにメモリーを接続する (メモリーのホットプラグとも呼ばれます) 前に、ホットプラグされたメモリーが自動的にオンライン状態に設定されるように仮想マシン (VM) オペレーティングシステムを設定する必要があります。そうしないと、ゲストオペレーティングシステムは追加メモリーを使用できなくなります。メモリーのオンライン化は、次のいずれかの設定から選択できます。

  • online_movable
  • online_kernel
  • auto-movable

これらの設定の違いは、メモリーのオンライン化設定の比較 を参照してください。

RHEL では、メモリーのオンライン化はデフォルトで udev ルールで設定されます。ただし、virtio-mem を使用する場合は、カーネル内でメモリーのオンライン化を直接設定することを推奨します。

前提条件

  • ホストが、Intel 64、AMD64、ARM 64、または IBM Z CPU アーキテクチャーを使用している。
  • ホストがオペレーティングシステムとして RHEL 10 を使用している。
  • ホスト上で実行されている仮想マシンが、次のいずれかのオペレーティングシステムバージョンを使用している。

    • Intel 64 および AMD64 ホストの場合: RHEL 8.10、RHEL 9.4 以降、RHEL 10.0 以降、またはサポートされている 64 ビット版の Windows

      重要

      RHEL 8.10 仮想マシンでは、実行中の仮想マシンからメモリーをアンプラグすることはデフォルトで無効になっています。

      サポートされている Windows のバージョンのリストは、Certified Guest Operating Systems を参照してください。

    • ARM 64 ホストの場合: RHEL 9.6 以降または RHEL 10.0 以降
    • IBM Z ホストの場合: RHEL 9.7 以降または RHEL 10.1 以降

手順

  • 仮想マシンで online_movable 設定を使用するようにメモリーオンライン化を設定するには、以下を実行します。

    1. memhp_default_state カーネルコマンドラインパラメーターを online_movable に設定します。

      # grubby --update-kernel=ALL --remove-args=memhp_default_state --args=memhp_default_state=online_movable
      Copy to Clipboard Toggle word wrap
    2. 仮想マシンを再起動します。
  • 仮想マシンで online_kernel 設定を使用するようにメモリーオンライン化を設定するには、以下を実行します。

    1. 以下のように、memhp_default_state カーネルコマンドラインパラメーターを online_kernel に設定します。

      # grubby --update-kernel=ALL --remove-args=memhp_default_state --args=memhp_default_state=online_kernel
      Copy to Clipboard Toggle word wrap
    2. 仮想マシンを再起動します。
  • 仮想マシンで auto-movable メモリーオンライン化ポリシーを使用するには、以下の手順を実行します。

    1. memhp_default_state カーネルコマンドラインパラメーターを online に設定します。

      # grubby --update-kernel=ALL --remove-args=memhp_default_state --args=memhp_default_state=online
      Copy to Clipboard Toggle word wrap
    2. memory_hotplug.online_policy カーネルコマンドラインパラメーターを auto-movable に設定します。

      # grubby --update-kernel=ALL --remove-args="memory_hotplug.online_policy" --args=memory_hotplug.online_policy=auto-movable
      Copy to Clipboard Toggle word wrap
    3. オプション: auto-movable オンライン化ポリシーをさらにチューニングするには、memory_hotplug.auto_movable_ratio および memory_hotplug.auto_movable_numa_aware パラメーターを変更します。

      # grubby --update-kernel=ALL --remove-args="memory_hotplug.auto_movable_ratio" --args=memory_hotplug.auto_movable_ratio=<percentage>
      
      # grubby --update-kernel=ALL --remove-args="memory_hotplug.memory_auto_movable_numa_aware" --args=memory_hotplug.auto_movable_numa_aware=<y/n>
      Copy to Clipboard Toggle word wrap
      • memory_hotplug.auto_movable_ratio parameter は、任意の割り当てに使用できるメモリーと比較すると、移動可能な割り当てにのみ使用できるメモリーの最大比率を設定します。比率はパーセントで表され、デフォルト値は 3:1 の比率である 301 (%) です。
      • memory_hotplug.auto_movable_numa_aware パラメーターは、memory_hotplug.auto_movable_ratio パラメーターを使用可能なすべての NUMA ノードのメモリーに適用するか、単一の NUMA ノード内のメモリーのみに適用するかを制御します。デフォルト値は y (yes) です。

        たとえば、最大比率を 301% に設定し、memory_hotplug.auto_movable_numa_awarey (yes) に設定されている場合は、アタッチされた virtio-mem デバイスを持つ NUMA ノード内でも 3:1 の比率が適用されます。パラメーターが n (no) に設定されている場合、最大 3:1 の比率はすべての NUMA ノード全体に対してのみ適用されます。

        また、比率を超えていない場合、新しくホットプラグされたメモリーは、移動可能な割り当てに対してのみ利用できます。それ以外の場合では、新しくホットプラグされたメモリーは、移動可能な割り当てと移動不可能な割り当ての両方に使用できます。

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

検証

  • online_movable 設定が正しく設定されているかを確認するには、memhp_default_state カーネルパラメーターの現在の値を確認します。

    # cat /sys/devices/system/memory/auto_online_blocks
    
    online_movable
    Copy to Clipboard Toggle word wrap
  • online_kernel 設定が正しく設定されているかを確認するには、memhp_default_state カーネルパラメーターの現在の値を確認します。

    # cat /sys/devices/system/memory/auto_online_blocks
    
    online_kernel
    Copy to Clipboard Toggle word wrap
  • auto-movable 設定が正しく設定されているかを確認するには、以下のカーネルパラメーターを確認してください。

    • memhp_default_state:

      # cat /sys/devices/system/memory/auto_online_blocks
      
      online
      Copy to Clipboard Toggle word wrap
    • memory_hotplug.online_policy:

      # cat /sys/module/memory_hotplug/parameters/online_policy
      
      auto-movable
      Copy to Clipboard Toggle word wrap
    • memory_hotplug.auto_movable_ratio:

      # cat /sys/module/memory_hotplug/parameters/auto_movable_ratio
      
      301
      Copy to Clipboard Toggle word wrap
    • memory_hotplug.auto_movable_numa_aware:

      # cat /sys/module/memory_hotplug/parameters/auto_movable_numa_aware
      
      y
      Copy to Clipboard Toggle word wrap
18.4.2.3. Attaching a virtio-mem device to virtual machines

実行中の仮想マシンに追加のメモリーをアタッチ (メモリーのホットプラグとも呼ばれます) し、その後ホットプラグされたメモリーのサイズを変更できるようにするには、virtio-mem デバイスを使用できます。具体的には、libvirt XML 設定ファイルと virsh コマンドを使用し、virtio-mem デバイスを定義して仮想マシン (VM) に割り当てることができます。

前提条件

  • ホストが、Intel 64、AMD64、ARM 64、または IBM Z CPU アーキテクチャーを使用している。
  • ホストがオペレーティングシステムとして RHEL 10 を使用している。
  • ホスト上で実行されている仮想マシンが、次のいずれかのオペレーティングシステムバージョンを使用している。

    • Intel 64 および AMD64 ホストの場合: RHEL 8.10、RHEL 9.4 以降、RHEL 10.0 以降、またはサポートされている 64 ビット版の Windows

      重要

      RHEL 8.10 仮想マシンでは、実行中の仮想マシンからメモリーをアンプラグすることはデフォルトで無効になっています。

      サポートされている Windows のバージョンのリストは、Certified Guest Operating Systems を参照してください。

    • ARM 64 ホストの場合: RHEL 9.6 以降または RHEL 10.0 以降
    • IBM Z ホストの場合: RHEL 9.7 以降または RHEL 10.1 以降
  • VM にメモリーオンライン化が設定されている。手順は、仮想マシンでのメモリーのオンライン化設定 を参照してください。

手順

  1. ターゲット仮想マシンの XML 設定に maxMemory パラメーターを含めます。

    # virsh edit testguest1
    
    <domain type='kvm'>
      <name>testguest1</name>
      ...
      <maxMemory unit='GiB'>128</maxMemory>
      ...
    </domain>
    Copy to Clipboard Toggle word wrap

    この例では、testguest1 仮想マシンの XML 設定で、128 ギビバイト (GiB) の maxMemory パラメーターが定義されています。maxMemory サイズは、仮想マシンが使用できる最大メモリーを指定します。これには、初期メモリーとホットプラグされたメモリーの両方が含まれます。

  2. XML ファイルを作成して開き、ホスト上の virtio-mem デバイスを定義します。次に例を示します。

    # vim virtio-mem-device.xml
    Copy to Clipboard Toggle word wrap
  3. virtio-mem デバイスの XML 定義をファイルに追加し、保存します。

    <memory model='virtio-mem'>
            <target>
                    <size unit='GiB'>48</size>
                    <node>0</node>
                    <block unit='MiB'>2</block>
                    <requested unit='GiB'>16</requested>
                    <current unit='GiB'>16</current>
            </target>
            <alias name='ua-virtiomem0'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </memory>
    <memory model='virtio-mem'>
            <target>
                    <size unit='GiB'>48</size>
                    <node>1</node>
                    <block unit='MiB'>2</block>
                    <requested unit='GiB'>0</requested>
                    <current unit='GiB'>0</current>
            </target>
            <alias name='ua-virtiomem1'/>
            <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </memory>
    Copy to Clipboard Toggle word wrap

    この例では、2 つの virtio-mem デバイスが以下のパラメーターで定義されます。

    • size: これは、デバイスの最大サイズです。この例では 48 GiB です。sizeblock サイズの倍数である必要があります。
    • node: これは、virtio-mem デバイスに割り当てられた vNUMA ノードです。
    • block: これはデバイスのブロックサイズです。これは、少なくとも transparent huge page (THP) のサイズである必要があります。THP は、Intel 64 および AMD64 CPU アーキテクチャーでは 2 MiB です。ARM64 アーキテクチャーでは、THP のサイズはベースページサイズに応じて 2 MiB または 512 MiB になります。通常、Intel 64 または AMD64 アーキテクチャーでは、2 MiB ブロックサイズが適切なデフォルトの選択となります。virtio-memVirtual Function I/O (VFIO) または 仲介デバイス (mdev) で使用する場合、すべての virtio-mem デバイスにまたがるブロックの合計数は 32768 を超えることはできません。超えると、RAM のプラグインに失敗する可能性があります。
    • requested: これは、virtio-mem デバイスを使用して仮想マシンに割り当てるメモリー量です。ただし、これは VM に対する単なるリクエストであり、VM が適切に設定されていない場合など、正常に解決されない可能性があります。requested サイズは block サイズの倍数である必要があり、定義された最大 size を超えることはできません。
    • current: これは、virtio-mem デバイスが仮想マシンに提供する現在のサイズを表します。たとえば、リクエストを完了できない場合や VM を再起動する場合など、current サイズは、requested サイズとは異なる場合があります。
    • alias: これは、libvirt コマンドでデバイスを編集する場合など、目的の virtio-mem デバイスを指定するために使用できるオプションのユーザー定義のエイリアスです。libvirt のすべてのユーザー定義のエイリアスは、"ua-" 接頭辞で始まる必要があります。

      これらの特定のパラメーターとは別に、libvirt は、virtio-mem デバイスを他の PCI デバイスと同様に処理します。

      仮想マシンに割り当てられた PCI デバイスの管理の詳細は、仮想デバイスの管理 を参照してください。

  4. XML ファイルを使用して、定義された virtio-mem デバイスを仮想マシンにアタッチします。たとえば、virtio-mem-device.xml で定義された 2 つのデバイスを実行中の仮想マシン testguest1 に永続的にアタッチするには、次のコマンドを実行します。

    # virsh attach-device testguest1 virtio-mem-device.xml --live --config
    Copy to Clipboard Toggle word wrap

    --live オプションは、実行中の仮想マシンにのみデバイスを接続します。再起動後に永続性は維持されません。--config オプションは、設定の変更を永続化します。--live オプションを指定せずに、デバイスをシャットダウンした仮想マシンに接続することもできます。

  5. オプション: 実行中の仮想マシンに接続されている virtio-mem デバイスの requested サイズを動的に変更するには、virsh update-memory-device コマンドを使用します。

    # virsh update-memory-device testguest1 --alias ua-virtiomem0 --requested-size 4GiB
    Copy to Clipboard Toggle word wrap

    この例では、以下が適用されます。

    • testguest1 は、更新する仮想マシンです。
    • --alias ua-virtiomem0 は、以前に定義されたエイリアスで指定された virtio-mem デバイスです。
    • --requested-size 4GiB は、virtio-mem デバイスの requested サイズを 4 GiB に変更します。

      警告

      requested サイズを減らして実行中の仮想マシンからメモリーをアンプラグすると、信頼性が低下する可能性があります。このプロセスが成功するかどうかは、使用中のメモリーオンライン化ポリシーなど、さまざまな要因によって決まります。

      場合によっては、その時点でホットプラグされたメモリーの量を変更できないため、ゲストオペレーティングシステムが要求を正常に完了できないことがあります。

      さらに、RHEL 8.10 仮想マシンでは、実行中の仮想マシンからメモリーをアンプラグすることはデフォルトで無効になっています。

  6. オプション: シャットダウンした仮想マシンから virtio-mem デバイスを取り外すには、virsh detach-device コマンドを使用します。

    # virsh detach-device testguest1 virtio-mem-device.xml
    Copy to Clipboard Toggle word wrap
  7. オプション: 実行中の仮想マシンから virtio-mem デバイスを取り外すには、以下を実行します。

    1. virtio-mem デバイスの requested サイズを 0 に変更します。そうしないと、実行中の仮想マシンから virtio-mem デバイスを取り外す試行が失敗します。

      # virsh update-memory-device testguest1 --alias ua-virtiomem0 --requested-size 0
      Copy to Clipboard Toggle word wrap
    2. 実行中の仮想マシンから virtio-mem デバイスを取り外します。

      # virsh detach-device testguest1 virtio-mem-device.xml --config
      Copy to Clipboard Toggle word wrap

検証

  • 仮想マシンで、利用可能な RAM を確認し、合計量にホットプラグされたメモリーが含まれているかを確認します。

    # free -h
    
            total    used    free   shared  buff/cache   available
    Mem:    31Gi     5.5Gi   14Gi   1.3Gi   11Gi         23Gi
    Swap:   8.0Gi    0B      8.0Gi
    Copy to Clipboard Toggle word wrap
    # numactl -H
    
    available: 1 nodes (0)
    node 0 cpus: 0 1 2 3 4 5 6 7
    node 0 size: 29564 MB
    node 0 free: 13351 MB
    node distances:
    node   0
      0:  10
    Copy to Clipboard Toggle word wrap
  • 実行中の仮想マシンの XML 設定を表示して、プラグイン RAM の現在の容量をホストで表示することもできます。

    # virsh dumpxml testguest1
    
    <domain type='kvm'>
      <name>testguest1</name>
      ...
      <currentMemory unit='GiB'>31</currentMemory>
      ...
      <memory model='virtio-mem'>
          <target>
            <size unit='GiB'>48</size>
            <node>0</node>
            <block unit='MiB'>2</block>
            <requested unit='GiB'>16</requested>
            <current unit='GiB'>16</current>
          </target>
          <alias name='ua-virtiomem0'/>
          <address type='pci' domain='0x0000' bus='0x08' slot='0x00' function='0x0'/>
      ...
    </domain>
    Copy to Clipboard Toggle word wrap

    この例では、以下が適用されます。

    • <currentMemory unit='GiB'>31</currentMemory> は、すべてのソースから VM で利用可能な合計 RAM を表します。
    • <current unit='GiB'>16</current> は、virtio-mem デバイスが提供するプラグイン RAM の現在のサイズを表します。
18.4.2.4. メモリーのオンライン化設定の比較

実行中の RHEL 仮想マシンにメモリーをアタッチする場合 (メモリーのホットプラグとも呼ばれます)、仮想マシン (VM) のオペレーティングシステムでホットプラグされたメモリーをオンライン状態に設定する必要があります。そうしないと、システムはメモリーを使用できなくなります。

次の表は、利用可能なメモリーのオンライン化設定を選択する際の主な考慮事項をまとめたものです。

Expand
表18.2 メモリーのオンライン化設定の比較
設定名仮想マシンからのメモリーのアンプラグメモリーゾーンの不均等性が発生するリスク潜在的なユースケース目的のワークロードのメモリー要件

online_movable

ホットプラグされたメモリーを確実に取り外すことができます。

はい

比較的少量のメモリーのホットプラグ

ほとんどがユーザー空間のメモリー

auto-movable

ホットプラグされたメモリーの可動部分は確実に取り外すことができます。

最小

大量のメモリーのホットプラグ

ほとんどがユーザー空間のメモリー

online_kernel

ホットプラグされたメモリーは確実に取り外すことができません。

なし

信頼性の低いメモリーの取り外しは許容されます。

ユーザー空間またはカーネル空間のメモリー

ゾーン不均衡 とは、Linux メモリーゾーンの 1 つに、使用可能なメモリーページがないことです。ゾーン不均衡 になると、システムのパフォーマンスに悪影響を及ぼす可能性があります。たとえば、移動不可能な割り当てが原因で空きメモリーが不足すると、カーネルがクラッシュする可能性があります。通常、移動可能な割り当てには、主にユーザー空間のメモリーページが含まれ、移動不可能な割り当てには、主にカーネル空間のメモリーページが含まれています。

18.4.3. huge page を使用するように仮想マシンを設定する

特定のユースケースでは、デフォルトの 4 KiB メモリーページの代わりに huge page を使用することで、仮想マシン (VM) のメモリー割り当てを改善できます。たとえば、huge page は、データベースサーバーなど、メモリー使用率の高い仮想マシンのパフォーマンスを向上させることができます。

前提条件

  • メモリー割り当てで huge page を使用するようにホストが設定されている。手順は、起動時の HugeTLB の設定 を参照してください。

手順

  1. 選択した仮想マシンが実行中の場合はシャットダウンします。
  2. 選択した仮想マシンの XML 設定を開きます。たとえば、testguest 仮想マシンを編集するには、次のコマンドを実行します。

    # virsh edit testguest
    Copy to Clipboard Toggle word wrap
  3. 仮想マシンの huge page 設定を調整します。たとえば、1 GiB の huge page を使用するように仮想マシンを設定するには、設定の <memoryBacking> セクションに次の行を追加します。

    <memoryBacking>
      <hugepages>
        <page size='1' unit='GiB'/>
      </hugepages>
    </memoryBacking>
    Copy to Clipboard Toggle word wrap

検証

  1. 仮想マシンを起動します。
  2. ホストが実行中の仮想マシンに huge page を正常に割り当てたことを確認します。ホスト上で次のコマンドを実行します。

    # cat /proc/meminfo | grep Huge
    
    HugePages_Total:    4
    HugePages_Free:     2
    HugePages_Rsvd:     1
    Hugepagesize:       1024000 kB
    Copy to Clipboard Toggle word wrap

    空き huge page と予約済み huge page の数 (HugePages_Free + HugePages_Rsvd) を足すと、結果が huge page の合計数 (HugePages_Total) よりも少なくなるはずです。この差は、実行中の仮想マシンによって使用される huge page の数によるものです。

18.5. 仮想マシンの I/O パフォーマンスの最適化

仮想マシンの入出力 (I/O) 機能は、仮想マシンの全体的な効率を大幅に制限する可能性があります。これに対処するために、ブロック I/O パラメーターを設定して、仮想マシンの I/O を最適化できます。

18.5.1. 仮想マシンにおけるブロック I/O のチューニング

複数のブロックデバイスが、複数の仮想マシンで使用されている場合は、I/O ウェイト を変更して特定の仮想デバイスの I/O の優先度を調整することが重要になる場合があります。

デバイスの I/O ウェイトを上げると、I/O 帯域幅の優先度が高まるため、より多くのホストリソースが提供されます。同様に、デバイスのウェイトを下げると、ホストのリソースが少なくなります。

注記

各デバイスの weight の値は 100 - 1000 の範囲内にする必要があります。もしくは、値を 0 にすると、各デバイスのリストからそのデバイスを削除できます。

手順

  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>
    Copy to Clipboard Toggle word wrap
  2. 指定したデバイスの I/O ウェイトを編集します。

    # virsh blkiotune VM-name --device-weights device, I/O-weight
    Copy to Clipboard Toggle word wrap

    たとえば、次の例では、testguest1 仮想マシンの /dev/sda デバイスの重みを 500 に変更します。

    # virsh blkiotune testguest1 --device-weights /dev/sda, 500
    Copy to Clipboard Toggle word wrap

検証

  • 仮想マシンのブロック I/O パラメーターが正しく設定されていることを確認します。

    # virsh blkiotune testguest1
    
    Block I/O tuning parameters for domain testguest1:
    
        weight                        : 800
        device_weight                  : [
                                          {"sda": 500},
                                         ]
    ...
    Copy to Clipboard Toggle word wrap
    重要

    一部のカーネルは、特定のデバイスの I/O 重み設定をサポートしていません。前の手順で期待どおりに重みが表示されない場合は、この機能がホストカーネルと互換性がない可能性があります。

18.5.2. 仮想マシンのディスク I/O スロットリング

複数の仮想マシンが同時に実行する場合は、過剰なディスク I/O により、システムパフォーマンスに影響が及ぶ可能性があります。KVM 仮想化のディスク I/O スロットリングでは、仮想マシンからホストマシンに送られるディスク I/O 要求に制限を設定する機能を利用できます。これにより、仮想マシンが共有リソースを過剰に使用し、その他の仮想マシンのパフォーマンスに影響を及ぼすことを防ぐことができます。

ディスク I/O スロットリングは、異なる顧客に属する仮想マシンが同じホストで実行されている場合や、異なる仮想マシンに QoS 保証が提供されている場合など、さまざまな状況で役立ちます。ディスク I/O スロットリングは、低速なディスクをシミュレートするために使用することもできます。

ディスク I/O スロットリングを有効にするには、仮想マシンに割り当てられた各ブロックデバイスからホストマシンに送られるディスク I/O 要求に制限を設定します。

I/O スロットリングは、仮想マシンに割り当てられた各ブロックデバイスに個別に適用でき、スループットおよび I/O 操作の制限に対応します。

手順

  1. virsh domblklist コマンドを使用して、指定された仮想マシン上のすべてのディスクデバイスの名前をリスト表示します。

    # virsh domblklist testguest1
    Target     Source
    ------------------------------------------------
    vda        /var/lib/libvirt/images/testguest1.qcow2
    sda        -
    sdb        /home/sample-disk.iso
    Copy to Clipboard Toggle word wrap
  2. スロットルする仮想ディスクがマウントされているホストブロックデバイスを見つけます。

    たとえば、前の手順の sdb 仮想ディスクをスロットリングする場合は、以下の出力では、ディスクが /dev/nvme0n1p3 パーティションにマウントされていることを示しています。

    $ lsblk
    NAME                                          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
    zram0                                         252:0    0     4G  0 disk  [SWAP]
    nvme0n1                                       259:0    0 238.5G  0 disk
    ├─nvme0n1p1                                   259:1    0   600M  0 part  /boot/efi
    ├─nvme0n1p2                                   259:2    0     1G  0 part  /boot
    └─nvme0n1p3                                   259:3    0 236.9G  0 part
      └─luks-a1123911-6f37-463c-b4eb-fxzy1ac12fea 253:0    0 236.9G  0 crypt /home
    Copy to Clipboard Toggle word wrap
  3. virsh blkiotune コマンドを使用して、ブロックデバイスの I/O 制限を設定します。

    # virsh blkiotune VM-name --parameter device,limit
    Copy to Clipboard Toggle word wrap

    次の例では、testguest1 仮想マシン上の sdb ディスクを、毎秒 1000 回の読み書き I/O 操作と、毎秒 50 MB の読み書きスループットに制限します。

    # virsh blkiotune testguest1 --device-read-iops-sec /dev/nvme0n1p3,1000 --device-write-iops-sec /dev/nvme0n1p3,1000 --device-write-bytes-sec /dev/nvme0n1p3,52428800 --device-read-bytes-sec /dev/nvme0n1p3,52428800
    Copy to Clipboard Toggle word wrap
    重要

    Red Hat は、virsh blkdeviotune コマンドを使用した仮想マシンでの I/O スロットリングの設定はサポートしていません。

    + RHEL 10 を仮想マシンホストとして使用する場合にサポートされない機能の詳細は、RHEL 10 の仮想化でサポートされていない機能 を参照してください。

18.5.3. ストレージデバイスでの multi-queue の有効化

仮想マシン (VM) で virtio-blk または virtio-scsi ストレージデバイスを使用する場合、multi-queue 機能によりストレージパフォーマンスとスケーラビリティーが向上します。このため、各仮想 CPU (vCPU) に別のキューを持たせることが可能になります。また仮想 CPU は、その他の vCPU に影響を及ぼすことなく使用するために、割り込みできるようになります。

multi-queue 機能は、Q35 マシンタイプではデフォルトで有効になっていますが、i440fx マシンタイプでは手動で有効にする必要があります。キューの数をワークロードに最適になるように調整できます。ただし、最適な数はワークロードの種類ごとに異なるため、どのキュー数が最適かをテストする必要があります。

手順

  1. ストレージデバイスで multi-queue を有効にするために、仮想マシンの XML 設定を編集します。

    # virsh edit <example_vm>
    Copy to Clipboard Toggle word wrap
  2. XML 設定で、目的のストレージデバイスを見つけて、複数の I/O キューを使用するように queues パラメーターを変更します。N を仮想マシン内の仮想 CPU の数 (最大 16 個) に置き換えます。

    • virtio-blk の例:

      <disk type='block' device='disk'>
        <driver name='qemu' type='raw' queues='N'/>
        <source dev='/dev/sda'/>
        <target dev='vda' bus='virtio'/>
        <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
      </disk>
      Copy to Clipboard Toggle word wrap
    • virtio-scsi の例:

      <controller type='scsi' index='0' model='virtio-scsi'>
         <driver queues='N' />
      </controller>
      Copy to Clipboard Toggle word wrap
  3. 仮想マシンを再起動して変更を有効にします。

18.5.4. 専用の IOThreads の設定

仮想マシン (VM) 上のディスクの入出力 (I/O) パフォーマンスを向上させるために、仮想マシンのディスクの IO 操作を管理するために使用される専用の IOThread を設定できます。

通常、ディスクの I/O 操作はメインの QEMU スレッドの一部です。そのため、集中的な I/O ワークロードの実行時に、仮想マシン全体の応答性が低下する可能性があります。I/O 操作を専用の IOThread に分離することで、仮想マシンの応答性とパフォーマンスを大幅に向上させることができます。

手順

  1. 選択した仮想マシンが実行中の場合はシャットダウンします。
  2. ホストで、仮想マシンの XML 設定に <iothreads> タグを追加または編集します。たとえば、testguest1 仮想マシンに 1 つの IOThread を作成するには、次のようにします。

    # virsh edit <testguest1>
    
    <domain type='kvm'>
      <name>testguest1</name>
      ...
      <vcpu placement='static'>8</vcpu>
      <iothreads>1</iothreads>
      ...
    </domain>
    Copy to Clipboard Toggle word wrap
    注記

    最適な結果を得るには、ホスト上の CPU ごとに 1 - 2 個の IOThreads のみを使用してください。

  3. 仮想マシンディスクに専用の IOThread を割り当てます。たとえば、ID が 1IOThreadtestguest1 仮想マシン上のディスクに割り当てるには、次のように指定します。

    # virsh edit <testguest1>
    
    <domain type='kvm'>
      <name>testguest1</name>
      ...
      <devices>
        <disk type='file' device='disk'>
          <driver name='qemu' type='raw' cache='none' io='native' iothread='1'/>
          <source file='/var/lib/libvirt/images/test-disk.raw'/>
          <target dev='vda' bus='virtio'/>
          <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
        </disk>
        ...
      </devices>
      ...
    </domain>
    Copy to Clipboard Toggle word wrap
    注記

    IOThread の ID は 1 から始まります。ディスクごとに 1 つの IOThread のみを割り当てる必要があります。

    通常、最適なパフォーマンスを得るには、仮想マシンごとに 1 つの専用 IOThread で十分です。

  4. virtio-scsi ストレージデバイスを使用する場合は、virtio-scsi コントローラーに専用の IOThread を割り当てます。たとえば、ID が 1IOThreadtestguest1 仮想マシン上のコントローラーに割り当てるには、次のように指定します。

    # virsh edit <testguest1>
    
    <domain type='kvm'>
      <name>testguest1</name>
      ...
      <devices>
        <controller type='scsi' index='0' model='virtio-scsi'>
          <driver iothread='1'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
        </controller>
        ...
      </devices>
      ...
    </domain>
    Copy to Clipboard Toggle word wrap

検証

18.5.5. 仮想ディスクキャッシュの設定

KVM にはいくつかの仮想ディスクキャッシュモードがあります。集中的な入出力 (IO) ワークロードがある場合は、最適なキャッシュモードを選択すると、仮想マシン (VM) のパフォーマンスが大幅に向上します。

writethrough
ホストのページキャッシュが読み取り専用として使用されます。データがストレージデバイスにコミットされた場合にのみ、書き込みが完了したと報告されます。このモードでは、持続的な IO パフォーマンスは低下しますが、書き込みが十分に保証されます。
writeback
ホストのページキャッシュが読み取りと書き込みの両方に使用されます。データが物理ストレージではなくホストのメモリーキャッシュに到達したときに、書き込みが完了したと報告されます。このモードは writethrough よりも IO パフォーマンスが高速ですが、ホスト障害時にデータが失われる可能性があります。
none
ホストのページキャッシュが完全に回避されます。このモードは物理ディスクの書き込みキューに直接依存します。そのため、予測可能な持続的な IO パフォーマンスが得られ、安定したゲスト上で書き込みが十分に保証されます。これは、仮想マシンライブマイグレーションのための安全なキャッシュモードでもあります。

手順

  1. 選択した仮想マシンが実行中の場合はシャットダウンします。
  2. 選択した仮想マシンの XML 設定を編集します。

    # virsh edit <vm_name>
    Copy to Clipboard Toggle word wrap
  3. ディスクデバイスを見つけて、driver タグの cache オプションを編集します。

    <domain type='kvm'>
      <name>testguest1</name>
      ...
      <devices>
        <disk type='file' device='disk'>
          <driver name='qemu' type='raw' cache='none' io='native' iothread='1'/>
          <source file='/var/lib/libvirt/images/test-disk.raw'/>
          <target dev='vda' bus='virtio'/>
          <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
        </disk>
        ...
      </devices>
      ...
    </domain>
    Copy to Clipboard Toggle word wrap

18.6. 仮想マシンの CPU パフォーマンスの最適化

vCPU は、ホストマシンの物理 CPU と同様、仮想マシンのパフォーマンスにおいて極めて重要です。したがって、vCPU を最適化すると、仮想マシンのリソース効率に大きな影響を及ぼす可能性があります。vCPU を最適化するには、以下を実行します。

  1. 仮想マシンに割り当てられているホスト CPU の数を調整します。これは、CLI または Web コンソール を使用して実行できます。
  2. vCPU モデルが、ホストの CPU モデルに調整されていることを確認します。たとえば、仮想マシン testguest1 を、ホストの CPU モデルを使用するように設定するには、次のコマンドを実行します。

    # virt-xml testguest1 --edit --cpu host-model
    Copy to Clipboard Toggle word wrap
  3. カーネルの同一ページマージ (KSM) を管理します
  4. ホストマシンが Non-Uniform Memory Access (NUMA) を使用する場合は、その仮想マシンに対して NUMA を設定 することもできます。これにより、ホストの CPU およびメモリープロセスが、仮想マシンの CPU およびメモリープロセスにできるだけ近くにマッピングされます。事実上、NUMA チューニングにより、仮想マシンに割り当てられたシステムメモリーへのより効率的なアクセスが可能になります。これにより、仮想 CPU 処理の効果が改善されます。

    詳細は、仮想マシンでの NUMA の設定 および 特定のワークロードに合わせた仮想マシンのパフォーマンスの最適化 を参照してください。

18.6.1. 仮想 CPU のオーバーコミット

仮想 CPU (vCPU) のオーバーコミットを使用すると、ホスト上で実行される仮想マシン (VM) 内の全仮想 CPU の合計数が、ホスト上の物理 CPU の数を超える設定が可能になります。ただし、ホスト上で物理的に使用可能なコア数よりも多くのコアを仮想マシンで同時に実行すると、パフォーマンスが低下する可能性があります。

最高のパフォーマンスを得るには、各仮想マシンで目的のワークロードを実行するのに必要な数の仮想 CPU だけを仮想マシンに割り当てます。

仮想 CPU のオーバーコミットに関する推奨事項:

  • 最高のパフォーマンスを得るために、仮想マシンのワークロードに必要な最小限の仮想 CPU を割り当てます。
  • 詳細なテストを行わずに実稼働環境で仮想 CPU をオーバーコミットすることは避けてください。
  • 仮想 CPU をオーバーコミットする場合、負荷が 100% 未満のときは、通常、仮想 CPU と物理 CPU の比率を 5 対 1 にするのが安全です。
  • 物理プロセッサーコアごとに合計 10 個を超える仮想 CPU を割り当てることは推奨されません。
  • 高負荷時のパフォーマンス低下を防ぐために CPU 使用率を監視します。
重要

オーバーコミットされた環境では、メモリーを 100% 使用するアプリケーションや処理リソースが不安定になる可能性があります。CPU のオーバーコミット率はワークロードに依存するため、詳細なテストを行わずに実稼働環境でメモリーや CPU をオーバーコミットしないでください。

18.6.2. コマンドラインを使用した仮想 CPU の追加と削除

仮想マシンの CPU パフォーマンスを増減するには、仮想マシンに割り当てられた仮想 CPU (vCPU) を追加または削除します。

実行中の仮想マシンで実行する場合、これは仮想 CPU のホットプラグおよびホットアンプラグとも呼ばれます。ただし、仮想 CPU のホットアンプラグは、RHEL 10 ではサポートされていません。Red Hat はこれを使用しないことを強く推奨しています。

手順

  1. オプション: 選択した仮想マシンで仮想 CPU の現在の状態を表示します。たとえば、仮想マシン testguest 上の仮想 CPU の数を表示するには、次のコマンドを実行します。

    # virsh vcpucount testguest
    maximum      config         4
    maximum      live           2
    current      config         2
    current      live           1
    Copy to Clipboard Toggle word wrap

    この出力は、testguest が現在 1 つの仮想 CPU を使用しており、仮想マシンのパフォーマンスを向上させるために、さらに 1 つの仮想 CPU をホットプラグできることを示しています。ただし、再起動後は、testguest が使用する仮想 CPU の数が 2 に変わり、さらに 2 つの仮想 CPU をホットプラグできるようになります。

  2. 仮想マシンに接続できる仮想 CPU の最大数を調整します。この最大数は仮想マシンの次回の起動時に有効になります。

    たとえば、仮想マシン testguest の vCPU の最大数を 8 に増やすには、次のコマンドを実行します。

    # virsh setvcpus testguest 8 --maximum --config
    Copy to Clipboard Toggle word wrap

    最大値は、CPU トポロジー、ホストハードウェア、ハイパーバイザー、およびその他の要素によって制限される可能性があることに注意してください。

  3. 仮想マシンに接続されている仮想 CPU の現在の数を、前のステップで設定した最大値に変更します。以下に例を示します。

    • 実行中の testguest 仮想マシンに接続されている仮想 CPU の数を 4 に増やすには、次のコマンドを実行します。

      # virsh setvcpus testguest 4 --live
      Copy to Clipboard Toggle word wrap

      これにより、仮想マシンの次回の起動まで、仮想マシンのパフォーマンスおよび testguest のホスト負荷のフットプリントが高まります。

    • testguest 仮想マシンに接続されている仮想 CPU の数を永続的に 1 に減らすには、次のコマンドを実行します。

      # virsh setvcpus testguest 1 --config
      Copy to Clipboard Toggle word wrap

      これにより、仮想マシンの次回の起動後に、仮想マシンのパフォーマンスおよび testguest のホスト負荷のフットプリントが低下します。ただし、必要に応じて、追加の仮想 CPU を仮想マシンにホットプラグして、一時的にパフォーマンスを向上させることができます。

検証

  • 仮想マシンで仮想 CPU の現在の状態に変更が反映されていることを確認します。

    # virsh vcpucount testguest
    maximum      config         8
    maximum      live           4
    current      config         1
    current      live           4
    Copy to Clipboard Toggle word wrap

18.6.3. Web コンソールを使用した仮想 CPU の管理

RHEL 10 Web コンソールを使用して、Web コンソールが接続されている仮想マシン (VM) で使用される仮想 CPU を確認および設定できます。

前提条件

手順

  1. RHEL 10 Web コンソールにログインします。
  2. 仮想マシン インターフェイスで、情報を表示する仮想マシンを選択します。

    新しいページが開き、選択した仮想マシンに関する基本情報を含む Overview セクションと、仮想マシンのグラフィカルインターフェイスにアクセスするための Console セクションが表示されます。

  3. 概要ペインで、vCPU の数の横にある 編集 をクリックします。

    vCPU の詳細ダイアログが表示されます。

  4. 選択した仮想マシンの仮想 CPU を設定します。

    • vCPU 数: 現在使用中の vCPU の数

      注記

      vCPU 数は、vCPU 最大値以下にする必要があります。

    • vCPU 最大値 - 仮想マシンに設定できる仮想 CPU の最大数を入力します。この値が vCPU 数 よりも大きい場合には、vCPU を追加で仮想マシンに割り当てることができます。
    • ソケット - 仮想マシンに公開するソケットの数を選択します。
    • ソケットごとのコア - 仮想マシンに公開する各ソケットのコア数を選択します。
    • コアあたりのスレッド - 仮想マシンに公開する各コアのスレッド数を選択します。

      重要

      SocketsCores per socket、および Threads per core オプションは、仮想マシンの CPU トポロジーを調整することに注意してください。これは、vCPU のパフォーマンスにメリットがあり、ゲスト OS の特定のソフトウェアの機能に影響を与える可能性があります。デプロイメントで別の設定が必要ない場合は、デフォルト値のままにします。

  5. Apply をクリックします。

    仮想マシンに仮想 CPU が設定されます。

  6. 仮想マシンが実行中の場合は、仮想 CPU 設定の変更を適用するために、仮想マシンを再起動します。

18.6.4. 仮想マシンでの NUMA の設定

RHEL 10 ホスト上の仮想マシン (VM) の Non-Uniform Memory Access (NUMA) を設定するには、いくつかの方法を使用できます。

使いやすさのため、自動化ユーティリティーとサービスを使用して、仮想マシンの NUMA を設定できます。ただし、手動で NUMA を設定すると、パフォーマンスが大幅に向上する可能性が高くなります。

前提条件

  • ホストが NUMA 対応のマシンである。これを確認するには、virsh nodeinfo コマンドを使用して、NUMA cell(s) の行を確認します。

    # 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
    Copy to Clipboard Toggle word wrap

    行の値が 2 以上であると、そのホストは NUMA に対応しています。

  • オプション: numactl パッケージがホストにインストールされている。

    # dnf install numactl
    Copy to Clipboard Toggle word wrap

手順

  1. 仮想マシンの NUMA ポリシーを Preferred に設定します。たとえば、testguest5 仮想マシンを設定するには、次のコマンドを実行します。

    # virt-xml testguest5 --edit --vcpus placement=auto
    # virt-xml testguest5 --edit --numatune mode=preferred
    Copy to Clipboard Toggle word wrap
  2. 仮想マシンの CPU とメモリーリソースを自動的に整合させるために、numad サービスを設定します。

    # echo 1 > /proc/sys/kernel/numa_balancing
    Copy to Clipboard Toggle word wrap
  3. numad サービスを起動します。

    # systemctl start numad
    Copy to Clipboard Toggle word wrap
  4. オプション: NUMA 設定を手動でチューニングします。特定の仮想マシンに明示的に割り当てるホストの NUMA ノードを指定します。これにより、仮想マシンの vCPU によるホストメモリーの使用率が向上します。

    1. numactl コマンドを使用して、ホスト上の NUMA トポロジーを表示します。

      # numactl --hardware
      
      available: 2 nodes (0-1)
      node 0 size: 18156 MB
      node 0 free: 9053 MB
      node 1 size: 18180 MB
      node 1 free: 6853 MB
      node distances:
      node   0   1
        0:  10  20
        1:  20  10
      Copy to Clipboard Toggle word wrap
    2. 仮想マシンの XML 設定を編集して、特定の NUMA ノードに CPU およびメモリーリソースを割り当てます。たとえば、次の設定では、testguest6 が NUMA ノード 0 の仮想 CPU 0 - 7 と NUMA ノード 1 の仮想 CPU 8 - 15 を使用するように指定します。両方のノードに 16 GiB の仮想マシンメモリーも割り当てます。

      # virsh edit <testguest6>
      
      <domain type='kvm'>
        <name>testguest6</name>
        ...
        <vcpu placement='static'>16</vcpu>
        ...
        <cpu ...>
          <numa>
            <cell id='0' cpus='0-7' memory='16' unit='GiB'/>
            <cell id='1' cpus='8-15' memory='16' unit='GiB'/>
          </numa>
        ...
      </domain>
      Copy to Clipboard Toggle word wrap
      注記

      最高のパフォーマンス結果を得るために、ホスト上の各 NUMA ノードの最大メモリーサイズに従うことを推奨します。

    3. 仮想マシンが実行中の場合は、再起動して設定を適用します。

18.6.5. 仮想 CPU ピニングの設定

仮想マシン (VM) の CPU パフォーマンスを向上させるために、ホスト上の特定の物理 CPU スレッドに仮想 CPU (vCPU) をピニングすることができます。これにより、仮想 CPU に専用の物理 CPU スレッドが確保され、仮想 CPU のパフォーマンスが大幅に向上します。

CPU パフォーマンスをさらに最適化するために、指定の仮想マシンに関連付けられた QEMU プロセススレッドを、特定のホスト CPU にピニングすることもできます。

手順

  1. ホストの CPU トポロジーを確認します。

    # lscpu -p=node,cpu
    
    Node,CPU
    0,0
    0,1
    0,2
    0,3
    0,4
    0,5
    0,6
    0,7
    1,0
    1,1
    1,2
    1,3
    1,4
    1,5
    1,6
    1,7
    Copy to Clipboard Toggle word wrap

    この例では、NUMA ノードとホスト上の使用可能な物理 CPU スレッドが出力に含まれています。

  2. 仮想マシン内の仮想 CPU スレッドの数を確認します。

    # lscpu -p=node,cpu
    
    Node,CPU
    0,0
    0,1
    0,2
    0,3
    Copy to Clipboard Toggle word wrap

    この例では、NUMA ノードと仮想マシン内の使用可能な仮想 CPU スレッドが出力に含まれています。

  3. 仮想マシンの特定の仮想 CPU スレッドを、特定のホスト CPU または CPU の範囲にピニングします。これは、仮想 CPU のパフォーマンスを向上させる安全な方法として推奨されます。

    たとえば、次のコマンドは、testguest6 仮想マシンの仮想 CPU スレッド 0 - 3 を、それぞれホスト CPU 1、3、5、7 にピニングします。

    # virsh vcpupin testguest6 0 1
    # virsh vcpupin testguest6 1 3
    # virsh vcpupin testguest6 2 5
    # virsh vcpupin testguest6 3 7
    Copy to Clipboard Toggle word wrap
  4. オプション: 仮想 CPU スレッドが CPU に正常にピニングされているかどうかを確認します。

    # virsh vcpupin testguest6
    VCPU   CPU Affinity
    ----------------------
    0      1
    1      3
    2      5
    3      7
    Copy to Clipboard Toggle word wrap
  5. オプション: 仮想 CPU スレッドのピニング後に、指定の仮想マシンに関連付けられた QEMU プロセススレッドを、特定のホスト CPU、または CPU の範囲にピニングすることもできます。これにより、QEMU プロセスが物理 CPU 上でより効率的に実行されるようになります。

    たとえば、次のコマンドは、testguest6 の QEMU プロセススレッドを CPU 2 および 4 にピニングし、これが成功したことを確認します。

    # virsh emulatorpin testguest6 2,4
    # virsh emulatorpin testguest6
    emulator: CPU Affinity
    ----------------------------------
           *: 2,4
    Copy to Clipboard Toggle word wrap

18.6.6. 仮想 CPU キャッピングの設定

仮想 CPU (vCPU) キャッピングを使用すると、仮想マシン (VM) が使用できる CPU リソースの量を制限できます。1 台の仮想マシンによるホストの CPU リソースの過剰な使用を防ぎ、ハイパーバイザーによる CPU スケジューリングの管理を容易にすることで、全体的なパフォーマンスを向上させることができます。

手順

  1. ホストの現在の仮想 CPU スケジューリング設定を表示します。

    # virsh schedinfo <vm_name>
    
    Scheduler      : posix
    cpu_shares     : 0
    vcpu_period : 0
    vcpu_quota : 0
    emulator_period: 0
    emulator_quota : 0
    global_period  : 0
    global_quota   : 0
    iothread_period: 0
    iothread_quota : 0
    Copy to Clipboard Toggle word wrap
  2. 仮想マシンの絶対的な仮想 CPU キャップを設定するには、vcpu_period および vcpu_quota パラメーターを設定します。どちらのパラメーターも、マイクロ秒単位の時間の長さを表す数値を使用します。

    1. virsh schedinfo コマンドを使用して vcpu_period パラメーターを設定します。以下に例を示します。

      # virsh schedinfo <vm_name> --set vcpu_period=100000
      Copy to Clipboard Toggle word wrap

      この例では、vcpu_period は 100,000 マイクロ秒に設定されています。これは、スケジューラーがこの時間間隔中に仮想 CPU キャッピングを適用することを意味します。

      --live --config オプションを使用して、実行中の仮想マシンを再起動せずに設定することもできます。

    2. virsh schedinfo コマンドを使用して vcpu_quota パラメーターを設定します。以下に例を示します。

      # virsh schedinfo <vm_name> --set vcpu_quota=50000
      Copy to Clipboard Toggle word wrap

      この例では、vcpu_quota は 50,000 マイクロ秒に設定されています。これは、vcpu_period 時間間隔中に仮想マシンが使用できる CPU 時間の最大量を指定します。この場合、vcpu_quotavcpu_period の半分に設定されているため、仮想マシンはその間隔中に CPU 時間の最大 50% を使用できます。

      --live --config オプションを使用して、実行中の仮想マシンを再起動せずに設定することもできます。

検証

  • 仮想 CPU スケジューリングのパラメーターの値が正しいことを確認します。

    # virsh schedinfo <vm_name>
    
    Scheduler      : posix
    cpu_shares     : 2048
    vcpu_period    : 100000
    vcpu_quota     : 50000
    ...
    Copy to Clipboard Toggle word wrap

18.6.7. CPU 重みの調整

CPU 重み (または CPU シェア) 設定は、実行中の他の仮想マシンと比較して、仮想マシン (VM) が受け取る CPU 時間を制御するものです。特定の仮想マシンの CPU 重み を増やすことで、この仮想マシンが他の仮想マシンよりも多くの CPU 時間を確保できるようになります。複数の仮想マシン間で CPU 時間の割り当ての優先度を設定するには、cpu_shares パラメーターを設定します。

指定可能な CPU 重み値の範囲は 0 から 262144 です。新しい KVM 仮想マシンのデフォルト値は 1024 です。

手順

  1. 仮想マシンの現在の CPU 重み を確認します。

    # virsh schedinfo <vm_name>
    
    Scheduler      : posix
    cpu_shares : 1024
    vcpu_period    : 0
    vcpu_quota     : 0
    emulator_period: 0
    emulator_quota : 0
    global_period  : 0
    global_quota   : 0
    iothread_period: 0
    iothread_quota : 0
    Copy to Clipboard Toggle word wrap
  2. CPU 重み を希望の値に調整します。

    # virsh schedinfo <vm_name> --set cpu_shares=2048
    
    Scheduler      : posix
    cpu_shares : 2048
    vcpu_period    : 0
    vcpu_quota     : 0
    emulator_period: 0
    emulator_quota : 0
    global_period  : 0
    global_quota   : 0
    iothread_period: 0
    iothread_quota : 0
    Copy to Clipboard Toggle word wrap

    この例では、cpu_shares は 2048 に設定されています。そのため、他のすべての仮想マシンの値が 1024 に設定されている場合、この仮想マシンには約 2 倍の CPU 時間が割り当てられます。

    --live --config オプションを使用して、実行中の仮想マシンを再起動せずに設定することもできます。

18.6.8. Kernel Same-Page Merging の有効化と無効化

Kernel Same-Page Merging (KSM) は、仮想マシン (VM) 間で同一のメモリーページを共有することにより、メモリー密度を向上させます。したがって、KSM を有効にすると、仮想マシンデプロイメントのメモリー効率が向上する可能性があります。

ただし、KSM を有効にすると、CPU 使用率も増加し、ワークロードによっては全体的なパフォーマンスに悪影響が生じる可能性があります。

RHEL 10 では、KSM はデフォルトで無効になっています。KSM を有効にして仮想マシンパフォーマンスへの影響をテストするには、次の手順を参照してください。

前提条件

  • ホストシステムへのルートアクセス。

手順

  1. KSM を有効にします。

    警告

    KSM を有効にすると、CPU 使用率が増大し、CPU 全体のパフォーマンスに影響を及ぼします。

    1. ksmtuned サービスをインストールします。

      # dnf install ksmtuned
      Copy to Clipboard Toggle word wrap
    2. サービスを起動します。

      • KSM を単一セッションの間だけ有効にするには、systemctl ユーティリティーを使用して ksm および ksmtuned サービスを開始します。

        # systemctl start ksm
        # systemctl start ksmtuned
        Copy to Clipboard Toggle word wrap
      • KSM を永続的に有効にするには、systemctl ユーティリティーを使用して ksm サービスおよび ksmtuned サービスを有効にします。

        # systemctl enable ksm
        Created symlink /etc/systemd/system/multi-user.target.wants/ksm.service → /usr/lib/systemd/system/ksm.service
        
        # systemctl enable ksmtuned
        Created symlink /etc/systemd/system/multi-user.target.wants/ksmtuned.service → /usr/lib/systemd/system/ksmtuned.service
        Copy to Clipboard Toggle word wrap
  2. ホスト上の仮想マシンのパフォーマンスとリソース消費を監視して、KSM を有効にすることによる利点を評価します。具体的には、KSM による CPU 使用率の増加によってメモリーの改善が相殺されないこと、および別のパフォーマンスの問題が発生しないことを確認します。レイテンシーの影響を受けやすいワークロードでは、NUMA 間のページマージにも注意してください。
  3. オプション: KSM によって仮想マシンのパフォーマンスが向上しない場合は、無効にします。

    • KSM を単一セッションの間だけ無効にするには、systemctl ユーティリティーを使用して ksm および ksmtuned サービスを停止します。

      # systemctl stop ksm
      # systemctl stop ksmtuned
      Copy to Clipboard Toggle word wrap
    • KSM を永続的に無効にするには、systemctl ユーティリティーを使用して ksm および ksmtuned サービスを無効にします。

      # systemctl disable ksm
      Removed /etc/systemd/system/multi-user.target.wants/ksm.service.
      # systemctl disable ksmtuned
      Removed /etc/systemd/system/multi-user.target.wants/ksmtuned.service.
      Copy to Clipboard Toggle word wrap
      注記

      KSM を無効にする前に仮想マシン間で共有されていたメモリーページは、そのまま共有されます。共有を停止するには、以下のコマンドを使用して、システムの PageKSM ページをすべて削除します。

      # echo 2 > /sys/kernel/mm/ksm/run
      Copy to Clipboard Toggle word wrap

      ただし、このコマンドはメモリー使用量を増加させ、ホストまたは仮想マシンでパフォーマンスの問題を引き起こす可能性があります。

18.7. 仮想マシンのネットワークパフォーマンスの最適化

仮想マシンのネットワークインターフェイスコントローラー (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
      Copy to Clipboard Toggle word wrap

      このコマンドの出力が空白である場合は、vhost_net カーネルモジュールを有効にします。

      # modprobe vhost_net
      Copy to Clipboard Toggle word wrap
  • multi-queue virtio-net の設定

    仮想マシンに multi-queue 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>
    Copy to Clipboard Toggle word wrap

    仮想マシンが実行中の場合は、再起動して変更を適用します。

    • ネットワークパケットのバッチ処理

      転送パスが長い Linux の仮想マシン設定では、パケットをバッチ処理してからカーネルに送信することで、キャッシュが有効に活用される場合があります。パケットバッチ機能を設定するには、ホストで次のコマンドを実行し、tap0 を、仮想マシンが使用するネットワークインターフェイスの名前に置き換えます。

      # ethtool -C tap0 rx-frames 64
      Copy to Clipboard Toggle word wrap
    • SR-IOV

      ホスト NIC が SR-IOV に対応している場合は、vNIC に SR-IOV デバイス割り当てを使用します。

      詳細は、SR-IOV デバイスの管理 を参照してください。

18.8. 仮想マシンのパフォーマンス監視ツール

最も多くの仮想マシンリソースを消費するものと、仮想マシンで最適化を必要とする部分を認識するために、一般的なパフォーマンス診断ツールや仮想マシン固有のパフォーマンス診断ツールを使用できます。

デフォルトの OS パフォーマンス監視ツール

標準のパフォーマンス評価には、ホストおよびゲストのオペレーティングシステムでデフォルトで提供されるユーティリティーを使用できます。

  • RHEL 10 ホストで、root として top ユーティリティーまたは システムモニター アプリケーションを使用し、出力で qemuvirt を確認します。これは、仮想マシンが消費しているホストシステムのリソースのサイズを示します。

    • 監視ツールにおいて、qemu プロセスまたは virt プロセスのいずれかで、ホストの CPU またはメモリーの容量を大幅に消費していることが示されている場合は、perf ユーティリティーを使用して調査を行います。詳細は以下を参照してください。
    • さらに、たとえば vhost_net-1234 という名前の vhost_net スレッドプロセスがホストの CPU 容量を過剰に消費していると表示される場合は、multi-queue virtio-net などの 仮想ネットワーク最適化機能 の使用を検討してください。
  • ゲストオペレーティングシステムでは、システムで利用可能なパフォーマンスユーティリティーとアプリケーションを使用して、どのプロセスが最も多くのシステムリソースを消費するかを評価します。

    • Linux システムでは、top ユーティリティーを使用できます。
    • Windows システムでは、Task Manager アプリケーションを使用できます。

perf kvm

perf ユーティリティーを使用すると、RHEL 10 ホストのパフォーマンスに関する仮想化固有の統計を収集および分析できます。これを行うには、以下を行います。

  1. ホストに、perf パッケージをインストールします。

    # dnf install perf
    Copy to Clipboard Toggle word wrap
  2. perf kvm stat コマンドの 1 つを使用して、仮想化ホストの 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 を適切に処理していないことを示しています。このような場合は、アクティブな仮想マシンの一部をシャットダウンするか、アクティブな仮想マシンから仮想 CPU を削除するか、仮想 CPU のパフォーマンスを調整 することを検討してください。

    # 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.
    Copy to Clipboard Toggle word wrap

    perf kvm stat の出力で問題を知らせる他のイベントタイプには、以下が含まれます。

perf を使用して仮想化パフォーマンスを監視する方法の詳細は、システム上の perf-kvm(1) man ページを参照してください。

numastat

システムの現在の NUMA 設定を表示するには、numastat ユーティリティーを使用できます。これは numactl パッケージをインストールすることで利用できます。

以下は、4 つの実行中の仮想マシンが含まれるホストを示しています。それぞれは、複数の NUMA ノードからメモリーを取得しています。これは仮想 CPU のパフォーマンスには最適ではないため、調整が必要です

# 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
Copy to Clipboard Toggle word wrap

一方、以下では、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
Copy to Clipboard Toggle word wrap

第19章 仮想マシンの保護

仮想マシン (VM) を使用する RHEL 10 システムの管理者は、仮想マシンのセキュリティーをできる限り確保することで、ゲストおよびホストの OS が悪意のあるソフトウェアに感染するリスクを大幅に低減することができます。

次のセクションでは、RHEL 10 ホスト上の 仮想マシンを保護する仕組み を概説し、仮想マシンのセキュリティーを強化する 方法のリスト を示します。

19.1. 仮想マシンでセキュリティーが機能する仕組み

仮想マシンを使用する場合は、複数のオペレーティングシステムを 1 台のホストマシンに格納できます。このシステムは、ハイパーバイザーを介してホストに接続しますが、通常は仮想ネットワークを介して接続します。したがって、各仮想マシンを、悪意のあるソフトウェアでホストを攻撃するベクトルとして使用できます。また、ホストも、仮想マシンを攻撃するベクトルとして使用できます。

図19.1 仮想化ホストの潜在的なマルウェア攻撃ベクトル

仮想のセキュリティーが攻撃に成功

ハイパーバイザーはホストカーネルを使用して仮想マシンを管理します。そのため、仮想マシンのオペレーティングシステム上で実行されているサービスが、悪意のあるコードをホストシステムに注入するのによく使用されます。しかし、ホストシステムとゲストシステムの さまざまなセキュリティー機能 を使用することで、このようなセキュリティーの脅威からシステムを保護できます。

このような SELinux や QEMU サンドボックスなどの機能は、悪意のあるコードがハイパーバイザーを攻撃し、ホストと仮想マシンとの間の転送をより困難にするさまざまな対策を提供します。

図19.2 仮想化ホストでマルウェア攻撃を阻止

仮想のセキュリティーが攻撃を防ぐ

RHEL 10 が仮想マシンのセキュリティーのために提供する機能の多くは、常にアクティブであり、有効にしたり設定したりする必要はありません。詳細は、仮想マシンのセキュリティーのデフォルト機能 を参照してください。

さらに、仮想マシンおよびハイパーバイザーの脆弱性を最小限に抑えるために、さまざまなベストプラクティスを実行することもできます。詳細は、仮想マシンのセキュリティー保護に関するベストプラクティス を参照してください。

19.2. 仮想マシンのセキュリティー保護に関するベストプラクティス

以下の手順を行うと、仮想マシンが悪意のあるコードに感染し、ホストシステムに侵入するための攻撃ベクトルとして使用されるリスクが大幅に低減します。

ゲストで以下を行います。

  • 仮想マシンを、物理マシンと同じように保護します。セキュリティーを強化するのに使用できる方法は、ゲスト OS によって異なります。

    仮想マシンで RHEL 10 を実行している場合は、RHEL 10 のセキュリティー保護 で、ゲストシステムのセキュリティーを強化するための詳細な手順を参照してください。

ホストで以下を行います。

  • 仮想マシンをリモートで管理する場合は、SSH などの暗号化ユーティリティーと、SSL などのネットワークプロトコルを使用して仮想マシンに接続します。
  • SELinux が Enforcing モードであることを確認します。

    # getenforce
    Enforcing
    Copy to Clipboard Toggle word wrap

    SELinux が無効または Permissive モードになっている場合は、SELinux の使用 で Enforcing モードを有効にする手順を参照してください。

    注記

    SELinux の Enforcing モードでは、RHEL 10 の sVirt 機能も有効になります。これは、仮想化に使用される特別な SELinux ブール値のセットです。この値を 手動で調整 して、仮想マシンのセキュリティーを詳細に管理できます。

  • SecureBoot で仮想マシンを使用します。

    SecureBoot は、仮想マシンが暗号化で署名された OS を実行していることを確認する機能です。これにより、マルウェア攻撃が変更した OS の仮想マシンを起動できなくなります。

    SecureBoot は、AMD64 または Intel 64 ホストで OVMF ファームウェアを使用する Linux 仮想マシンをインストールする場合にのみ適用できます。手順は、SecureBoot の仮想マシンの作成 参照してください。

  • qemu-kvm などの qemu-* コマンドは使用しないでください。

    QEMU は、RHEL 10 の仮想化アーキテクチャーの重要なコンポーネントです。しかし、手動で管理することが難しく、不適切な QEMU 設定によってセキュリティー脆弱性が生じる可能性があります。したがって、Red Hat では、大半の qemu-* コマンドの使用をサポートしていません。代わりに、ベストプラクティスに従って QEMU のオーケストレーションを行うため、virshvirt-installvirt-xml などの libvirt ユーティリティーを使用します。

    ただし、仮想ディスクイメージの管理 用に、qemu-img ユーティリティーがサポートされていることに注意してください。

19.3. 仮想マシンのセキュリティーのデフォルト機能

仮想マシンのセキュリティーを強化する手動の方法 (仮想マシンのセキュリティー保護に関するベストプラクティス に記載) に加えて、多数のセキュリティー機能が libvirt ソフトウェアスイートにより提供され、RHEL 10 で仮想化を使用するときに自動的に有効になります。これには以下が含まれます。

システムおよびセッションの接続

RHEL 10 ホストでの仮想マシン管理に使用できるすべてのユーティリティーにアクセスするには、libvirtシステム接続 (qemu:///system) を使用する必要があります。そのためには、システムで root 権限を持っているか、libvirt ユーザーグループの一部である必要があります。

libvirt グループに属していない root 以外のユーザーは、libvirtセッション接続 (qemu:///session) にのみアクセスできます。セッション接続では、リソースにアクセスする際に、ローカルユーザーのアクセス権に従う必要があります。

詳細は、仮想化のユーザー空間接続タイプ を参照してください。

仮想マシンの分離
個々の仮想マシンは、ホストで孤立したプロセスとして動作し、ホストカーネルにより強制されるセキュリティーに依存します。したがって、仮想マシンは、同じホストにある他の仮想マシンのメモリーやストレージを読み取ったり、アクセスすることができません。
QEMU サンドボックス
QEMU コードが、ホストのセキュリティーを侵害する可能性のあるシステムコールを実行できない機能です。
KASLR (Kernel Address Space Randomization)
カーネルイメージをデプロイメントする物理アドレスおよび仮想アドレスをランダム化できるようにします。したがって、KASLR は、カーネルオブジェクトの場所に基づいて、ゲストのセキュリティーが悪用されるのを防ぎます。

19.4. Windows 仮想マシンでの標準ハードウェアセキュリティーの有効化

Windows 仮想マシンを保護するには、Windows デバイスの標準ハードウェア機能を使用して基本的なレベルのセキュリティーを有効にします。

前提条件

  • 最新の WHQL 認定 VirtIO ドライバーがインストールされている。
  • 仮想マシンのファームウェアが UEFI ブートに対応している。
  • edk2-OVMF パッケージをホストマシンにインストールしている。

    # dnf install edk2-ovmf
    Copy to Clipboard Toggle word wrap
  • ホストマシンに vTPM パッケージをインストールしている。

    # dnf install swtpm libtpms
    Copy to Clipboard Toggle word wrap
  • 仮想マシンが Q35 マシンアーキテクチャーを使用している。
  • Windows インストールメディアを使用している。

手順

  1. TPM 2.0 を有効にするには、仮想マシンの XML 設定の <devices> セクションに以下のパラメーターを追加します。

    <devices>
    [...]
      <tpm model='tpm-crb'>
        <backend type='emulator' version='2.0'/>
      </tpm>
    [...]
    </devices>
    Copy to Clipboard Toggle word wrap
  2. UEFI モードで Windows をインストールします。

    詳細は、SecureBoot の仮想マシンの作成 を参照してください。

  3. Windows 仮想マシンに VirtIO ドライバーをインストールします。詳細は、Windows ゲストへの virtio ドライバーのインストール を参照してください。
  4. UEFI でセキュアブートを有効にします。詳細は、セキュアブート を参照してください。

検証

  • Windows マシンの デバイスのセキュリティー ページに、以下のメッセージが表示されていることを確認します。

    Settings > Update & Security > Windows Security > Device Security

    Your device meets the requirements for standard hardware security.
    Copy to Clipboard Toggle word wrap

19.5. Windows 仮想マシンでの拡張ハードウェアセキュリティーの有効化

Windows 仮想マシンをさらにセキュアにするために、コード整合性の仮想化ベースの保護 (HVCI (Hypervisor-Protected Code Integrity) とも呼ばれます) を有効にできます。

前提条件

手順

  1. Windows 仮想マシンの XML 設定を開きます。次の例では、Example-L1 VM の設定を開きます。

    # virsh edit Example-L1
    Copy to Clipboard Toggle word wrap
  2. <cpu> セクションで、CPU モードを指定し、ポリシーフラグを追加します。

    重要
    • Intel CPU の場合は、vmx ポリシーフラグを有効にします。
    • AMD CPU の場合は、svm ポリシーフラグを有効にします。
    • カスタムの CPU を指定しない場合は、<cpu mode>host-passthrough に設定できます。
    <cpu mode='custom' match='exact' check='partial'>
        <model fallback='allow'>Skylake-Client-IBRS</model>
        <topology sockets='1' dies='1' cores='4' threads='1'/>
        <feature policy='require' name='vmx'/>
    </cpu>
    Copy to Clipboard Toggle word wrap
  3. XML 設定を保存し、仮想マシンを再起動します。
  4. 仮想マシンオペレーティングシステムで、Core isolation details ページに移動します。

    Settings > Update & Security > Windows Security > Device Security > Core isolation details

  5. スイッチを切り替えて、メモリーの整合性 を有効にします。
  6. 仮想マシンを再起動します。

    注記

    HVCI を有効にするその他の方法は、関連する Microsoft ドキュメントを参照してください。

検証

  • Windows 仮想マシンの デバイスのセキュリティー ページに、以下のメッセージが表示されていることを確認します。

    Settings > Update & Security > Windows Security > Device Security

    Your device meets the requirements for enhanced hardware security.
    Copy to Clipboard Toggle word wrap
  • または、Windows 仮想マシンのシステム情報を確認します。

    1. コマンドプロンプトで msinfo32.exe を実行します。
    2. Virtualization-based security Services Running の下に Credential Guard, Hypervisor enforced Code Integrity がリスト表示されているかどうかを確認します。

19.6. SecureBoot の仮想マシンの作成

SecureBoot 機能を使用する Linux 仮想マシンを作成できます。これにより、仮想マシンで暗号で署名された OS を実行できるようになります。これは、仮想マシンのゲスト OS がマルウェアにより変更された場合に役立ちます。このようなシナリオでは、SecureBoot により仮想マシンが起動しなくなり、ホストマシンへのマルウェアの潜在的な拡散を阻止します。

前提条件

  • 仮想マシンが Q35 マシンタイプである。
  • ホストシステムは AMD64 または Intel 64 アーキテクチャーを使用します。
  • edk2-OVMF パッケージがインストールされている。

    # dnf install edk2-ovmf
    Copy to Clipboard Toggle word wrap
  • オペレーティングシステム (OS) のインストールソースがローカルまたはネットワークで利用できる。これには、以下のいずれかの形式を使用できます。

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

      警告

      RHEL 10 では、ホストの CD-ROM または DVD-ROM デバイスからインストールすることはできません。RHEL 10 で使用可能な仮想マシンインストール方法を使用するときに、インストールソースとして CD-ROM または DVD-ROM を選択すると、インストールが失敗します。詳細は、RHEL 7 or higher can’t install guest OS from CD/DVD-ROM (Red Hat ナレッジベース) を参照してください。

  • 任意: インストールをより速く、簡単に設定するために、キックスタートファイルを利用できます。

手順

  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 rhel10.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-{ProductNumber}.0-installation.iso
    Copy to Clipboard Toggle word wrap
  2. 画面の指示に従って、OS のインストール手順を進めます。

検証

  1. ゲスト OS がインストールされたら、グラフィカルゲストコンソール でターミナルを開くか、SSH を使用 してゲスト OS に接続して、仮想マシンのコマンドラインにアクセスします。
  2. 仮想マシンで SecureBoot が有効になっていることを確認するには、mokutil --sb-state コマンドを使用します。

    # mokutil --sb-state
    SecureBoot enabled
    Copy to Clipboard Toggle word wrap

19.7. 仮想マシンユーザーが使用できるアクションの制限

場合によっては、RHEL 10 でホストされている仮想マシン (VM) のユーザーがデフォルトで実行できるアクションにより、セキュリティーリスクが発生する可能性があります。この場合は、ホストマシンで polkit ポリシーツールキットを使用するように libvirt デーモンを設定して、仮想マシンユーザーに利用可能なアクションを制限できます。

手順

  1. オプション: libvirt に関連するシステムの polkit 制御ポリシーが必要に応じて設定されていることを確認します。

    1. /usr/share/polkit-1/actions/ ディレクトリーおよび /usr/share/polkit-1/rules.d/ ディレクトリーにある libvirt 関連のファイルすべてを検索します。

      # ls /usr/share/polkit-1/actions | grep libvirt
      # ls /usr/share/polkit-1/rules.d | grep libvirt
      Copy to Clipboard Toggle word wrap
    2. ファイルを開き、ルール設定を確認します。

      polkit 制御ポリシーの構文の読み取りに関する詳細は、man polkit を使用します。

    3. libvirt 制御ポリシーを変更します。これを行うには、以下を行います。

      1. /etc/polkit-1/rules.d/ ディレクトリーに新しい .rules ファイルを作成します。
      2. このファイルにカスタムポリシーを追加して保存します。

        libvirt コントロールポリシーの詳細および例は、アップストリームの libvirt ドキュメント を参照してください。

  2. polkit で決定されるアクセスポリシーを使用するように仮想マシンを設定します。

    これを行うには、/etc/libvirt/ ディレクトリーで仮想化ドライバーのすべての設定ファイルを見つけて、それらの access_drivers = [ "polkit" ] 行のコメントを外します。

    # find /etc/libvirt/ -name virt*d.conf -exec sed -i 's/#access_drivers = \[ "polkit" \]/access_drivers = \[ "polkit" \]/g' {} +
    Copy to Clipboard Toggle word wrap
  3. 前の手順で変更した各ファイルで、対応するサービスを再起動します。

    たとえば、/etc/libvirt/virtqemud.conf を変更した場合には、virtqemud サービスを再起動します。

    # systemctl try-restart virtqemud
    Copy to Clipboard Toggle word wrap

検証

  • VM アクションを制限する予定だったユーザーとして、制限されたアクションの 1 つを実行します。

    たとえば、特権のないユーザーがシステムセッションで作成された VM の表示を制限されている場合は、以下を実行します。

    $ virsh -c qemu:///system list --all
    Id   Name           State
    -------------------------------
    Copy to Clipboard Toggle word wrap

    お使いのシステムに 1 つ以上の仮想マシンが存在していても、このコマンドで仮想マシンがリスト表示されない場合は、polkit は特権のないユーザーのアクションを正常に制限します。

トラブルシューティング

  • 現在、polkit を使用するように libvirt を設定すると、libvirt-dbus サービスとの互換性がないため、RHEL 10 Web コンソールを使用 して仮想マシンに接続できなくなります。

    Web コンソールで仮想マシンのきめ細かいアクセス制御が必要な場合は、カスタム D-Bus ポリシーを作成します。詳細は、Red Hat ナレッジベースソリューション How to configure fine-grained control of Virtual Machines in Cockpit を参照してください。

19.8. VNC パスワードの設定

仮想マシン (VM) のグラフィカル出力へのアクセスを管理するには、仮想マシンの VNC コンソールのパスワードを設定できます。

仮想マシンに VNC パスワードが設定されている場合、仮想マシンのユーザーは、たとえば virt-viewer ユーティリティーを使用して仮想マシンの VNC グラフィカルコンソールを表示したり操作したりするときに、パスワードを入力する必要があります。

重要

VNC パスワードは、仮想マシン環境のセキュリティーを確保するのに十分な手段ではありません。詳細は、VNC セキュリティーに関する QEMU のドキュメント を参照してください。

また、VNC パスワードは、仮想マシンの設定にプレーンテキストで保存されます。そのため、パスワードを有効にする場合は、ユーザーが仮想マシン設定を表示できないようにする必要があります。

前提条件

  • VNC パスワードで保護する仮想マシンに VNC グラフィックスが設定されている。

    これが当てはまるかどうかを確認するには、次のように virsh dumpxml コマンドを使用します。

    # virsh dumpxml <vm-name> | grep graphics
    
     <graphics type='vnc' ports='-1' autoport=yes listen=127.0.0.1>
     </graphics>
    Copy to Clipboard Toggle word wrap

手順

  1. VNC パスワードを割り当てる仮想マシンの設定を開きます。

    # virsh edit <vm-name>
    Copy to Clipboard Toggle word wrap
  2. 設定の <graphics> 行に、passwd 属性とパスワード文字列を追加します。パスワードは 8 文字以下にする必要があります。

     <graphics type='vnc' ports='-1' autoport=yes listen=127.0.0.1 passwd='<password>'>
    Copy to Clipboard Toggle word wrap
    • オプション: さらに、パスワードの有効期限が切れる日時を定義します。

       <graphics type='vnc' ports='-1' autoport=yes listen=127.0.0.1 passwd='<password>' passwdValidTo='2025-02-01T15:30:00'>
      Copy to Clipboard Toggle word wrap

      この例では、パスワードは 2025 年 2 月 1 日 15:30 UTC に期限切れになります。

  3. 設定を保存します。

検証

  1. 変更した仮想マシンを起動します。

    # virsh start <vm-name>
    Copy to Clipboard Toggle word wrap
  2. たとえば、virt-viewer ユーティリティーを使用して、仮想マシンのグラフィカルコンソールを開きます。

    # virt-viewer <vm-name>
    Copy to Clipboard Toggle word wrap

    VNC パスワードが正しく設定されている場合は、パスワードの入力を要求するダイアログウィンドウが表示されます。

19.9. 仮想化用の SELinux ブール値

RHEL 10 は sVirt 機能を備えています。これは特殊な SELinux ブール値のセットであり、SELinux が Enforcing モードのホストで自動的に有効になります。

RHEL 10 システム上の仮想マシンのセキュリティーを細かく設定する場合は、ハイパーバイザーが特定の方法で動作するように、ホストで 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
[...]
Copy to Clipboard Toggle word wrap

特定のブール値を有効にするには、root で setsebool -P boolean_name on コマンドを実行します。ブール値を無効にするには、setsebool -P boolean_name off を使用します。

次の表は、RHEL 10 で使用できる仮想化関連のブール値と、有効にした場合の動作を示しています。

Expand
表19.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 とやり取りできるようになります。

第20章 ホストとその仮想マシン間でのファイルの共有

場合によっては、ホストシステムとそれが実行する仮想マシン (VM) 間でデータを共有することが頻繁に必要になります。これを迅速かつ効率的に行うには、virtio ファイルシステム (virtiofs) を使用できます。

20.1. virtiofs を使用してホストと仮想マシン間でファイルを共有する

virtio ファイルシステム (virtiofs) を使用すると、ホストと仮想マシン (VM) 間で、ローカルファイルシステムの構造と同じように機能するディレクトリーツリーとしてファイルを共有できます。

20.1.1. コマンドラインを使用してホストと Windows 仮想マシン間でファイルを共有する

RHEL 10 をハイパーバイザーとして使用する場合、virtiofs 機能と virtio-win パッケージを使用して、ホストシステムと Windows 仮想マシン (VM) の間でファイルを効率的に共有できます。

注記

virtiofs.exe コマンドと -i パラメーターを使用して、Windows 仮想マシン上で virtiofs サービスを大文字と小文字を区別しないモードで実行できます。

前提条件

手順

  1. 仮想マシンと共有するホストの各ディレクトリーを、仮想マシンの XML 設定の virtiofs ファイルシステムとして設定します。

    1. 目的の仮想マシンの XML 設定を開きます。

      # virsh edit vm-name
      Copy to Clipboard Toggle word wrap
    2. 仮想マシンの XML 設定の <devices> に、以下のようなエントリーを追加します。

      <filesystem type='mount' accessmode='passthrough'>
        <driver type='virtiofs'/>
        <binary path='/usr/libexec/virtiofsd' xattr='on'/>
        <source dir='/root/shared-files'/>
        <target dir='host-file-share'/>
      </filesystem>
      Copy to Clipboard Toggle word wrap

      この例では、ホスト上の /root/shared-files ディレクトリーを仮想マシンに対して host-file-share として表示するように設定します。

  2. 仮想マシンの共有メモリーを設定します。そのためには、共有メモリーバッキングを XML 設定の <domain> セクションに追加します。

    <domain>
     [...]
     <memoryBacking>
       <access mode='shared'/>
     </memoryBacking>
     [...]
    </domain>
    Copy to Clipboard Toggle word wrap
  3. 仮想マシンを起動します。

    # virsh start vm-name
    Copy to Clipboard Toggle word wrap
  4. Windows 仮想マシンで WinFsp をインストールします。これを行うには、virtio-win ISO イメージをマウントし、winfsp MSI インストーラーを起動して、プロンプトに従います。

    インストールウィザードの Custom Setup ウィンドウで、仮想マシンにインストールする機能を選択します。

  5. virtiofs サービスを起動します。

    # sc start VirtioFsSvc
    Copy to Clipboard Toggle word wrap
  6. This PC に移動します。

    File Explorer → This PC

    virtiofs は、正しく設定されている場合、Windows 仮想マシン上で、Z: から逆順に遡る、使用可能な最初のドライブ文字として使用できます。たとえば、my_viofs (Z:) です。

    重要

    共有ディレクトリーにアクセスするには、仮想マシンを再起動するたびに virtiofs サービスを再起動する必要があります。

  7. オプション: 追加の virtiofs インスタンスを設定するには、以下を実行します。

    1. virtiofs サービスを停止します。

      # sc stop VirtioFsSvc
      # sc config VirtioFsSvc start=demand
      Copy to Clipboard Toggle word wrap
    2. 複数の virtiofs インスタンスをセットアップするように WinFSP.Launcher サービスを設定します。

      # "C:\Program Files (x86)\WinFsp\bin\fsreg.bat" virtiofs "<path to the binary>\virtiofs.exe" "-t %1 -m %2"
      Copy to Clipboard Toggle word wrap
    3. virtiofs インスタンスをドライブにマウントします。

      たとえば、mount_tag0 タグを持つ virtiofsY: ドライブにマウントするには、以下を実行します。

      "C:\Program Files (x86)\WinFsp\bin\launchctl-x64.exe" start virtiofs viofsY mount_tag0 Y:
      Copy to Clipboard Toggle word wrap
    4. 前のステップを繰り返して、すべての virtiofs インスタンスをマウントします。
    5. virtiofs インスタンスをアンマウントするには、以下を実行します。

      "C:\Program Files (x86)\WinFsp\bin\launchctl-x64.exe" stop virtiofs viofsY
      Copy to Clipboard Toggle word wrap

検証

  1. Windows 仮想マシンで、This PC に移動します。

    File Explorer → This PC

    • virtiofs サービスのセットアップ時にマウントポイントを指定しなかった場合は、z: から逆順に遡る、使用可能な最初のドライブ文字が使用されます。
    • 複数の virtiofs インスタンスをセットアップした場合、それらはインスタンスに割り当てた文字を持つドライブとして表示されます。

第21章 仮想マシンの問題診断

仮想マシンを使用していると、さまざまな重大度の問題が発生する可能性があります。問題によってはすぐ簡単に修正できる可能性がありますが、仮想マシン関連のデータおよびログを取得して、問題を報告または診断しなければならない場合もあります。

以下のセクションでは、ログの生成および一般的な仮想マシンの問題の診断方法と、このような問題の報告方法を説明します。

21.1. libvirt デバッグログの生成

仮想マシン (VM) の問題を診断するには、libvirt デバッグログを生成して確認することが役立ちます。また仮想マシン関連の問題解決のサポートを受ける場合には、デバッグログを添付すると役立ちます。

21.1.1. libvirt デバッグログについて

デバッグログは、仮想マシンランタイム時に発生するイベント関連のデータが含まれるテキストファイルです。ログには、ホストライブラリーや libvirt デーモンなどのサーバー側の基本機能に関する情報が記録されます。ログファイルには、実行中の全仮想マシンの標準エラー出力 (stderr) も含まれます。

デバッグロギングはデフォルトでは有効になっていないため、libvirt の起動時に有効にする必要があります。

その後、仮想マシンの問題に関するサポートをリクエストするときにログを添付できます。詳細は、サポートリクエストへの libvirt デバッグログの添付 を参照してください。

21.1.2. libvirt デバッグログの永続的な有効化

libvirt の起動時に常に libvirt デバッグログが自動的に有効になるように設定できます。デフォルトでは、virtqemud が RHEL 10 のメインの libvirt デーモンです。libvirt の設定に永続的な変更を加えるには、/etc/libvirt ディレクトリーにある virtqemud.conf ファイルを編集する必要があります。

手順

  1. エディターで virtqemud.conf ファイルを開きます。
  2. 要件に応じてフィルターを置き換えるか、設定します。

    Expand
    表21.1 フィルター値のデバッグ

    1

    libvirt によって生成されたすべてのメッセージをログに記録します。

    2

    すべての非デバッグ情報をログに記録します。

    3

    すべての警告およびエラーメッセージをログに記録します。これはデフォルト値です。

    4

    エラーメッセージのみをログに記録します。

    例21.1 ロギングフィルターのデーモン設定例

    以下の設定を行います。

    • remoteutil.json、および rpc 層からのすべてのエラーメッセージおよび警告メッセージをログに記録します。
    • event レイヤーからのエラーメッセージのみをログに記録します。
    • フィルターされたログを /var/log/libvirt/libvirt.log に保存します。
    log_filters="3:remote 4:event 3:util.json 3:rpc"
    log_outputs="1:file:/var/log/libvirt/libvirt.log"
    Copy to Clipboard Toggle word wrap
  3. 保存して終了します。
  4. libvirt デーモンを再起動します。

    $ systemctl restart virtqemud.service
    Copy to Clipboard Toggle word wrap

21.1.3. 実行時の libvirt デバッグログの有効化

libvirt デーモンの実行時の設定を変更し、デバッグログを有効にして出力ファイルに保存できます。

これは、再起動すると問題が解決してしまうため、または移行やバックアップなどの別のプロセスが同時に実行されているため、libvirt デーモンを再起動できない場合に役立ちます。設定ファイルを編集したり、デーモンを再起動せずにコマンドを試行したりする場合にも、ランタイム設定を変更すると便利です。

前提条件

  • libvirt-admin パッケージがインストールされている。

手順

  1. オプション: アクティブなログフィルターのセットをバックアップします。

    # virt-admin -c virtqemud:///system daemon-log-filters >> virt-filters-backup
    Copy to Clipboard Toggle word wrap

    これにより、ログを生成した後にアクティブなフィルターセットを復元できるようになります。フィルターを復元しないと、メッセージが引き続きログに記録され、システムのパフォーマンスに影響が生じる可能性があります。

  2. virt-admin ユーティリティーを使用してデバッグを有効にし、要件に応じてフィルターを設定します。

    Expand
    表21.2 フィルター値のデバッグ

    1

    libvirt が生成したすべてのメッセージをログに記録します。

    2

    すべての非デバッグ情報をログに記録します。

    3

    すべての警告およびエラーメッセージをログに記録します。これはデフォルト値です。

    4

    エラーメッセージのみをログに記録します。

    例21.2 ロギングフィルターの virt-admin 設定の例

    以下のコマンドを実行します。

    • remoteutil.json、および rpc レイヤーからのエラーメッセージおよび警告メッセージをすべてログに記録します。
    • event レイヤーからのエラーメッセージのみをログに記録します。
    # virt-admin -c virtqemud:///system daemon-log-filters "3:remote 4:event 3:util.json 3:rpc"
    Copy to Clipboard Toggle word wrap
  3. virt-admin ユーティリティーを使用して、ログを特定のファイルまたはディレクトリーに保存します。

    たとえば、以下のコマンドはログ出力を /var/log/libvirt/ ディレクトリーの libvirt.log ファイルに保存します。

    # virt-admin -c virtqemud:///system daemon-log-outputs "1:file:/var/log/libvirt/libvirt.log"
    Copy to Clipboard Toggle word wrap
  4. オプション: フィルターを削除して、仮想マシン関連のすべての情報を含むログファイルを生成することもできます。ただし、このファイルには libvirt のモジュールが生成した多くの冗長情報が含まれる可能性があるため、推奨されません。

    • virt-admin ユーティリティーを使用して空のフィルターのセットを指定します。

      # virt-admin -c virtqemud:///system daemon-log-filters
        Logging filters:
      Copy to Clipboard Toggle word wrap
  5. オプション: 以前に作成したバックアップファイルを使用して、フィルターを元の状態に復元します。

    # virt-admin -c virtqemud:///system daemon-log-filters "<original-filters>"
    Copy to Clipboard Toggle word wrap

    このコマンドの <original-filters> は、virt-filters-backup の内容に置き換えます。

    フィルターを復元しないと、メッセージが引き続きログに記録され、システムのパフォーマンスに影響が生じる可能性があることに注意してください。

21.1.4. サポートリクエストへの libvirt デバッグログの添付

仮想マシンの問題の診断および解決に追加のサポートを依頼する必要がある場合があります。仮想マシン関連の問題を迅速に解決するために、サポートチームが必要な情報すべてにアクセスできるように、サポートリクエストにデバッグログを添付することを強く推奨します。

手順

  • 問題およびサポートを報告するには、サポートケースを作成 してください。
  • 発生した問題に応じて、レポートに以下のログを添付します。

    • libvirt サービスに関する問題の場合は、ホストからの /var/log/libvirt/libvirt.log ファイルを添付します。
    • 特定の仮想マシンに関する問題の場合は、該当するログファイルを添付します。

      たとえば、仮想マシン testguest1 の場合は、/var/log/libvirt/qemu/testguest1.log にある testguest1.log ファイルを添付します。

21.2. 仮想マシンのコアのダンプ

仮想マシンがクラッシュしたり、誤作動した理由を分析する場合は、後で分析と診断を行えるように仮想マシンのコアをディスクのファイルにダンプします。

21.2.1. 仮想マシンのコアダンプの仕組み

仮想マシンでは、数多くの実行中のプロセスを正確かつ効率的に機能させる必要があります。場合によっては、実行中の仮想マシンが、使用中に予期せず終了したり、誤作動したりすることがあります。仮想マシンを再起動すると、データがリセットされたり失われてしまう可能性があり、仮想マシンがクラッシュした問題の正確な診断が困難になります。

このような場合は、virsh dump ユーティリティーを使用して、仮想マシンを再起動する前に仮想マシンのコアをファイルに保存 (または ダンプ) できます。コアダンプファイルには、仮想マシンの生の物理メモリーイメージが含まれ、その中に仮想マシンの詳細情報が含まれます。この情報は、手動、または crash ユーティリティーなどのツールで、仮想マシンの問題診断に使用できます。

21.2.2. 仮想マシンのコアダンプファイルの作成

仮想マシンのコアダンプには、任意の時点における仮想マシンの状態に関する詳細情報が含まれます。この情報は、VM のスナップショットに似ており、VM が誤動作したり、突然シャットダウンしたりした場合に問題を検出するのに役立ちます。

前提条件

  • ファイルを保存するのに十分なディスク領域があることを確認してください。仮想マシンが占有する領域は、その仮想マシンに割り当てられている RAM のサイズによって異なることに注意してください。

手順

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

    たとえば、次のコマンドは、test-guest1 仮想マシンのコア、メモリー、および CPU 共通レジスターファイルを /core/file ディレクトリーの sample-core.file にダンプします。

    # virsh dump test-guest1 /core/file/sample-core.file --memory-only
    Domain 'test-guest1' dumped to /core/file/sample-core.file
    Copy to Clipboard Toggle word wrap
    重要

    crash ユーティリティーは、virsh dump コマンドのデフォルトファイル形式に対応しなくなりました。crash を使用してコアダンプファイルを分析するには、--memory-only オプションを使用してファイルを作成する必要があります。

    また、コアダンプファイルを作成して Red Hat サポートケースに添付する場合は、--memory-only オプションを使用する必要があります。

トラブルシューティング

virsh dump コマンドが System is deadlocked on memory エラーで失敗する場合、コアダンプファイルに十分なメモリーが割り当てられていることを確認してください。これを行うには、以下の crashkernel オプション値を使用します。または、コアダンプメモリーを自動的に割り当てる crashkernel は一切使用しないでください。

crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M
Copy to Clipboard Toggle word wrap

21.3. 仮想マシンプロセスのバックトレース

仮想マシンの誤作動に関連するプロセスが機能する場合には、プロセス識別子 (PID) を指定して gstack コマンドを使用し、誤作動しているプロセスの実行スタックトレースを生成できます。プロセスがスレッドグループの一部である場合は、スレッドもすべてトレースされます。

前提条件

  • GDB パッケージがインストールされている。

    GDB および利用可能なコンポーネントのインストールの詳細は、GNU デバッガーのインストール を参照してください。

  • バックトレースするプロセスの PID を把握している。

    pgrep コマンドの後にプロセス名を使用すると、PID を検索できます。以下に例を示します。

    # pgrep libvirt
    22014
    22025
    Copy to Clipboard Toggle word wrap

手順

  • gstack ユーティリティーの後にバックトレースするプロセスの PID を指定して使用します。

    たとえば、次のコマンドは、PID 22014 の libvirt プロセスをバックトレースします。

    # gstack 22014
    Thread 3 (Thread 0x7f33edaf7700 (LWP 22017)):
    #0  0x00007f33f81aef21 in poll () from /lib64/libc.so.6
    #1  0x00007f33f89059b6 in g_main_context_iterate.isra () from /lib64/libglib-2.0.so.0
    #2  0x00007f33f8905d72 in g_main_loop_run () from /lib64/libglib-2.0.so.0
    ...
    Copy to Clipboard Toggle word wrap

    gstack の使用に関する詳細は、システム上の gstack man ページを参照してください。

21.4. 仮想マシンの問題報告およびログ提供に使用する追加のリソース

追加でヘルプおよびサポートを依頼するには、以下を行います。

  • redhat-support-tool コマンドラインオプション、Red Hat Portal UI、またはいくつかの FTP の方法を使用して、サービスリクエストを提出してください。

  • サービス依頼の送信時に SOS Report およびログファイルをアップロードします。

    これにより、Red Hat サポートエンジニアが必要な診断情報をすべて参照できるようになります。

第22章 ネストされた仮想マシンの作成

ローカルホストが実行しているものとは異なるホストオペレーティングシステムが必要な場合は、ネストされた仮想マシンを使用できます。これにより、追加の物理ハードウェアが不要になります。

警告

ほとんどの環境では、ネストされた仮想化は RHEL 10 の テクノロジープレビュー としてのみ利用できます。

サポート対象の環境とサポート対象外の環境の詳細は、ネストされた仮想化に対するサポート制限 を参照してください。

22.1. ネストされた仮想化とは

ネストされた仮想化を使用すると、仮想マシンを他の仮想マシン内で実行できます。物理ホストで実行される標準の仮想マシンは、2 番目のハイパーバイザーとして機能し、独自の仮想マシンを作成することもできます。

ネストされた仮想化に関する用語

レベル 0 (L0)
物理ホスト、ベアメタルマシン。
レベル 1 (L1)
L0 物理ホスト上で実行され、追加の仮想ホストとして機能できる標準の仮想マシン。
レベル 2 (L2)

L1 仮想ホスト上で実行されるネストされた仮想マシン。

重要: 第 2 レベルの仮想化では、L2 仮想マシンのパフォーマンスが大幅に制限されます。したがって、ネストされた仮想化は、主に以下のような開発およびテストシナリオを対象としています。

  • 制限された環境でのハイパーバイザーのデバッグ
  • 限られた物理リソースでの大規模な仮想デプロイメントのテスト
警告

ほとんどの環境では、ネストされた仮想化は RHEL 10 の テクノロジープレビュー としてのみ利用できます。

サポート対象の環境とサポート対象外の環境の詳細は、ネストされた仮想化に対するサポート制限 を参照してください。

22.2. ネストされた仮想化に対するサポート制限

ほとんどの環境では、ネストされた仮想化は RHEL 10 のテクノロジープレビューとしてのみ利用できます。

ただし、Windows Subsystem for Linux (WSL2) を備えた Windows 仮想マシンを使用して、Windows 仮想マシン内に仮想 Linux 環境を作成できます。このユースケースは、特定の条件下では RHEL 10 で完全にサポートされます。

ネストされた仮想化に関連する用語の詳細は、ネストされた仮想化とは を参照してください。

サポート対象の環境

ネストされた仮想化のサポート対象のデプロイメントを作成するには、RHEL 9 または RHEL 10 の L0 ホスト上に L1 Windows 仮想マシンを作成し、WSL2 を使用して L1 Windows 仮想マシン内に仮想 Linux 環境を作成します。現在、この環境は、唯一サポート対象となっているネストされた環境です。

重要

L0 ホストは、Intel または AMD システムである必要があります。現在、ARM や IBM Z などの他のアーキテクチャーはサポート対象外です。

次のオペレーティングシステムのバージョンのみを使用する必要があります。

Expand
L0 ホストの場合:L1 仮想マシンの場合:

RHEL 10.0 以降

WSL2 を搭載した Windows Server 2019 以降

 

WSL2 を搭載した Windows 10 以降

WSL2 のインストール手順とサポート対象の Linux ディストリビューションの選択手順は、Microsoft のドキュメント を参照してください。

サポート対象のネストされた環境を作成するには、次のいずれかの手順を使用します。

テクノロジープレビュー環境

これらのネストされた環境はテクノロジープレビューとしてのみ利用可能であり、サポート対象外です。

重要

L0 ホストは、Intel、AMD、または IBM Z システムである必要があります。ネストされた仮想化は現在、ARM などの他のアーキテクチャーでは動作しません。

デプロイメントを機能させるには、次のオペレーティングシステムのバージョンのみを使用する必要があります。

Expand
L0 ホストの場合:L1 仮想マシンの場合:L2 仮想マシンの場合:

RHEL 10.0 以降

RHEL 9.6 以降

RHEL 9.6 以降

 

RHEL 10.0 以降

RHEL 10.0 以降

 

Hyper-V を搭載した Windows Server 2016 以降

Windows Server 2019 以降

 

Hyper-V を搭載した Windows 10 以降

 
注記

他の Red Hat 仮想化オファリングで使用する場合、RHEL L1 仮想マシンの作成はテストされません。これには以下が含まれます。

  • Red Hat Virtualization
  • Red Hat OpenStack Platform
  • OpenShift Virtualization

テクノロジープレビューのネストされた環境を作成するには、次のいずれかの手順を使用します。

Hypervisor の制限

  • 現在、Red Hat は RHEL-KVM でのみネスト化のテストを行っています。RHEL を L0 ハイパーバイザーとして使用する場合は、RHEL または Windows を L1 ハイパーバイザーとして使用できます。
  • KVM 以外の L0 ハイパーバイザー (VMware ESXi や Amazon Web Services (AWS) など) で L1 RHEL 仮想マシンを使用する場合、RHEL ゲストオペレーティングシステムでの L2 仮想マシンの作成はテストされておらず、機能しない可能性があります。

機能の制限

  • L2 仮想マシンをハイパーバイザーとして使用し、L3 ゲストを作成することは適切にテストされていないため、機能することは想定されていません。
  • 現在、AMD システムでの仮想マシンの移行は、L0 ホストでネストされた仮想化が有効になっている場合には機能しません。
  • IBM Z システムでは、huge-page バッキングストレージとネストされた仮想化を同時に使用することはできません。

    # modprobe kvm hpage=1 nested=1
    modprobe: ERROR: could not insert 'kvm': Invalid argument
    # dmesg |tail -1
    [90226.508366] kvm-s390: A KVM host that supports nesting cannot back its KVM guests with huge pages
    Copy to Clipboard Toggle word wrap
  • L0 ホストで使用できる機能の中には、L1 ハイパーバイザーでは使用できないものがある可能性があります。

22.3. Intel でのネスト化された仮想マシンの作成

以下の手順に従って、Intel ホストでネストされた仮想化を有効にし、設定します。

警告

ほとんどの環境では、ネストされた仮想化は RHEL 10 の テクノロジープレビュー としてのみ利用できます。

サポート対象の環境とサポート対象外の環境の詳細は、ネストされた仮想化に対するサポート制限 を参照してください。

前提条件

  • L1 仮想マシン (VM) を実行している L0 RHEL 10 ホスト。
  • ハイパーバイザー CPU でネストされた仮想化をサポートしている。L0 ハイパーバイザーで cat /proc/cpuinfo コマンドを使用して、サポートがあるか確認します。コマンドの出力に vmx および ept フラグが含まれる場合は、L2 仮想マシンを作成できます。通常、Intel Xeon v3 コア以降が対象です。
  • L0 ホストでネストされた仮想化が有効になっていることを確認します。

    # cat /sys/module/kvm_intel/parameters/nested
    Copy to Clipboard Toggle word wrap
    • コマンドが 1 または Y を返すと、この機能は有効になっています。残りの前提条件の手順を省略し、手順セクションに進みます。
    • コマンドで 0 または N が返されたにも拘らず、システムがネストされた仮想化に対応している場合は、以下の手順に従って機能を有効にします。

      1. kvm_intel モジュールをアンロードします。

        # modprobe -r kvm_intel
        Copy to Clipboard Toggle word wrap
      2. ネスト機能をアクティブにします。

        # modprobe kvm_intel nested=1
        Copy to Clipboard Toggle word wrap
      3. ネスト機能は有効になりましたが、L0 ホストの次回起動後は無効になります。永続的に有効にするには、以下の行を /etc/modprobe.d/kvm.conf ファイルに追加します。

        options kvm_intel nested=1
        Copy to Clipboard Toggle word wrap

手順

  1. ネストされた仮想化用に L1 仮想マシンを設定します。

    1. 仮想マシンの XML 設定を開きます。以下の例では、Intel-L1 仮想マシンの設定が開きます。

      # virsh edit Intel-L1
      Copy to Clipboard Toggle word wrap
    2. <cpu> 要素を編集して、host-passthrough CPU モードを使用するように仮想マシンを設定します。

      <cpu mode='host-passthrough'/>
      Copy to Clipboard Toggle word wrap

      仮想マシンで特定の CPU モデルを使用する必要がある場合は、custom CPU モードを使用するように仮想マシンを設定します。<cpu> 要素内に、<feature policy='require' name='vmx'/> 要素と <model> 要素を追加し、内部で CPU モデルを指定します。以下に例を示します。

      <cpu mode ='custom' match ='exact' check='partial'>
        <model fallback='allow'>Haswell-noTSX</model>
        <feature policy='require' name='vmx'/>
        ...
      </cpu>
      Copy to Clipboard Toggle word wrap
  2. L1 仮想マシン内に L2 仮想マシンを作成します。作成するには、L1 仮想マシンの作成 と同じ手順に従います。

22.4. AMD でのネスト化された仮想マシンの作成

以下の手順に従って、AMD ホストでネストされた仮想化を有効にして設定します。

警告

ほとんどの環境では、ネストされた仮想化は RHEL 10 の テクノロジープレビュー としてのみ利用できます。

サポート対象の環境とサポート対象外の環境の詳細は、ネストされた仮想化に対するサポート制限 を参照してください。

前提条件

  • L1 仮想マシン (VM) を実行している L0 RHEL 10 ホスト。
  • ハイパーバイザー CPU でネストされた仮想化をサポートしている。L0 ハイパーバイザーで cat /proc/cpuinfo コマンドを使用して、サポートがあるか確認します。コマンドの出力に svm および npt フラグが含まれる場合は、L2 仮想マシンを作成できます。通常、これは AMD EPYC コア以降が対象です。
  • L0 ホストでネストされた仮想化が有効になっていることを確認します。

    # cat /sys/module/kvm_amd/parameters/nested
    Copy to Clipboard Toggle word wrap
    • コマンドが 1 または Y を返すと、この機能は有効になっています。残りの前提条件の手順を省略し、手順セクションに進みます。
    • コマンドで 0 または N が返された場合は、以下の手順に従ってこの機能を有効にします。

      1. L0 ホストで実行中の仮想マシンをすべて停止します。
      2. kvm_amd モジュールをアンロードします。

        # modprobe -r kvm_amd
        Copy to Clipboard Toggle word wrap
      3. ネスト機能をアクティブにします。

        # modprobe kvm_amd nested=1
        Copy to Clipboard Toggle word wrap
      4. ネスト機能は有効になりましたが、L0 ホストの次回起動後は無効になります。永続的に有効にするには、以下を /etc/modprobe.d/kvm.conf ファイルに追加します。

        options kvm_amd nested=1
        Copy to Clipboard Toggle word wrap

手順

  1. ネストされた仮想化用に L1 仮想マシンを設定します。

    1. 仮想マシンの XML 設定を開きます。以下の例では、AMD-L1 仮想マシンの設定が開きます。

      # virsh edit AMD-L1
      Copy to Clipboard Toggle word wrap
    2. <cpu> 要素を編集して、host-passthrough CPU モードを使用するように仮想マシンを設定します。

      <cpu mode='host-passthrough'/>
      Copy to Clipboard Toggle word wrap

      仮想マシンで特定の CPU モデルを使用する必要がある場合は、custom CPU モードを使用するように仮想マシンを設定します。<cpu> 要素内に、<feature policy='require' name='svm'/> 要素と <model> 要素を追加し、内部で CPU モデルを指定します。以下に例を示します。

      <cpu mode="custom" match="exact" check="none">
        <model fallback="allow">EPYC-IBPB</model>
        <feature policy="require" name="svm"/>
        ...
      </cpu>
      Copy to Clipboard Toggle word wrap
  2. L1 仮想マシン内に L2 仮想マシンを作成します。作成するには、L1 仮想マシンの作成 と同じ手順に従います。

22.5. IBM Z でのネストされた仮想マシンの作成

以下の手順に従って、IBM Z ホストでネストされた仮想化を有効にして設定します。

注記

実際には、IBM Z はベアメタル L0 ホストを提供しません。代わりに、ユーザーシステムは、論理パーティション (LPAR) にセットアップされます。論理パーティションはすでに仮想化されたシステムであるため、しばしば L1 と呼ばれます。ただし、このガイドの他のアーキテクチャーとの整合性を高めるために、次の手順では IBM Z が L0 ホストを提供するものとします。

ネストされた仮想化の詳細は、ネストされた仮想化とは を参照してください。

警告

ほとんどの環境では、ネストされた仮想化は RHEL 10 の テクノロジープレビュー としてのみ利用できます。

サポート対象の環境とサポート対象外の環境の詳細は、ネストされた仮想化に対するサポート制限 を参照してください。

前提条件

  • L1 仮想マシン (VM) を実行している L0 RHEL 10 ホスト。
  • ハイパーバイザー CPU でネストされた仮想化をサポートしている。これを確認するには、L0 ハイパーバイザーで cat /proc/cpuinfo コマンドを使用します。コマンドの出力に sie フラグが含まれる場合は、L2 仮想マシンを作成できます。
  • L0 ホストでネストされた仮想化が有効になっていることを確認します。

    # cat /sys/module/kvm/parameters/nested
    Copy to Clipboard Toggle word wrap
    • コマンドが 1 または Y を返すと、この機能は有効になっています。残りの前提条件の手順を省略し、手順セクションに進みます。
    • コマンドで 0 または N が返された場合は、以下の手順に従ってこの機能を有効にします。

      1. L0 ホストで実行中の仮想マシンをすべて停止します。
      2. kvm モジュールをアンロードします。

        # modprobe -r kvm
        Copy to Clipboard Toggle word wrap
      3. ネスト機能をアクティブにします。

        # modprobe kvm nested=1
        Copy to Clipboard Toggle word wrap
      4. ネスト機能は有効になりましたが、L0 ホストの次回起動後は無効になります。永続的に有効にするには、以下の行を /etc/modprobe.d/kvm.conf ファイルに追加します。

        options kvm nested=1
        Copy to Clipboard Toggle word wrap

手順

  • L1 仮想マシン内に L2 仮想マシンを作成します。作成するには、L1 仮想マシンの作成 と同じ手順に従います。

第23章 RHEL 10 仮想化における機能のサポートおよび制限

このドキュメントでは、Red Hat Enterprise Linux 10 (RHEL 10) 仮想化における機能のサポートと制限に関する情報を提供します。

23.1. RHEL 仮想化のサポートの仕組み

Red Hat Enterprise Linux 10 (RHEL 10) の仮想化には、一連のサポート制限が適用されます。つまり、お客様が RHEL 10 で仮想マシンを使用する際に特定の機能を使用したり、割り当てられたリソース量をある程度超えたりすると、特別なサブスクリプションプランをお持ちでない限り、該当するゲストに対して Red Hat が提供するサポートが制限されます。

RHEL 10 の仮想化で推奨される機能 に記載されている機能は、RHEL 10 システム上の KVM ハイパーバイザーで動作することが Red Hat によってテストおよび認定されています。したがって、RHEL 10 の仮想化でこの機能を使用することは、完全にサポートされており、推奨されています。

RHEL 10 の仮想化でサポートされていない機能 に記載されている機能は、動作する場合もありますが、サポート対象外であり、RHEL 10 での使用は意図されていません。したがって、Red Hat は、KVM を使用する RHEL 10 でこの機能を使用しないことを強く推奨します。

RHEL 10 の仮想化におけるリソース割り当て制限 には、RHEL 10 の KVM ゲストでサポートされている具体的なリソースの最大量が記載されています。この制限を超えるゲストは、Red Hat によって テクノロジープレビュー とみなされます。

さらに、特に明記されていない限り、RHEL 10 の仮想化のドキュメントで使用されているすべての機能とソリューションがサポートされています。ただし、その一部は完全にテストされていないため、完全には最適化されない場合があります。

重要

この制限の多くは、Red Hat が提供するその他の仮想化ソリューション (OpenShift Virtualization や Red Hat OpenStack Platform (RHOSP) など) には適用されません。

23.3. RHEL 10 の仮想化でサポートされていない機能

Red Hat Enterprise Linux 10 (RHEL 10) に含まれる KVM ハイパーバイザーでは、次の機能はサポートされていません。

重要

以下の制限は、OpenShift Virtualization や Red Hat OpenStack Platform (RHOSP) など、Red Hat が提供する他の仮想化ソリューションには当てはまらない場合が多くあります。

他の仮想化ソリューションでサポートされている機能は、以下で説明します。

各仮想化ソリューションのサポートの詳細は、関連するドキュメントを参照してください。

ホストシステムのアーキテクチャー

KVM を使用する RHEL 10 は、RHEL 10 の仮想化で推奨される機能 に記載されていないホストアーキテクチャーではサポートされていません。

ゲストのオペレーティングシステム

次のゲストオペレーティングシステム (OS) を使用する KVM 仮想マシン (VM) は、RHEL 10 ホストではサポートされていません。

  • Windows 8.1 以前
  • Windows Server 2012 R2 以前
  • macOS
  • x86 システム用の Solaris
  • 2009 年以前にリリースされたオペレーティングシステム

RHEL ホストおよびその他の仮想化ソリューションでサポートされるゲスト OS の一覧は、Certified Guest Operating Systems in Red Hat OpenStack Platform, Red Hat Virtualization, OpenShift Virtualization and Red Hat Enterprise Linux with KVM を参照してください。

コンテナーでの仮想マシンの作成

RHEL 10 ハイパーバイザーの要素 (QEMU エミュレーターや libvirt パッケージなど) を含むタイプのコンテナーに KVM 仮想マシンを作成することは、Red Hat のサポート対象外です。

コンテナーに仮想マシンを作成する場合は、OpenShift Virtualization オファリングの使用を推奨します。

特定の virsh コマンドおよびオプション

virsh ユーティリティーで使用できるすべてのパラメーターが Red Hat によってテストされ、本番環境で使用できると認定されているわけではありません。したがって、Red Hat のドキュメントで明示的に推奨されていない virsh コマンドおよびオプションは、正しく機能しない可能性があります。Red Hat では、実稼働環境でのこれらの使用を推奨しません。

特に、サポートされていない virsh コマンドには次のものがあります。

  • virsh iface-* コマンド (virsh iface-startvirsh iface-destroy など)
  • virsh blkdeviotune
  • 外部 スナップショットをサポートしていない virsh snapshot-* コマンド。詳細は、仮想マシンのスナップショットのサポート制限 を参照してください。

QEMU コマンドライン

QEMU は、RHEL 10 の仮想化アーキテクチャーの重要なコンポーネントです。しかし、手動で管理することが難しく、不適切な QEMU 設定によってセキュリティー脆弱性が生じる可能性があります。したがって、qemu-kvm などの qemu-* コマンドラインユーティリティーの使用は、Red Hat ではサポートされていません。代わりに、virt-installvirt-xml、およびサポートされている virsh コマンドなどの libvirt ユーティリティーを使用してください。これらはベストプラクティスに従って QEMU を調整します。ただし、仮想ディスクイメージの管理用に、qemu-img ユーティリティーがサポートされています。

vCPU のホットアンプラグ

実行中の仮想マシンから仮想 CPU (vCPU) を削除すること (仮想 CPU のホットアンプラグとも呼ばれます) は、RHEL 10 ではサポートされていません。なお、実行中の仮想マシンへの仮想 CPU の追加 (仮想 CPU のホットプラグ) は、Intel 64 および AMD64 CPU アーキテクチャーでサポートされています。

RDMA ベースの移行

RHEL 10 では、Remote Direct Memory Access (RDMA) を使用した仮想マシン (VM) の移行はサポートされなくなりました。したがって、Red Hat では、仮想マシンの移行に rdma URI を使用しないことを強く推奨しています。

QEMU 側の I/O スロットリング

virsh blkdeviotune ユーティリティーを使用して仮想ディスク上の操作の最大入出力レベルを設定すること (QEMU 側の I/O スロットリングとも呼ばれます) は、RHEL 10 ではサポートされていません。

RHEL 10 で I/O スロットリングを設定するには、virsh blkiotune を使用します。これは、libvirt 側の I/O スロットリングとも呼ばれます。手順は、仮想マシンのディスク I/O スロットリング を参照してください。

その他のソリューション:

  • QEMU 側の I/O スロットリングは RHOSP でもサポートされています。詳細は、Red Hat ナレッジベースソリューション Setting Resource Limitation on Disk および RHOSP ストレージガイドQuality-of-Service 仕様の使用 セクションを参照してください。
  • さらに、OpenShift Virtualizaton は QEMU 側の I/O スロットリングもサポートします。

ストレージのライブマイグレーション

実行中の仮想マシンのディスクイメージをホスト間で移行することは、RHEL 10 ではサポートされていません。

その他のソリューション:

  • ストレージライブマイグレーションは RHOSP でサポートされますが、制限がいくつかあります。詳細は、ボリュームの移行 を参照してください。

vHost Data Path Acceleration

RHEL 10 ホストでは、virtio デバイス用に vHost Data Path Acceleration (vDPA) を設定できます。しかし、Red Hat は現在この機能をサポートしておらず、実稼働環境では使用しないことを強く推奨します。

vhost-user

RHEL 10 は、ユーザー空間の vHost インターフェイスの実装をサポートしていません。

その他のソリューション:

  • vhost-user は RHOSP でサポートされていますが、対象は、virtio-net インターフェイスのみです。詳細は、Red Hat ナレッジベースソリューション virtio-net implementationvhost ユーザーポート を参照してください。
  • OpenShift Virtualization は vhost-user もサポートします。

S3 および S4 のシステムの電力状態

仮想マシンを Suspend to RAM (S3) または Suspend to disk (S4) のシステム電源状態にサスペンドすることには対応していません。この機能はデフォルトでは無効になっており、有効にすると、仮想マシンが Red Hat のサポート対象外となります。

現在、S3 および S4 の状態は、Red Hat が提供する他の仮想化ソリューションでもサポートされていないことに注意してください。

マルチパス化された vDisk の S3-PR

マルチパス化された vDisk の SCSI3 の永続的な予約 (S3-PR) は、RHEL 10 ではサポートされていません。そのため、Windows クラスターは RHEL 10 ではサポートされていません。

virtio-crypto

RHEL 10 での virtio-crypto デバイスの使用はサポートされておらず、RHEL では使用しないことを強く推奨します。

virtio-crypto デバイスは、Red Hat が提供する他の仮想化ソリューションでもサポートされていないことに注意してください。

virtio-multitouch-device、virtio-multitouch-pci

RHEL 10 での virtio-multitouch-device および virtio-multitouch-pci デバイスの使用はサポートされておらず、RHEL では使用しないことを強く推奨します。

インクリメンタルライブバックアップ

最後のバックアップ以降の仮想マシンの変更のみを保存する仮想マシンバックアップ (インクリメンタルライブバックアップとも呼ばれます) の設定は、RHEL 10 ではサポートされていません。Red Hat はこれを使用しないことを強く推奨しています。

他の解決策: * 代わりにサードパーティーのバックアップソリューションを使用してください。

net_failover

net_failover ドライバーを使用した自動ネットワークデバイスフェイルオーバーメカニズムの設定は、RHEL 10 ではサポートされていません。

現在、net_failover は、Red Hat が提供する他の仮想化ソリューションでもサポートされていないことに注意してください。

TCG

QEMU および libvirt には、QEMU Tiny Code Generator (TCG) を使用した動的な変換モードが含まれます。このモードでは、ハードウェアの仮想化のサポートは必要ありません。ただし、TCG は Red Hat ではサポートされていません。

TCG ベースのゲストは、virsh dumpxml コマンドを使用するなど、XML 設定を調べることで確認できます。

  • TCG ゲストの設定ファイルでは、以下の行が含まれます。

    <domain type='qemu'>
    Copy to Clipboard Toggle word wrap
  • KVM ゲストの設定ファイルでは、以下の行が含まれます。

    <domain type='kvm'>
    Copy to Clipboard Toggle word wrap

SR-IOV InfiniBand ネットワークデバイス

シングルルート I/O 仮想化 (SR-IOV) を使用した VM への InfiniBand ネットワークデバイスの接続はサポートされていません。

SGIO

SCSI Generic I/O (SGIO) を使用して SCSI デバイスを仮想マシンに接続することは、RHEL 10 ではサポートされていません。仮想マシンに SGIO デバイスが接続されているかどうかを検出するには、仮想マシン設定で次の行を確認します。

<disk type="block" device="lun">
Copy to Clipboard Toggle word wrap
<hostdev mode='subsystem' type='scsi'>
Copy to Clipboard Toggle word wrap

23.4. RHEL 10 の仮想化におけるリソース割り当て制限

Red Hat Enterprise Linux 10 (RHEL 10) ホスト上の 1 台の KVM 仮想マシン (VM) に割り当てることができる仮想化リソースには、以下の制限が適用されます。仮想マシンが以下の制限を超える場合、Red Hat はその仮想マシンを テクノロジープレビュー とみなします。

重要

この制限の多くは、Red Hat が提供するその他の仮想化ソリューション (OpenShift Virtualization や Red Hat OpenStack Platform (RHOSP) など) には適用されません。

仮想マシンごとの仮想 CPU の最大数

RHEL 10 ホスト上で実行される 1 台の仮想マシンで使用できる仮想 CPU とメモリーの最大量は、Virtualization limits for Red Hat Enterprise Linux with KVM を参照してください。

仮想マシンごとの PCI デバイス数

RHEL 10 では、仮想マシンバスごとに 32 個の PCI デバイススロット、およびデバイススロットごとに 8 個の PCI 機能を使用できます。これにより、仮想マシンで多機能の性能が有効になり、PCI ブリッジが使用されていない場合に、理論上は 1 つのバスあたり最大 256 個の PCI 機能が提供されます。

各 PCI ブリッジは新しいバスを追加します。これにより、別の 256 個のデバイスアドレスが有効になる可能性があります。ただし、一部のバスでは、256 個のデバイスアドレスがすべて利用できるようにはなっていません。たとえば、ルートバスには、スロットを占有する複数の組み込みデバイスがあります。

仮想化 IDE デバイス

KVM は、各仮想マシンで仮想化されている IDE デバイスの最大数を 4 に制限します。

法律上の通知

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る