Red Hat Training

A Red Hat training course is available for RHEL 8

仮想化の設定および管理

Red Hat Enterprise Linux 8

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

Red Hat Customer Content Services

概要

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

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

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

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

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

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

第1章 RHEL 8 仮想化の概要

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

1.1. 仮想化とは

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

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

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

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

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

注記

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

1.2. 仮想化の利点

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

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

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

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

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

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

  • ホストからの分離

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

  • 領域とコスト効率

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

  • ソフトウェアの互換性

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

    注記

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

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

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

ハイパーバイザー

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

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

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

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

XML 設定

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

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

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

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

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

注記

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

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

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

仮想アーキテクチャー

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

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

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

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

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

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

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

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

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

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

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

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

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

    重要

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

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

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

    重要

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

関連情報

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

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

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

Red Hat Virtualization (RHV)

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

Red Hat Enterprise Linux と Red Hat Virtualization での仮想化の相違点は、「qemu-kvm と qemu-kvm-rhev、そして関連するサブパッケージの違いは何ですか?」を参照してください。

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

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

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

Red Hat OpenStack Platform (RHOSP)

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

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

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

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

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

第2章 仮想化の使用

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

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

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

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

注記

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

2.1. 仮想化を有効にする

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

前提条件

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

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

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

手順

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

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

    # yum install virt-install virt-viewer
  3. システムが仮想ホストとして準備されていることを確認します。

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

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

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

関連情報

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

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

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

2.2. 仮想マシンの作成

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

前提条件

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

    警告

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

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

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

前提条件

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

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

手順

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

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

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

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

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

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

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

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

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

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

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

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

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

関連情報

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

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

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

前提条件

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

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

手順

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

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

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

    • 接続 - 仮想マシンが使用するホストへの接続
    • 名前 - 仮想マシンの名前
    • インストールソースの種類 - インストールでは、ローカルのインストールメディア、URL、PXE ネットワークブート、または既存の仮想マシンのディスクイメージを使用できます。
    • インストールソース - インストールソースを指定するパスまたは URL
    • OS ベンダー - 仮想マシンのオペレーティングシステムのベンダー
    • オペレーティングシステム - 仮想マシンのオペレーティングシステム。Red Hat がサポートするのは、一部のゲストオペレーティングシステム のみです。
    • メモリー - 仮想マシンを設定するメモリーのサイズ
    • ストレージのサイズ - 仮想マシンを設定するストレージ容量
    • 仮想マシンをすぐに起動 - 仮想マシンの作成直後にそのマシンを開始するかどうか
  3. 作成 をクリックします。

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

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

関連情報

2.3. 仮想マシンの起動

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

前提条件

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

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

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

前提条件

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

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

手順

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

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

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

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

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

関連情報

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

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

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

前提条件

手順

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

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

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

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

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

関連情報

2.4. 仮想マシンへの接続

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

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

前提条件

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

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

前提条件

手順

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

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

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

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

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

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

注記

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

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

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

関連情報

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

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

前提条件

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

手順

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

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

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

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

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

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

関連情報

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

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

前提条件

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

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

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

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

手順

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

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

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

トラブルシューティング

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

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

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

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

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

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

前提条件

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

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

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

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

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

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

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

手順

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

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

関連情報

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

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

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

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

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

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

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

# virsh -c remote-host list

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

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

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

手順

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

    Host host-alias
            User                    root
            Hostname                hosturl

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

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

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

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

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

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

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

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

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

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

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

関連情報

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

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

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

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

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

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

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

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

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

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

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

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

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

2.5.2. Web コンソールで仮想マシンの停止

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

前提条件

手順

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

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

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

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

トラブルシューティング

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

関連情報

2.6. 仮想マシンの削除

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

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

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

前提条件

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

手順

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

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

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

関連情報

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

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

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

前提条件

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

手順

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

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

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

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

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

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

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

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

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

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

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

前提条件

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

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

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

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

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

手順

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

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

    # lsmod | grep kvm

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

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

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

    # yum install virt-install
  5. システムが仮想ホストとして準備されていることを確認します。

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

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

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

関連情報

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

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

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

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

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

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

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

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

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

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

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

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

Huge page

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

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

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

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

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

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

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

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

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

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

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

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

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

前提条件

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

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

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

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

手順

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

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

    # lsmod | grep kvm

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

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

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

    # yum install virt-install
  5. システムが仮想ホストとして準備されていることを確認します。

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

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

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

関連情報

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

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

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

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

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

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

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

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

デバイスの起動順序

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

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

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

NUMA トポロジー
CPU の NUMA (Non-Uniform Memory Access) トポロジーは、IBM Z 上の libvirt では対応していません。したがって、このシステムでは、NUMA を使用して vCPU パフォーマンスを調整することはできません。
vfio-ap
IBM Z ホストの仮想マシンは、vfio-ap 暗号デバイスパススルーを使用しますが、その他のアーキテクチャーでは対応していません。
SMBIOS
IBM Z では、SMBIOS 設定は利用できません。
Watchdog デバイス

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

<devices>
  <watchdog model='diag288' action='poweroff'/>
</devices>
kvm-clock
kvm-clock サービスは、AMD64 システムおよび Intel 64 システムに固有のものであり、IBM Z の仮想マシンの時間管理用に構成する必要はありません。
v2v および p2v
virt-v2v ユーティリティーおよび virt-p2v ユーティリティーは、AMD64 および Intel 64 のアーキテクチャーでのみ対応しており、IBM Z では提供されません。

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

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

Web コンソールの概要

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

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

RHEL 8 Web コンソールは、Web ベースのシステム管理インターフェースです。Web コンソールプラグイン をインストールすると、Web コンソールを使用して、接続されたサーバー上の仮想マシンを管理できます。これにより、Web コンソールで、接続可能なホストシステムの仮想マシンをグラフィカルに表示して、システムリソースの監視や、設定の調整が簡単に行えるようになります。

仮想マシンの管理に Web コンソールを使用すると、たとえば以下を実行できます。

注記

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

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

仮想マシンマネージャーの詳細は、RHEL 7 のドキュメント を参照してください。

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

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

前提条件

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

    $ yum info cockpit
    Installed Packages
    Name         : cockpit
    [...]

    Web コンソールがインストールされていない場合は、『Web コンソールでシステムの管理』で、Web コンソールのインストールに関する詳細を参照してください。

手順

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

    # yum install cockpit-machines

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

    cockpit での仮想マシン情報

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

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

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

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

前提条件

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

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

手順

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

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

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

    • 接続 - 仮想マシンが使用するホストへの接続
    • 名前 - 仮想マシンの名前
    • インストールソースの種類 - インストールでは、ローカルのインストールメディア、URL、PXE ネットワークブート、または既存の仮想マシンのディスクイメージを使用できます。
    • インストールソース - インストールソースを指定するパスまたは URL
    • OS ベンダー - 仮想マシンのオペレーティングシステムのベンダー
    • オペレーティングシステム - 仮想マシンのオペレーティングシステム。Red Hat がサポートするのは、一部のゲストオペレーティングシステム のみです。
    • メモリー - 仮想マシンを設定するメモリーのサイズ
    • ストレージのサイズ - 仮想マシンを設定するストレージ容量
    • 仮想マシンをすぐに起動 - 仮想マシンの作成直後にそのマシンを開始するかどうか
  3. 作成 をクリックします。

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

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

関連情報

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

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

注記

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

前提条件

手順

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

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

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

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

トラブルシューティング

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

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

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

前提条件

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

手順

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

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

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

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

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

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

5.5. Web コンソールで仮想マシンの起動および停止

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

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

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

前提条件

手順

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

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

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

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

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

関連情報

5.5.2. Web コンソールで仮想マシンの停止

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

前提条件

手順

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

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

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

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

トラブルシューティング

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

関連情報

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

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

前提条件

手順

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

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

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

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

トラブルシューティング

関連情報

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

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

前提条件

手順

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

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

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

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

関連情報

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

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

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

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

前提条件

手順

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

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

cockpit での仮想マシン情報

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

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

関連情報

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

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

前提条件

手順

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

    Web コンソールのストレージプールウィンドウ

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

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

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

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

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

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

関連情報

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

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

前提条件

手順

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

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

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

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

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

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

関連情報

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

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

前提条件

手順

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

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

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

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

cockpit リソースの使用方法

関連情報

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

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

前提条件

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

手順

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

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

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

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

cockpit のディスク情報

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

  • デバイス - ディスクのデバイスの種類
  • ターゲット - ディスクのコントローラーの種類
  • 使用中 - 使用中のディスク容量
  • 容量 - ディスクのサイズ
  • バス - ディスクのバスの種類
  • 読み取り専用 - ディスクが読み取り専用であるかどうか
  • ソース - ディスクデバイスまたはファイル

関連情報

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

次の手順は、選択した仮想マシンで、仮想ネットワークインターフェースカードに関する情報を表示する方法を説明します。

前提条件

手順

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

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

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

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

    cockpit での vNIC 情報

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

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

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

    注記

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

関連情報

5.7. Web コンソールで仮想 CPU の管理

RHEL 8 Web コンソールを使用して、Web コンソールが接続している仮想マシンが使用する仮想 CPU を確認し、設定できます。

前提条件

手順

  1. 仮想マシン インターフェースで、仮想 CPU パラメーターを表示および設定する仮想マシンの名前がある行をクリックします。

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

  2. 概要ペインの仮想 CPU の数をクリックします。

    vCPU の詳細ダイアログが表示されます。

    cockpit での vCPU の設定

    注記

    vCPU の詳細ダイアログの警告は、仮想 CPU 設定を変更しないと表示されません。

  3. 選択した仮想マシンの仮想 CPU を設定します。

    • vCPU 数 - 仮想マシンの仮想 CPU の数を入力します。

      注記

      vCPU 数は、vCPU 最大値以下にする必要があります。

    • vCPU 最大値 - 仮想マシンに設定できる仮想 CPU の最大数を入力します。
    • ソケット - 仮想マシンに公開するソケットの数を選択します。
    • ソケットごとのコア - 仮想マシンに公開する各ソケットのコア数を選択します。
    • コアあたりのスレッド - 仮想マシンに公開する各コアのスレッド数を選択します。
  4. 適用 をクリックします。

    仮想マシンに仮想 CPU が設定されます。

    注記

    仮想 CPU 設定の変更は、仮想マシンの再起動後にのみ有効になります。

5.8. Web コンソールで仮想マシンのディスクの管理

RHEL 8 Web コンソールを使用して、Web コンソールが接続している仮想マシンに設定されたディスクを管理できます。

以下を行うことができます。

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

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

前提条件

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

手順

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

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

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

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

cockpit のディスク情報

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

  • デバイス - ディスクのデバイスの種類
  • ターゲット - ディスクのコントローラーの種類
  • 使用中 - 使用中のディスク容量
  • 容量 - ディスクのサイズ
  • バス - ディスクのバスの種類
  • 読み取り専用 - ディスクが読み取り専用であるかどうか
  • ソース - ディスクデバイスまたはファイル

関連情報

5.8.2. Web コンソールで新しいディスクを仮想マシンに追加

新しいディスクを仮想マシンに追加するには、RHEL 8 Web コンソールを使用して、新しいストレージボリュームを作成し、仮想マシンに割り当てます。

前提条件

手順

  1. 仮想マシン インターフェースで、新しいディスクを作成および割り当てる仮想マシンの名前がある行をクリックします。

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

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

    ディスクペインが表示され、仮想マシンに設定したディスクに関する情報が表示されます。

    cockpit のディスク情報

  3. ディスクの追加 をクリックします。

    ディスクの追加ダイアログが表示されます。 cockpit でのディスクの追加

  4. 新規作成 オプションを選択します。
  5. 新しいディスクを設定します。

    • プール - 仮想ディスクの作成元であるストレージプールを選択します。

      注記

      Web コンソールを使用して仮想マシンに新しいディスクを作成する場合は、ディレクトリータイプのストレージプールのみを使用できます。

    • ターゲット - 作成する仮想ディスクのターゲットを選択します。
    • 名前 - 作成する仮想ディスクの名前を入力します。
    • サイズ - 作成する仮想ディスクのサイズを入力し、単位 (MiB または GiB) を選択します。
    • フォーマット - 作成する仮想ディスクの形式を選択します。サポートされているタイプは qcow2 および raw です。
    • 永続 -選択すると、仮想ディスクが永続化されます。選択しないと、仮想ディスクは一時的になります。

      注記

      一時的なデバイスは、稼働中の仮想マシンにのみ追加できます。

  6. 追加 をクリックします。

    仮想ディスクが作成され、仮想マシンに接続します。

関連情報

5.8.3. Web コンソールで既存ディスクを仮想マシンに割り当て

次の手順は、RHEL 8 Web コンソールを使用して仮想マシンに既存のストレージボリュームをディスクとして割り当てる方法を説明します。

前提条件

手順

  1. 仮想マシン インターフェースで、既存ディスクを割り当てる仮想マシンの名前がある行をクリックします。

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

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

    ディスクペインが表示され、仮想マシンに設定したディスクに関する情報が表示されます。

    cockpit のディスク情報

  3. ディスクの追加 をクリックします。

    ディスクの追加ダイアログが表示されます。

    cockpit でのディスクの追加

  4. 既存の使用 ボタンをクリックします。

    ディスクの追加ダイアログに、適切な設定フィールドが表示されます。

    cockpit でディスクの割り当て

  5. 仮想マシンのディスクを設定します。

    • プール - 仮想ディスクを割り当てるストレージプールを選択します。

      注記

      Web コンソールを使用する場合は、仮想マシンにディスクを接続するのにディレクトリータイプのストレージプールのみを使用できます。

    • ターゲット -仮想ディスクのターゲットを選択します。
    • ボリューム - 割り当てるストレージボリュームを選択します。
    • 永続化 - 仮想ディスクを永続的にする場合はチェックマークを入れます。仮想ディスクを一時的にする場合はチェックマークを外します。
  6. 追加 をクリックします。

    選択した仮想ディスクが仮想マシンに割り当てられます。

関連情報

5.8.4. 仮想マシンへのディスクの割り当てを解除

ここでは、RHEL 8 Web コンソールを使用して、仮想マシンへのディスクの割り当てを解除する方法を説明します。

前提条件

手順

  1. 仮想マシン インターフェースで、既存ディスクの割り当てを解除する仮想マシンの名前がある行をクリックします。

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

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

    ディスクペインが表示され、仮想マシンに設定したディスクに関する情報が表示されます。

    cockpit のディスク情報

  3. 仮想マシンから接続を解除するディスクの横にある 削除 ボタンをクリックします。ディスクの削除 の確認ダイアログが表示されます。
  4. 確認ダイアログで、削除 をクリックします。

    仮想マシンから、仮想ディスクの割り当てが解除されます。

関連情報

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

RHEL 8 Web コンソールを使用して、Web コンソールが接続している仮想マシンの仮想ネットワークインターフェースを管理できます。以下を行うことができます。

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

次の手順は、選択した仮想マシンで、仮想ネットワークインターフェースカードに関する情報を表示する方法を説明します。

前提条件

手順

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

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

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

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

    cockpit での vNIC 情報

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

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

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

    注記

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

関連情報

5.9.2. Web コンソールで仮想ネットワークインターフェースの接続

RHEL 8 Web コンソールを使用して、選択した仮想マシンに設定された仮想ネットワークインターフェースの接続を解除したものを、再接続できます。

前提条件

手順

  1. 仮想マシン インターフェースで、仮想ネットワークインターフェースを接続する仮想マシンの名前がある行をクリックします。

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

  2. ネットワーク をクリックします。

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

    cockpit での vNIC プラグ

  3. 接続する仮想ネットワークインターフェースの行の プラグ をクリックします。

    選択した仮想ネットワークインターフェースが仮想マシンに接続します。

5.9.3. Web コンソールで仮想ネットワークインターフェースの切断

RHEL 8 Web コンソールを使用して、選択した仮想マシンに接続した仮想ネットワークインターフェースの接続を解除できます。

前提条件

手順

  1. 仮想マシン インターフェースで、仮想ネットワークインターフェースを切断する仮想マシンの名前がある行をクリックします。

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

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

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

    cockpit で vNIC の切断
  3. 切断する仮想ネットワークインターフェースの行で アンプラグ をクリックします。

    選択した仮想ネットワークインターフェースが仮想マシンから切断されます。

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

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

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

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

前提条件

手順

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

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

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

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

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

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

注記

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

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

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

関連情報

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

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

注記

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

前提条件

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

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

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

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

手順

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

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

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

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

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

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

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

    Virt Viewer GUI

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

注記

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

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

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

トラブルシューティング

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

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

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

関連情報

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

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

前提条件

手順

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

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

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

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

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

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

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

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

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

関連情報

5.11. Web コンソールでストレージプールの作成

RHEL 8 Web コンソールを使用してストレージプールを作成できます。手順は、以下を参照してください。

前提条件

手順

  1. 仮想マシンタブの上部にある ストレージプール をクリックします。ストレージプールウィンドウが表示され、設定されているストレージプールの一覧が示されます。

    Web コンソールのストレージプールウィンドウ
  2. ストレージプールの作成 をクリックします。ストレージプールの作成ダイアログボックスが表示されます。

    cockpit でのストレージプールの作成
  3. ストレージプールの作成ダイアログに、次の情報を入力します。

    • 接続 - ストレージプールが使用するホストへの接続
    • 名前 - ストレージプールの名前
    • 種類 - ストレージプールの種類。これは、ファイルシステムのディレクトリー、ネットワークファイルシステム、または iSCSI ターゲットになります。
    • ターゲットパス - ホストのファイルシステムのストレージプールのパス
    • 起動 - ホストの起動時にストレージプールが起動するかどうか
  4. 作成 をクリックします。ストレージプールが作成され、ストレージプールの作成ダイアログが閉じて、新しいストレージプールがストレージプールの一覧に表示されます。

関連情報

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

非推奨の仮想マシンマネージャー (virt-manager) アプリケーションと、その代替となる RHEL 8 Web コンソールには同じ機能がありません。次の表は、virt-manager で使用でき、RHEL 8.0 Web コンソールでは使用できない機能を示しています。

この機能は、新しいバージョンの RHEL 8 でサポートされるため、Web コンソール の列に最小要件の 8 バージョンが表示されます。

特徴

Web コンソール

CLI を使用した代替方法

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

8.1

virsh autostart

仮想マシンの一時停止

8.1

virsh suspend

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

8.1

virsh resume

以下のタイプのストレージプールを新規作成

• パーティションベース

• GlusterFS ベース

• LVM ベース

• SCSI デバイスを使用した vHBA ベース

• マルチパスベース

• RBD ベース

利用できません

virsh pool-define

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

8.1

virsh pool-define

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

利用できません

virsh vol-create

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

利用できません

virsh net-create または virsh net-define

仮想ネットワークの削除

利用できません

virsh net-undefine

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

利用できません

virsh iface-bridge

スナップショットの作成

利用できません

virsh snapshot-create-as

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

利用できません

virsh snapshot-revert

スナップショットの削除

利用できません

virsh snapshot-delete

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

利用できません

virt-clone

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

利用できません

virsh migrate

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

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

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

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

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

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

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

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

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

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

前提条件

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

手順

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

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

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

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

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

検証

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

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

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

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

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

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

トラブルシューティング

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

関連情報

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

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

前提条件

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

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

手順

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

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

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

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

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

関連情報

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

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

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

前提条件

手順

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

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

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

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

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

関連情報

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

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

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

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

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

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

ただし、ソースの仮想マシンには、永続的なネットワークの MAC 設定などの一意の設定が含まれる場合があります。これにより、特に 1 台の仮想マシンのクローンを複数作成する場合に、仮想マシンのクローンが適切に機能しなくなる可能性があります。さらに、ソース仮想マシンには、SSH 鍵やパスワードファイルなどの機密データが含まれる場合があります。したがって、仮想マシンのクローンを何度も作成する予定がある場合、Red Hat は、まずはこのデータを削除した仮想マシンの テンプレート を作成することを推奨します。手順は「テンプレート仮想マシンの準備」を参照してください。

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

7.2. テンプレート仮想マシンの準備

特に複数の仮想マシンクローンを作成する場合に、クローン作成プロセスで作成された仮想マシン (VM) クローンが適切に実行されるようにするには、ソース仮想マシンのクローンを作成する前に、SSH 鍵や永続的なネットワーク MAC 設定などのソース仮想マシンに固有の情報および設定を削除します。これにより、仮想マシンのクローンを簡単かつ安全に作成するのに使用できる仮想マシンの テンプレート が作成されます。

仮想マシンの テンプレート を準備するには、以下の手順に従います。

前提条件

  • virt-sysprep ユーティリティーがホストにインストールされている。インストールされていない場合は、次のコマンドを実行します。

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

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

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

手順

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

    # whoami
    root
  2. (必要に応じて) 仮想マシンのディスクイメージをコピーします。これは後で、仮想マシンがテンプレートに正常に変換されたことを確認するのに使用されます。

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

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

検証

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

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

関連情報

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

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

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

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

CLI を使用して、指定した仮想マシンと同じコピーを作成するには、以下の手順を行います。

前提条件

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

手順

  1. 適切なオプションを指定して virt-clone ユーティリティーを使用します。サンプルのユースケースは、以下を参照してください。

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

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

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

検証

  • 仮想マシンのクローンが正常に作成され、機能していることを確認するには、そのクローンが仮想マシンの一覧にが追加されており、起動されていることを確認します。

    # virsh list --all
    Id   Name                  State
    ---------------------------------------
    -    doppelganger          shut off
    -    doppelganger-clone    shut off
    
    # virsh start doppelganger-clone
    Domain doppelganger-clone started

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

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

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

8.1. 仮想デバイスの動作

基本情報

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

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

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

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

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

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

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

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

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

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

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

関連情報

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

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

前提条件

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

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

手順

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

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

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

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

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

検証

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

  • virsh dumpxml コマンドを実行し、デバイスの XML 定義が、仮想マシンの XML 設定の <devices> セクションに追加されました。
  • 仮想マシンを実行し、デバイスが存在し、正しく機能しているかどうかをテストします。

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

    # virsh dumpxml testguest
    [...]
    <hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x4146'/>
        <product id='0x902e'/>
        <address bus='2' device='4'/>
      </source>
      <alias name='hostdev0'/>
      <address type='usb' bus='0' port='3'/>
    </hostdev>
    [...]

関連情報

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

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

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

前提条件

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

手順

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

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

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

検証

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

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

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

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

トラブルシューティング

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

    # virsh define testguest.xml
注記

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

関連情報

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

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

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

前提条件

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

手順

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

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

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

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

トラブルシューティング

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

    # virsh define testguest.xml

関連情報

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

8.5. 仮想デバイスの種類

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

8.6.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 は、物理ネットワークカードがホストシステムに表示されるのと同じように、割り当てられた仮想マシンへのネットワークカードとして表示されます。

図8.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 が割り当てたデバイスには仮想マシンのメモリーの固定 (ピニング) が必要になるため、仮想マシンのメモリー消費が増加し、仮想マシンのメモリーバルーンが使用できなくなります。

関連情報

8.6.2. SR-IOV ネットワークデバイスの仮想マシンへの割り当て

Intel ホストまたは AMD ホストの仮想マシンに SR-IOV ネットワークデバイスを割り当てるには、VF (Virtual Function) をホストの SR-IOV 対応ネットワークインターフェースから作成し、VF をデバイスとして、指定された仮想マシンに割り当てます。詳細は、次の手順を参照してください。

前提条件

  • ホストの CPU およびファームウェアは、IOMMU (I/O Memory Management Unit) に対応する必要があります。

    • Intel CPU を使用している場合は、Intel VT-d (Virtualization Technology for Directed I/O) に対応する必要があります。
    • AMD CPU を使用している場合は、AMD-Vi 機能に対応している必要があります。
  • システムがアクセス制御サービス (ACS) を使用して PCIe トポロジーの DMA (Direct Memory Access) 分離を提供することをシステムベンダーに確認します。

    詳細は、「SR-IOV 実装に関するハードウェアの考慮事項」を参照してください。

  • 物理ネットワークデバイスは SR-IOV に対応する必要があります。システムのネットワークデバイスが SR-IOV に対応しているかどうかを確認するには、lspci -v コマンドを使用して、出力で Single Root I/O Virtualization (SR-IOV) を探します。

    # lspci -v
    [...]
    02:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
    	Subsystem: Intel Corporation Gigabit ET Dual Port Server Adapter
    	Flags: bus master, fast devsel, latency 0, IRQ 16, NUMA node 0
    	Memory at fcba0000 (32-bit, non-prefetchable) [size=128K]
    [...]
    	Capabilities: [150] Alternative Routing-ID Interpretation (ARI)
    	Capabilities: [160] Single Root I/O Virtualization (SR-IOV)
    	Kernel driver in use: igb
    	Kernel modules: igb
    [...]
  • VF の作成に使用するホストのネットワークインターフェースが実行している必要があります。たとえば、eth1 インターフェースをアクティブにして、実行していることを確認するには、次のコマンドを実行します。

    # ip link set eth1 up
    # ip link show eth1
    8: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000
       link/ether a0:36:9f:8f:3f:b8 brd ff:ff:ff:ff:ff:ff
       vf 0 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 1 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 2 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 3 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
  • SR-IOV デバイス割り当てを有効にするには、ホスト BIOS およびカーネルで IOMMU 機能を有効にする必要があります。これを行うには、以下のように行います。

    • Intel ホストで VT-d を有効にします。

      • Intel ホストが複数のブートエントリーを使用する場合は、以下を行います。

        1. /etc/default/grub ファイルを編集し、intel_iommu=on パラメーターおよび iommu=pt パラメーターを GRUB_CMDLINE_LINUX 行の末尾に追加します。

          GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rhel_dell-per730-27-swap rd.lvm.lv=rhel_dell-per730-27/root rd.lvm.lv=rhel_dell-per730-27/swap console=ttyS0,115200n81 intel_iommu=on iommu=pt"
        2. GRUB 設定を再生成します。

          # grub2-mkconfig -o /boot/grub2/grub.cfg
        3. ホストを再起動します。
      • Intel ホストがブートエントリーを 1 つ使用する場合は、以下を行います。

        1. intel_iommu=on パラメーターで GRUB 設定を再生成します。

          # grubby --args="intel_iommu=on" --update-kernel DEFAULT
        2. ホストを再起動します。
    • AMD ホストで、AMD-Vi を有効にします。

      • AMD ホストが複数のブートエントリーを使用する場合は、以下を行います。

        1. /etc/default/grub ファイルを編集し、iommu=pt パラメーターを GRUB_CMDLINE_LINUX 行の末尾に追加します。

          GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rhel_dell-per730-27-swap rd.lvm.lv=rhel_dell-per730-27/root rd.lvm.lv=rhel_dell-per730-27/swap console=ttyS0,115200n81 iommu=pt"
        2. GRUB 設定を再生成します。

          # grub2-mkconfig -o /boot/grub2/grub.cfg
        3. ホストを再起動します。
      • AMD ホストがブートエントリーを 1 つ使用する場合は、以下を行います。

        1. iommu=pt パラメーターで GRUB 設定を再生成します。

          # grubby --args="iommu=pt" --update-kernel DEFAULT
        2. ホストを再起動します。

手順

  1. (必要に応じて) ネットワークデバイスが使用できる VF の最大数を確認します。これを実行するには、次のコマンドを使用して、eth1 を SR-IOV 互換のネットワークデバイスに置き換えます。

    # cat /sys/class/net/eth1/device/sriov_totalvfs
    7
  2. 次のコマンドを実行して、Virtual Function (VF) を作成します。

    # echo VF-number > /sys/class/net/network-interface/device/sriov_numvfs

    上記コマンドでは、以下のようになります。

    • VF-number には、PF に作成する VF の数を入力します。
    • network-interface は、VF が作成されるネットワークインターフェースの名前に置き換えます。

    以下の例では、eth1 ネットワークインターフェースから 2 つの VF を作成します。

    # echo 2 > /sys/class/net/eth1/device/sriov_numvfs
  3. VF が追加されたことを確認します。

    # lspci | grep Ethernet
    01:00.0 Ethernet controller: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 (rev 01)
    01:00.1 Ethernet controller: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 (rev 01)
    07:00.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
    07:00.1 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
  4. VF の作成に使用したネットワークインターフェース用の udev ルールを作成して、作成した VF を永続化します。たとえば、eth1 インターフェースの場合は、/etc/udev/rules.d/eth1.rules ファイルを作成し、以下の行を追加します。

    ACTION=="add", SUBSYSTEM=="net", ENV{ID_NET_DRIVER}=="ixgbe", ATTR{device/sriov_numvfs}="2"

    これにより、ホストの起動時に ixgbe ドライバーを使用する 2 つの VF が eth1 インターフェースで自動的に利用できるようになります。

    警告

    現在、Broadcom NetXtreme II BCM57810 アダプターで VF を永続化しようとすると、このコマンドは正しく機能しません。また、このアダプターに基づく VF を Windows 仮想マシンに接続することは、現在信頼性がありません。

  5. virsh nodedev-list コマンドを使用して、追加された VF デバイスを libvirt が認識していることを確認します。たとえば、以下の例では、前の例の 01:00.0 と 07:00.0 PF が VF に正常に変換されていることを示しています。

    # virsh nodedev-list | grep pci_
    pci_0000_01_00_0
    pci_0000_01_00_1
    pci_0000_07_10_0
    pci_0000_07_10_1
    [...]
  6. PF の busslot、および function の値、および対応する VF 値のいずれかを取得します。たとえば、pci_0000_01_00_0 および pci_0000_01_00_1 の場合は以下のようになります。

    # virsh nodedev-dumpxml pci_0000_01_00_0
    <device>
      <name>pci_0000_01_00_0</name>
      <path>/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0</path>
      <parent>pci_0000_00_01_0</parent>
      <driver>
        <name>ixgbe</name>
      </driver>
      <capability type='pci'>
        <domain>0</domain>
        <bus>1</bus>
        <slot>0</slot>
        <function>0</function>
    [...]
    # virsh nodedev-dumpxml pci_0000_01_00_1
    <device>
      <name>pci_0000_01_00_1</name>
      <path>/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.1</path>
      <parent>pci_0000_00_01_0</parent>
      <driver>
        <name>vfio-pci</name>
      </driver>
      <capability type='pci'>
        <domain>0</domain>
        <bus>1</bus>
        <slot>0</slot>
        <function>1</function>
    [...]
  7. 一時 XML ファイルを作成し、前の手順で取得した busslot、および function の値を使用して構成を追加します。以下に例を示します。

    <interface type='hostdev' managed='yes'>
      <source>
        <address type='pci' domain='0x0000' bus='0x03' slot='0x10' function='0x2'/>
      </source>
    </interface>
  8. 一時 XML ファイルを使用して VF を仮想マシンに追加します。たとえば、以下は、/tmp/holdmyfunction.xml に保存されている VF を稼働中の仮想マシン testguest1 に接続し、仮想マシンの再起動後に利用できるようにします。

    # virsh attach-device testguest1 /tmp/holdmyfunction.xml --live --config
    Device attached successfully.

    これに成功すると、ゲストオペレーティングシステムは新規ネットワークインターフェースカードを検出します。

8.6.3. SR-IOV 割り当てに対応しているデバイス

すべてのデバイスを SR-IOV に使用できるわけではありません。以下のデバイスは、RHEL 8 の SR-IOV との互換性がテストおよび検証されています。

ネットワークデバイス

  • Intel 82599ES 10 Gigabit Ethernet Controller - ixgbe ドライバーを使用します。
  • Intel Ethernet Controller XL710 Series - i40e ドライバーを使用します。
  • Mellanox ConnectX-5 Ethernet Adapter Cards - mlx5_core ドライバーを使用します。
  • Intel Ethernet Network Adapter XXV710 - i40e ドライバーを使用します。
  • Intel 82576 Gigabit Ethernet Controller - igb ドライバーを使用します。
  • Broadcom NetXtreme II BCM57810 - bnx2x ドライバーを使用します。

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

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

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

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

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

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

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

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

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

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

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

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

9.1.2. ストレージプール

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

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

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

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

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

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

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

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

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

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

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

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

ストレージプールを管理するために利用可能なオプションを説明するために、以下では mount -t nfs nfs.example.com:/path/to/share /path/to/data を使用するサンプル NFS サーバーを説明します。

ストレージ管理者は、仮想化ホストで NFS ストレージプールを定義して、エクスポートしたサーバーパスおよびクライアントターゲットパスを記述できます。これにより、libvirt が起動した場合、または必要に応じてlibvirt が実行中に、libvirt がマウントを実行します。NFS サーバーがエクスポートしたディレクトリーが含まれるファイルは、NFS ストレージプールのストレージボリュームとして一覧表示されます。

ストレージボリュームを仮想マシンに追加する際に、管理者がターゲットパスをボリュームに追加する必要はありません。名前でストレージプールとストレージボリュームを追加する必要があります。したがって、ターゲットクライアントのパスが変更しても、仮想マシンには影響を及ぼしません。

ストレージプールが開始すると、libvirt は、システム管理者がログインして mount nfs.example.com:/path/to/share /vmdata を実行した場合と同じように、指定したディレクトリーに共有をマウントします。ストレージプールが自動起動するように設定されている場合は、libvirt が起動したときに、指定したディレクトリーに NFS 共有ディスクがマウントされていることが libvirt により確認されます。

ストレージプールが起動すると、NFS 共有ディスクのファイルはストレージボリュームとして報告され、ストレージボリュームのパスは、libvirt の API を使用してクエリーできます。ストレージボリュームのパスは、仮想マシンのブロックデバイスのソースストレージを記述する、仮想マシンの XML 定義のセクションにコピーできます。NFS の場合、libvirt の API を使用するアプリケーションは、プールのサイズの制限 (共有ストレージの容量) まで、ストレージプール (NFS 共有のファイル) でストレージボリュームを作成して削除できます。

ストレージプールを停止 (破棄) すると、データの抽象化は削除されますが、データは保持されます。

ボリュームの作成および削除は、すべてのストレージプールタイプで対応しているわけではありません。ストレージプールを停止する (pool-destroy) と、開始操作を取り消します。この場合は、NFS 共有のマウントを解除します。コマンドの名前が記載されているにも関わらず、共有上のデータは destroy 操作で修正されません。詳細は、man virsh を参照してください。

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

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

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

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

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

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

ストレージプールは、ストレージボリュームに分類されます。ストレージボリュームは、libvirt が処理する物理パーティション、LVM 論理ボリューム、ファイルベースのディスクイメージ、その他のストレージタイプの抽象化です。ストレージボリュームは、基盤となるハードウェアに関係なく、ローカルのストレージデバイス (ディスクなど) として仮想マシンに表示されます。

ホストマシンでは、ストレージボリュームは、その名前と、そこから派生するストレージプールの識別子で参照されます。virsh コマンドラインでは、--pool storage_pool volume_name の形式を取ります。

たとえば、guest_images プールにある firstimage という名前のボリュームに関する情報を表示するには、次のコマンドを実行します。

# virsh vol-info --pool guest_images firstimage
  Name:             firstimage
  Type:             block
  Capacity:         20.00 GB
  Allocation:       20.00 GB

9.2. CLI で仮想マシン用のストレージの管理

以下のドキュメントでは、コマンドラインユーティリティーの virsh を使用して、仮想マシンのストレージを管理する方法を説明します。

virsh を使用して、仮想マシンのストレージを追加、削除、および変更したり、仮想マシンストレージに関する情報を表示できます。

注記

多くの場合、仮想マシン用のストレージは、仮想マシンが作成される と同時に作成されます。したがって、以下の情報は、主に仮想マシンのストレージの高度な管理に関するものです。

9.2.1. CLI で仮想マシンのストレージ情報の表示

ここでは、CLI を使用してストレージプールおよびストレージボリュームに関する情報を表示する方法を説明します。

9.2.1.1. CLI でストレージプール情報の表示

手順

  • virsh pool-list コマンドを使用して、ストレージプール情報を表示します。

    # virsh pool-list --all --details
     Name                State    Autostart  Persistent    Capacity  Allocation   Available
     default             running  yes        yes          48.97 GiB   23.93 GiB   25.03 GiB
     Downloads           running  yes        yes         175.62 GiB   62.02 GiB  113.60 GiB
     RHEL8-Storage-Pool  running  yes        yes         214.62 GiB   93.02 GiB  168.60 GiB

関連情報

  • 利用可能な virsh pool-list オプションは、関連する man ページを参照してください。

9.2.1.2. CLI でストレージボリューム情報の表示

ここでは、ストレージプールの情報を表示する方法を説明します。指定したストレージプールのすべてのストレージプールの一覧と、指定したストレージプールに関する詳細を表示できます。

手順

  1. virsh vol-list コマンドを使用して、指定したストレージプールにあるストレージボリュームを一覧表示します。

    # virsh vol-list --pool RHEL8-Storage-Pool --details
     Name                Path                                               Type   Capacity  Allocation
    ---------------------------------------------------------------------------------------------
     .bash_history       /home/VirtualMachines/.bash_history       file  18.70 KiB   20.00 KiB
     .bash_logout        /home/VirtualMachines/.bash_logout        file    18.00 B    4.00 KiB
     .bash_profile       /home/VirtualMachines/.bash_profile       file   193.00 B    4.00 KiB
     .bashrc             /home/VirtualMachines/.bashrc             file   1.29 KiB    4.00 KiB
     .git-prompt.sh      /home/VirtualMachines/.git-prompt.sh      file  15.84 KiB   16.00 KiB
     .gitconfig          /home/VirtualMachines/.gitconfig          file   167.00 B    4.00 KiB
     RHEL8_Volume.qcow2  /home/VirtualMachines/RHEL8_Volume.qcow2  file  60.00 GiB   13.93 GiB
    注記

    利用可能な virsh vol-list オプションは、関連する man ページを参照してください。

  2. virsh vol-info コマンドを使用して、指定したストレージプール内のストレージボリュームを一覧表示します。

    # vol-info --pool RHEL8-Storage-Pool --vol RHEL8_Volume.qcow2
    Name:           RHEL8_Volume.qcow2
    Type:           file
    Capacity:       60.00 GiB
    Allocation:     13.93 GiB
    注記

    利用可能な virsh vol-info オプションは、関連する man ページを参照してください。

9.2.2. CLI で仮想マシンのストレージの作成および割り当て

以下は、仮想マシンにストレージを作成し、割り当てる高度な手順です。

  1. ストレージプールの作成

    利用可能なストレージメディアから、1 つ以上のストレージプールを作成します。対応しているストレージプールの種類の一覧は、「ストレージプールの種類」を参照してください。

    • 永続ストレージプールを作成する場合は、virsh pool-define コマンドおよび virsh pool-define-as コマンドを使用します。

      virsh pool-define コマンドは、プールオプションに XML ファイルを使用します。virsh pool-define-as コマンドは、コマンドラインにオプションを配置します。

    • 一時的なストレージプールを作成する場合は、virsh pool-create コマンドおよび virsh pool-create-as コマンドを使用します。

      virsh pool-create コマンドは、プールオプションに XML ファイルを使用します。virsh pool-create-as コマンドは、コマンドラインにオプションを配置します。

注記

このドキュメントの例と手順はすべて、virsh pool-define コマンドを使用して永続的なストレージプールを作成するためのものです。virsh pool-create コマンド、virsh pool-define-as コマンド、および virsh pool-create-as コマンドの詳細は、関連する man ページを参照してください。

  1. ストレージボリュームの作成

    利用可能なストレージプールから、ストレージボリューム を 1 つ以上作成します。

    注記

    このドキュメントの例と手順はすべて、virsh vol‑create コマンドを使用してストレージを作成するためのものです。virsh vol-create-as コマンドの詳細は、関連する man ページを参照してください。

  2. 仮想マシンへのストレージデバイスの割り当て

    ストレージボリュームから抽象化されたストレージデバイスを、仮想マシンに割り当てます。

以下のセクションでは、CLI を使用してストレージを作成し、割り当てる方法を説明します。

9.2.2.1. CLI で仮想マシン用のディレクトリーベースのストレージの作成および割り当て

以下は、ディレクトリーベースのストレージプールおよびストレージボリュームの作成と、仮想マシンへのボリュームの割り当てに関する情報を提供します。

9.2.2.1.1. CLI でディレクトリーベースのストレージプールの作成

ここでは、ディレクトリーベースのストレージプールを作成する手順を説明します。

手順

  1. XML ファイルでストレージプールを定義します。

    新しいデバイスに必要なストレージプールパラメーターを含む一時的な XML ファイルを作成します。

    必須パラメーターの詳細は、「パラメーター」を参照してください。

  2. ストレージプールを作成します。

    virsh pool-define コマンドを使用して、前の手順で作成した XML ファイルに基づいて永続ストレージプールを作成します。

    # virsh pool-define ~/guest_images.xml
      Pool defined from guest_images_fs
注記

virsh pool-define コマンドを実行したら、手順 1 で作成した XML ファイルを削除できます。

  1. ストレージプールのターゲットパスを定義します。

    virsh pool-build コマンドを使用して、フォーマット済みファイルシステムのストレージプール用のストレージプールターゲットパスを作成し、ストレージソースデバイスを初期化し、データのフォーマットを定義します。

    # virsh pool-build guest_images_fs
      Pool guest_images_fs built
    
    # ls -la /guest_images
      total 8
      drwx------.  2 root root 4096 May 31 19:38 .
      dr-xr-xr-x. 25 root root 4096 May 31 19:38 ..
  2. プールが作成されたことを確認します。

    virsh pool-list コマンドを使用して、プールが作成されたことを確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   no
  3. ストレージプールを起動します。

    virsh pool-start コマンドを使用して、ストレージプールをマウントします。

    # virsh pool-start guest_images_fs
      Pool guest_images_fs started
    注記

    virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。

  4. (必要に応じて) 自動起動をオンにします。

    デフォルトでは、virsh コマンドを使用して定義したストレージプールは、libvirtd が起動するたびに自動的に起動するようには設定されていません。virsh pool-autostart コマンドを使用して、ストレージプールが自動的に起動するように設定します。

    # virsh pool-autostart guest_images_fs
      Pool guest_images_fs marked as autostarted
  5. 自動起動 状態を確認します。

    virsh pool-list コマンドを使用して、自動起動 の状態を確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   yes
  6. ストレージプールを確認します。

    ストレージプールが正しく作成され、報告されたサイズが期待どおりで、状態が 実行中 と報告されたことを確認します。ファイルシステムのターゲットパスに lost+found ディレクトリーがあることを確認します。これは、デバイスがマウントされていることを示しています。

    # virsh pool-info guest_images_fs
      Name:           guest_images_fs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
    
    # mount | grep /guest_images
      /dev/sdc1 on /guest_images type ext4 (rw)
    
    # ls -la /guest_images
      total 24
      drwxr-xr-x.  3 root root  4096 May 31 19:47 .
      dr-xr-xr-x. 25 root root  4096 May 31 19:38 ..
      drwx------.  2 root root 16384 May 31 14:18 lost+found
9.2.2.1.2. ディレクトリーベースのストレージプールのパラメーター

以下は、ディレクトリーベースのストレージプールおよび例に必要なパラメーターに関する情報です。

パラメーター

以下の表は、ディレクトリーベースのストレージプールの XML ファイルに必要なパラメーターの一覧です。

表9.1 ディレクトリーベースのストレージプールのパラメーター

説明XML

ストレージプールの種類

<pool type='dir'>

ストレージプールの名前

<name>name</name>

ターゲットを指定するパス。ストレージプールに使用されるパスになります。

<target>
   <path>target_path</path>
</target>

以下は、/guest_images ディレクトリーに基づいたストレージプールの XML ファイルの例です。

<pool type='dir'>
  <name>dirpool</name>
  <target>
    <path>/guest_images</path>
  </target>
</pool>

9.2.2.2. CLI で仮想マシンにディスクベースのストレージを作成して割り当て

以下は、ディスクベースのストレージプールおよびストレージボリュームの作成と、仮想マシンのボリュームの割り当てに関する情報を提供します。

9.2.2.2.1. CLI でディスクベースのストレージプールの作成

ここでは、ディスクベースのストレージプールを作成する手順を説明します。

推奨情報

ディスクベースのストレージプールを作成する前に、以下の点に注意してください。

  • 使用されている libvirt のバージョンに応じて、ディスクをストレージプール専用にすると、現在ディスクデバイスに格納されているすべてのデータが再フォーマットされて消去される可能性があります。ストレージプールを作成する前に、ストレージデバイスのデータのバックアップを作成することを強く推奨します。
  • 仮想マシンには、ディスク全体またはブロックデバイス (/dev/sdb など) への書き込みアクセス権を付与しないでください。パーティション (/dev/sdb1 など) または LVM ボリュームを使用します。

    ブロックデバイス全体を仮想マシンに渡すと、仮想マシンはブロックデバイスをパーティションに分割するか、ブロックデバイスに独自の LVM グループを作成します。これにより、ホストマシンがこのようなパーティションまたは LVM グループを検出し、エラーが発生する可能性があります。

手順

  1. GUID パーティションテーブル (GPT) のディスクラベルで、ディスクのラベルを付け直します。GPT ディスクラベルは、各デバイスに最大 128 個のパーティションを作成できます。

    # parted /dev/sdb
    GNU Parted 2.1
    Using /dev/sdb
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted) mklabel
    New disk label type? gpt
    (parted) quit
    Information: You may need to update /etc/fstab.
    #
  2. XML ファイルでストレージプールを定義します。

    新しいデバイスに必要なストレージプールパラメーターを含む一時的な XML ファイルを作成します。

    必須パラメーターの詳細は、「パラメーター」を参照してください。

  3. ストレージプールを作成します。

    virsh pool-define コマンドを使用して、前の手順で作成した XML ファイルに基づいて永続ストレージプールを作成します。

    # virsh pool-define ~/guest_images.xml
      Pool defined from guest_images_fs
注記

virsh pool-define コマンドを実行したら、手順 1 で作成した XML ファイルを削除できます。

  1. ストレージプールのターゲットパスを定義します。

    virsh pool-build コマンドを使用して、フォーマット済みファイルシステムのストレージプール用のストレージプールターゲットパスを作成し、ストレージソースデバイスを初期化し、データのフォーマットを定義します。

    # virsh pool-build guest_images_fs
      Pool guest_images_fs built
    
    # ls -la /guest_images
      total 8
      drwx------.  2 root root 4096 May 31 19:38 .
      dr-xr-xr-x. 25 root root 4096 May 31 19:38 ..
    注記

    ターゲットパスの構築は、ディスクベース、ファイルシステムベース、論理ストレージプールにのみ必要です。libvirt は、overwrite オプションが指定されている場合を除き、ソースストレージデバイスのデータフォーマットが、選択したストレージプールタイプと異なることを検出すると、ビルドに失敗します。

  2. プールが作成されたことを確認します。

    virsh pool-list コマンドを使用して、プールが作成されたことを確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   no
  3. ストレージプールを起動します。

    virsh pool-start コマンドを使用して、ストレージプールをマウントします。

    # virsh pool-start guest_images_fs
      Pool guest_images_fs started
    注記

    virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。

  4. (必要に応じて) 自動起動をオンにします。

    デフォルトでは、virsh コマンドを使用して定義したストレージプールは、libvirtd が起動するたびに自動的に起動するようには設定されていません。virsh pool-autostart コマンドを使用して、ストレージプールが自動的に起動するように設定します。

    # virsh pool-autostart guest_images_fs
      Pool guest_images_fs marked as autostarted
  5. 自動起動 状態を確認します。

    virsh pool-list コマンドを使用して、自動起動 の状態を確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   yes
  6. ストレージプールを確認します。

    ストレージプールが正しく作成され、報告されたサイズが期待どおりで、状態が 実行中 と報告されたことを確認します。ファイルシステムのターゲットパスに lost+found ディレクトリーがあることを確認します。これは、デバイスがマウントされていることを示しています。

    # virsh pool-info guest_images_fs
      Name:           guest_images_fs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
    
    # mount | grep /guest_images
      /dev/sdc1 on /guest_images type ext4 (rw)
    
    # ls -la /guest_images
      total 24
      drwxr-xr-x.  3 root root  4096 May 31 19:47 .
      dr-xr-xr-x. 25 root root  4096 May 31 19:38 ..
      drwx------.  2 root root 16384 May 31 14:18 lost+found
9.2.2.2.2. ディスクベースのストレージプールのパラメーター

以下は、ディレクトリーベースのストレージプールおよび例に必要なパラメーターに関する情報です。

パラメーター

以下の表は、ディスクベースのストレージプールの XML ファイルに必要なパラメーターの一覧です。

表9.2 ディスクベースのストレージプールのパラメーター

説明XML

ストレージプールの種類

<pool type='disk'>

ストレージプールの名前

<name>name</name>

ストレージデバイスを指定するパス。たとえば、/dev/sdb です。

<source>
   <path>source_path</path>
</source>

ターゲットデバイスを指定するパス。ストレージプールに使用されるパスになります。

<target>
   <path>target_path</path>
</target>

以下は、ディスクに基づいたストレージプールに対する XML ファイルの例です。

<pool type='disk'>
  <name>phy_disk</name>
  <source>
    <device path='/dev/sdb'/>
    <format type='gpt'/>
  </source>
  <target>
    <path>/dev</path>
  </target>
</pool>

9.2.2.3. CLI で仮想マシンにファイルシステムベースのストレージを作成して割り当て

以下は、ディレクトリーベースのストレージプールおよびストレージボリュームの作成と、仮想マシンへのボリュームの割り当てに関する情報を提供します。

9.2.2.3.1. CLI でファイルシステムベースのストレージプールの作成

ここでは、ファイルシステムベースのストレージプールを作成する手順を説明します。

推奨情報

この手順は、ディスク全体をストレージプール (/dev/sdb など) として割り当てるのに使用しないでください。仮想マシンには、ディスク全体またはブロックデバイスへの書き込みアクセス権を付与しないでください。この方法は、パーティション (/dev/sdb1 など) をストレージプールに割り当てる場合に限り使用してください。

手順

  1. XML ファイルでストレージプールを定義します。

    新しいデバイスに必要なストレージプールパラメーターを含む一時的な XML ファイルを作成します。

    必須パラメーターの詳細は、「パラメーター」を参照してください。

  2. ストレージプールを作成します。

    virsh pool-define コマンドを使用して、前の手順で作成した XML ファイルに基づいて永続ストレージプールを作成します。

    # virsh pool-define ~/guest_images.xml
      Pool defined from guest_images_fs
注記

virsh pool-define コマンドを実行したら、手順 1 で作成した XML ファイルを削除できます。

  1. ストレージプールのターゲットパスを定義します。

    virsh pool-build コマンドを使用して、フォーマット済みファイルシステムのストレージプール用のストレージプールターゲットパスを作成し、ストレージソースデバイスを初期化し、データのフォーマットを定義します。

    # virsh pool-build guest_images_fs
      Pool guest_images_fs built
    
    # ls -la /guest_images
      total 8
      drwx------.  2 root root 4096 May 31 19:38 .
      dr-xr-xr-x. 25 root root 4096 May 31 19:38 ..
  2. プールが作成されたことを確認します。

    virsh pool-list コマンドを使用して、プールが作成されたことを確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   no
  3. ストレージプールを起動します。

    virsh pool-start コマンドを使用して、ストレージプールをマウントします。

    # virsh pool-start guest_images_fs
      Pool guest_images_fs started
    注記

    virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。

  4. (必要に応じて) 自動起動をオンにします。

    デフォルトでは、virsh コマンドを使用して定義したストレージプールは、libvirtd が起動するたびに自動的に起動するようには設定されていません。virsh pool-autostart コマンドを使用して、ストレージプールが自動的に起動するように設定します。

    # virsh pool-autostart guest_images_fs
      Pool guest_images_fs marked as autostarted
  5. 自動起動 状態を確認します。

    virsh pool-list コマンドを使用して、自動起動 の状態を確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   yes
  6. ストレージプールを確認します。

    ストレージプールが正しく作成され、報告されたサイズが期待どおりで、状態が 実行中 と報告されたことを確認します。ファイルシステムのターゲットパスに lost+found ディレクトリーがあることを確認します。これは、デバイスがマウントされていることを示しています。

    # virsh pool-info guest_images_fs
      Name:           guest_images_fs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
    
    # mount | grep /guest_images
      /dev/sdc1 on /guest_images type ext4 (rw)
    
    # ls -la /guest_images
      total 24
      drwxr-xr-x.  3 root root  4096 May 31 19:47 .
      dr-xr-xr-x. 25 root root  4096 May 31 19:38 ..
      drwx------.  2 root root 16384 May 31 14:18 lost+found
9.2.2.3.2. ファイルシステムベースのストレージプールパラメーター

以下は、ディレクトリーベースのストレージプールおよび例に必要なパラメーターに関する情報です。

パラメーター

次の表は、ファイルシステムベースのストレージプールの XML ファイルに必要なパラメーターの一覧です。

表9.3 ファイルシステムベースのストレージプールパラメーター

説明XML

ストレージプールの種類

<pool type='fs'>

ストレージプールの名前

<name>name</name>

パーミッションを指定するパス。たとえば、/dev/sdc1 です。

<source>
   <device path=device_path />

ファイルシステムのタイプ (ext4 など)。

    <format type=fs_type />
</source>

ターゲットを指定するパス。ストレージプールに使用されるパスになります。

<target>
    <path>path-to-pool</path>
</target>

以下は、/dev/sdc1 パーティションに基づいたストレージプールに対する XML ファイルの例です。

<pool type='fs'>
  <name>guest_images_fs</name>
  <source>
    <device path='/dev/sdc1'/>
    <format type='auto'/>
  </source>
  <target>
    <path>/guest_images</path>
  </target>
</pool>

9.2.2.4. CLI で仮想マシンの GlusterFS ストレージの作成および割り当て

以下は、ディレクトリーベースのストレージプールおよびストレージボリュームの作成と、仮想マシンへのボリュームの割り当てに関する情報を提供します。

9.2.2.4.1. CLI で GlusterFS ベースのストレージプールの作成

GlusterFS は、ユーザー空間のファイルシステム (FUSE) を使用するユーザー空間のファイルシステムです。ここでは、GlusterFS ベースのストレージプールを作成する手順を説明します。

前提条件

  • GlusterFS ベースのストレージプールをホストに作成する前に、Gluster サーバーを準備する必要があります。

    1. 次のコマンドを使用してそのステータスを一覧表示して、Gluster サーバーの IP アドレスを取得します。

      # gluster volume status
      Status of volume: gluster-vol1
      Gluster process                           Port	Online	Pid
      ------------------------------------------------------------
      Brick 222.111.222.111:/gluster-vol1       49155	  Y    18634
      
      Task Status of Volume gluster-vol1
      ------------------------------------------------------------
      There are no active volume tasks
    2. glusterfs-fuse パッケージがインストールされていない場合はインストールします。
    3. virt_use_fusefs ブール値が有効になっていない場合は有効にします。有効になっていることを確認します。

      # setsebool virt_use_fusefs on
      # getsebool virt_use_fusefs
      virt_use_fusefs --> on

必要なパッケージがインストールされ、有効になっていることを確認したら、引き続きストレージプールを作成します。

手順

  1. XML ファイルでストレージプールを定義します。

    新しいデバイスに必要なストレージプールパラメーターを含む一時的な XML ファイルを作成します。

    必須パラメーターの詳細は、「パラメーター」を参照してください。

  2. ストレージプールを作成します。

    virsh pool-define コマンドを使用して、前の手順で作成した XML ファイルに基づいて永続ストレージプールを作成します。

    # virsh pool-define ~/guest_images.xml
      Pool defined from guest_images_fs

virsh pool-define コマンドを実行したら、手順 1 で作成した XML ファイルを削除できます。

  1. ストレージプールのターゲットパスを定義します。

    virsh pool-build コマンドを使用して、フォーマット済みファイルシステムのストレージプール用のストレージプールターゲットパスを作成し、ストレージソースデバイスを初期化し、データのフォーマットを定義します。

    # virsh pool-build guest_images_fs
      Pool guest_images_fs built
    
    # ls -la /guest_images
      total 8
      drwx------.  2 root root 4096 May 31 19:38 .
      dr-xr-xr-x. 25 root root 4096 May 31 19:38 ..
    注記

    ターゲットパスの構築は、ディスクベース、ファイルシステムベース、論理ストレージプールにのみ必要です。libvirt は、overwrite オプションが指定されている場合を除き、ソースストレージデバイスのデータフォーマットが、選択したストレージプールタイプと異なることを検出すると、ビルドに失敗します。

  2. プールが作成されたことを確認します。

    virsh pool-list コマンドを使用して、プールが作成されたことを確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   no
  3. ストレージプールを起動します。

    virsh pool-start コマンドを使用して、ストレージプールをマウントします。

    # virsh pool-start guest_images_fs
      Pool guest_images_fs started
    注記

    virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。

  4. (必要に応じて) 自動起動をオンにします。

    デフォルトでは、virsh コマンドを使用して定義したストレージプールは、libvirtd が起動するたびに自動的に起動するようには設定されていません。virsh pool-autostart コマンドを使用して、ストレージプールが自動的に起動するように設定します。

    # virsh pool-autostart guest_images_fs
      Pool guest_images_fs marked as autostarted
  5. 自動起動 状態を確認します。

    virsh pool-list コマンドを使用して、自動起動 の状態を確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   yes
  6. ストレージプールを確認します。

    ストレージプールが正しく作成され、報告されたサイズが期待どおりで、状態が 実行中 と報告されたことを確認します。ファイルシステムのターゲットパスに lost+found ディレクトリーがあることを確認します。これは、デバイスがマウントされていることを示しています。

    # virsh pool-info guest_images_fs
      Name:           guest_images_fs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
    
    # mount | grep /guest_images
      /dev/sdc1 on /guest_images type ext4 (rw)
    
    # ls -la /guest_images
      total 24
      drwxr-xr-x.  3 root root  4096 May 31 19:47 .
      dr-xr-xr-x. 25 root root  4096 May 31 19:38 ..
      drwx------.  2 root root 16384 May 31 14:18 lost+found
9.2.2.4.2. GlusterFS ベースのストレージプールパラメーター

以下は、GlusterFS ベースのストレージプールと例に必要なパラメーターに関する情報です。

パラメーター

以下の表は、GlusterFS ベースのストレージプールの XML ファイルに必要なパラメーターの一覧です。

表9.4 GlusterFS ベースのストレージプールパラメーター

説明XML

ストレージプールの種類

<pool type='gluster'>

ストレージプールの名前

<name>name</name>

Gluster サーバーのホスト名または IP アドレス

<source>
   <name=gluster-name />

Gluster サーバーの名前

    <name>name</name>

ストレージプールに使用される Gluster サーバーのパス。

    <dir path=gluster-path />
</source>

以下は、111.222.111.222 の Gluster ファイルシステムに基づいたストレージプールに対する XML ファイルの例です。

<pool type='gluster'>
  <name>Gluster_pool</name>
  <source>
    <host name='111.222.111.222'/>
    <dir path='/'/>
    <name>gluster-vol1</name>
  </source>
</pool>

9.2.2.5. CLI で仮想マシンに iSCSI ベースのストレージを作成して割り当て

以下は、iSCSI ベースのストレージプールおよびストレージボリュームの作成、libvirt シークレットを使用した iSCSI ベースのストレージプールのセキュリティー保護、および仮想マシンへのボリュームの割り当てに関する情報を提供します。

推奨情報

iSCSI (Internet Small Computer System Interface) は、ストレージデバイスを共有するネットワークプロトコルです。iSCSI は、IP 層で SCSI 命令を使用してイニシエーター (ストレージクライアント) をターゲット (ストレージサーバー) に接続します。

iSCSI ベースのデバイスを使用して仮想マシンを保存することで、iSCSI をブロックストレージデバイスとして使用するなど、より柔軟なストレージオプションが可能になります。iSCSI デバイスは、Linux-IO (LIO) ターゲットを使用します。これは、Linux 用のマルチプロトコル SCSI ターゲットです。LIO は、iSCSI に加えて、FCoE (Fibre Channel and Fibre Channel over Ethernet) にも対応します。

iSCSI ストレージプールへのアクセスを防ぐ必要がある場合は、libvirt シークレット を使用してセキュリティーを保護できます。

前提条件
  • iSCSI ベースのストレージプールを作成する前に、iSCSI ターゲットを作成する必要があります。iSCSI ターゲットを作成するには、targetcli パッケージを使用して作成します。このパッケージは、ソフトウェアで強化した iSCSI ターゲットを作成するコマンドセットを提供します。

    iSCSI ターゲットの作成に関する詳細および手順は、『Red Hat Enterprise Linuxストレージ管理ガイド』 を参照してください。

9.2.2.5.1. CLI で iSCSI ベースのストレージプールの作成

ここでは、iSCSI ベースのストレージプールを作成する手順を説明します。

手順

  1. XML ファイルでストレージプールを定義します。

    新しいデバイスに必要なストレージプールパラメーターを含む一時的な XML ファイルを作成します。

    必須パラメーターの詳細は、「パラメーター」を参照してください。

  2. ストレージプールを作成します。

    virsh pool-define コマンドを使用して、前の手順で作成した XML ファイルに基づいて永続ストレージプールを作成します。

    # virsh pool-define ~/guest_images.xml
      Pool defined from guest_images_fs

virsh pool-define コマンドを実行したら、手順 1 で作成した XML ファイルを削除できます。

  1. プールが作成されたことを確認します。

    virsh pool-list コマンドを使用して、プールが作成されたことを確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   no
  2. ストレージプールを起動します。

    virsh pool-start コマンドを使用して、ストレージプールをマウントします。

    # virsh pool-start guest_images_fs
      Pool guest_images_fs started
    注記

    virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。

  3. (必要に応じて) 自動起動をオンにします。

    デフォルトでは、virsh コマンドを使用して定義したストレージプールは、libvirtd が起動するたびに自動的に起動するようには設定されていません。virsh pool-autostart コマンドを使用して、ストレージプールが自動的に起動するように設定します。

    # virsh pool-autostart guest_images_fs
      Pool guest_images_fs marked as autostarted
  4. 自動起動 状態を確認します。

    virsh pool-list コマンドを使用して、自動起動 の状態を確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   yes
  5. ストレージプールを確認します。

    ストレージプールが正しく作成され、報告されたサイズが期待どおりで、状態が 実行中 と報告されたことを確認します。ファイルシステムのターゲットパスに lost+found ディレクトリーがあることを確認します。これは、デバイスがマウントされていることを示しています。

    # virsh pool-info guest_images_fs
      Name:           guest_images_fs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
    
    # mount | grep /guest_images
      /dev/sdc1 on /guest_images type ext4 (rw)
    
    # ls -la /guest_images
      total 24
      drwxr-xr-x.  3 root root  4096 May 31 19:47 .
      dr-xr-xr-x. 25 root root  4096 May 31 19:38 ..
      drwx------.  2 root root 16384 May 31 14:18 lost+found
9.2.2.5.2. iSCSI ベースのストレージプールパラメーター

以下は、iSCSI ベースのストレージプールと例に必要なパラメーターに関する情報です。

パラメーター

以下の表は、iSCSI ベースのストレージプールの XML ファイルに必要なパラメーターの一覧です。

表9.5 iSCSI ベースのストレージプールパラメーター

説明XML

ストレージプールの種類

<pool type='iscsi'>

ストレージプールの名前

<name>name</name>

ホストの名前

<source>
  <host name=hostname />

iSCSI IQN

    <device path= iSCSI_IQN />
</source>

ターゲットを指定するパス。ストレージプールに使用されるパスになります。

<target>
   <path>/dev/disk/by-path</path>
</target>

(必要に応じて) iSCSI イニシエーターの IQN。これは、ACL が LUN を特定のイニシエーターに制限する場合に限り必要です。

<initiator>
   <iqn name='initiator0' />
</initiator>

注記

iSCSI イニシエーターの IQN は、iscsi コマンドの virsh find-storage-pool-sources-as を使用して指定できます。

以下は、指定した iSCSI に基づいたストレージプールに対する XML ファイルの例です。

<pool type='iscsi'>
  <name>iSCSI_pool</name>
  <source>
    <host name='server1.example.com'/>
    <device path='iqn.2010-05.com.example.server1:iscsirhel7guest'/>
  </source>
  <target>
    <path>/dev/disk/by-path</path>
  </target>
</pool>
9.2.2.5.3. libvirt シークレットを使用した iSCSI ストレージプールのセキュリティー保護

ユーザー名とパスワードのパラメーターは、iSCSI ストレージプールを保護するため、virsh で設定できます。これは、プールを定義する前または後に設定できますが、認証設定を有効にするにはプールを起動する必要があります。

ここでは、libvirt シークレットを使用して、iSCSI ベースのストレージプールのセキュリティーを保護する手順を説明します。

注記

この手順は、iSCSI ターゲットの作成時に user_ID および password が定義される場合に必要です。

手順

  1. チャレンジハンドシェイク認証プロトコル (CHAP) のユーザー名を使用して、libvirt シークレットファイルを作成します。以下に例を示します。

    <secret ephemeral='no' private='yes'>
        <description>Passphrase for the iSCSI example.com server</description>
        <usage type='iscsi'>
            <target>iscsirhel7secret</target>
        </usage>
    </secret>
  2. virsh secret-define コマンドを使用して、libvirt シークレットを定義します。

    # virsh secret-define secret.xml

  3. virsh secret-list コマンドで UUID を確認します。

    # virsh secret-list
    UUID                                  Usage
    -------------------------------------------------------------------
    2d7891af-20be-4e5e-af83-190e8a922360  iscsi iscsirhel7secret
  4. virsh secret-set-value コマンドを使用して、前の手順の出力の UUID に、シークレットを割り当てます。これにより、CHAP ユーザー名とパスワードが、libvirt が制御するシークレット一覧にあることが保証されます。以下に例を示します。

    # MYSECRET=`printf *%s "password123" | base64`
    # virsh secret-set-value 2d7891af-20be-4e5e-af83-190e8a922360 $MYSECRET
  5. virsh edit コマンドを使用してストレージプールの XML ファイルに認証エントリーを追加し、<auth> 要素を追加して認証タイプユーザー名、および シークレットの使用方法 を指定します。

    以下に例を示します。

    <pool type='iscsi'>
      <name>iscsirhel7pool</name>
        <source>
           <host name='192.168.122.1'/>
           <device path='iqn.2010-05.com.example.server1:iscsirhel7guest'/>
           <auth type='chap' username='redhat'>
              <secret usage='iscsirhel7secret'/>
           </auth>
        </source>
      <target>
        <path>/dev/disk/by-path</path>
      </target>
    </pool>
    注記

    サブ要素 <auth> は仮想マシンの <pool> および <disk> XML 要素内の異なる場所に存在します。<pool> の場合は、<auth><source> 要素に指定されます。認証は一部のプールソース (iSCSI および RBD) のプロパティーであるため、これはプールソースの検索場所を説明する要素となります。ドメインのサブ要素である <disk> の場合、iSCSI ディスクまたは RBD ディスクに対する認証は、ディスクのプロパティーです。また、ディスクのサブ要素 <auth> は、ストレージプールのサブ要素とは異なります。

    <auth username='redhat'>
      <secret type='iscsi' usage='iscsirhel7secret'/>
    </auth>
  6. 変更を有効にするには、ストレージプールをアクティベートする必要があります。プールがすでに起動している場合は、ストレージプールを停止して再起動します。

    # virsh pool-destroy iscsirhel7pool

    # virsh pool-start iscsirhel7pool

9.2.2.6. CLI で仮想マシンに LVM ベースのストレージを作成して割り当て

以下は、LVM ベースのストレージプールおよびストレージボリュームの作成と、仮想マシンへのボリュームの割り当てに関する情報を提供します。

9.2.2.6.1. CLI で LVM ベースのストレージプールの作成

ここでは、LVM ベースのストレージプールを作成する手順を説明します。

推奨情報

LVM ベースのストレージプールを作成する前に、以下の点に注意してください。

  • LVM ベースのストレージプールは、LVM の柔軟性を完全には提供しません。
  • libvirt は、シン論理ボリュームに対応しますが、シンストレージプールの機能は提供しません。
  • LVM ベースのストレージプールは、ボリュームグループです。Logical Volume Manager コマンド、または virsh コマンドを使用して、ボリュームグループを作成できます。virsh インターフェースを使用してボリュームグループを管理する場合は、virsh コマンドを使用してボリュームグループを作成します。

    ボリュームグループの詳細は、『Red Hat Enterprise Linux 論理ボリュームマネージャ管理ガイド』を参照してください。

  • LVM ベースのストレージプールには、完全なディスクパーティションが必要です。この手順で新しいパーティションまたはデバイスをアクティベートすると、パーティションはフォーマットされ、すべてのデータが削除されます。ホストの既存のボリュームグループ (VG) を使用すると、何も消去されません。ストレージデバイスのバックアップは、開始前に行うことが推奨されます。

手順

  1. XML ファイルでストレージプールを定義します。

    新しいデバイスに必要なストレージプールパラメーターを含む一時的な XML ファイルを作成します。

    必須パラメーターの詳細は、「パラメーター」を参照してください。

  2. ストレージプールを作成します。

    virsh pool-define コマンドを使用して、前の手順で作成した XML ファイルに基づいて永続ストレージプールを作成します。

    # virsh pool-define ~/guest_images.xml
      Pool defined from guest_images_fs
注記

virsh pool-define コマンドを実行したら、手順 1 で作成した XML ファイルを削除できます。

  1. プールが作成されたことを確認します。

    virsh pool-list コマンドを使用して、プールが作成されたことを確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   no
  2. ストレージプールを起動します。

    virsh pool-start コマンドを使用して、ストレージプールをマウントします。

    # virsh pool-start guest_images_fs
      Pool guest_images_fs started
    注記

    virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。

  3. (必要に応じて) 自動起動をオンにします。

    デフォルトでは、virsh コマンドを使用して定義したストレージプールは、libvirtd が起動するたびに自動的に起動するようには設定されていません。virsh pool-autostart コマンドを使用して、ストレージプールが自動的に起動するように設定します。

    # virsh pool-autostart guest_images_fs
      Pool guest_images_fs marked as autostarted
  4. 自動起動 状態を確認します。

    virsh pool-list コマンドを使用して、自動起動 の状態を確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   yes
  5. ストレージプールを確認します。

    ストレージプールが正しく作成され、報告されたサイズが期待どおりで、状態が 実行中 と報告されたことを確認します。ファイルシステムのターゲットパスに lost+found ディレクトリーがあることを確認します。これは、デバイスがマウントされていることを示しています。

    # virsh pool-info guest_images_fs
      Name:           guest_images_fs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
    
    # mount | grep /guest_images
      /dev/sdc1 on /guest_images type ext4 (rw)
    
    # ls -la /guest_images
      total 24
      drwxr-xr-x.  3 root root  4096 May 31 19:47 .
      dr-xr-xr-x. 25 root root  4096 May 31 19:38 ..
      drwx------.  2 root root 16384 May 31 14:18 lost+found
9.2.2.6.2. LVM ベースのストレージプールパラメーター

以下は、LVM ベースのストレージプールと例に必要なパラメーターに関する情報です。

パラメーター

以下の表は、LVM ベースのストレージプールの XML ファイルに必要なパラメーターの一覧です。

表9.6 LVM ベースのストレージプールパラメーター

説明XML

ストレージプールの種類

<pool type='logical'>

ストレージプールの名前

<name>name</name>

ストレージプールのデバイスのパス

<source>
   <device path='device_path' />`

ボリュームグループの名前

    <name>VG-name</name>

仮想グループの形式

    <format type='lvm2' />
</source>

ターゲットパス

<target>
   <path=target_path />
</target>

注記

論理ボリュームグループが複数のディスクパーティションで作成されている場合は、複数のソースデバイスが一覧表示されている可能性があります。以下に例を示します。

<source>
  <device path='/dev/sda1'/>
  <device path='/dev/sdb3'/>
  <device path='/dev/sdc2'/>
  ...
</source>

以下は、指定した LVM に基づいたストレージプールに対する XML ファイルの例です。

<pool type='logical'>
  <name>guest_images_lvm</name>
  <source>
    <device path='/dev/sdc'/>
    <name>libvirt_lvm</name>
    <format type='lvm2'/>
  </source>
  <target>
    <path>/dev/libvirt_lvm</path>
  </target>
</pool>

9.2.2.7. CLI で仮想マシンにネットワークベースのストレージを作成して割り当て

ここでは、ネットワークベースのストレージプールおよびストレージボリュームの作成と、仮想マシンのボリュームの割り当てに関する情報を提供します。

前提条件

  • NFS (Network File System) ベースのストレージプールを作成するには、ホストマシンで NFS サーバーを使用するように設定しておく必要があります。NFS の詳細は、『Red Hat Enterprise Linux ストレージ管理ガイド』を参照してください。
  • 使用するファイルシステムに必要なユーティリティーがホストにインストールされていることを確認します。たとえば、共通インターネットファイルシステム (CIFS) の場合は cifs-utils、GlusterFS の場合は glusterfs.fuse です。
9.2.2.7.1. CLI でネットワークベースのストレージプールの作成

ここでは、ネットワークベースのストレージプールを作成する手順を説明します。

手順

  1. XML ファイルでストレージプールを定義します。

    新しいデバイスに必要なストレージプールパラメーターを含む一時的な XML ファイルを作成します。

    必須パラメーターの詳細は、「パラメーター」を参照してください。

  2. ストレージプールを作成します。

    virsh pool-define コマンドを使用して、前の手順で作成した XML ファイルに基づいて永続ストレージプールを作成します。

    # virsh pool-define ~/guest_images.xml
      Pool defined from guest_images_fs
注記

virsh pool-define コマンドを実行したら、手順 1 で作成した XML ファイルを削除できます。

  1. ストレージプールのターゲットパスを定義します。

    virsh pool-build コマンドを使用して、フォーマット済みファイルシステムのストレージプール用のストレージプールターゲットパスを作成し、ストレージソースデバイスを初期化し、データのフォーマットを定義します。

    # virsh pool-build guest_images_fs
      Pool guest_images_fs built
    
    # ls -la /guest_images
      total 8
      drwx------.  2 root root 4096 May 31 19:38 .
      dr-xr-xr-x. 25 root root 4096 May 31 19:38 ..
  2. プールが作成されたことを確認します。

    virsh pool-list コマンドを使用して、プールが作成されたことを確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   no
  3. ストレージプールを起動します。

    virsh pool-start コマンドを使用して、ストレージプールをマウントします。

    # virsh pool-start guest_images_fs
      Pool guest_images_fs started
    注記

    virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。

  4. (必要に応じて) 自動起動をオンにします。

    デフォルトでは、virsh コマンドを使用して定義したストレージプールは、libvirtd が起動するたびに自動的に起動するようには設定されていません。virsh pool-autostart コマンドを使用して、ストレージプールが自動的に起動するように設定します。

    # virsh pool-autostart guest_images_fs
      Pool guest_images_fs marked as autostarted
  5. 自動起動 状態を確認します。

    virsh pool-list コマンドを使用して、自動起動 の状態を確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   yes
  6. ストレージプールを確認します。

    ストレージプールが正しく作成され、報告されたサイズが期待どおりで、状態が 実行中 と報告されたことを確認します。ファイルシステムのターゲットパスに lost+found ディレクトリーがあることを確認します。これは、デバイスがマウントされていることを示しています。

    # virsh pool-info guest_images_fs
      Name:           guest_images_fs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
    
    # mount | grep /guest_images
      /dev/sdc1 on /guest_images type ext4 (rw)
    
    # ls -la /guest_images
      total 24
      drwxr-xr-x.  3 root root  4096 May 31 19:47 .
      dr-xr-xr-x. 25 root root  4096 May 31 19:38 ..
      drwx------.  2 root root 16384 May 31 14:18 lost+found
9.2.2.7.2. NFS ベースのストレージプールパラメーター

以下は、NFS ベースのストレージプールと例に必要なパラメーターに関する情報です。

パラメーター

以下の表は、NFS ベースのストレージプールの XML ファイルに必要なパラメーターの一覧です。

表9.7 NFS ベースのストレージプールパラメーター

説明XML

ストレージプールの種類

<pool type='netfs'>

ストレージプールの名前

<name>name</name>

マウントポイントがあるネットワークサーバーのホスト名。これは、ホスト名または IP アドレスになります。

<source>
   <host name=hostname
/>

ストレージプールの形式

次のいずれかになります。

    <format type='nfs' />

    <format type='glusterfs' />

    <format type='cifs' />

ネットワークサーバーで使用されるディレクトリー

    <dir path=source_path />
</source>

ターゲットを指定するパス。ストレージプールに使用されるパスになります。

<target>
   <path>target_path</path>
</target>

以下は、NFS サーバー file_server/home/net_mount ディレクトリーでのストレージプールの XML ファイルの例です。

<pool type='netfs'>
  <name>nfspool</name>
  <source>
    <host name='file_server'/>
    <format type='nfs'/>
    <dir path='/home/net_mount'/>
  </source>
  <target>
    <path>/var/lib/libvirt/images/nfspool</path>
  </target>
</pool>

9.2.2.8. CLI で仮想マシンに vHBA ベースのストレージを作成して割り当て

ここでは、vHBA ベースのストレージプールおよびストレージボリュームの作成と、仮想マシンのボリュームの割り当てを説明します。

9.2.2.8.1. 推奨情報

N_Port ID Virtualization (NPIV) は、1 つの物理ファイバーチャンネルのホストバスアダプター (HBA) の共有を可能にするソフトウェアテクノロジーです。これにより、複数の仮想マシンが複数の物理ホストから同じストレージを認識できるため、ストレージの移行パスが容易になります。そのため、正しいストレージパスが指定されていれば、移行を使用してストレージを作成またはコピーする必要はありません。

仮想化では、仮想ホストバスアダプター (vHBA) が、仮想マシンの論理ユニット番号 (LUN) を制御します。複数の仮想マシン間でファイバーチャネルデバイスパスを共有するホストには、仮想マシンごとに vHBA を作成する必要があります。1 つの vHBA を、複数の仮想マシンで使用することはできません。

NPIV の各 vHBA は、その親 HBA と、独自の World Wide Node Name (WWNN) および World Wide Port Name (WWPN) で識別されます。ストレージのパスは、WWNN および WWPN の値で決定します。親 HBA は、scsi_host# または WWNN/WWPN ペアとして定義できます。

注記

親 HBA が scsi_host# として定義され、ハードウェアがホストマシンに追加されている場合、scsi_host# の割り当ては変更する可能性があります。したがって、WWNN/WWPN のペアを使用して親 HBA を定義することが推奨されます。

これは、vHBA 設定を保持するため、vHBA に基づいて libvirt ストレージを定義することが推奨されます。

libvirt ストレージプールを使用すると、主に以下の利点があります。

  • libvirt コードは、virsh コマンド出力から LUN のパスを簡単に検索できます。
  • 仮想マシンの移行には、ターゲットマシンで同じ vHBA 名を持つストレージプールの定義と起動のみが必要です。これを行うには、仮想マシンの XML 設定で、vHBA LUN、libvirt ストレージプール、およびボリューム名を指定する必要があります。
注記

vHBA を作成する前に、ホストの LUN でストレージアレイ (SAN) 側のゾーンを設定して、仮想マシン間の分離を提供し、データの破損を防ぐことが推奨されます。

永続的な vHBA 構成を作成するには、最初に libvirt の scsi ストレージプールの XML ファイルを作成します。XML ファイルの詳細は、「vHBA の作成」を参照してください。同じ物理 HBA 上のストレージプールを使用する 1 つの vHBA を作成する場合は、システムの /dev/disk/by-{path|id|uuid|label} のような場所など、<path> 値に安定した場所を使用することが推奨されます。

同じ物理 HBA 上でストレージプールを使用する複数の vHBA を作成する場合は、<path> フィールドの値を /dev/ のみにする必要があります。それ以外の場合は、ストレージプールボリュームが 1 つの vHBA からしか確認できず、NPIV 構成で、ホストのデバイスを複数の仮想マシンに公開することができません。

<path> と、<target> の要素の詳細は、アップストリームの libvirt ドキュメント を参照してください。

前提条件

vHBA を作成して、SCSI デバイスを使用して vHBA ベースのストレージプールを作成できるようにしてある。

9.2.2.8.2. vHBA の作成

ここでは、仮想ホストバスアダプター (vHBA) の作成方法を説明します。

手順

  1. virsh nodedev-list --cap vports コマンドを使用して、ホストシステムの HBA を見つけます。

    以下の例は、vHBA に対応する HBA が 2 つ搭載されているホストを示しています。

    # virsh nodedev-list --cap vports
    scsi_host3
    scsi_host4
  2. virsh nodedev-dumpxml HBA_device コマンドを使用して、HBA の詳細を表示します。

    # virsh nodedev-dumpxml scsi_host3

    コマンドからの出力には、<name><wwnn>、および <wwpn> フィールドの一覧が表示されます。これは、vHBA を作成するために使用されます。<max_vports> は、対応している vHBA の最大数を示します。以下に例を示します。

    <device>
      <name>scsi_host3</name>
      <path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3</path>
      <parent>pci_0000_10_00_0</parent>
      <capability type='scsi_host'>
        <host>3</host>
        <unique_id>0</unique_id>
        <capability type='fc_host'>
          <wwnn>20000000c9848140</wwnn>
          <wwpn>10000000c9848140</wwpn>
          <fabric_wwn>2002000573de9a81</fabric_wwn>
        </capability>
        <capability type='vport_ops'>
          <max_vports>127</max_vports>
          <vports>0</vports>
        </capability>
      </capability>
    </device>

    この例では、<max_vports> 値は、HBA 構成で使用できる合計 127 の仮想ポートがあることを示します。<vports> の値は、現在使用中の仮想ポートの数を示します。この値は、vHBA の作成後に更新されます。

  3. vHBA ホスト用に、以下のいずれかの XML ファイルを作成します。この例では、ファイルの名前は vhba_host3.xml です。

    次の例では、scsi_host3 を使用して親 vHBA を説明します。

    <device>
      <parent>scsi_host3</parent>
      <capability type='scsi_host'>
        <capability type='fc_host'>
        </capability>
      </capability>
    </device>

    次の例では、WWNN/WWPN のペアを使用して親 vHBA を説明します。

    <device>
      <name>vhba</name>
      <parent wwnn='20000000c9848140' wwpn='10000000c9848140'/>
      <capability type='scsi_host'>
        <capability type='fc_host'>
        </capability>
      </capability>
    </device>
    注記

    WWNN および WWPN の値は、前の手順で確認した HBA の詳細の値と一致する必要があります。

    <parent> フィールドは、この vHBA デバイスに関連付ける HBA デバイスを指定します。<device> タグの詳細は、ホスト用の新しい vHBA デバイスを作成するために、次の手順で使用されます。nodedev の XML 形式の詳細は、 libvirt アップストリームページ を参照してください。

    注記

    virsh コマンドでは、parent_wwnn 属性、parent_wwpn 属性、または parent_fabric_wwn 属性を定義する方法が提供されません。

  4. virsh nodev-create コマンドを使用して、前の手順で作成した XML ファイルに基づいて VHBA を作成します。

    # virsh nodedev-create vhba_host3
    Node device scsi_host5 created from vhba_host3.xml
  5. virsh nodedev-dumpxml コマンドで、新しい vHBA の詳細 (scsi_host5) を確認します。

    # virsh nodedev-dumpxml scsi_host5
    <device>
      <name>scsi_host5</name>
      <path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3/vport-3:0-0/host5</path>
      <parent>scsi_host3</parent>
      <capability type='scsi_host'>
        <host>5</host>
        <unique_id>2</unique_id>
        <capability type='fc_host'>
          <wwnn>5001a4a93526d0a1</wwnn>
          <wwpn>5001a4ace3ee047d</wwpn>
          <fabric_wwn>2002000573de9a81</fabric_wwn>
        </capability>
      </capability>
    </device>
9.2.2.8.3. CLI で vHBA ベースのストレージプールの作成

ここでは、vHBA ベースのストレージプールを作成する手順を説明します。

前提条件

手順

  1. XML ファイルでストレージプールを定義します。

    新しいデバイスに必要なストレージプールパラメーターを含む一時的な XML ファイルを作成します。

    必須パラメーターの詳細は、「パラメーター」を参照してください。

  2. ストレージプールを作成します。

    virsh pool-define コマンドを使用して、前の手順で作成した XML ファイルに基づいて永続ストレージプールを作成します。

    # virsh pool-define ~/guest_images.xml
      Pool defined from guest_images_fs

virsh pool-define コマンドを実行したら、手順 1 で作成した XML ファイルを削除できます。

  1. プールが作成されたことを確認します。

    virsh pool-list コマンドを使用して、プールが作成されたことを確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   no
  2. ストレージプールを起動します。

    virsh pool-start コマンドを使用して、ストレージプールをマウントします。

    # virsh pool-start guest_images_fs
      Pool guest_images_fs started
    注記

    virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。

  3. (必要に応じて) 自動起動をオンにします。

    デフォルトでは、virsh コマンドを使用して定義したストレージプールは、libvirtd が起動するたびに自動的に起動するようには設定されていません。virsh pool-autostart コマンドを使用して、ストレージプールが自動的に起動するように設定します。

    # virsh pool-autostart guest_images_fs
      Pool guest_images_fs marked as autostarted
  4. 自動起動 状態を確認します。

    virsh pool-list コマンドを使用して、自動起動 の状態を確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   yes
  5. ストレージプールを確認します。

    ストレージプールが正しく作成され、報告されたサイズが期待どおりで、状態が 実行中 と報告されたことを確認します。ファイルシステムのターゲットパスに lost+found ディレクトリーがあることを確認します。これは、デバイスがマウントされていることを示しています。

    # virsh pool-info guest_images_fs
      Name:           guest_images_fs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
    
    # mount | grep /guest_images
      /dev/sdc1 on /guest_images type ext4 (rw)
    
    # ls -la /guest_images
      total 24
      drwxr-xr-x.  3 root root  4096 May 31 19:47 .
      dr-xr-xr-x. 25 root root  4096 May 31 19:38 ..
      drwx------.  2 root root 16384 May 31 14:18 lost+found
9.2.2.8.4. vHBA ベースのストレージプールパラメーター

以下は、vHBA ベースのストレージプールと例に必要なパラメーターに関する情報です。

パラメーター

以下の表は、vHBA ベースのストレージプールの XML ファイルに必要なパラメーターの一覧です。

表9.8 vHBA ベースのストレージプールパラメーター

説明XML

ストレージプールの種類

<pool type='scsi'>

ストレージプールの名前

<name>name</name>

vHBA の識別子。parent 属性はオプションです。

<source>
   <adapter type='fc_host'
   [parent=parent_scsi_device]
   wwnn='WWNN'
   wwpn='WWPN' />
</source>

ターゲットパス。ストレージプールに使用されるパスになります。

<target>
   <path=target_path />
</target>

重要

<path> フィールドが /dev/ の場合、libvirt は、ボリュームデバイスパスで一意の短いデバイスパスを生成します。たとえば、/dev/sdc です。それ以外の場合は、物理ホストパスが使用されます。たとえば、/dev/disk/by-path/pci-0000:10:00.0-fc-0x5006016044602198-lun-0 などです。一意の短いデバイスパスを使用すると、複数のストレージプールで、同じボリュームを複数の仮想マシン (VM) に一覧表示できます。物理ホストのパスを複数の仮想マシンで使用すると、デバイスタイプが重複していることを示す警告が発生することがあります。

注記

parent 属性は、パスを変更して NPIV LUN の使用元となる物理 HBA の親を識別する <adapter> フィールドで使用できます。scsi_hostN フィールドは、vports 属性および max_vports 属性と合わせて、親 ID を作成します。parentparent_wwnnparent_wwpn、または parent_fabric_wwn の属性は、ホストの再起動後に同じ HBA が使用されることを保証するさまざまなレベルを提供します。

  • を指定しないと、libvirt は、NPIV に対応する最初の scsi_hostN アダプターを使用します。
  • のみを指定し、設定に SCSI ホストアダプターを追加すると、問題が発生する可能性があります。
  • parent_wwnn または parent_wwpn を指定すると、ホストの再起動後に同じ HBA が使用されます。
  • ホストの再起動後、parent_fabric_wwn を使用すると、scsi_hostN が使用されたかどうかにかかわらず、同じファブリックの HBA が選択されます。

以下は、vHBA ベースのストレージプールの XML ファイルの例です。

以下は、HBA にある唯一のストレージプールの例です。

<pool type='scsi'>
  <name>vhbapool_host3</name>
  <source>
    <adapter type='fc_host' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee047d'/>
  </source>
  <target>
    <path>/dev/disk/by-path</path>
  </target>
</pool>

次に示すのは、1 つの vHBA を使用し、parent 属性を使用して、SCSI ホストデバイスを識別する複数のストレージプールの 1 つの例です。

<pool type='scsi'>
  <name>vhbapool_host3</name>
  <source>
    <adapter type='fc_host' parent='scsi_host3' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee047d'/>
  </source>
  <target>
    <path>/dev/disk/by-path</path>
  </target>
</pool>
9.2.2.8.5. CLI で SCSI LUN ベースのストレージボリュームを仮想マシンに割り当てて接続

ここでは、vHBA LUN を使用するように仮想マシンを設定する方法と、ハードウェア障害後に公開される LUN に再接続する方法を説明します。前提条件は以下のようになります。

  • vHBA ストレージプールがある。
9.2.2.8.5.1. CLI で vHBA ベースのストレージプールの作成

ここでは、vHBA ベースのストレージプールを作成する手順を説明します。

前提条件

手順

  1. XML ファイルでストレージプールを定義します。

    新しいデバイスに必要なストレージプールパラメーターを含む一時的な XML ファイルを作成します。

    必須パラメーターの詳細は、「パラメーター」を参照してください。

  2. ストレージプールを作成します。

    virsh pool-define コマンドを使用して、前の手順で作成した XML ファイルに基づいて永続ストレージプールを作成します。

    # virsh pool-define ~/guest_images.xml
      Pool defined from guest_images_fs

virsh pool-define コマンドを実行したら、手順 1 で作成した XML ファイルを削除できます。

  1. プールが作成されたことを確認します。

    virsh pool-list コマンドを使用して、プールが作成されたことを確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   no
  2. ストレージプールを起動します。

    virsh pool-start コマンドを使用して、ストレージプールをマウントします。

    # virsh pool-start guest_images_fs
      Pool guest_images_fs started
    注記

    virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。

  3. (必要に応じて) 自動起動をオンにします。

    デフォルトでは、virsh コマンドを使用して定義したストレージプールは、libvirtd が起動するたびに自動的に起動するようには設定されていません。virsh pool-autostart コマンドを使用して、ストレージプールが自動的に起動するように設定します。

    # virsh pool-autostart guest_images_fs
      Pool guest_images_fs marked as autostarted
  4. 自動起動 状態を確認します。

    virsh pool-list コマンドを使用して、自動起動 の状態を確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   yes
  5. ストレージプールを確認します。

    ストレージプールが正しく作成され、報告されたサイズが期待どおりで、状態が 実行中 と報告されたことを確認します。ファイルシステムのターゲットパスに lost+found ディレクトリーがあることを確認します。これは、デバイスがマウントされていることを示しています。

    # virsh pool-info guest_images_fs
      Name:           guest_images_fs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
    
    # mount | grep /guest_images
      /dev/sdc1 on /guest_images type ext4 (rw)
    
    # ls -la /guest_images
      total 24
      drwxr-xr-x.  3 root root  4096 May 31 19:47 .
      dr-xr-xr-x. 25 root root  4096 May 31 19:38 ..
      drwx------.  2 root root 16384 May 31 14:18 lost+found

9.2.2.9. CLI でストレージボリュームの作成および割り当て

ここでは、CLI でストレージプールからストレージボリュームを作成し、仮想マシンにストレージボリュームを割り当てる方法を説明します。手順は、どのタイプのストレージプールでも同じです。

前提条件

  • 空き領域が割り当てられていないホストのストレージプール
9.2.2.9.1. 手順
  1. XML ファイルでストレージボリュームを定義します。

    ストレージボリュームのパラメーターを含む一時的な XML ファイルを作成します。

    以下は、必要なストレージボリュームパラメーターの一覧です。

    • 名前 - ストレージプールの名前。
    • 割り当て - ストレージボリュームのストレージ割り当ての合計数。
    • 容量 - ストレージボリュームの論理容量。ボリュームがスパースの場合、この値は 割り当て の値とは異なります。
    • ターゲット - ホストシステムのストレージボリュームのパス、さらに任意でそのパーミッションとラベル。

      以下は、ストレージボリューム定義の XML ファイルの例です。この例では、ファイルは ~/guest_volume.xml に保存されます。

        <volume>
          <name>volume1</name>
          <allocation>0</allocation>
          <capacity>20</capacity>
          <target>
            <path>/var/lib/virt/images/sparse.img</path>
          </target>
        </volume>
  2. ストレージボリュームを作成して割り当てます。

    virsh vol-create コマンドおよび virsh vol-create-as コマンドは、ほとんどのストレージプールのタイプからストレージボリュームを作成するために使用されます。

    以下は、virsh vol-create コマンドおよび virsh vol-create-as コマンドに対応しないストレージタイプと、そのタイプとともに使用してストレージボリュームを作成するメソッドの一覧です。

    • GlusterFSベース - qemu-img コマンドを使用して、ストレージボリュームを作成します。
    • iSCSI ベース - iSCSI サーバーに事前に iSCSI LUN を準備します。
    • マルチパスベース - multipathd コマンドを使用して、マルチパスを準備または管理します。
    • vHBA ベース - ファイバーチャンネルカードを事前に準備します。

    virsh vol-create コマンドを使用して、XML ファイルに基づいてストレージボリュームを作成して割り当てます。virsh vol-create コマンドでストレージボリュームを割り当てる仮想マシンを指定します。

    # virsh vol-create guest_images_dir ~/guest_volume.xml
      Vol volume1 created
    注記

    virsh vol-create コマンドを実行した後、手順 1 で作成した XML ファイルを削除できます。

    ストレージプールが GlusterFS ベース、マルチパスベース、および RBD ベースの場合は、以下の XML 形式を使用してストレージボリュームを記述し、ドメイン XML に追加します。

      <disk type='network' device='disk'>
        <driver name='qemu' type='raw'/>
        <source protocol='gluster' name='Volume1/Image'>
          <host name='example.org' port='6000'/>
        </source>
        <target dev='vda' bus='virtio'/>
        <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
      </disk>

    マルチパスベースのストレージプールの場合は、以下の XML 形式を使用してストレージボリュームを説明し、ドメイン XML に追加します。

    <disk type='block' device='disk'>
    <driver name='qemu' type='raw'/>
    <source dev='/dev/mapper/mpatha' />
    <target dev='sdc' bus='scsi'/>
    </disk>

    RBD ベースのストレージプールの場合は、以下の XML 形式を使用してストレージボリュームを記述し、ドメイン XML に追加します。

      <disk type='network' device='disk'>
        <driver name='qemu' type='raw'/>
        <source protocol='rbd' name='pool/image'>
          <host name='mon1.example.org' port='6321'/>
        </source>
        <target dev='vdc' bus='virtio'/>
      </disk>

9.2.3. CLI で仮想マシン用のストレージの削除

以下では、CLI でストレージプールおよびストレージボリュームを削除する方法を説明します。

9.2.3.1. CLI でストレージプールの削除

以下では、ストレージプールを削除する方法を説明します。

前提条件

  • 削除するストレージプールを使用するその他の仮想マシンに影響を及ぼさないようにするには、ストレージプールを停止して、使用されているリソースをすべて解放することが推奨されます。

手順

  1. virsh pool-list コマンドを使用して、定義済みストレージプールを一覧表示します。

    # virsh pool-list --all
    Name                 State      Autostart
    -------------------------------------------
    default              active     yes
    Downloads            active     yes
    RHEL8-Storage-Pool   active     yes
  2. virsh pool-destroy コマンドを使用して、削除するストレージプールを停止します。

    # virsh pool-destroy Downloads
    Pool Downloads destroyed
  3. (必要に応じて) ストレージプールの種類によっては、virsh pool-delete コマンドを使用して、ストレージプールが含まれるディレクトリーを削除できます。ストレージプールが含まれるディレクトリーを削除するには、そのディレクトリーが空である必要があります。

    # virsh pool-delete Downloads
    Pool Downloads deleted
  4. virsh pool-undefine コマンドを使用して、ストレージプールの定義を削除します。

    # virsh pool-undefine Downloads
    Pool Downloads has been undefined
  5. ストレージプールが削除されたことを確認します。

    # virsh pool-list --all
    Name                 State      Autostart
    -------------------------------------------
    default              active     yes
    RHEL8-Storage-Pool   active     yes

9.2.3.2. CLI でストレージボリュームの削除

以下では、CLI でストレージボリュームを削除する方法を説明します。

前提条件

  • 削除するストレージボリュームを使用する仮想マシンに影響を及ぼさないようにするには、これを使用してリソースを解放することが推奨されます。

手順

  1. virsh vol-list コマンドを使用して、ストレージプールの定義済みストレージボリュームを一覧表示します。このコマンドは、ストレージボリュームの名前またはパスを指定する必要があります。

    # virsh vol-list --pool RHEL8-Storage-Pool
     Name                 Path
    ---------------------------------------------------------------
     .bash_history        /home/VirtualMachines/.bash_history
     .bash_logout         /home/VirtualMachines/.bash_logout
     .bash_profile        /home/VirtualMachines/.bash_profile
     .bashrc              /home/VirtualMachines/.bashrc
     .git-prompt.sh       /home/VirtualMachines/.git-prompt.sh
     .gitconfig           /home/VirtualMachines/.gitconfig
     RHEL8_Volume.qcow2   /home/VirtualMachines/RHEL8_Volume.qcow2
  2. virsh vol-delete コマンドを使用してストレージボリュームを削除します。このコマンドは、ストレージボリュームの名前またはパスと、ストレージボリュームの抽象化の元となるストレージプールを指定する必要があります。

    # virsh vol-delete --pool RHEL-Storage-Pool RHEL8_Volume.qcow2
    Pool RHEL8_Volume.qcow2 deleted

第10章 NVIDIA vGPU デバイスの管理

vGPU 機能により、仲介デバイス として参照される物理的な NVIDIA GPU デバイスを複数の仮想デバイスに分割できます。この仲介デバイスは、仮想 GPU として複数の仮想マシンに割り当てることができます。これにより、この仮想マシンが、1 つの物理 GPU のパフォーマンスを共有します。

ただし、仲介デバイスの使用にかかわらず、仮想マシンに物理 GPU を割り当てると、ホストが GPU を使用できなくなります。

10.1. NVIDIA vGPU デバイスの設定

NVIDIA の vGPU 機能を設定するには、GPU デバイスの NVIDIA vGPU ドライバーを取得して、仲介デバイスを作成し、使用する仮想マシンに割り当てる必要があります。詳細な手順は、以下を参照してください。

前提条件

  • vGPU の仲介デバイスの作成は、NVIDIA GPU の制限セットでのみ可能です。このデバイスの最新の一覧は、NVIDIA GPU ソフトウェアのドキュメント を参照してください。

    ホストが使用している GPU が分からない場合は、lshw パッケージをインストールして、lshw -C display コマンドを使用します。以下の例は、システムが、vGPU と互換性がある NVIDIA Tesla P4 GPU を使用していることを示しています。

    # lshw -C display
    
    *-display
           description: 3D controller
           product: GP104GL [Tesla P4]
           vendor: NVIDIA Corporation
           physical id: 0
           bus info: pci@0000:01:00.0
           version: a1
           width: 64 bits
           clock: 33MHz
           capabilities: pm msi pciexpress cap_list
           configuration: driver=vfio-pci latency=0
           resources: irq:16 memory:f6000000-f6ffffff memory:e0000000-efffffff memory:f0000000-f1ffffff

手順

  1. NVIDIA vGPU ドライバーを取得して、システムにインストールします。手順は NVIDIA ドキュメント を参照してください。
  2. NVIDIA ソフトウェアのインストーラーが /etc/modprobe.d/nvidia-installer-disable-nouveau.conf ファイルを作成しなかった場合は、/etc/modprobe.d/ に、任意の名前で conf ファイルを作成します。次に、そのファイルに以下の行を追加します。

    blacklist nouveau
    options nouveau modeset=0
  3. 現在のカーネル用に初期 ramdisk を再生成してから再起動します。

    # dracut --force
    # reboot

    仲介されたデバイスで、以前対応していたカーネルバージョンを使用する必要がある場合は、インストールしたすべてのカーネルバージョンに対して初期 ramdisk を再生成します。

    # dracut --regenerate-all --force
    # reboot
  4. nvidia_vgpu_vfio モジュールがカーネルにより読み込まれていて、nvidia-vgpu-mgr.service サービスが実行していることを確認してください。

    # lsmod | grep nvidia_vgpu_vfio
    nvidia_vgpu_vfio 45011 0
    nvidia 14333621 10 nvidia_vgpu_vfio
    mdev 20414 2 vfio_mdev,nvidia_vgpu_vfio
    vfio 32695 3 vfio_mdev,nvidia_vgpu_vfio,vfio_iommu_type1
    # systemctl status nvidia-vgpu-mgr.service
    nvidia-vgpu-mgr.service - NVIDIA vGPU Manager Daemon
       Loaded: loaded (/usr/lib/systemd/system/nvidia-vgpu-mgr.service; enabled; vendor preset: disabled)
       Active: active (running) since Fri 2018-03-16 10:17:36 CET; 5h 8min ago
     Main PID: 1553 (nvidia-vgpu-mgr)
     [...]
  5. デバイスの UUID を /sys/class/mdev_bus/pci_dev/mdev_supported_types/type-id/create ファイルに書き込みます。pci_dev は、ホスト GPU の PCI アドレスで、type-id は、ホスト GPU タイプの ID です。

    次の例は、NVIDIA Tesla P4 カードの vGPU タイプ nvidia-63 の仲介デバイスを作成する方法を示しています。

    # uuidgen
    30820a6f-b1a5-4503-91ca-0c10ba58692a
    # echo "30820a6f-b1a5-4503-91ca-0c10ba58692a" > /sys/class/mdev_bus/0000:01:00.0/mdev_supported_types/nvidia-63/create
    注記

    特定の GPU デバイスの type-id 値は、仮想 GPU ソフトウェアのドキュメント を参照してください。Linux 仮想マシンでは、GRID P4-2Q などの Q シリーズ NVIDIA vGPU のみが、仲介デバイス GPU タイプとして対応されます。

  6. 次の行を、vGPU リソースを共有するゲストの XML 設定の <devices/> セクションに追加します。前の手順で uuidgen コマンドで生成した UUID 値を使用します。各 UUID は、一度に 1 つのゲストにしか割り当てることができません。

    <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci'>
      <source>
        <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/>
      </source>
    </hostdev>

関連情報

  • 割り当てられた仮想マシンで vGPU 仲介デバイスが正しく動作するようにするには、仮想マシンに対して NVIDIA vGPU ゲストソフトウェアライセンスを設定する必要があります。詳細および手順は、NVIDIA の仮想 GPU ソフトウェアのドキュメント を参照してください。

10.2. NVIDIA vGPU デバイスの削除

割り当てられた vGPU 仲介デバイス の設定を変更する場合は、割り当てられた仮想マシンから既存のデバイスを削除する必要があります。手順は、以下を参照してください。

手順

  • 仲介 vGPU デバイスを削除するには、デバイスが非アクティブのときに次のコマンドを使用します。uuid は、デバイスの UUID (30820a6f-b1a5-4503-91ca-0c10ba58692a など) に置き換えます。

    # echo 1 > /sys/bus/mdev/devices/uuid/remove

    仮想マシンで現在使用されている vGPU デバイスを削除しようとすると、以下のエラーが発生することに注意してください。

    echo: write error: Device or resource busy

10.3. システムに関する NVIDIA vGPU 情報の取得

利用可能な vGPU 機能の性能を評価するために、特定タイプの仲介デバイスをどのぐらい作成できるかなど、お使いのシステムの仲介デバイスに関する追加情報を取得できます。

手順

  • virsh nodedev-list --cap mdev_types コマンドおよび virsh nodedev-dumpxml コマンドを使用します。

    たとえば、物理 Tesla P4 カードを使用している場合は、以下のように使用可能な vGPU タイプが表示されます。

    $ virsh nodedev-list --cap mdev_types
    pci_0000_01_00_0
    $ virsh nodedev-dumpxml pci_0000_01_00_0
    <...>
      <capability type='mdev_types'>
        <type id='nvidia-70'>
          <name>GRID P4-8A</name>
          <deviceAPI>vfio-pci</deviceAPI>
          <availableInstances>1</availableInstances>
        </type>
        <type id='nvidia-69'>
          <name>GRID P4-4A</name>
          <deviceAPI>vfio-pci</deviceAPI>
          <availableInstances>2</availableInstances>
        </type>
        <type id='nvidia-67'>
          <name>GRID P4-1A</name>
          <deviceAPI>vfio-pci</deviceAPI>
          <availableInstances>8</availableInstances>
        </type>
        <type id='nvidia-65'>
          <name>GRID P4-4Q</name>
          <deviceAPI>vfio-pci</deviceAPI>
          <availableInstances>2</availableInstances>
        </type>
        <type id='nvidia-63'>
          <name>GRID P4-1Q</name>
          <deviceAPI>vfio-pci</deviceAPI>
          <availableInstances>8</availableInstances>
        </type>
        <type id='nvidia-71'>
          <name>GRID P4-1B</name>
          <deviceAPI>vfio-pci</deviceAPI>
          <availableInstances>8</availableInstances>
        </type>
        <type id='nvidia-68'>
          <name>GRID P4-2A</name>
          <deviceAPI>vfio-pci</deviceAPI>
          <availableInstances>4</availableInstances>
        </type>
        <type id='nvidia-66'>
          <name>GRID P4-8Q</name>
          <deviceAPI>vfio-pci</deviceAPI>
          <availableInstances>1</availableInstances>
        </type>
        <type id='nvidia-64'>
          <name>GRID P4-2Q</name>
          <deviceAPI>vfio-pci</deviceAPI>
          <availableInstances>4</availableInstances>
        </type>
      </capability>
    </...>

10.4. NVIDIA vGPU のリモートデスクトップのストリーミングサービス

以下のリモートデスクトップのストリーミングサービスは、RHEL 8 ホストの NVIDIA vGPU 機能でテストに成功しました。

  • HP-RGS - 現在、RHEL 8 仮想マシンでは HP-RGS を使用することはできません。
  • Mechdyne TGX - 現在、Windows Server 2016 の仮想マシンで Mechdyne TGX を使用することはできません。
  • NICE DCV - このストリーミングサービスを使用する場合は、解像度を動的にすると、場合によっては画面が黒くなるため、Red Hat は、解像度を固定する設定を使用することを推奨します。また、現在、RHEL 8 仮想マシンで NICE DCV を使用することはできません。

第11章 仮想マシンの移行

仮想マシン現在のホストが不安定であったり、使用できない場合は、仮想マシンを別の KVM ホストに移行できます。以下のセクションでは、このような移行に関する情報と手順を説明します。

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

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

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

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

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

  • 非ライブマイグレーション では仮想マシンを一時停止し、その設定とそのメモリーを移行先ホストにコピーし、仮想マシンを再開します。これは、仮想マシンに対するダウンタイムを作成しますが、一般的にはライブマイグレーションよりも信頼性が高くなります。

    重要

    稼働中の仮想マシン (ライブと非ライブの両方) のマイグレーションを適切に機能させるには、仮想マシンのディスクイメージが移行元ホストと移行先ホストの両方にアクセス可能な共有ネットワークに配置されている必要があります。このような共有ストレージの設定手順は、「他のホスト間での仮想マシンイメージの共有」を参照してください。

  • オフラインマイグレーション では、仮想マシンの設定を移行先ホストに移動します。オフラインマイグレーションを使用する場合は、仮想マシンのディスクイメージは共有ネットワークで利用可能である必要はなく、代わりに移行先ホストに手動でコピーまたは移動できます。

移行の利点

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

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

11.2. 仮想マシンの移行の要件および制限事項

RHEL 8 で仮想マシン (VM) の移行を使用する前に、システムが移行の要件を満たしていることを確認し、その制限事項について理解しておく必要があります。

移行の要件

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

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

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

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

移行の制限

RHEL 8 で使用する際に、仮想マシンの移行には以下のような制限があります。

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

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

11.3. 他のホスト間での仮想マシンイメージの共有

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

前提条件

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

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

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

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

      # systemctl start nfs-server

手順

  1. (必要に応じて) SSH を使用して、共有ストレージを提供するホストに接続します。以下の例では phantom-zone ホストになります。

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

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

    # scp /var/lib/libvirt/images/kal-el.qcow2 root@phantom-zone:/var/lib/libvirt/shared-images/kal-el.qcow2
  4. ストレージを共有するのに使用するホストで、/etc/exports ファイルに共有ディレクトリーを追加します。以下の例では、/var/lib/libvirt/shared-images ディレクトリーを、krypt.on ホストおよび ter.ra ホストを共有します。

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

    # mount phantom-zone:/var/lib/libvirt/shared-images /var/lib/libvirt/images
  6. プロセスが成功したことを確認するには、ソースホストで仮想マシンを起動して、正しく起動したかどうかを確認します。

関連情報

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

本セクションでは、KVM ホストから別のホストに仮想マシンを移行する方法と、このような移行のさまざまなシナリオの例を説明します。

前提条件

「仮想マシンの移行の要件および制限事項」を参照してください。

手順

  1. virsh migrate コマンドで、移行の要件に適したオプションを指定します。

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

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

      # virsh dumpxml --migratable jor-el >jor-el.xml
      # vi jor-el.xml
      # virsh migrate --live --persistent --xml jor-el.xml jor-el qemu+ssh://ter.ra/system

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

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

      # virsh migrate --persistent zod qemu+ssh://krypt.on/system qemu+ssh://ter.ra/system --xml zod-alt.xml
    • 以下は、krypt.on ホストからシャットダウン仮想マシン faora を削除し、その設定を ter.ra ホストに移動します。

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

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

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

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

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

    # virsh list
    Id Name                 State
    ----------------------------------
    10 kal-el              running

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

トラブルシューティング

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

    # virsh suspend kal-el

関連情報

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

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

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

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

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

前方

メジャーリリース

7.6+ → 8.1

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

後方

メジャーリリース

8.1 → 7.6+

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

前方

マイナーリリース

8.0.1+ → 8.1+

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

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

後方

マイナーリリース

8.1 → 8.0.1

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

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

関連情報

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

11.6. 関連情報

第12章 仮想マシンのパフォーマンスの最適化

仮想マシンでは、ホストと比べて、パフォーマンス低下が常に見られます。以下のセクションでは、この低下の理由を説明します。また、ハードウェアのインフラストラクチャーリソースを可能な限り効率的に使用できるように、RHEL 8 での仮想化によるパフォーマンスへの影響を最小限に抑える方法を説明します。

12.1. 仮想マシンのパフォーマンスに影響を及ぼすもの

仮想マシンは、ホストのユーザー空間プロセスとして実行します。したがって、ハイパーバイザーは、仮想マシンがホストシステムのリソースを使用できるように、ホストのシステムリソースを変換する必要があります。したがって、変換によりリソースの一部が消費されるため、仮想マシンのパフォーマンス効率は、ホストと同じにはなりません。

システムパフォーマンスにおける仮想化の影響

仮想マシンのパフォーマンス低下の理由には、以下のようなものがあります。

  • 仮想 CPU (vCPU) がホスト上のスレッドとして実装され、Linux スケジューラーで処理される。
  • 仮想マシンは、ホストカーネルから NUMA や Huge Page などの最適化機能を自動的に継承しない。
  • ホストのディスクおよびネットワーク I/O の設定が、仮想マシンのパフォーマンスに大きく影響する可能性がある。
  • ネットワークトラフィックは、一般的に、ソフトウェアベースのブリッジから仮想マシンに流れる。
  • ホストデバイスとそのモデルによっては、その特定のハードウェアのエミュレーションにより、オーバーヘッドが著しくなる可能性がある。

仮想化が仮想マシンのパフォーマンスに与える影響の重大度は、次のようなさまざまな要因の影響を受けます。

  • 同時に実行している仮想マシンの数
  • 各仮想マシンで使用される仮想デバイスのサイズ
  • 仮想マシンが使用するデバイスの種類

仮想マシンのパフォーマンス損失を減らす

RHEL 8は、仮想化のパフォーマンスへの悪影響を減らすのに使用できる多くの機能を提供します。以下に例を示します。

重要

仮想マシンのパフォーマンスのチューニングは、その他の仮想化機能に悪影響を与える可能性があります。たとえば、変更した仮想マシンの移行がより困難になります。

12.2. tuned で仮想マシンのパフォーマンスの最適化

tuned ユーティリティーは、CPU 集中型タスクや、ストレージネットワークスループットの応答などの特定のワークロードの特性に対して RHEL を調整するプロファイル配信メカニズムです。これにより、特定のユースケースで、パフォーマンスを強化し、電力消費を減らすように事前設定されたチューニングプロファイルを多数利用できます。これらのプロファイルを編集するか、または新規プロファイルを作成して、仮想化環境に適したパフォーマンスソリューション (仮想化環境を含む) を作成できます。

Red Hat は、RHEL 8 で仮想化を使用する場合は、次のプロファイルの使用を推奨します。

  • RHEL 8 仮想マシンの場合は、virtual-guest プロファイルを使用します。これは、一般的に適用された throughput-performance プロファイルをベースにしていますが、仮想メモリーのスワップは減少します。
  • RHEL 8 仮想ホストの場合は、virtual-host プロファイルを使用します。これにより、ダーティーメモリーページのより集中的なライトバックが有効になり、ホストのパフォーマンスを活用できます。

前提条件

手順

特定の tuned プロファイルを有効にするには、以下を実行します。

  1. 利用可能な tuned プロファイルを一覧表示します。

    # tuned-adm list
    
    Available profiles:
    - balanced             - General non-specialized tuned profile
    - desktop              - Optimize for the desktop use-case
    [...]
    - virtual-guest        - Optimize for running inside a virtual guest
    - virtual-host         - Optimize for running KVM guests
    Current active profile: balanced
  2. (必要に応じて) 新しい tuned プロファイルを作成するか、既存の tuned プロファイルを編集します。

    詳細は「tuned プロファイルのカスタマイズ」を参照してください。

  3. tuned プロファイルをアクティベートします。

    # tuned-adm profile selected-profile
    • 仮想化ホストを最適化するには、virtual-host プロファイルを使用します。

      # tuned-adm profile virtual-host
    • RHEL ゲストオペレーティングシステムで、virtual-guest プロファイルを使用します。

      # tuned-adm profile virtual-guest

関連情報

12.3. 仮想マシンの I/O パフォーマンスの最適化

仮想マシンの入出力 (I/O) 機能は、仮想マシンの全体的な効率を大幅に制限する可能性があります。これに対処するために、ブロック I/O パラメーターを設定して、仮想マシンの I/O を最適化できます。

12.3.1. 仮想マシンにおけるブロック I/O のチューニング

複数のブロックデバイスが、複数の仮想マシンで使用されている場合は、I/O ウェイト を変更して特定の仮想デバイスの I/O の優先度を調整することが重要になる場合があります。

デバイスの I/O ウェイトを上げると、I/O 帯域幅の優先度が高まるため、より多くのホストリソースが提供されます。同様に、デバイスのウェイトを下げると、ホストのリソースが少なくなります。

注記

各デバイスの ウェイト の値は 100 から 1000 の範囲内でなければなりません。もしくは、値を 0 にすると、各デバイスの一覧からそのデバイスを削除できます。

手順

仮想マシンのブロック I/O パラメーターを表示および設定するには、以下を行います。

  1. 仮想マシンの現在の <blkio> パラメーターを表示します。

    # virsh blkiotune virtual_machine

    <domain>
      ...
      <blkiotune>
        <weight>800</weight>
        <device>
          <path>/dev/sda</path>
          <weight>1000</weight>
        </device>
        <device>
          <path>/dev/sdb</path>
          <weight>500</weight>
        </device>
      </blkiotune>
      ...
    </domain>
  2. 指定したデバイスの I/O ウェイトを編集します。

    # virsh blkiotune VM-name --device-weights device, I/O-weight

    たとえば、以下では、liftrul 仮想マシンの /dev/sda デバイスのウェイトを 500 に変更します。

    # *virsh blkiotune liftbrul --device-weights /dev/sda, 500

12.3.2. 仮想マシンのディスク I/O スロットリング

複数の仮想マシンが同時に実行する場合は、過剰なディスク I/O により、システムパフォーマンスに影響が及ぶ可能性があります。KVM 仮想化のディスク I/O スロットリングでは、仮想マシンからホストマシンに送られるディスク I/O 要求に制限を設定する機能を利用できます。これにより、仮想マシンが共有リソースを過剰に使用し、その他の仮想マシンのパフォーマンスに影響を及ぼすことを防ぐことができます。

ディスク I/O スロットリングを有効にするには、仮想マシンに割り当てられた各ブロックデバイスからホストマシンに送られるディスク I/O 要求に制限を設定します。

手順

  1. virsh domblklist コマンドを使用して、指定された仮想マシン上のすべてのディスクデバイスの名前を一覧表示します。

    # virsh domblklist rollin-coal
    Target     Source
    ------------------------------------------------
    vda        /var/lib/libvirt/images/rollin-coal.qcow2
    sda        -
    sdb        /home/horridly-demanding-processes.iso
  2. virsh blkdeviotune コマンドを使用して、仮想マシンに割り当てられているブロックデバイスの I/O 制限を設定します。

    # virsh blkdeviotune VM-name device --parameter limit

    たとえば、rollin-coal 仮想マシン上の sdb デバイスを 1 秒あたり 1000 の I/O 操作と、1 秒スループットあたり 50 MB にスロットリングするには、次のコマンドを実行します。

    # virsh blkdeviotune rollin-coal sdb --total-iops-sec 1000 --total-bytes-sec 52428800

関連情報

  • ディスク I/O スロットリングは、異なる顧客に属する仮想マシンが同じホストで実行されている場合や、異なる仮想マシンに QoS 保証が提供されている場合など、さまざまな状況で役立ちます。ディスク I/O スロットリングは、低速なディスクをシミュレートするために使用することもできます。
  • I/O スロットリングは、仮想マシンに割り当てられた各ブロックデバイスに個別に適用でき、スループットおよび I/O 操作の制限に対応します。

12.3.3. マルチキュー virtio-scsi の有効化

仮想マシンで virtio-scsi ストレージデバイスを使用する場合は、マルチキュー virtio-scsi 機能により、ストレージパフォーマンスおよびスケーラビリティーが向上します。このため、各仮想 CPU (vCPU) に別のキューを持たせることが可能になります。また仮想 CPU は、その他の vCPU に影響を及ぼすことなく使用するために、割り込みできるようになります。

手順

  • 特定の仮想マシンに対してマルチキュー virtio-scsi サポートを有効にするには、仮想マシンの XML 設定に以下を追加します。ここでの N は、vCPU キューの合計数です。

    <controller type='scsi' index='0' model='virtio-scsi'>
       <driver queues='N' />
    </controller>

12.4. 仮想マシンの CPU パフォーマンスの最適化

vCPU は、ホストマシンの物理 CPU と同様、仮想マシンのパフォーマンスにおいて極めて重要です。したがって、vCPU を最適化すると、仮想マシンのリソース効率に大きな影響を及ぼす可能性があります。vCPU を最適化するには、以下を実行します。

  1. vCPU モデルが、ホストの CPU モデルに調整されていることを確認します。たとえば、仮想マシン testguest1 を、ホストの CPU モデルを使用するように設定するには、次のコマンドを実行します。

    # virt-xml testguest1 --edit --cpu host-model
  2. ホストマシンが Non-Uniform Memory Access (NUMA) を使用する場合は、その仮想マシンに対して NUMA を設定 することもできます。これにより、ホストの CPU およびメモリープロセスが、仮想マシンの CPU およびメモリープロセスにできるだけ近くにマッピングされます。事実上、NUMA チューニングにより、仮想マシンに割り当てられたシステムメモリーへのより効率的なアクセスが可能になります。これにより、vCPU 処理の効果が改善されます。

    詳細は「仮想マシンでの NUMA の設定」および「vCPU のパフォーマンスチューニングシナリオ例」を参照してください。

12.4.1. 仮想マシンでの NUMA の設定

以下の方法は、RHEL 8 ホストで、仮想マシンの Non-Uniform Memory Access (NUMA) 設定の構成に使用できます。

前提条件

  • ホストは NUMA 対応のマシンである必要があります。これを確認するには、virsh nodeinfo コマンドを使用して、NUMA cell(2) の行を確認します。

    # virsh nodeinfo
    CPU model:           x86_64
    CPU(s):              48
    CPU frequency:       1200 MHz
    CPU socket(s):       1
    Core(s) per socket:  12
    Thread(s) per core:  2
    NUMA cell(s):        2
    Memory size:         67012964 KiB

    行の値が 2 以上であると、そのホストは NUMA に対応しています。

手順

使いやすさのため、自動化ユーティリティーとサービスを使用して、仮想マシンの NUMA を設定できます。ただし、手動で NUMA を設定すると、パフォーマンスが大幅に向上する可能性が高くなります。

自動方式
  • 仮想マシンの NUMA ポリシーを Preferred に設定します。たとえば、仮想マシン testguest5 に対してこれを行うには、次のコマンドを実行します。

    # virt-xml testguest5 --edit --vcpus placement=auto
    # virt-xml testguest5 --edit --numatune mode=preferred
  • ホストで NUMA の自動負荷分散を有効にします。

    # echo 1 > /proc/sys/kernel/numa_balancing
  • numad コマンドを使用して、メモリーリソースで仮想マシンの CPU を自動的に調整します。

    # numad
手動方式
  1. 特定ホストの CPU、またはある範囲の CPU に特定の vCPU スレッドをピニングします。これは、NUMA 以外のホストおよび仮想マシンでも可能で、vCPU のパフォーマンスを向上させる安全な方法として推奨されています。

    たとえば、次のコマンドでは、仮想マシン testguest6 の vCPU スレッドの 0 から 5 を、ホストの CPU 1、3、5、7、9、11 にそれぞれピニングします。

    # virsh vcpupin testguest6 0 1
    # virsh vcpupin testguest6 1 3
    # virsh vcpupin testguest6 2 5
    # virsh vcpupin testguest6 3 7
    # virsh vcpupin testguest6 4 9
    # virsh vcpupin testguest6 5 11

    その後、これが成功したかどうかを確認できます。

    # virsh vcpupin testguest6
    VCPU   CPU Affinity
    ----------------------
    0      1
    1      3
    2      5
    3      7
    4      9
    5      11
  2. vCPU スレッドのピニング後に、指定の仮想マシンに関連付けられた QEMU プロセススレッドを、特定ホスト CPU、またはある範囲の CPU に固定することもできます。たとえば、以下のコマンドは、testguest6 の QEMU プロセススレッドを CPU 13 および 15 にピニングし、これが成功したことを確認します。

    # virsh emulatorpin testguest6 13,15
    # virsh emulatorpin testguest6
    emulator: CPU Affinity
    ----------------------------------
           *: 13,15
  3. これで、特定の仮想マシンに対して割り当てられるホストの NUMA ノードを指定することができます。これにより、仮想マシンの vCPU によるホストメモリーの使用率が向上します。たとえば、次のコマンドでは、ホスト NUMA ノード 3 ~ 5 を使用するように testguest6 を設定し、これが成功したかどうかを確認します。

    # virsh numatune testguest6 --nodeset 3-5
    # virsh numatune testguest6

関連情報

12.4.2. vCPU のパフォーマンスチューニングシナリオ例

最適な vCPU パフォーマンスを得るためにも、以下のシナリオなど、手動で vcpupinemulatorpin、および numatune 設定をまとめて使用することが推奨されます。

開始シナリオ

  • ホストには以下のハードウェア仕様があります。

    • 2 つの NUMA ノード
    • 各ノードにある 3 つの CPU コア
    • 各コアにある 2 スレッド

    このようなマシンの virsh nodeinfo の出力は以下のようになります。

    # virsh nodeinfo
    CPU model:           x86_64
    CPU(s):              12
    CPU frequency:       3661 MHz
    CPU socket(s):       2
    Core(s) per socket:  3
    Thread(s) per core:  2
    NUMA cell(s):        2
    Memory size:         31248692 KiB
  • 既存の仮想マシンを変更して、8 つの vCPU を使用できるようにします。これは、1 つの NUMA ノードに収まらないことを意味します。

    したがって、各 NUMA ノードに 4 つの vCPU を分散し、vCPU トポロジーをホストトポロジーに可能な限り近づけるようにする必要があります。つまり、指定の物理 CPU のシブリングスレッドとして実行される vCPU は、同じコア上のホストスレッドに固定 (ピニング) される必要があります。詳細は、以下の ソリューション を参照してください。

ソリューション

  1. ホストトポロジーに関する情報を取得します。

    # virsh capabilities

    この出力には、以下のようなセクションが含まれているはずです。

    <topology>
      <cells num="2">
        <cell id="0">
          <memory unit="KiB">15624346</memory>
          <pages unit="KiB" size="4">3906086</pages>
          <pages unit="KiB" size="2048">0</pages>
          <pages unit="KiB" size="1048576">0</pages>
          <distances>
            <sibling id="0" value="10" />
            <sibling id="1" value="21" />
          </distances>
          <cpus num="6">
            <cpu id="0" socket_id="0" core_id="0" siblings="0,3" />
            <cpu id="1" socket_id="0" core_id="1" siblings="1,4" />
            <cpu id="2" socket_id="0" core_id="2" siblings="2,5" />
            <cpu id="3" socket_id="0" core_id="0" siblings="0,3" />
            <cpu id="4" socket_id="0" core_id="1" siblings="1,4" />
            <cpu id="5" socket_id="0" core_id="2" siblings="2,5" />
          </cpus>
        </cell>
        <cell id="1">
          <memory unit="KiB">15624346</memory>
          <pages unit="KiB" size="4">3906086</pages>
          <pages unit="KiB" size="2048">0</pages>
          <pages unit="KiB" size="1048576">0</pages>
          <distances>
            <sibling id="0" value="21" />
            <sibling id="1" value="10" />
          </distances>
          <cpus num="6">
            <cpu id="6" socket_id="1" core_id="3" siblings="6,9" />
            <cpu id="7" socket_id="1" core_id="4" siblings="7,10" />
            <cpu id="8" socket_id="1" core_id="5" siblings="8,11" />
            <cpu id="9" socket_id="1" core_id="3" siblings="6,9" />
            <cpu id="10" socket_id="1" core_id="4" siblings="7,10" />
            <cpu id="11" socket_id="1" core_id="5" siblings="8,11" />
          </cpus>
        </cell>
      </cells>
    </topology>
  2. (必要に応じて) 適用可能なツールおよびユーティリティー を使用して、仮想マシンのパフォーマンスをテストします。
  3. ホストに 1 GiB の Huge Page を設定してマウントします。

    1. ホストのカーネルコマンドラインに次の行を追加します。

      default_hugepagesz=1G hugepagesz=1G
    2. /etc/systemd/system/hugetlb-gigantic-pages.service ファイルを以下の内容で作成します。

      [Unit]
      Description=HugeTLB Gigantic Pages Reservation
      DefaultDependencies=no
      Before=dev-hugepages.mount
      ConditionPathExists=/sys/devices/system/node
      ConditionKernelCommandLine=hugepagesz=1G
      
      [Service]
      Type=oneshot
      RemainAfterExit=yes
      ExecStart=/etc/systemd/hugetlb-reserve-pages.sh
      
      [Install]
      WantedBy=sysinit.target
    3. /etc/systemd/hugetlb-reserve-pages.sh ファイルを以下の内容で作成します。

      #!/bin/sh
      
      nodes_path=/sys/devices/system/node/
      if [ ! -d $nodes_path ]; then
      	echo "ERROR: $nodes_path does not exist"
      	exit 1
      fi
      
      reserve_pages()
      {
      	echo $1 > $nodes_path/$2/hugepages/hugepages-1048576kB/nr_hugepages
      }
      
      reserve_pages 4 node1
      reserve_pages 4 node2

      これにより、4 つの 1GiB の Huge Page が node1 から予約され、さらに別の 4 つの 1 GiB の Huge Page が node2 から予約されます。

    4. 前の手順で作成したスクリプトを実行ファイルにします。

      # chmod +x /etc/systemd/hugetlb-reserve-pages.sh
    5. システムの起動時に Huge Page 予約を有効にします。

      # systemctl enable hugetlb-gigantic-pages
  4. virsh edit コマンドを使用して、最適化する仮想マシンの XML 設定 (この例では super-VM) を編集します。

    # virsh edit super-vm
  5. 次の方法で仮想マシンの XML 設定を調整します。

    1. 仮想マシンが 8 つの静的 vCPU を使用するように設定します。これを行うには、<vcpu/> 要素を使用します。
    2. トポロジーでミラーリングする、対応するホスト CPU スレッドに、各 vCPU スレッドをピニングします。これを行うには、<cputune> セクションの <vcpupin/> 要素を使用します。

      上記の virsh 機能 ユーティリティーで示されているように、ホストの CPU スレッドは、各コアで連続的に順次付けされません。また、vCPU スレッドは、同じ NUMA ノード上のホストのコアの利用可能な最大セットに固定される必要があります。表の図については、以下の 関連情報 セクションを参照してください。

      手順 a と b の XML 構成は次のようになります。

      <cputune>
        <vcpupin vcpu='0' cpuset='1'/>
        <vcpupin vcpu='1' cpuset='4'/>
        <vcpupin vcpu='2' cpuset='2'/>
        <vcpupin vcpu='3' cpuset='5'/>
        <vcpupin vcpu='4' cpuset='7'/>
        <vcpupin vcpu='5' cpuset='10'/>
        <vcpupin vcpu='6' cpuset='8'/>
        <vcpupin vcpu='7' cpuset='11'/>
        <emulatorpin cpuset='6,9'/>
      </cputune>
    3. 1 GiB の Huge Page を使用するように仮想マシンを設定します。

      <memoryBacking>
        <hugepages>
          <page size='1' unit='GiB'/>
        </hugepages>
      </memoryBacking>
    4. ホスト上で対応する NUMA ノードからメモリーを使用するように、仮想マシンの NUMA ノードを設定します。これを行うには、<numatune/> セクションの <memnode/> 要素を使用します。

      <numatune>
        <memory mode="preferred" nodeset="1"/>
        <memnode cellid="0" mode="strict" nodeset="0"/>
        <memnode cellid="1" mode="strict" nodeset="1"/>
      </numatune>
    5. CPU モードが host-passthrough に設定され、CPU が パススルー モードでキャッシュを使用していることを確認します。

      <cpu mode="host-passthrough">
        <topology sockets="2" cores="2" threads="2"/>
        <cache mode="passthrough"/>
  6. 作成される仮想マシンの XML 設定には、以下のようなセクションが含まれている必要があります。

    [...]
      <memoryBacking>
        <hugepages>
          <page size='1' unit='GiB'/>
        </hugepages>
      </memoryBacking>
      <vcpu placement='static'>8</vcpu>
      <cputune>
        <vcpupin vcpu='0' cpuset='1'/>
        <vcpupin vcpu='1' cpuset='4'/>
        <vcpupin vcpu='2' cpuset='2'/>
        <vcpupin vcpu='3' cpuset='5'/>
        <vcpupin vcpu='4' cpuset='7'/>
        <vcpupin vcpu='5' cpuset='10'/>
        <vcpupin vcpu='6' cpuset='8'/>
        <vcpupin vcpu='7' cpuset='11'/>
        <emulatorpin cpuset='6,9'/>
      </cputune>
      <numatune>
        <memory mode="preferred" nodeset="1"/>
        <memnode cellid="0" mode="strict" nodeset="0"/>
        <memnode cellid="1" mode="strict" nodeset="1"/>
      </numatune>
      <cpu mode="host-passthrough">
        <topology sockets="2" cores="2" threads="2"/>
        <cache mode="passthrough"/>
        <numa>
          <cell id="0" cpus="0-3" memory="2" unit="GiB">
            <distances>
              <sibling id="0" value="10"/>
              <sibling id="1" value="21"/>
            </distances>
          </cell>
          <cell id="1" cpus="4-7" memory="2" unit="GiB">
            <distances>
              <sibling id="0" value="21"/>
              <sibling id="1" value="10"/>
            </distances>
          </cell>
        </numa>
      </cpu>
    </domain>
  7. (必要に応じて) アプリケーションツールおよびユーティリティー を使用して仮想マシンのパフォーマンスをテストし、仮想マシンの最適化の影響を評価します。

関連情報

  • 以下の表は、ピニングされる必要のある vCPU とホストCPU 間の接続を示しています。

    表12.1 ホストトポロジー

    CPU スレッド

    0

    3

    1

    4

    2

    5

    6

    9

    7

    10

    8

    11

    コア

    0

    1

    2

    3

    4

    5

    ソケット

    0

    1

    NUMA ノード

    0

    1

    表12.2 仮想マシントポロジー

    vCPU スレッド

    0

    1

    2

    3

    4

    5

    6

    7

    コア

    0

    1

    2

    3

    ソケット

    0

    1

    NUMA ノード

    0

    1

    表12.3 ホストと仮想マシントポロジーの組み合わせ

    vCPU スレッド

     

    0

    1

    2

    3

     

    4

    5

    6

    7

    ホストの CPU スレッド

    0

    3

    1

    4

    2

    5

    6

    9

    7

    10

    8

    11

    コア

    0

    1

    2

    3

    4

    5

    ソケット

    0

    1

    NUMA ノード

    0

    1

    このシナリオでは、2 つの NUMA ノードと 8 つの vCPU があります。したがって、4 つの vCPU スレッドは各ノードに固定 (ピニング) される必要があります。

    また、Red Hat では、ホストシステムの操作に対して、各ノードに少なくとも 1 つの CPU スレッドを使用することを推奨します。

    以下の例では、NUMA ノードにはそれぞれ 3 コアで、2 個のホスト CPU スレッドがあるため、ノード 0 のセットは、以下のように変換できます。

    <vcpupin vcpu='0' cpuset='1'/>
    <vcpupin vcpu='1' cpuset='4'/>
    <vcpupin vcpu='2' cpuset='2'/>
    <vcpupin vcpu='3' cpuset='5'/>

12.5. 仮想マシンのネットワークパフォーマンスの最適化

仮想マシンのネットワークインターフェースカード (NIC) の性質上、仮想マシンは、割り当てられているホストネットワークの帯域幅の一部を失います。これにより、仮想マシンの全体的なワークロード効率が削減されることがあります。以下のヒントは、仮想 NIC (vNIC) のスループットで仮想化の影響を最小限に抑えることができます。

手順

以下の方法のいずれかを使用し、仮想マシンのネットワークパフォーマンスにメリットがあるかどうかを調べます。

vhost_net モジュールの有効化

ホストで vhost_net カーネル機能が有効になっていることを確認します。

# lsmod | grep vhost
vhost_net              32768  1
vhost                  53248  1 vhost_net
tap                    24576  1 vhost_net
tun                    57344  6 vhost_net

このコマンドの出力が空白である場合は、vhost_net カーネルモジュールを有効にします。

# modprobe vhost_net
マルチキュー virtio-net の設定

仮想マシンに マルチキュー virtio-net 機能を設定するには、virsh edit コマンドを使用して、仮想マシンの XML 設定を編集します。XML で、以下を <devices> セクションに追加し、N を、仮想マシンの vCPU 数 (最大 16) に変更します。

<interface type='network'>
      <source network='default'/>
      <model type='virtio'/>
      <driver name='vhost' queues='N'/>
</interface>

仮想マシンが実行中の場合は、再起動して変更を適用します。

vhost のゼロコピー送信の設定

大規模なパケットサイズでネットワークを使用している場合は、vhost のゼロコピー送信 機能を有効にします。

この機能は、ゲストネットワークと外部ネットワークとの間で大規模なパケットを送信する場合に限りパフォーマンスが向上することに注意してください。これは、ゲストとゲスト間、およびゲストとホスト間のワークロードのパフォーマンスには影響を与えません。また、おそらく、小さいパケットのワークロードのパフォーマンスに影響を及ぼす可能性があります。

また、ゼロコピー送信を有効にすると、パケットの HOT (head-of-line) ブロッキングが発生するため、セキュリティーリスクが発生する可能性があります。

vhost のゼロコピー送信を有効にするには、以下を実行します。

  1. ホストで、vhost-net カーネルモジュールを無効にします。

    # modprobe -r vhost_net
  2. ゼロコピーパラメーターを有効にして、vhost-net モジュールを再度有効にします。

    # modprobe vhost-net experimental_zcopytx=1
  3. ゼロコピー送信を有効にできたかどうかを確認します。

    # cat /sys/module/vhost_net/parameters/experimental_zcopytx
    1
ネットワークパケットのバッチ処理

転送パスが長い Linux の仮想マシン設定では、パケットをバッチ処理してからカーネルに送信することで、キャッシュが有効に活用される場合があります。パケットバッチ機能を設定するには、ホストで次のコマンドを実行し、tap0 を、仮想マシンが使用するネットワークインターフェースの名前に置き換えます。

# ethtool -C tap0 rx-frames 128

関連情報

12.6. 仮想マシンのパフォーマンス監視ツール

最も多くの仮想マシンリソースを消費するものと、仮想マシンで最適化を必要とする部分を認識するために、一般的なパフォーマンス診断ツールや仮想マシン固有のパフォーマンス診断ツールを使用できます。

デフォルトの OS パフォーマンス監視ツール

標準のパフォーマンス評価には、ホストおよびゲストのオペレーティングシステムでデフォルトで提供されるユーティリティーを使用できます。

  • RHEL 8 ホストで、root として top ユーティリティーまたは システムモニター アプリケーションを使用し、出力結果から qemuvirt を見つけます。これは、仮想マシンが消費しているホストシステムのリソースのサイズを示します。

    • 監視ツールにおいて、qemu プロセスまたは virt プロセスのいずれかで、ホストの CPU またはメモリーの容量を大幅に消費していることが示されている場合は、perf ユーティリティを使用して調査を行います。詳細は以下を参照してください。
    • また、vhost_net スレッドプロセス (例: vhost_net-1234) が、ホストの CPU 容量を過剰に消費する際に表示される場合は、マルチキュー virtio-net などの 仮想ネットワークの最適化機能 を使用することを検討してください。
  • ゲストオペレーティングシステムでは、システムで利用可能なパフォーマンスユーティリティーとアプリケーションを使用して、どのプロセスが最も多くのシステムリソースを消費するかを評価します。

    • Linux システムでは、top ユーティリティを使用できます。
    • Windows システムでは、Task Manager アプリケーションを使用できます。

perf kvm

perf ユーティリティーを使用して、RHEL 8 ホストのパフォーマンスに関する仮想化固有の統計を収集および分析できます。これを行うには、以下のように行います。

  1. ホストに、perf パッケージをインストールします。

    # yum install perf
  2. perf kvm stat コマンドを使用して、仮想化ホストの perf 統計を表示します。

    • お使いのハイパーバイザーのリアルタイム監視には、perf kvm stat live コマンドを使用します。
    • 一定期間でハイパーバイザーの perf データをログに記録するには、perf kvm stat record コマンドを使用してロギングを有効にします。コマンドをキャンセルまたは中断した後、データは perf.data.guest ファイルに保存されます。これは、perf kvm stat report コマンドを使用して分析できます。
  3. VM-EXIT イベントとそのディストリビューションのタイプについて perf 出力を分析します。たとえば、PAUSE_INSTRUCTION イベントは頻繁に存在すべきではありませんが、以下の出力では、このイベントが頻繁に現れ、ホスト CPU が vCPU を適切に処理していないことを示しています。このようなシナリオでは、アクティブな一部の仮想マシンの電源オフ、その仮想マシンからの vCPU の削除、または vCPU のパフォーマンスの調整 を検討してください。

    # perf kvm stat report
    
    Analyze events for all VMs, all VCPUs:
    
    
                 VM-EXIT    Samples  Samples%     Time%    Min Time    Max Time         Avg time
    
      EXTERNAL_INTERRUPT     365634    31.59%    18.04%      0.42us  58780.59us    204.08us ( +-   0.99% )
               MSR_WRITE     293428    25.35%     0.13%      0.59us  17873.02us      1.80us ( +-   4.63% )
        PREEMPTION_TIMER     276162    23.86%     0.23%      0.51us  21396.03us      3.38us ( +-   5.19% )
       PAUSE_INSTRUCTION     189375    16.36%    11.75%      0.72us  29655.25us    256.77us ( +-   0.70% )
                     HLT      20440     1.77%    69.83%      0.62us  79319.41us  14134.56us ( +-   0.79% )
                  VMCALL      12426     1.07%     0.03%      1.02us   5416.25us      8.77us ( +-   7.36% )
           EXCEPTION_NMI         27     0.00%     0.00%      0.69us      1.34us      0.98us ( +-   3.50% )
           EPT_MISCONFIG          5     0.00%     0.00%      5.15us     10.85us      7.88us ( +-  11.67% )
    
    Total Samples:1157497, Total events handled time:413728274.66us.

    perf kvm stat の出力で問題を知らせる他のイベントタイプには、以下が含まれます。

perf を使用した仮想パフォーマンスを監視する方法は、man ページの perf-kvm を参照してください。

numastat

システムの現在の NUMA 設定を表示するには、numastat ユーティリティーを使用できます。これは numactl パッケージをインストールすることで利用できます。

以下は、4 つの実行中の仮想マシンが含まれるホストを示しています。それぞれは、複数の NUMA ノードからメモリーを取得しています。これは、vCPU のパフォーマンスに対して最適なのではなく、保証調整 です。

# numastat -c qemu-kvm

Per-node process memory usage (in MBs)
PID              Node 0 Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Node 7 Total
---------------  ------ ------ ------ ------ ------ ------ ------ ------ -----
51722 (qemu-kvm)     68     16    357   6936      2      3    147    598  8128
51747 (qemu-kvm)    245     11      5     18   5172   2532      1     92  8076
53736 (qemu-kvm)     62    432   1661    506   4851    136     22    445  8116
53773 (qemu-kvm)   1393      3      1      2     12      0      0   6702  8114
---------------  ------ ------ ------ ------ ------ ------ ------ ------ -----
Total              1769    463   2024   7462  10037   2672    169   7837 32434

一方、以下では、1 つのノードで各仮想マシンに提供されているメモリーを示しています。これは、より一層効率的です。

# numastat -c qemu-kvm

Per-node process memory usage (in MBs)
PID              Node 0 Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Node 7 Total
---------------  ------ ------ ------ ------ ------ ------ ------ ------ -----
51747 (qemu-kvm)      0      0      7      0   8072      0      1      0  8080
53736 (qemu-kvm)      0      0      7      0      0      0   8113      0  8120
53773 (qemu-kvm)      0      0      7      0      0      0      1   8110  8118
59065 (qemu-kvm)      0      0   8050      0      0      0      0      0  8051
---------------  ------ ------ ------ ------ ------ ------ ------ ------ -----
Total                 0      0   8072      0   8072      0   8114   8110 32368

第13章 ホストとその仮想マシン間でのファイルの共有

ホストシステムと、そのホストが実行する仮想マシンとの間で、データを共有することが頻繁に必要になります。これを素早く効率的に行うには、ファイル共有 NFS または Samba をシステムに設定します。

13.1. ホストと Linux 仮想マシン間でのファイルの共有

ホストシステムと、そのホストシステムが接続している Linux 仮想マシンとの間で効率的なファイル共有を行うために、仮想マシンがマウントしてアクセスできる NFS 共有をエクスポートできます。

前提条件

  • nfs-utils パッケージがホストにインストールされている。
  • 仮想マシンと共有するディレクトリーがある。既存のディレクトリーを共有しない場合は、shared-files などの新しいディレクトリーを作成します。

    # mkdir shared-files
  • 仮想マシンにホストが表示され、ネットワーク経由で到達可能である。これは、通常、仮想マシンが、仮想ネットワークの NAT および ブリッジ のタイプを使用して接続されている場合となります。ただし、macvtap 接続の場合は、最初にホストに macvlan 機能を設定する必要があります。改善点を報告する場合は、以下のように行います。

    1. ホストの /etc/systemd/network/ ディレクトリーに、vm-macvlan.netdev などのネットワークデバイスファイルを作成します。

      # touch /etc/systemd/network/vm-macvlan.netdev
    2. ネットワークデバイスファイルを編集し、以下の内容を追加します。vm-macvlan を、ネットワークデバイスの名前に置き換えます。

      [NetDev]
      Name=vm-macvlan
      Kind=macvlan
      
      [MACVLAN]
      Mode=bridge
    3. macvlan ネットワークデバイス (例: vm-macvlan.network) 用にネットワーク設定ファイルを作成します。

      # touch /etc/systemd/network/vm-macvlan.network
    4. ネットワーク設定ファイルを編集し、以下の内容を追加します。vm-macvlan を、ネットワークデバイスの名前に置き換えます。

      [Match]
      Name=_vm-macvlan_
      
      [Network]
      IPForward=yes
      Address=192.168.250.33/24
      Gateway=192.168.250.1
      DNS=192.168.250.1
    5. 物理ネットワークインターフェース用のネットワーク設定ファイルを作成します。たとえば、インターフェースが enp4s0 の場合は、以下のコマンドを実行します。

      # touch /etc/systemd/network/enp4s0.network

      使用するインターフェース名が分からない場合は、ホストで ifconfig コマンドを実行すると、アクティブなネットワークインターフェースの一覧を取得できます。

    6. 物理ネットワークが macvlan インターフェース (この場合は vm-macvlan) の一部になるように、物理ネットワーク設定ファイルを編集します。

      [Match]
      Name=enp4s0
      
      [Network]
      MACVLAN=vm-macvlan
    7. ホストを再起動します。
  • (必要に応じて) セキュリティーを強化する場合は、仮想マシンが NFS バージョン 4 以降と互換性があることを確認してください。

手順

  1. ホストで、ネットワークファイルシステム (NFS) として共有するファイルを含むディレクトリーをエクスポートします。

    1. ファイルを共有する各仮想マシンの IP アドレスを取得します。以下の例では、testguest1 および testguest2 の IP を取得します。

      # virsh domifaddr testguest1
      Name       MAC address          Protocol     Address
      ----------------------------------------------------------------
      vnet0      52:53:00:84:57:90    ipv4         192.168.124.220/24
      
      # virsh domifaddr testguest2
      Name       MAC address          Protocol     Address
      ----------------------------------------------------------------
      vnet1      52:53:00:65:29:21    ipv4         192.168.124.17/24
    2. ホストの /etc/exports ファイルを編集して、共有するディレクトリー、共有する仮想マシンの IP、および共有オプションを含む行を追加します。

      Shared directory VM1-IP(options) VM2-IP(options) [...]

      たとえば、以下は、testguest1 および testguest2 があるホストの /usr/local/shared-files ディレクトリーを共有し、仮想マシンがディレクトリーのコンテンツを編集できるようにします。

      /usr/local/shared-files/ 192.168.124.220(rw,sync) 192.168.124.17(rw,sync)
    3. 更新したファイルシステムをエクスポートします。

      # exportfs -a
    4. NFS プロセスが起動することを確認します。

      # systemctl start nfs
    5. ホストシステムの IP アドレスを取得します。これは、後で仮想マシンに共有ディレクトリーをマウントするために使用されます。

      # ip addr
      [...]
      5: virbr0: [BROADCAST,MULTICAST,UP,LOWER_UP] mtu 1500 qdisc noqueue state UP group default qlen 1000
          link/ether 52:54:00:32:ff:a5 brd ff:ff:ff:ff:ff:ff
          inet 192.168.124.1/24 brd 192.168.124.255 scope global virbr0
             valid_lft forever preferred_lft forever
      [...]

      関連するネットワークは、ファイルを共有する仮想マシンによるホストへの接続に使用されるネットワークであることに注意してください。通常、これは virbr0 です。

  2. /etc/exports ファイルで指定されている仮想マシンのゲスト OS で、エクスポートしたファイルシステムをマウントします。

    1. 共有ファイルシステムのマウントポイントとして使用するディレクトリー (例: /mnt/host-share) を作成します。

      # mkdir /mnt/host-share
    2. ホストによりエクスポートされたディレクトリーを、マウントポイントにマウントします。この例では、ゲストの /mnt/host-share にある 192.168.124.1 ホストによりエクスポートされた /usr/local/shared-files ディレクトリーをマウントします。

      # mount 192.168.124.1:/usr/local/shared-files /mnt/host-share
    3. マウントに成功したことを確認するには、マウントポイントの共有ディレクトリーにアクセスして確認します。

      # cd /mnt/host-share
      # ls
      shared-file1  shared-file2  shared-file3

13.2. ホストと Windows 仮想マシンとの間でファイルの共有

ホストシステムと、そのホストが接続している Windows 仮想マシンとの間で効率的なファイル共有を行うために、仮想マシンがアクセスできる Samba サーバーを準備できます。

前提条件

  • samba パッケージがホストにインストールされている。そうでない場合は、以下のコマンドを実行します。

    # yum install samba
  • 仮想マシンにホストが表示され、ネットワーク経由で到達可能である。これは、通常、仮想マシンが、仮想ネットワークの NAT および ブリッジ のタイプを使用して接続されている場合となります。ただし、macvtap 接続の場合は、最初にホストに macvlan 機能を設定する必要があります。改善点を報告する場合は、以下のように行います。

    1. ホストの /etc/systemd/network/ ディレクトリーに、vm-macvlan.netdev などのネットワークデバイスファイルを作成します。

      # touch /etc/systemd/network/vm-macvlan.netdev
    2. ネットワークデバイスファイルを編集し、以下の内容を追加します。vm-macvlan を、ネットワークデバイスの名前に置き換えます。

      [NetDev]
      Name=vm-macvlan
      Kind=macvlan
      
      [MACVLAN]
      Mode=bridge
    3. macvlan ネットワークデバイス (例: vm-macvlan.network) 用にネットワーク設定ファイルを作成します。

      # touch /etc/systemd/network/vm-macvlan.network
    4. ネットワーク設定ファイルを編集し、以下の内容を追加します。vm-macvlan を、ネットワークデバイスの名前に置き換えます。

      [Match]
      Name=_vm-macvlan_
      
      [Network]
      IPForward=yes
      Address=192.168.250.33/24
      Gateway=192.168.250.1
      DNS=192.168.250.1
    5. 物理ネットワークインターフェース用のネットワーク設定ファイルを作成します。たとえば、インターフェースが enp4s0 の場合は、以下のコマンドを実行します。

      # touch /etc/systemd/network/enp4s0.network

      使用するインターフェースが分からない場合は、ホストの ifconfig コマンドを使用して、アクティブなネットワークインターフェースの一覧を取得できます。

    6. 物理ネットワークが macvlan インターフェース (この場合は vm-macvlan) の一部になるように、物理ネットワーク設定ファイルを編集します。

      [Match]
      Name=enp4s0
      
      [Network]
      MACVLAN=vm-macvlan
    7. ホストを再起動します。

手順

  1. ホストで Samba 共有を作成し、外部システムでアクセスできるようにします。

    1. Samba にファイアウォールパーミッションを追加します。

      # firewall-cmd --permanent --zone=public --add-service=samba
      success
      # firewall-cmd --reload
      success
    2. /etc/samba/smb.conf ファイルを編集します。

      1. [global] セクションに以下を追加します。

        map to guest = Bad User
      2. ファイルの末尾に以下を追加します。

        #=== Share Definitions ===
        [VM-share]
        path = /samba/VM-share
        browsable = yes
        guest ok = yes
        read only = no
        hosts allow = 192.168.122.0/24

        hosts allow 行は、共有のアクセスが、仮想マシンネットワークにあるホストに限定されることに注意してください。共有にすべてのユーザーがアクセスできるようにするには、この行を削除します。

    3. /samba/VM-share ディレクトリーを作成します。

      # mkdir -p /samba/VM-share
    4. Samba サービスを有効にします。

      # systemctl enable smb.service
      Created symlink /etc/systemd/system/multi-user.target.wants/smb.service → /usr/lib/systemd/system/smb.service.
    5. Samba サービスを再起動します。

      # systemctl restart smb.service
    6. 仮想マシン用の VM-share ディレクトリーへのアクセスと変更を許可します。

      # chmod -R 0755 /samba/VM-share/
      # chown -R nobody:nobody /samba/VM-share/
    7. SELinux Samba 共有ラベルを /etc/samba/VM-share/ に追加します。

      # chcon -t samba_share_t /samba/VM-share/
  2. Windows ゲストオペレーティングシステムで、Samba 共有をネットワークの場所として割り当てます。

    1. ファイルエクスプローラーを開き、この PC を右クリックします。
    2. コンテキストメニューで、ネットワークの場所を追加する をクリックします。

      仮想化 Win10 ネットワーク loc1
    3. ネットワークの場所の追加 ウィザードが開きます。カスタムのネットワークの場所を選択を選択し、次へ をクリックします。
    4. インターネットまたはネットワークのアドレスフィールドに host-IP/VM-share と入力します。host-IP はホストの IP アドレスになります。通常、ホストの IP は仮想マシンのデフォルトゲートウェイです。その後、次へ をクリックします。

      仮想化 Win10 ネットワーク loc2
    5. 共有ディレクトリーの名前を変更するかどうかをたずねられた場合は、デフォルト名のままにします。これにより、仮想マシンとゲストのファイル共有設定の一貫性が確保されます。次へ をクリックします。
    6. ネットワークの場所にアクセスできたら、完了 をクリックすると共有ディレクトリーが開きます。

第14章 仮想ネットワークの概要

ホストハードウェアにより、ネットワーク上の他のデバイスや場所への仮想マシンの接続が容易になります。

仮想ネットワークは、仮想ネットワークスイッチの概念を使用します。仮想ネットワークスイッチは、ホストマシンで動作するソフトウエア構成です。仮想マシン (VM) は、仮想ネットワークスイッチを介してネットワークに接続します。

以下の図は、2 つの仮想マシンをネットワークに接続する仮想ネットワークスイッチを示しています。

vn 02 スイッチおよび 2 台のゲスト

ゲストオペレーティングシステムの視点から見ると、仮想ネットワーク接続は物理ネットワーク接続と同じです。ホストのマシンサーバーは、仮想ネットワークスイッチをネットワークインターフェースとして表示します。libvirtd デーモン (libvirtd) を最初にインストールして起動すると、仮想ネットワークスイッチを表すデフォルトのネットワークインターフェースが virbr0 になります。

このインターフェースは、他のネットワークインタフェースと同じように、ip コマンドを使用して表示できます。

$ ip addr show virbr0
3: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state
 UNKNOWN link/ether 1b:c4:94:cf:fd:17 brd ff:ff:ff:ff:ff:ff
 inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0

デフォルトでは、1 台のホストにあるすべての仮想マシンが、同じ libvirt 仮想ネットワーク (default) に接続されています。このネットワーク上にある仮想マシンは、以下の接続を行うことができます。

  • 互いを使用、および仮想化ホストを使用

    インバウンドトラフィックとアウトバウンドトラフィックの両方が可能ですが、ゲストオペレーティングシステムのネットワークスタック内のファイアウォールと、ゲストインターフェースに付加された libvirt ネットワークフィルタリングルールに影響されます。

  • 仮想化ホスト以外のネットワークにあるその他のホストを使用

    アウトバウンドトラフィックのみが可能で、ネットワークアドレス変換 (NAT) ルールおよびホストシステムのファイアウォールの影響を受けます。

仮想マシンからの基本的なアウトバウンドのみのネットワークアクセスでは、デフォルトのネットワークが libvirt パッケージと一緒にインストールされ、libvirtd サービスが開始する際に自動的に開始するため、通常は追加のネットワーク設定が必要ありません。

より高度な機能が必要な場合は、virsh を使用して追加のネットワークを作成して設定でき、仮想マシンの XML 設定ファイルを編集して、この新しいネットワークのいずれかを使用できます。

デフォルト設定の詳細は、「デフォルトの仮想ネットワーク設定」を参照してください。

必要な場合は、ゲストインターフェースを以下のいずれかのモードに設定できます。

仮想ネットワークは、ネットワークアドレス変換 (NAT) を使用して、仮想ネットワークに IP アドレス範囲を割り当て、dnsmasq を使用して、仮想マシンのネットワークインターフェースカード (NIC) に IP アドレスを自動的に割り当て、ドメインネームサービス (DNS) に接続します。

仮想ネットワークでは、以下の機能を使用できます。

14.1. ルーティングモードの仮想ネットワーク

ルーティング モードを使用する場合は、仮想スイッチを、ホストマシンに接続された物理 LAN に接続し、NAT を使用せずにトラフィックをやり取りします。仮想スイッチは、すべてのトラフィックを調べ、ネットワークパケットに含まれる情報を使用して、ルーティングの決定を行うことができます。このモードを使用すると、仮想マシンはすべて自身のサブネットにあり、仮想スイッチを介してルーティングされます。これにより、着信接続が有効になりますが、外部ネットワークのシステムに追加のルーティングテーブルエントリーが必要になります。ルーティングモードは、OSI ネットワークモデルのレイヤー 3 で動作します。

vn 06 ルーティングスイッチ

一般的なトポロジー

ルーティングモードが使用される一般的なトポロジーには、DMZ および仮想サーバーのホストが含まれます。

DMZ

セキュリティー上の理由から、制御されたサブネットワークにノードを配置するネットワークを作成できます。このようなサブネットワークは、非武装地帯 (DMZ) して知られています。

vn 09 ルーティングモード DMZ

DMZ のホストマシンは、通常、WAN (外部) のホストマシンと、LAN (内部) のホストマシンにサービスを提供します。これにより、複数の場所からアクセスでき、この場所はセキュリティーおよび信頼レベルに基づいて異なる方法で制御および操作されるため、ルーティングモードはこの環境に最適な設定になります。

仮想サーバーのホスト

プロバイダーをホストする仮想サーバーには複数のホストマシンがあり、それぞれに 2 つの物理ネットワーク接続がある場合があります。管理とアカウンティングにはいずれかのインターフェースが使用されており、もう 1 つは仮想マシンによる接続に使用されます。各仮想マシンには独自のパブリック IP アドレスがありますが、ホストマシンはプライベート IP アドレスを使用するため、内部管理者のみが仮想マシンを管理できます。

vn 10 ルーティングモードのデータセンター

14.2. ブリッジモードの仮想ネットワーク

ブリッジ モードを使用する場合、仮想マシンは、ローカルイーサネットに接続されている物理イーサネットデバイスにも直接接続されているブリッジデバイスに接続されています。これにより、仮想マシンが物理ネットワークに直接表示されます。これにより、着信接続が有効になりますが、追加のルーティングテーブルエントリーは必要ありません。

VN ブリッジモードダイアグラム

ブリッジモードの仮想マシンは、ホストの既存の Linux ブリッジに接続する必要があるため、ホストインターフェースでネットワークブリッジを作成する必要があります。一方、その他の仮想マシンネットワークモードは、仮想ブリッジ virbr0 を自動的に作成して接続します。

すべての仮想マシンが、ホストマシンと同じサブネットに表示されます。同じ物理ネットワークにあるその他のすべての物理マシンは、仮想マシンを認識し、アクセスできます。ブリッジングは、OSI ネットワークモデルのレイヤー 2 で動作します。

ハイパーバイザーで複数の物理インターフェースを使用する場合は、ボンドで複数のインターフェースを結合します。ボンドがブリッジに追加され、仮想マシンがブリッジにも追加されます。ただし、ボンディングドライバーにはいくつかの動作モードがあり、これらのモードの一部は、仮想マシンを使用しているブリッジで機能します。

警告

「仮想マシンのゲストが接続するブリッジで使用される場合にどのボンディングモードが有効ですか?」を使用する場合、仮想マシンで使用するボンディングモードは、モード 1、モード 2、およびモード 4 のみになります。モード 0、3、5、または 6 を使用すると、接続が失敗する可能性が高くなります。また、アドレス解決プロトコル (ARP) の監視が機能しないため、MII (Media-Independent Interface) 監視を使用してボンディングモードを監視する必要があります。

一般的なシナリオ

ブリッジモードにおける最も一般的なユースケースには、たとえば以下のようなものがあります。

  • ホストマシンとともに既存のネットワークに仮想マシンをデプロイし、仮想マシンと物理マシンの相違点をエンドユーザーに透過的にする。
  • 既存の物理ネットワーク設定を変更せずに仮想マシンをデプロイする。
  • 既存の物理ネットワークから簡単にアクセスできる必要がある仮想マシンをデプロイする。既存のブロードキャストドメイン (DHCP など) のサービスにアクセスする必要がある物理ネットワークに仮想マシンを配置する。
  • VLAN が使用されている既存のネットワークに仮想マシンを接続する。

関連情報

14.3. 分離モードの仮想ネットワーク

分離 モードを使用すると、仮想スイッチに接続されている仮想マシンは相互に通信でき、ホストマシンとも通信できますが、トラフィックはホストマシンの外部を通過せず、ホストマシンの外部からトラフィックを受信することができません。DHCP などの基本的な機能には、このモードの dnsmasq を使用する必要があります。

vn 07 分離スイッチ

14.4. 仮想ネットワークのネットワークアドレス変換

デフォルトでは、仮想ネットワークスイッチは NAT モードで動作します。Source-NAT (SNAT) または Destination-NAT (DNAT) の代わりに IP マスカレードを使用します。IP マスカレードで接続されている仮想マシンは、外部ネットワークとの通信にホストマシンの IP アドレスを使用できるようになります。ホスト外のコンピューターは、仮想ネットワークスイッチが NAT モードで動作している場合に、ホスト内部の仮想マシンと通信ができません。

vn 04 NAT スイッチを使用するホスト
警告

仮想ネットワークスイッチは、iptables ルールで設定された NAT を使用します。スイッチの実行中にこのルールを編集することは推奨されていません。誤ったルールがあると、スイッチが通信できなくなる可能性があるためです。

スイッチが実行していない場合は、正引きモードの NAT のパブリック IP 範囲を設定して、ポートマスカレードの範囲を作成するには、以下のコマンドを実行します。

# iptables -j SNAT --to-source [start]-[end]

14.5. オープンモードの仮想ネットワーク

ネットワークの Open モードを使用すると、libvirt が、ネットワークに iptables ルールを生成しません。したがって、libvirt の範囲外に追加した iptables ルールは上書きされないため、iptables ルールを手動で管理できます。

14.6. 仮想ネットワークの DNS および DHCP

libvirt パッケージには、仮想ネットワーク用の動的ホスト構成プロトコル (DHCP) サーバーとドメインネームシステム (DNS) フォワーダーを提供する dnsmasq が含まれます。

DHCP サービスの dnsmasq は、アドレスのプールを、仮想ネットワークスイッチに割り当てることができます。IP 情報は、DHCP 経由で仮想マシンに割り当てることができます。

dnsmasq は、仮想ネットワークの仮想マシンから DNS クエリーを受け入れ、それを実際の DNS サーバーに転送します。

dnsmasq のインスタンスは、それを必要とする各仮想ネットワークの libvirt により自動的に設定され、起動します。

14.7. デフォルトの仮想ネットワーク設定

libvirtd デーモン (libvirtd) を最初にインストールすると、NAT モードの最初の仮想ネットワークスイッチ設定が含まれます。この設定は、インストールされている仮想マシンが、ホストマシンを介して外部ネットワークと通信できるようにするために使用されます。次の図は、libvirtd のデフォルト設定を示しています。

vn 08 ネットワークの概要
注記

仮想ネットワークは、特定の物理インターフェースに制限できます。これは、いくつかのインタフェースを持つ物理システムで役に立ちます (たとえば、eth0eth1、および eth2)。新しい仮想ネットワークを作成する場合、これはルーティングモードおよび NAT モードでのみ役に立ち、dev=<interface> オプション、または RHEL 8 Web コンソールで定義できます。

第15章 仮想マシンの保護

仮想マシンを使用する RHEL 8 システムの管理者が、仮想マシンのセキュリティーをできる限り確保することで、ゲストおよびホストの OS が悪意のあるソフトウェアに感染するリスクが大幅に軽減されます。

本書は、RHEL 8 ホストの 仮想マシンを保護する構造 の概要を表し、仮想マシンのセキュリティーを強化する 一連の方法 を示します。

15.1. 仮想マシンでセキュリティーが機能する仕組み

仮想マシンを使用する場合は、複数のオペレーティングシステムを 1 台のホストマシンに格納できます。このシステムは、ハイパーバイザーを介してホストに接続しますが、通常は仮想ネットワークを介して接続します。したがって、各仮想マシンを、悪意のあるソフトウェアでホストを攻撃するベクトルとして使用できます。また、ホストも、仮想マシンを攻撃するベクトルとして使用できます。

図15.1 仮想化ホストの潜在的なマルウェア攻撃ベクトル

仮想のセキュリティーが攻撃に成功

ハイパーバイザーは、ホストカーネルを使用して仮想マシンを管理するため、仮想マシンのオペレーティングシステムで実行しているサービスは、悪意のあるコードをホストシステムに挿入するのによく使用されます。ただし、ホストおよびゲストのシステムで 多数のセキュリティー機能 を使用して、このようなセキュリティーの脅威からシステムを保護できます。

このような SELinux や QEMU サンドボックスなどの機能は、悪意のあるコードがハイパーバイザーを攻撃し、ホストと仮想マシンとの間の転送をより困難にするさまざまな対策を提供します。

図15.2 仮想化ホストでマルウェア攻撃を阻止

仮想のセキュリティーが攻撃を防ぐ

仮想マシンのセキュリティーに対して RHEL 8 が提供する機能の多くは、常にアクティブで、有効または設定する必要がありません。詳細は「仮想マシンのセキュリティーの自動機能」を参照してください。

さらに、仮想マシンおよびハイパーバイザーの脆弱性を最小限に抑えるために、さまざまなベストプラクティスを実行することもできます。詳細は「仮想マシンのセキュリティー保護に関するベストプラクティス」を参照してください。

15.2. 仮想マシンのセキュリティー保護に関するベストプラクティス

以下の手順を行うと、仮想マシンが悪意のあるコードに感染し、ホストシステムに侵入するための攻撃ベクトルとして使用されるリスクが大幅に低減します。

ゲストで以下を行います。

  • 仮想マシンを、物理マシンと同じように保護します。セキュリティーを強化するのに使用できる方法は、ゲスト OS によって異なります。

    仮想マシンで RHEL 8 を実行している場合は、ゲストシステムのセキュリティーを強化する方法を、『RHEL 8 セキュリティーの強化』で参照してください。

ホストで以下を行います。

  • 仮想マシンをリモートで管理する場合は、SSH などの暗号化ユーティリティーと、SSL などのネットワークプロトコルを使用して仮想マシンに接続します。
  • SELinux が Enforcing モードであることを確認します。

    # getenforce
    Enforcing

    SELinux が無効または Permissive モードになっている場合は、『Configuring and managing security』で、Enforcing モードを有効にする手順を参照してください。

    注記

    SELinux の Enforcing モードでは、sVirt RHEL 8 機能も有効になります。これは、仮想化に使用される特別な SELinux ブール値のセットです。この値は 手動で調整 でき、仮想マシンのセキュリティーを詳細に管理できます。

  • SecureBoot で仮想マシンを使用します。

    SecureBoot は、仮想マシンが暗号化で署名された OS を実行していることを確認する機能です。これにより、マルウェア攻撃が変更した OS の仮想マシンを起動できなくなります。

    SecureBoot は、OVMF ファームウェアを使用する Linux 仮想マシンをインストールする場合に限り適用できます。手順は「SecureBoot の仮想マシンの作成」を参照してください。

  • qemu-img などの qemu-* コマンドは使用しないでください。

    QEMU は、RHEL 8 における仮想化アーキテクチャーの必須コンポーネントですが、手動で管理することが難しく、QEMU 設定に誤りがあるとセキュリティーの脆弱性を引き起こす可能性があります。したがって、Red Hat では、qemu-* コマンドの使用をサポートしていません。代わりに、ベストプラクティスに従って QEMU を調整するため、virshvirt-installvirt-xml などの libvirt ユーティリティーを使用して QEMU と相互作用することが強く推奨されます。

関連情報

15.3. SecureBoot の仮想マシンの作成

以下は、SecureBoot 機能を使用する Linux 仮想マシンを使用する方法を説明します。これは、仮想マシンが、暗号で署名された OS を実行していることを保証します。マルウェアが仮想マシンのゲスト OS を変更すると、SecureBoot により仮想マシンが起動しなくなり、ホストのマシンにマルウェアが広がらないようになります。

前提条件

  • 仮想マシンが Q35 マシンタイプを使用している。
  • edk2-OVMF パッケージがインストールされている。

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

    • DVD などの物理的なインストールメディア
    • インストールメディアの ISO イメージ
    • 既存の仮想マシンインストールのディスクイメージ
  • インストールをより速く、簡単に設定するために、キックスタートファイルも利用できます。

手順

  1. 「コマンドラインインターフェースを使用した仮想マシンの作成」に従って、virt-install コマンドを使用して仮想マシンを作成します。--boot オプションには、uefi,nvram_template=/usr/share/OVMF/OVMF_VARS.secoot.fd を使用します。これは、OVMF_VARS.secboot.fd ファイルおよび OVMF_CODE.secboot.fd ファイルをテンプレートとして使用します。仮想マシンの不揮発性 RAM (NVRAM) 設定のテンプレートとして使用します。これにより、SecureBoot 機能を有効にします。

    以下に例を示します。

    # virt-install --name rhel8sb --memory 4096 --vcpus 4 --os-variant rhel8.0 --boot uefi,nvram_template=/usr/share/OVMF/OVMF_VARS.secboot.fd --disk boot_order=2,size=10 --disk boot_order=1,device=cdrom,bus=scsi,path=/images/RHEL-8.0-installation.iso
  2. 画面の指示に従って、OS のインストール手順を進めます。
  3. ゲスト OS がインストールされたら、グラフィカルゲストコンソール で端末を開いて仮想マシンのコマンドラインにアクセスするか、SSH を使用 してゲスト OS へ接続します。
  4. mokutil --sb-state コマンドで、SecureBoot が有効になっていることを確認します。

    # mokutil --sb-state
    SecureBoot enabled

15.4. 仮想マシンのセキュリティーの自動機能

「仮想マシンのセキュリティー保護に関するベストプラクティス」に記載されている、仮想マシンのセキュリティーを向上させる手動の手段に加えて、RHEL 8 で仮想化を使用する場合は、libvirt ソフトウェアスイートにより、多くのセキュリティー機能が提供され、自動的に有効になっています。これには、以下が含まれます。

システムセッションおよびユーザーセッション

RHEL 8 で仮想マシン管理に使用できるすべてのユーティリティーにアクセスするには、libvirt の システムセッション を使用する必要があります。そのためには、システムで root 権限を持っているか、または libvirt ユーザーグループの一部である必要があります。

libvirt グループに属していない root 以外のユーザーは、libvirt の ユーザーセッション にのみアクセスできます。それは、リソースにアクセスする際に、ローカルユーザーのアクセス権限が有効である必要があります。たとえば、ユーザーセッションで、システムセッションまたは他のユーザーが作成した仮想マシンを検出またはアクセスすることはできません。また、利用可能な仮想マシンネットワーク設定オプションも大幅に制限されます。

注記

RHEL 8 ドキュメントは、libvirt システムセッションの特権があることを前提としています。

仮想マシンの分離
個々の仮想マシンは、ホストで孤立したプロセスとして動作し、ホストカーネルにより強制されるセキュリティーに依存します。したがって、仮想マシンは、同じホストにある他の仮想マシンのメモリーやストレージを読み取ったり、アクセスすることができません。
QEMU サンドボックス
QEMU コードが、ホストのセキュリティーを侵害する可能性のあるシステムコールを実行できない機能です。
KASLR (Kernel Address Space Randomization)
カーネルイメージを展開する物理アドレスおよび仮想アドレスをランダム化できるようにします。したがって、KASLR は、カーネルオブジェクトの場所に基づいて、ゲストのセキュリティーが悪用されるのを防ぎます。

15.5. 仮想化のブール値

RHEL 8 システムにおける仮想マシンのセキュリティーの詳細な設定には、ハイパーバイザーが特定の方法で機能するように、ホストで SELinux のブール値を設定できます。

仮想化関連のブール値とそのステータスの一覧を表示するには、getsebool -a | grep virt コマンドを実行します。

$ getsebool -a | grep virt
[...]
virt_sandbox_use_netlink --> off
virt_sandbox_use_sys_admin --> off
virt_transition_userdomain --> off
virt_use_comm --> off
virt_use_execmem --> off
virt_use_fusefs --> off
[...]

特定のブール値を有効にするには、root で setsebool -P boolean_name on コマンドを実行します。ブール値を無効にするには、setsebool -P boolean_name off を使用します。

以下の表は、RHEL 8 で利用可能な仮想化関連のブール値と、その値が有効な場合の動作を示しています。

表15.1 SELinux 仮想化ブール値

SELinux のブール値説明

staff_use_svirt

非 root ユーザーが仮想マシンを作成して、sVirt に移行できるようになります。

unprivuser_use_svirt

非特権ユーザーが仮想マシンを作成して、sVirt に移行できるようになります。

virt_sandbox_use_audit

サンドボックスコンテナーが監査メッセージを送信できるようになります。

virt_sandbox_use_netlink

サンドボックスコンテナーでネットリンクシステム呼び出しが使用できるようになります。

virt_sandbox_use_sys_admin

サンドボックスコンテナーで sys_admin システム呼び出し (mount 等) が使用できるようになります。

virt_transition_userdomain

仮想プロセスをユーザードメインとして実行できるようになります。

virt_use_comm

virt でシリアルおよびパラレルの通信ポートが使用できるようになります。

virt_use_execmem

制限された仮想ゲストが実行可能メモリーおよび実行可能スタックを使用できるようになります。

virt_use_fusefs

FUSE がマウントしたファイルを virt が読み取りできるようになります。

virt_use_nfs

NFS がマウントしたファイルを virt が管理できるようになります。

virt_use_rawip

virt で rawip ソケットとの通信ができるようになります。

virt_use_samba

CIFS がマウントしたファイルを virt が管理できるようになります。

virt_use_sanlock

制限された仮想ゲストが sanlock と相互作用できるようになります。

virt_use_usb

virt で USB デバイスが使用できるようになります。

virt_use_xserver

仮想マシンで X Window System と相互作用できるようになります。

第16章 Windows 仮想マシンのインストールおよび管理

RHEL 8 ホスト上の仮想マシンでゲストオペレーティングシステムとして Microsoft Windows を使用するには、この仮想マシンが正しく実行されるように追加の手順を実行することが推奨されます。

このため、以下のセクションでは、ホストマシンに Windows 仮想マシンをインストールし、最適化する方法を説明します。また、Windows 仮想マシンにドライバーをインストールし、設定する方法を説明します。

16.1. Windows 仮想マシンのインストール

ここでは、RHEL 8 ホストで完全仮想化 Windows マシンを作成し、仮想マシン内でグラフィカル Windows インストーラーを起動し、インストールした Windows ゲストオペレーティングシステム (OS) を最適化する方法を説明します。

仮想マシンを作成して、virt-install コマンドまたは RHEL 8 Web コンソールを使用してインストールできます。

前提条件

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

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

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

手順

  1. 仮想マシンを作成します。手順は「仮想マシンの作成」を参照してください。

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

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

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

        --os-variant win10

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

        # osinfo-query os
    • Web コンソールを使用して仮想マシンを作成する場合は、仮想マシンの新規作成 ウィンドウの オペレーティングシステム フィールドで Windows のバージョンを指定します。仮想マシンを作成してゲスト OS をインストールしたら、Disks インターフェースを使用して virtio ドライバーを含むストレージメディアを仮想マシンに接続します。手順は「Web コンソールで既存ディスクを仮想マシンに割り当て」を参照してください。
  2. 仮想マシンに Windows OS をインストールします。

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

  3. Windows ゲスト OS で、KVM virtio ドライバーを構成します。詳細は「Windows 仮想マシン用の KVM 準仮想化ドライバーのインストール」を参照してください。

関連情報

16.2. Windows 仮想マシンの最適化

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

そのため、Red Hat は、以下を実行して Windows 仮想マシンを最適化することを推奨しています。

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

準仮想化ドライバーは仮想マシンのパフォーマンスを向上し、I/O レイテンシーを下げ、ベアメタルレベルまでスループットを増加させます。I/O の高いタスクやアプリケーションを実行する完全に仮想化された仮想マシンには、準仮想化ドライバーを使用することが推奨されます。

virtio ドライバーは、KVM ホストで実行する Windows 仮想マシンで利用可能な、KVM の準仮想化デバイスドライバーです。このドライバーは virtio-win パッケージに含まれます。virtio-win パッケージは、ブロック (ストレージ) デバイス、ネットワークインターフェースコントローラー、ビデオコントローラー、メモリーのバルーンデバイス、準仮想化シリアルポートデバイス、エントロピーソースデバイス、準仮想化パニックデバイス、そしてエミュレートされたデバイスの小規模なセットに対応しています。

注記

エミュレートされたデバイス、virtio デバイス、および割り当てられたデバイスの詳細は、8章仮想デバイスの管理を参照してください。

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

  • Windows Server バージョン - Red Hat ナレッジベースの「Red Hat Enterprise Linux の KVM で認定されているゲスト OS」を参照してください。
  • Windows Desktop (サーバー以外の) バージョン:

    • Windows 7 (32 ビットおよび 64 ビットバージョン)
    • Windows 8 (32 ビットおよび 64 ビットバージョン)
    • Windows 8.1 (32 ビットおよび 64 ビットバージョン)
    • Windows 10 (32 ビットおよび 64 ビットバージョン)
注記

新しいバージョンの QEMU とともに古い virtio ドライバーを使用しようとすると、ネットワーク接続の問題が発生することがあります。したがって、ドライバーを最新の状態に保つことをお勧めします。

virtio ドライバーをインストールするには、以下を行います。

  1. ホストマシンにインストールメディアを準備します。詳細は「ホストマシン上での KVM ドライバーディスクの準備」を参照してください。
  2. インストールメディアを既存の Windows 仮想マシンに添付するか、新しいWindows 仮想マシンを作成する ときに添付します。
  3. Windows ゲストオペレーティングシステムに virtio ドライバーをインストールします。詳細は「Windows ゲストでの KVM ドライバーのインストール」を参照してください。

16.2.1.1. ホストマシン上での KVM ドライバーディスクの準備

Windows 仮想マシン上での KVM ドライバーのインストールメディアは、ホストマシンに準備する必要があります。これは、ホストマシンに virtio-win パッケージをインストールすることで行います。このインストールでは、Windows 仮想マシンに virtio ドライバーをインストールするのに使用できる以下のタイプのメディアが作成されます。

  • 仮想化 CD-ROM デバイスまたは USB ドライブを使用してアクセスできる ISO ファイル。
  • ローカルまたは共有ネットワークドライブを使用して、Windows 仮想マシンからアクセスできるドライバーインストールファイルがあるディレクトリー。

前提条件

  • RHEL 8 ホストシステムで仮想化が 有効 になっていることを確認します。

手順

  1. ドライバーをダウンロードします。

    1. Red Hat Enterprise Linux のダウンロード に進みます。
    2. システムアーキテクチャーに関連する 製品バリアント を選択します。たとえば、Intel 64 および AMD64 の場合は、Red Hat Enterprise Linux for x86_64 を選択します。
    3. Version8 であることを確認します。
    4. Packages で、virtio-win を検索します。
    5. 最新のダウンロード をクリックします。

      RPM ファイルがダウンロードされます。

  2. ダウンロードディレクトリーから virtio-win パッケージをインストールします。以下に例を示します。

    # yum install ~/Downloads/virtio-win-1.9.9-3.el8.noarch.rpm
    [...]
    Installed:
      virtio-win-1.9.9-3.el8.noarch

    インストールが成功すると、virtio-win ドライバーファイルが /usr/share/virtio-win/ ディレクトリーに準備されます。これには、ISO ファイルと、ディレクトリーにドライバーファイルを持つ drivers ディレクトリー (各アーキテクチャーと対応している Windows バージョン用のファイル) が含まれます。

    # ls /usr/share/virtio-win/
    drivers/  guest-agent/  virtio-win-1.9.9.iso  virtio-win.iso
  3. Windows 仮想マシンを新たに作成 する際にディスクとして virtio-win.iso ファイルを使用するか、既存のWindows 仮想マシンにディスクとして追加します。

16.2.1.2. Windows ゲストでの KVM ドライバーのインストール

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

前提条件

手順

  1. Windows 仮想マシンを再起動します。
  2. Windows デバイスマネージャーを開きます。

    Windows Device Manager を開く方法は、Windows のドキュメントを参照してください。

  3. その他のデバイス の左にある矢印をクリックして、利用可能なデバイスを表示します。

    デバイスマネージャー他のデバイス
  4. 適切なデバイスを見つけます。

    最大で以下の 8 つのデバイスが利用できます。メモリバルーンデバイス、準仮想化シリアルポートデバイス、ネットワークデバイス、ブロックデバイス、SCSI ブロックデバイス、エントロピーソースデバイス、エミュレート PCI シリアルポートデバイス、および準仮想化パニックデバイス。また、ビデオデバイスは、ディスプレイのアダプターグループで利用できます。

    • Balloon (バルーンドライバー) は、その他のデバイスグループの PCI デバイスに適用されます。
    • vioserial (準仮想化シリアルドライバー) は、その他のデバイスグループ内の PCI Simple Communications Controller に適用されます。
    • NetKVM (ネットワークドライバー) は、その他のデバイスグループ内の Ethernet Controller に適用されます。このドライバーは、virtio NIC が設定されている場合にのみ利用できます。このドライバーの構成可能なパラメーターは「NetKVM ドライバーパラメーター」に記載されています。
    • viostor (ブロックドライバー) は、その他のデバイスグループの SCSI Controller に適用されます。
    • viocsci (SCSI ブロックドライバー) は、その他のデバイスグループの SCSI Controller に適用されます。
    • viorng (エントロピーソースドライバー) は、その他のデバイスグループの PCI Device に適用されます。
    • qemupciserial (エミュレート PCI シリアルドライバー) は、その他のデバイスグループの PCI Serial Port に適用されます。
    • qxl (準仮想化ドライバー) は、ディスプレイアダプターグループの Microsoft Basic Display Adapter に適用されます。
    • pvpanic (準仮想化パニックドライバー) は、その他のデバイスグループの Unknown デバイスに適用されます。
  5. 更新するドライバーを右クリックし、ポップアップメニューから Update Driver Software を選択します。

    デバイスマネージャーのデバイス更新メニュー

    Update Driver Software ウィザードが開始します。

    device manager sw update wizard page 1

    ドライバー更新ウィザードの最初のページでは、ドライバーソフトウェアを検索する方法を求めます。

  6. Browse my computer for driver software をクリックします。
  7. Browse をクリックします。

    ファイルブラウザーが開きます。

  8. ドライバーの場所を参照します。

    オペレーティングシステムとアーキテクチャーの組み合わせごとに、個別のドライバーが提供されます。ドライバーは、ドライバーのタイプ、オペレーティングシステム、およびインストールされるアーキテクチャー: driver_type/os/arch/ に従って階層的に編成されます。

    たとえば、x86 (32 ビット) アーキテクチャーを持つ Windows 10 オペレーティングシステムのバルーンドライバーは Baloon/w10/x86 ディレクトリーにあります。

    正しい場所に移動したら、OK をクリックします。

  9. 次へ をクリックします。

    ドライバーのインストール中に、以下の画面が表示されます。

    device manager sw update wizard page 2

    インストールが完了すると、以下の画面が表示されます。

    device manager sw update wizard page 3
  10. 閉じる をクリックします。
  11. 仮想マシンを再起動してドライバーのインストールを完了します。
注記

ドライバーが正常にインストールされると、デバイスは 他のデバイス グループには表示されなくなります。次のグループのいずれかでデバイスを見つけます。

  • 多機能アダプターグループ - 1x QEMU PCI シリアルカード
  • ネットワークアダプターグループ - Red Hat VirtIO Ethernet Adapter
  • ストレージコントローラーグループ - Red Hat VirtIO SCSI コントローラーと Red Hat VirtIO SCSI パススルーコントローラー
  • システムデバイスグループ - QEMU PVPanic デバイス、VirtIO バルーンドライバー、VirtIO RNG デバイス、および VirtIO シリアルドライバー

関連情報

16.2.2. Hyper-V Enlightenment の有効化

Hyper-V Enlightenment では、KVM が Microsoft Hyper-V ハイパーバイザーをエミュレートするための方法を利用できます。これにより、Windows 仮想マシンのパフォーマンスが向上します。

以下のセクションは、対応している Hyper-V Enlightenment と、その有効化に関する情報を提供します。

16.2.2.1. Windows 仮想マシンでの Hyper-V Englightenment の有効化

Hyper-V Enlightenment により、RHEL 8 ホストで実行している Windows 仮想マシンでパフォーマンスが向上します。それを有効にする方法は、次を参照してください。

手順

  1. 仮想マシンの XML 設定を編集し、Hyper-V Enlightenment を追加します。次のコマンドでは、$VMNAME を、Windows 仮想マシンの名前に置き換えます。

    # virt-xml $VMNAME --edit --features hyperv_relaxed=on,hyperv_vapic=on,hyperv_spinlocks=on,hyperv_spinlocks_retries=8191,hyperv_vpindex=on,hyperv_runtime=on,hyperv_synic=on,hyperv_stimer=on,hyperv_frequencies=on
    
    # virt-xml $VMNAME --edit --clock hypervclock_present=yes
  2. 仮想マシンを起動します。

検証

  • virsh dumpxml コマンドを使用して、変更された仮想マシンの XML 構成を表示します。次のセグメントが含まれている場合は、Hyper-V Enlightenment が仮想マシンで有効になります。

    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
      <vpindex state='on'/>
      <runtime state='on' />
      <synic state='on'/>
      <stimer state='on'/>
      <frequencies state='on'/>
    </hyperv>
    
    <clock offset='localtime'>
      <timer name='hypervclock' present='yes'/>
    </clock>

16.2.2.2. 対応している Hyper-V Enlightenment

以下は、各 Enlightenment の機能の説明とともに Hyper-V Englightenment のリストです。

Hyper-V Enlightenment

clock
Windows 仮想マシンで使用する仮想タイムソースとオフセットを定義します。
frequencies
Hyper-V 周波数 MSR (Machine Specific Registeres) を有効にします。
relaxed
仮想マシンを高負荷のホストで実行すると、一般的に BSOD に陥る Windows のサニティチェックを無効化します。これは、Linux カーネルオプション no_timer_check と似ています。これは、Linux が KVM で実行している場合に自動的に有効になります。
runtime
仮想プロセッサーの実行時間を指定します。
spinlock
  • 仮想マシンのオペレーティングシステムによって使用され、呼び出し仮想プロセッサーが同じパーティション内の別の仮想プロセッサーで保持する可能性があるリソースを取得することをハイパーバイザーに通知します。
  • ハイパーバイザーに過度のスピン状況を示す前に、スピンロックの取得が施行されるべき回数についてを仮想マシンのオペレーティングシステムに示すためにハイパーバイザーによって使用されます。
synic
stimer とともに、synic タイマーをアクティブにします。Windows 8 では、この機能は定期的なモードで使用します。
vapic
高負荷のメモリーマッピングされた APIC (Advanced Programmable Interrupt Controller) レジスターへのアクセラレート MSR アクセスを提供します。
vpindex
仮想プロセッサーのインデックスを指定します。

16.2.3. NetKVM ドライバーパラメーターの設定

NetKVM ドライバーをインストールした後は、ご使用の環境に応じて設定を行うことができます。本セクションのパラメーターは、Windows デバイスマネージャー (devmgmt.msc) を使用して設定できます。

重要

ドライバーのパラメーターを変更すると、Windows はそのドライバーを再読み込みします。これにより、既存のネットワークアクティビティーが中断します。

前提条件

手順

  1. Windows デバイスマネージャーを開きます。

    Device Manager を開く方法は、Windows のドキュメントを参照してください。

  2. Red Hat VirtIO Ethernet Adapter を見つけます。

    1. Device Manager ウィンドウで、Network アダプターの隣の + をクリックします。
    2. ネットワークアダプターの一覧で、Red Hat VirtIO Ethernet Adapter をダブルクリックします。デバイスのプロパティーウィンドウが開きます。
  3. デバイスパラメーターを表示します。

    プロパティーウィンドウで、詳細 タブをクリックします。

  4. デバイスパラメーターを変更します。

    1. 変更するパラメーターをクリックします。そのパラメーターのオプションが表示されます。
    2. 必要に応じてオプションを変更します。

      NetKVM パラメーターオプションの詳細は、「NetKVM ドライバーパラメーター」を参照してください。

    3. OK をクリックして変更を保存します。

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

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

表16.1 ロギングパラメーター

パラメーター説明 2

logging.Enable

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

logging.Level

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

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

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

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

表16.2 初期パラメーター

パラメーター説明

Assign MAC

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

Init.ConnectionRate(Mb)

1 秒あたりのメガバイト単位の接続速度を表す整数。Windows 2008 以降のデフォルト値は 10G (10,000/秒)です。

Init.Do802.1PQ

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

Init.MTUSize

最大伝送単位 (MTU) を定義する整数。デフォルト値は 1500 です。500 から 65500 までの値はすべて受け入れ可能です。

Init.MaxTxBuffers

割り当てられた TX リング記述子の数を表す整数。

デフォルト値は 1024 です。

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

Init.MaxRxBuffers

割り当てられた RX リング記述子の数を表す整数。

デフォルト値は 256 です。

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

Offload.Tx.Checksum

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

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

* IPv4 と IPv6 の両方で IP、TCP、および UDP チェックサムオフロードを有効にするすべて (デフォルト)

* IPv4 と IPv6 の両方で TCP および UDP チェックサムオフロードを有効にする TCP/UDP (v4,v6)

* IPv4 でのみ TCP および UDP チェックサムオフロードを有効にする TCP/UDP (v4)

* IPv4 でのみ TCP (v4) チェックサムオフロードを有効にする TCP (v4)

第17章 RHEL 8 仮想化における機能のサポートおよび制限

本書は、Red Hat Enterprise Linux 8 (RHEL 8) 仮想化の機能サポートおよび制限を説明しています。

17.1. RHEL 8 仮想化サポートの動作

一連のサポート制限は、Red Hat Enterprise Linux 8 (RHEL 8) の仮想化に適用されます。つまり、RHEL 8 で仮想マシンを使用する際に特定の機能を使用する場合や、特定のリソース量を超えた場合、特別なサブスクリプションプランがない限り、そのゲストは Red Hat のサポート対象外となります。

「RHEL 8 仮想化で推奨される機能」に記載されている機能は、RHEL 8 システムの KVM ハイパーバイザーと連携するように、Red Hat によりテストおよび認定されています。したがって、RHEL 8 の仮想化の使用が完全にサポートされ、推奨されます。

「RHEL 8 仮想化で対応していない機能」に記載されている機能は動作する場合もありますが、サポート対象外であり、RHEL 8 での使用は意図されていません。したがって、Red Hat は、KVM を使用する RHEL 8 でこの機能を使用しないことを強く推奨します。

「RHEL 8 仮想化におけるリソース割り当ての制限」 は、RHEL 8 の KVM ゲストで対応する特定のリソースの最大数を一覧表示します。この制限を超えるゲストは、Red Hat ではサポートされていません。

さらに、特に記載がない限り、RHEL 8 の仮想化のドキュメントで使用されるすべての機能とソリューションがサポートされます。ただし、その一部は完全にテストされていないため、完全には最適化されない場合があります。

重要

この制限の多くは、Red Hat Virtualization (RHV) や Red Hat OpenStack Platform (RHOSP) など、Red Hat が提供するその他の仮想化ソリューションには適用されません。

17.3. RHEL 8 仮想化で対応していない機能

以下の機能は、Red Hat Enterprise Linux 8 (RHEL 8) に含まれる KVM ハイパーバイザーでは対応していません。

重要

この制限の多くは、Red Hat Virtualization (RHV) や Red Hat OpenStack Platform (RHOSP) など、Red Hat が提供するその他の仮想化ソリューションには適用されません。

  • ゲストのオペレーティングシステム

    RHEL 8 ホストは、以下のゲストオペレーティングシステムを使用する KVM 仮想マシンには対応していません。

    • Microsoft Windows 8.1 以前
    • Microsoft Windows Server 2012 以前
    • macOS
    • x86 システム用の Solaris
    • 2009 年より前にリリースされたすべてのオペレーティングシステム
  • vCPU のホットアンプラグ

    実行中の仮想マシンから仮想 CPU (vCPU) を削除することは vCPU ホットアンプラグと呼ばれますが、RHEL 8 では対応していません。

  • メモリーのホットアンプラグ

    仮想マシンの実行に割り当てられるメモリー制限 (メモリーのホットアンプラグとも呼ばれます) を減らすことは、RHEL 8 では対応していません。

  • I/O スロットリング

    RHEL 8 では、仮想ディスク (I/O スロット調整とも呼ばれる) の操作に最大の入出力レベルを設定することに対応していません。

  • ストレージのライブ移行

    実行している仮想マシンのディスクイメージを別のホストに移行することは、RHEL 8 では対応していません。

  • ライブスナップショット

    実行中の仮想マシン (ライブスナップショットとも呼ばれる) のスナップショットの作成または読み込みは、RHEL 8 では対応していません。

    さらに、非ライブ仮想マシンスナップショットは RHEL 8 で廃止されることに注意してください。したがって、シャットダウンされた仮想マシンのスナップショットの作成または読み込みには対応していますが、Red Hat は推奨していません。

  • Vhost-user

    RHEL 8 は、ユーザー空間の vHost インターフェースの実装には対応していません。

  • S3 および S4 のシステムの電力状態

    仮想マシンを Suspend to RAM (S3) または Suspend to disk (S4) のシステム電源状態にサスペンドすることには対応していません。この機能はデフォルトでは無効になっており、有効にすると、仮想マシンが Red Hat のサポート対象外となります。

  • マルチパス化された vDisk の S3-PR

    マルチパス化された vDisk の SCSI3 の永続的な予約 (S3-PR) は、RHEL 8 では対応していません。これにより、RHEL 8 では、Windows Cluster に対応していません。Windows クラスターへの対応が必要な場合は、代わりに Red Hat Virtualization (RHV) を使用します。

  • virtio-crypto

    virtio-crypto デバイスのドライバーは RHEL 8 カーネルで使用可能であるため、特定の状況下で、KVM ハイパーバイザーでデバイスを有効にできます。ただし、virtio-crypto デバイスを使用することは RHEL 8 では対応していないため、使用は推奨されません。

関連情報

17.4. RHEL 8 仮想化におけるリソース割り当ての制限

以下の制限は、Red Hat Enterprise Linux 8 (RHEL 8) ホストの 1 台の KVM 仮想マシンに割り当てることができる仮想化リソースに適用されます。

重要

この制限の多くは、Red Hat が提供するその他の仮想化ソリューション (Red Hat Virtualization (RHV) や Red Hat OpenStack Platform (RHOSP) など) には適用されません。

  • ホストごとの最大仮想マシン

    1 台の RHEL 8 ホストでは、同時に実行する仮想マシンを 4 台まで対応します。

  • 仮想マシンごとの vCPU の最大数

    RHEL 8 は、1 台の仮想マシンに割り当てられる vCPU を 384 個まで対応します。

  • 各仮想マシンの PCI デバイス

    RHEL 8 は、各仮想マシンバスの PCI デバイススロットを 32 個まで対応し、デバイススロットの PCI 機能を 8 個まで対応します。これにより、仮想マシンで多機能の性能が有効になり、PCI ブリッジが使用されていない場合に、理論上は 1 つのバスあたり最大 256 個の PCI 機能が提供されます。

    各 PCI ブリッジは新しいバスを追加します。これにより、別の 256 個のデバイスアドレスが有効になる可能性があります。ただし、一部のバスでは、256 個のデバイスアドレスがすべて利用できるようにはなっていません。たとえば、ルートバスには、スロットを占有する複数の組み込みデバイスがあります。

  • 仮想化 IDE デバイス

    KVM は、各仮想マシンで仮想化されている IDE デバイスの最大数を 4 に制限します。

法律上の通知

Copyright © 2020 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.