仮想化の導入および管理ガイド
RHEL 物理マシンでの仮想マシンのインストール、設定、および管理
概要
パート I. Deployment
第1章 システム要件
1.1. ホストシステム要件
ホストシステムの最小要件
- 6 GB の空きディスク容量
- 2 GB RAM
推奨されるシステム要件
- 仮想化 CPU とホストごとに 1 つのコアまたはスレッド
- 2 GB のメモリーと仮想マシン用の追加の RAM。
- ホスト用に 6 GB のディスク領域と、仮想マシンに必要なディスク領域。ほとんどのゲストオペレーティングシステムには、最低 6GB のディスク領域が必要です。各ゲストに追加するストレージ領域は、ゲストのワークロードによって異なります。
スワップ領域
Linux のスワップ領域は、物理メモリー (RAM) の容量がいっぱいになったときに使用されます。システムに多くのメモリーリソースが必要で、RAM が不足すると、メモリーの非アクティブなページがスワップ領域に移動します。スワップ領域は、RAM が少ないマシンで役に立ちますが、RAM の代わりに使用しないようにしてください。スワップ領域はハードドライブにあり、そのアクセス速度は物理メモリーに比べると遅くなります。スワップパーティションのサイズは、ホストの物理 RAM から計算できます。Red Hat カスタマーポータルには、スワップパーティションのサイズを安全かつ効率的に判断するための記事 https://access.redhat.com/site/solutions/15244 が記載されています。- RAW イメージファイルを使用する場合、必要なディスクスペースは、イメージファイルに必要なスペース、ホストオペレーティングシステムに必要な 6 GB のスペース、およびゲスト用のスワップスペースの合計以上になります。
式1.1 raw イメージを使用したゲスト仮想マシンに必要な領域の計算
total for raw format = images + hostspace + swapqcow イメージの場合は、qcow イメージおよび qcow2 イメージが必要に応じて拡張できるため、ゲスト(total for qcow format)
の予想される最大ストレージ要件も計算する必要があります。この拡張を可能にするには、最初にゲスト(expected maximum guest storage)
のストレージ要件の上限に 1.01 を乗じ、これにホスト(host)
に必要な領域と、必要なスワップ領域(swap)
を加算します。式1.2 qcow イメージを使用したゲスト仮想マシンに必要な領域の計算
total for qcow format = (expected maximum guest storage * 1.01) + host + swap
1.2. KVM ハイパーバイザーの要件
- x86 ベースのシステム用の Intel VT-x および Intel 64 の仮想化拡張機能を搭載した Intel プロセッサー。
- AMD-V および AMD64 仮想化拡張機能を搭載した AMD プロセッサー。
手順1.1 仮想化拡張機能の検証
CPU 仮想化拡張機能が利用可能であることを確認します。
次のコマンドを実行して、CPU 仮想化拡張機能が利用可能であることを確認します。$ grep -E 'svm|vmx' /proc/cpuinfo
出力を分析します。
- 以下の例では、Intel VT-x 拡張機能を持つ Intel プロセッサーを示す
vmx
エントリーが含まれています。flags : fpu tsc msr pae mce cx8
vmx
apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall lm constant_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm - 以下の例では、AMD-V 拡張機能を持つ AMD プロセッサーを示す
svm
エントリーが含まれています。flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext
svm
fxsr_opt lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm cr8legacy ts fid vid ttp tm stc
grep -E 'svm|vmx' /proc/cpuinfo コマンドが出力を返す場合、プロセッサーにはハードウェア仮想化の拡張機能が含まれます。状況によっては、製造元が BIOS で仮想化拡張機能を無効にする場合があります。拡張機能が表示されない、または完全仮想化が機能しない場合は、BIOS 設定ユーティリティーで拡張機能を有効にする手順の 手順A.3「BIOS での仮想化拡張機能の有効化」 を参照してください。KVM カーネルモジュールが読み込まれていることを確認します。
追加の確認として、以下のコマンドを使用して、kvm
モジュールがカーネルに読み込まれていることを確認します。# lsmod | grep kvm
出力にkvm_intel
またはkvm_amd
が含まれる場合は、kvm
ハードウェア仮想化モジュールが読み込まれます。
# virsh capabilities
1.3. KVM ゲスト仮想マシンの互換性
- ホストシステムの場合: https://access.redhat.com/articles/rhel-limits
- KVM ハイパーバイザーの場合: https://access.redhat.com/articles/rhel-kvm-limits
1.4. サポートされているゲスト CPU モデル
1.4.1. ゲスト CPU モデルのリスト表示
$ virsh cpu-models x86_64
486
pentium
pentium2
pentium3
pentiumpro
coreduo
n270
core2duo
qemu32
kvm32
cpu64-rhel5
cpu64-rhel6
kvm64
qemu64
Conroe
Penryn
Nehalem
Westmere
SandyBridge
Haswell
athlon
phenom
Opteron_G1
Opteron_G2
Opteron_G3
Opteron_G4
Opteron_G5
$ virsh cpu-models ppc64
POWER7
POWER7_v2.1
POWER7_v2.3
POWER7+_v2.1
POWER8_v1.0
/usr/share/libvirt/
にある cpu_map.xml
ファイルに記載されています。
# cat /usr/share/libvirt/cpu_map.xml
<cpu>
セクションで変更できます。詳細は、「CPU モデルとトポロジー」 を参照してください。
第2章 仮想化パッケージのインストール
kvm
カーネルモジュールとともにデフォルトの Red Hat Enterprise Linux カーネルを使用します。
2.1. Red Hat Enterprise Linux のインストール中の仮想化パッケージのインストール
手順2.1 仮想化パッケージのインストール
ソフトウェアの選択
Installation Summary 画面までのインストール手順に従います。図2.1 Installation Summary 画面
インストールの概要 画面で、ソフトウェアの選択 を選択します。ソフトウェアの選択 画面が開きます。サーバータイプおよびパッケージグループの選択
Red Hat Enterprise Linux 7 は、基本的な仮想化パッケージのみ、またはグラフィカルユーザーインターフェイスを介してゲストの管理を可能にするパッケージでインストールできます。次のいずれかを行います。- 最小限の仮想化ホストをインストールしますベース環境ペインの 仮想化ホスト ラジオボタンを選択し、選択した環境のアドオン ペインの 仮想化プラットフォーム チェックボックスを選択します。これにより、virsh を使用して実行、またはネットワーク経由でリモートで実行できる基本的な仮想化環境がインストールされます。
図2.2 ソフトウェアの選択の画面で選択した仮想化ホスト
- グラフィカルユーザーインターフェイスを使用した仮想化ホストのインストールベース環境ペインの サーバー (GUI 使用) ラジオボタンを選択し、選択した環境のアドオン ペインの 仮想化クライアント、仮想化ハイパーバイザー、および 仮想化ツール のチェックボックスを選択します。これにより、仮想化環境に加えて、ゲスト仮想マシンのインストールおよび管理用のグラフィカルツールがインストールされます。
図2.3 ソフトウェア選択画面で GUI が選択されているサーバー
インストールの終了
2.1.1. キックスタートファイルを使用した KVM パッケージのインストール
%packages
セクションに以下のパッケージグループを追加します。
@virtualization-hypervisor @virtualization-client @virtualization-platform @virtualization-tools
2.2. 既存の Red Hat Enterprise Linux システムへの仮想化パッケージのインストール
2.2.1. 仮想化パッケージの手動インストール
- qemu-kvm: このパッケージは、ユーザーレベルの KVM エミュレーターを提供し、ホストとゲスト仮想マシン間の通信を容易にします。
- qemu-img: このパッケージは、ゲスト仮想マシンのディスク管理を提供します。注記qemu-img パッケージは qemu-kvm パッケージの依存関係としてインストールされます。
- libvirt: このパッケージは、ハイパーバイザーおよびホストシステムと対話するためにサーバーおよびホスト側のライブラリーを提供し、ライブラリー呼び出しの処理、仮想マシンの管理およびハイパーバイザーの制御を行う
libvirtd
デーモンも提供します。
# yum install qemu-kvm libvirt
- virt-install: このパッケージは、コマンドラインから仮想マシンを作成するための virt-install コマンドを提供します。
- libvirt-python: このパッケージには、Python プログラミング言語で書かれているアプリケーションが libvirt API で提供されるインターフェイスを使用できるようにするモジュールが含まれています。
- virt-manager: このパッケージは、仮想マシンマネージャー と呼ばれる virt-manager ツールを提供します。これは、仮想マシンを管理するためのグラフィカルツールです。管理 API として libvirt-client ライブラリーを使用します。
- libvirt-client: このパッケージは、libvirt サーバーにアクセスするためのクライアント側の API とライブラリーを提供します。libvirt-client パッケージには、コマンドラインまたは特別な仮想化シェルから仮想マシンとハイパーバイザーを管理および制御する virsh コマンドラインツールが含まれます。
# yum install virt-install libvirt-python virt-manager virt-install libvirt-client
2.2.2. 仮想化パッケージグループのインストール
パッケージグループ | 説明 | 必須パッケージ | オプションパッケージ |
---|---|---|---|
Virtualization Hypervisor | 可能な限り最小の仮想化ホストのインストール | libvirt、qemu-kvm、qemu-img | qemu-kvm-tools |
Virtualization Client | 仮想化インスタンスのインストールおよび管理を行うクライアント | gnome-boxes、virt-install、virt-manager、virt-viewer、qemu-img | virt-top、libguestfs-tools、libguestfs-tools-c |
Virtualization Platform | 仮想マシンおよびコンテナーへのアクセスと制御を行うインターフェイスを提供します。 | libvirt、libvirt-client、virt-who、qemu-img | fence-virtd-libvirt、fence-virtd-multicast、fence-virtd-serial、libvirt-cim、libvirt-java、libvirt-snmp、perl-Sys-Virt |
Virtualization Tools | オフラインの仮想イメージ管理用ツール | libguestfs、qemu-img | libguestfs-java、libguestfs-tools、libguestfs-tools-c |
Virtualization Tools
パッケージグループのすべてのパッケージタイプをインストールするには、次のコマンドを実行します。
# yum group install "Virtualization Tools" --setopt=group_package_types=mandatory,default,optional
第3章 仮想マシンの作成
3.1. ゲスト仮想マシンのデプロイメントに関する考慮事項
- Performance
- ゲスト仮想マシンは、目的のタスクに基づいてデプロイおよび設定する必要があります。一部のゲストシステム (データベースサーバーを実行しているゲストなど) では、パフォーマンスに関する特別な考慮事項が必要になる場合があります。ゲストは、そのロールと、予測されるシステム負荷に基づいて、より多くの割り当てられた CPU またはメモリーを必要とする場合があります。
- 入出力の要件と入出力の種類
- ゲスト仮想マシンによっては、I/O 要件が特に高い場合や、I/O のタイプ (通常のディスクブロックサイズのアクセスやクライアント数など) に基づいて、さらに検討または予測が必要になる場合があります。
- ストレージ
- ゲスト仮想マシンによっては、ストレージまたは高速なディスクタイプへのより高い優先度のアクセスが必要な場合や、ストレージの領域への排他的アクセスが必要な場合があります。ゲストが使用するストレージの量も定期的に監視され、ストレージのデプロイメントおよびメンテナンスの際に考慮される必要があります。Red Hat Enterprise Linux 7 Virtualization Security Guide で説明されているすべての考慮事項を必ずお読みください。また、物理ストレージが仮想ストレージのオプションを制限する可能性があることを理解しておくことが重要です。
- ネットワークとネットワークインフラストラクチャー
- 使用環境によっては、ゲスト仮想マシンの中には、他のゲストよりも速いネットワークリンクが必要なものもあります。帯域幅または遅延は、特に要件や負荷の変更として、ゲストのデプロイメントおよびメンテナンスを行う際の要因となることがよくあります。
- 要件の要求
- virtio ドライブがディスク全体でバックアップされており、ディスクデバイスパラメーターが ドメイン XML ファイル で
lun
に設定されている場合は、virtio ドライブのゲスト仮想マシンにのみ SCSI 要求を発行できます。以下に例を示します。<devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='block' device='lun'>
3.2. virt-install を使用したゲストの作成
--name
- 仮想マシンの名前。
--memory
- ゲストに割り当てるメモリーの量 (MiB)。
- ゲストストレージ
- 次のいずれかのゲストストレージオプションを使用します。
--disk
仮想マシンのストレージ設定の詳細--disk none
オプションを使用すると、仮想マシンが作成されますが、ディスク領域はありません。--filesystem
仮想マシンゲストのファイルシステムのパス。
- インストール方法
- 次のいずれかのインストール方法を使用します。
--location
インストールメディアの場所。--cdrom
仮想 CD-ROM デバイスとして使用されるファイルまたはデバイス。これは、ISO イメージへのパス、または最小ブート ISO イメージをフェッチまたはアクセスするための URL にすることができます。ただし、物理ホストの CD-ROM または DVD-ROM デバイスは使用できません。--pxe
PXE 起動プロトコルを使用して、ゲストのインストールプロセスを開始する初期 ramdisk とカーネルを読み込みます。--import
OS のインストールプロセスをスキップし、既存のディスクイメージの周囲にゲストを構築します。起動に使用されるデバイスは、disk
またはfilesystem
オプションで指定された最初のデバイスです。--boot
インストール後の仮想マシンの起動設定このオプションにより、起動デバイスの順序を指定し、オプションのカーネル引数を指定して BIOS 起動メニューを有効にし、カーネルと initrd を永続的に起動できます。
# virt-install --help
# virt install --option=?
3.2.1. ISO イメージからの仮想マシンのインストール
# virt-install \ --name guest1-rhel7 \ --memory 2048 \ --vcpus 2 \ --disk size=8 \ --cdrom /path/to/rhel7.iso \ --os-variant rhel7
--cdrom /path/to/rhel7.iso
オプションは、指定した場所に CD または DVD イメージから仮想マシンをインストールすることを指定します。
3.2.2. 仮想マシンイメージのインポート
# virt-install \ --name guest1-rhel7 \ --memory 2048 \ --vcpus 2 \ --disk /path/to/imported/disk.qcow \ --import \ --os-variant rhel7
--import
オプションは、--disk /path/to/imported/disk.qcow
オプションで指定した仮想ディスクイメージから仮想マシンをインポートすることを指定します。
3.2.3. ネットワークからの仮想マシンのインストール
# virt-install \ --name guest1-rhel7 \ --memory 2048 \ --vcpus 2 \ --disk size=8 \ --location http://example.com/path/to/os \ --os-variant rhel7
--location http://example.com/path/to/os
オプションは、インストールツリーが指定したネットワークロケーションにあることを指定します。
3.2.4. PXE を使用した仮想マシンのインストール
--network
オプションと、--pxe
オプションの両方を指定する必要があります。
# virt-install \ --name guest1-rhel7 \ --memory 2048 \ --vcpus 2 \ --disk size=8 \ --network=bridge:br0 \ --pxe \ --os-variant rhel7
3.2.5. キックスタートを使用した仮想マシンのインストール
# virt-install \ --name guest1-rhel7 \ --memory 2048 \ --vcpus 2 \ --disk size=8 \ --location http://example.com/path/to/os \ --os-variant rhel7 \ --initrd-inject /path/to/ks.cfg \ --extra-args="ks=file:/ks.cfg console=tty0 console=ttyS0,115200n8"
initrd-inject
オプションおよび extra-args
オプションでは、キックスターターファイルを使用して仮想マシンをインストールすることを指定します。
3.2.6. ゲストの作成時のゲスト仮想マシンネットワークの設定
NAT を使用したデフォルトネットワーク
libvirtd
のネットワークアドレス変換 (NAT) 仮想ネットワークスイッチを使用します。NAT の詳細は「libvirt を使用した NAT (ネットワークアドレス変換)」 を参照してください。
--network default
network
オプションを指定しない場合は、ゲスト仮想マシンが NAT を使用したデフォルトネットワークで設定されます。
DHCP によるブリッジネットワーク
--network br0
静的 IP アドレスを持つブリッジネットワーク
--network br0 \ --extra-args "ip=192.168.1.2::192.168.1.1:255.255.255.0:test.example.com:eth0:none"
ネットワークなし
--network=none
3.3. virt-manager を使用したゲストの作成
3.3.1. virt-manager インストールの概要
- ハイパーバイザーとインストールタイプの選択
- インストールメディアの場所と設定
- メモリーおよび CPU オプションの設定
- 仮想マシンのストレージの設定
- 仮想マシンの名前、ネットワーク、アーキテクチャー、およびその他のハードウェア設定の設定
3.3.2. virt-manager を使用した Red Hat Enterprise Linux 7 ゲストの作成
手順3.1 ローカルインストールメディアを使用した virt-manager での Red Hat Enterprise Linux 7 ゲスト仮想マシンの作成
オプション: 準備
仮想マシンのストレージ環境を準備します。ストレージの準備の詳細は、13章仮想マシン用のストレージの管理 を参照してください。重要ゲスト仮想マシンの保存には、さまざまなストレージタイプを使用できます。ただし、仮想マシンで移行機能を使用できるようにするには、ネットワークストレージに仮想マシンを作成する必要があります。Red Hat Enterprise Linux 7 には、少なくとも 1GB のストレージ領域が必要です。ただし、Red Hat Enterprise Linux 7 のインストールおよびこのガイドの手順には、Red Hat は、少なくとも 5GB のストレージ領域を使用することを推奨します。virt-manager を開き、ウィザードを起動します。
root で virt-manager コマンドを実行するか、Applications → System Tools → Virtual Machine Manager を開き、virt-manager を開きます。図3.1 Virtual Machine Manager ウィンドウ
必要に応じて、ハイパーバイザーを選択し、ボタンをクリックして、リモートハイパーバイザーを開きます。をクリックし、新しい仮想化ゲストウィザードを開始します。New VM ウィンドウが開きます。インストールタイプを指定します。
インストールタイプを選択します。- ローカルインストールメディア (ISO イメージまたは CDROM)
- この方法では、インストールディスクのイメージ (
.iso
など) を使用します。ただし、ホスト CD-ROM または DVD-ROM デバイスを使用することは、できません。 - ネットワークインストール (HTTP、FTP、または NFS)
- この方法では、ミラーリングした Red Hat Enterprise Linux または Fedora インストールツリーを使用してゲストをインストールします。インストールツリーには、HTTP、FTP、または NFS のいずれかを介してアクセスできる必要があります。Network Install を選択した場合は、インストール URL と、カーネルオプション (必要な場合) を指定します。
- ネットワーク起動 (PXE)
- この方法では、PXE (Preboot eXecution Environment) サーバーを使用して、ゲスト仮想マシンをインストールします。PXE サーバーの設定については、『Red Hat Enterprise Linux 7 Installation Guide』 で説明されています。ネットワークブートを使用してインストールするには、ゲストに、ルーティング可能な IP アドレスまたは共有ネットワークデバイスが必要です。Network Boot を選択した場合は、手順 5 に進みます。すべての手順が完了すると、DHCP 要求が送信され、有効な PXE サーバーが見つかると、ゲスト仮想マシンのインストールプロセスが開始します。
- 既存のディスクイメージのインポート
- この方法を使用すると、新しいゲスト仮想マシンを作成し、(インストール済みの起動可能なオペレーティングシステムを含む) ディスクイメージを読み込むことができます。
図3.2 仮想マシンのインストール方法
インストールソースを選択します。
- Local install media (ISO image or CDROM) を選択した場合は、目的のローカルインストールメディアを指定します。
図3.3 ローカル ISO イメージのインストール
警告このオプションは、現在 GUI にありますが、ホストの物理 CD-ROM または DVD デバイスからインストールすることはできません。そのため、Use CDROM or DVD オプションを選択すると、仮想マシンのインストールに失敗します。詳しくは、Red Hat ナレッジベースを参照してください。ISO イメージからインストールする場合は、Use ISO image を選択し、 ボタンをクリックして、Locate media volume ウィンドウを開きます。使用するインストールイメージを選択し、をクリックします。Locate media volume ウィンドウにイメージが表示されない場合は、 ボタンをクリックして、インストールイメージがあるホストマシン、またはインストールディスクが含まれる DVD ドライブを参照します。インストールディスクが含まれるインストールイメージまたは DVD ドライブを選択し、 をクリックします。使用するボリュームが選択され、Create a new virtual machine ウィザードに戻ります。重要ISO イメージファイルおよびゲストストレージイメージの場合、推奨される使用場所は/var/lib/libvirt/images/
です。それ以外の場所では、SELinux による追加の設定が必要になる場合があります。SELinux の設定方法の詳細は、Red Hat Enterprise Linux Virtualization Security Guide または Red Hat Enterprise Linux SELinux User's and Administrator's Guide を参照してください。 Network Install
を選択した場合は、インストールソースの URL と、必要なカーネルオプション (存在する場合) を入力します。URL は、インストールツリーの root ディレクトリーを指している必要があります。このディレクトリーは、HTTP、FTP、または NFS のいずれかを介してアクセスできなければなりません。キックスタートインストールを実行するには、カーネルオプションでks=
から始まるキックスタートファイルの URL を指定します。図3.4 ネットワークキックスタートインストール
注記カーネルオプションのリストは、 Red Hat Enterprise Linux 7 Installation Guide を参照してください。
次に、インストールの Automatically detect operating system based on install media チェックボックスを選択して指定することができます。と を設定します。仮想マシンに適したオペレーティングシステムの種類を選択していることを確認します。これは、手動で指定するか、メモリー (RAM) および仮想 CPU の設定
仮想マシンに割り当てる CPU の数とメモリー量 (RAM) を指定します。ウィザードには、割り当てることができる CPU の数とメモリーの量が表示されます。この値は、ホストのパフォーマンスやゲストのパフォーマンスに影響を及ぼします。仮想マシンを効率的かつ効果的に実行するには、十分な物理メモリー (RAM) が必要です。Red Hat は、仮想マシンに 512MB 以上の RAM をサポートします。Red Hat では、各論理コアに 1024MB 以上の RAM を使用することを推奨しています。仮想マシンに十分な仮想 CPU を割り当てます。仮想マシンでマルチスレッドアプリケーションを実行している場合は、ゲスト仮想マシンが効率的に実行するために必要な仮想 CPU の数を割り当てます。ホストシステムで利用可能な物理プロセッサー (またはハイパースレッド) よりも多くの仮想 CPU を割り当てることはできません。利用可能な仮想 CPU の数は、Up to X available フィールドに記載されています。図3.5 メモリーおよび CPU の設定
メモリーと CPU の設定が完了したら、をクリックして続行します。注記メモリーおよび仮想 CPU はオーバーコミットできます。オーバーコミットの詳細は、7章KVM でのオーバーコミット を参照してください。ストレージを設定します。
仮想マシンおよび必要なアプリケーションに十分な領域を有効にして割り当てます。デスクトップインストールの場合は 5GB 以上、最小インストールの場合は 1GB 以上を割り当てます。図3.6 仮想ストレージの設定
注記ライブおよびオフラインの移行では、仮想マシンを共有ネットワークストレージにインストールする必要があります。仮想マシンの共有ストレージの設定方法は、「共有ストレージの例: 単純な移行のための NFS」 を参照してください。デフォルトのローカルストレージの場合
Create a disk image on the computer's hard drive のラジオボタンを選択して、デフォルトストレージプールの/var/lib/libvirt/images/
ディレクトリーにファイルベースのイメージを作成します。作成するディスクイメージのサイズを入力します。Allocate entire disk now チェックボックスを選択すると、指定したサイズのディスクイメージが即座に作成されます。そうでない場合、ディスクイメージはいっぱいになると大きくなります。注記ストレージプールは仮想コンテナーですが、次の 2 つの要因で制限されます。つまり、qemu-kvm が許可する最大サイズと、ホストの物理マシンのディスクのサイズです。ストレージプールは、ホストの物理マシン上のディスクのサイズを超えてはなりません。最大サイズは、以下のとおりです。- virtio-blk = 2^63 バイトまたは 8 エクサバイト (raw ファイルまたはディスクを使用)
- Ext4 = ~ 16TB (4KB のブロックサイズを使用)
- XFS = ~8 エクサバイト
- qcow2 およびホストのファイルシステムでは、非常に大きなイメージサイズを試行する際に、独自のメタデータとスケーラビリティーを評価/調整する必要があります。raw ディスクを使用すると、スケーラビリティーまたは最大サイズに影響を与えるレイヤーが減ります。
Select managed or other existing storage を選択し、Browse を選択して管理ストレージを設定します。を選択して、ローカルハードドライブにディスクイメージを作成します。または、ストレージプールを使用する場合
Select managed or other existing storage を選択してストレージプールを使用する場合は、Browse をクリックして Locate or create storage volume ウィンドウを開きます。図3.7 Choose Storage Volume ウィンドウ
- Storage Pools リストからストレージプールを選択します。
- オプション: をクリックして、新しいストレージボリュームを作成します。Add a Storage Volume のスクリーンが表示されます。新しいストレージボリュームの名前を入力します。Format ドロップダウンメニューから形式オプションを選択します。形式のオプションには、raw、qcow2、 および qedなどがあります。必要に応じてその他のフィールドを調整します。ここで使用される qcow2 バージョンはバージョン 3 であることに注意してください。qcow バージョンを変更するには、「target 要素の設定」 を参照してください。
図3.8 Add a Storage Volume ウィンドウ
新しいボリュームを選択し、New VM ウィザードに戻ります。 をクリックして続けます。をクリックします。次に、 をクリックして、名前を付けて最終設定を行います。
仮想マシンに名前を付けます。仮想マシン名には、文字、数字、およびアンダースコア (_
)、ピリオド (.
)、およびハイフン (-
) を含めることができます。仮想マシンを移行するには、仮想マシンの名前は一意でなければならず、数字のみの名前は使用できません。デフォルトで、仮想マシンは 'default' というネットワークの Network Address Translation (NAT) を使用して作成されます。ネットワークの選択を変更するには、Network selection
をクリックしてホストデバイスとソースモードを選択します。仮想マシンの設定を確認し、必要に応じてをクリックします。指定したネットワーク設定、仮想化の種類、およびアーキテクチャーを持つ仮想マシンが作成されます。図3.9 設定の確認
あるいは、仮想マシンのハードウェアをさらに設定する場合は、のチェックボックスにチェックを入れ、ゲストのストレージまたはネットワークデバイスを変更するか、準仮想化 (virtio) ドライバーを使用するか、デバイスを追加します。これにより、別のウィザードが開き、仮想マシンのハードウェア設定の追加、削除、および設定ができるようになります。注記Red Hat Enterprise Linux 4 または Red Hat Enterprise Linux 5 のゲスト仮想マシンは、グラフィカルモードではインストールできません。このため、ビデオカードとして、QXL ではなく Cirrus を選択する必要があります。仮想マシンのハードウェアを設定したら、virt-manager は、指定されたハードウェア設定で仮想マシンを作成します。をクリックします。続いて、 をクリックして、Red Hat Enterprise Linux インストールシーケンスに進みます。Red Hat Enterprise Linux 7 のインストール方法の詳細は、警告リモートメディアから、TCP/IP 接続を設定せずに Red Hat Enterprise Linux 7 ゲスト仮想マシンをインストールすると、インストールに失敗します。ただし、このような状況で Red Hat Enterprise Linux 5 または 6 のゲスト仮想マシンをインストールすると、インストーラーは "Configure TCP/IP" のインターフェイスを開きます。この相違点の詳細は、the related knowledgebase article を参照してください。
3.4. virt-install インストールオプションと virt-manager インストールオプションの比較
--name
、--memory
、guest storage (--disk
、--filesystem
または --disk none
)、およびインストールメソッド (--location
、--cdrom
、--pxe
、--import
、または boot
) です。これらのオプションは、引数でさらに指定されます。コマンドオプションと関連する引数の完全なリストを表示するには、次のコマンドを入力します。
# virt-install --help
仮想マシンでの設定 | virt-install オプション | virt-manager インストールウィザードのラベルと手順番号 |
---|---|---|
Virtual machine name | --name、-n | 名前 (手順 5) |
割り当てる RAM (MiB) | --ram, -r | メモリー (RAM) (手順 3) |
ストレージ - ストレージメディアを指定 | --disk | この仮想マシンのストレージを有効にする → コンピューターのハードドライブにディスクイメージを作成するか、マネージドまたはその他の既存のストレージを選択します (手順 4) |
ストレージ - ホストディレクトリーをゲストにエクスポートします。 | --filesystem | この仮想マシンでストレージを有効にする → マネージドストレージまたはその他の既存ストレージを選択します (手順 4) |
ストレージ - ゲストにローカルディスクストレージを設定しません。 | --nodisks | この仮想マシンのストレージを有効にするチェックボックスの選択を解除します (手順 4)。 |
インストールメディアの場所 (ローカルインストール) | --file | ローカルインストールメディア → インストールメディアの場所 (手順 1-2) |
配布ツリーを使用したインストール (ネットワークインストール) | --location | ネットワークインストール → URL (手順 1-2) |
PXE を使用したゲストのインストール | --pxe | ネットワークブート (手順 1) |
vCPU の数 | --vcpus | CPU (手順 3) |
ホストネットワーク | --network | 高度なオプションドロップダウンメニュー (手順 5) |
オペレーティングシステムのバリアント/バージョン | --os-variant | バージョン (手順 2) |
グラフィカル表示の方法 | --graphics、--nographics | * virt-manager は、GUI インストールのみを提供します。 |
第4章 仮想マシンのクローン作成
- クローン は、1 台の仮想マシンのインスタンスです。クローンを使用すると、同じ仮想マシンのネットワークを設定したり、別の宛先に配布したりできます。
- テンプレート は、クローン作成のソースとして使用するように設計された仮想マシンのインスタンスです。テンプレートから複数のクローンを作成し、各クローンにマイナーな変更を加えることができます。これは、この変更がシステムに与える影響を確認する際に役立ちます。
- プラットフォームレベルの情報および設定には、仮想化ソリューションが仮想マシンに割り当てたものが含まれます。例には、ネットワークインターフェイスカード (NIC) の数と、その MAC アドレスが含まれます。
- ゲストオペレーティングシステムレベル情報および設定には、仮想マシン内で設定されたものが含まれます。例には SSH 鍵が含まれます。
- アプリケーションレベル の情報および設定には、仮想マシンにインストールされているアプリケーションで設定したものが含まれます。例には、アクティベーションコードおよび登録情報が含まれます。注記情報およびアプローチは各アプリケーションに固有のものであるため、本章には、アプリケーションレベルの削除に関する情報は記載されていません。
4.1. クローンを作成する仮想マシンの準備
手順4.1 クローンを作成する仮想マシンの準備
仮想マシンのセットアップ
- クローンまたはテンプレートに使用する仮想マシンを構築します。
- クローンに必要なソフトウェアをインストールします。
- オペレーティングシステムに一意でない設定を設定します。
- 固有でないアプリケーション設定を設定します。
ネットワーク設定を削除します。
- 以下のコマンドを使用して、永続的な udev ルールを削除します。
# rm -f /etc/udev/rules.d/70-persistent-net.rules
注記udev ルールを削除しない場合は、最初の NIC の名前が eth0 ではなく eth1 になります。 /etc/sysconfig/network-scripts/ifcfg-eth[x]
で以下の編集を行い、ifcfg スクリプトから一意のネットワークの詳細を削除します。- HWADDR 行および Static 行を削除します。注記HWADDR が新しいゲストの MAC アドレスと一致しない場合、ifcfg は無視されます。したがって、ファイルから HWADDR を削除することが重要です。
DEVICE=eth[x] BOOTPROTO=none ONBOOT=yes #NETWORK=10.0.1.0 <- REMOVE #NETMASK=255.255.255.0 <- REMOVE #IPADDR=10.0.1.20 <- REMOVE #HWADDR=xx:xx:xx:xx:xx <- REMOVE #USERCTL=no <- REMOVE # Remove any other *unique* or non-desired settings, such as UUID.
- HWADDR または一意の情報が含まれていない DHCP 設定が残っていることを確認します。
DEVICE=eth[x] BOOTPROTO=dhcp ONBOOT=yes
- ファイルに以下の行が含まれていることを確認します。
DEVICE=eth[x] ONBOOT=yes
- 以下のファイルが存在する場合は、そのファイルに同じ内容が含まれていることを確認してください。
/etc/sysconfig/networking/devices/ifcfg-eth[x]
/etc/sysconfig/networking/profiles/default/ifcfg-eth[x]
注記NetworkManager または特殊な設定を仮想マシンで使用した場合は、追加の固有情報が ifcfg スクリプトから削除されていることを確認してください。
登録の詳細を削除します。
- 以下のいずれかを使用して、登録の詳細を削除します。
- Red Hat Network (RHN) の登録済みゲスト仮想マシンの場合は、次のコマンドを使用します。
# rm /etc/sysconfig/rhn/systemid
- Red Hat Subscription Manager (RHSM) の登録済みゲスト仮想マシンの場合は、次のコマンドを使用します。
- 元の仮想マシンを使用しない場合は、次のコマンドを使用します。
# subscription-manager unsubscribe --all # subscription-manager unregister # subscription-manager clean
- 元の仮想マシンを使用する場合は、次のコマンドのみを実行します。
# subscription-manager clean
元の RHSM プロファイルはポータルに残ります。クローン作成後に仮想マシンで RHSM 登録を再アクティベートするには、次の手順を行います。- カスタマー ID コードを取得します。
# subscription-manager identity subscription-manager identity: 71rd64fx-6216-4409-bf3a-e4b7c7bd8ac9
- 取得した ID コードを使用して仮想マシンを登録します。
# subscription-manager register --consumerid=71rd64fx-6216-4409-bf3a-e4b7c7bd8ac9
その他の固有の詳細の削除
- 次のコマンドを使用して、sshd の公開鍵と秘密鍵のペアを削除します。
# rm -rf /etc/ssh/ssh_host_*
注記ssh キーを削除すると、このホストを信頼しない ssh クライアントの問題が回避されます。 - 複数のマシンで実行している場合に、競合する可能性があるその他のアプリケーション固有の識別子や設定を削除します。
次回のシステムの起動時に設定ウィザードを実行するように仮想マシンを設定します。
- 以下のいずれかの方法で、仮想マシンを次回起動したときに、関連する設定ウィザードが実行されるように設定します。
- Red Hat Enterprise Linux 6 以前の場合は、以下のコマンドを使用して、root ファイルシステムに .unconfigured という名前の空のファイルを作成します。
# touch /.unconfigured
- Red Hat Enterprise Linux 7 の場合は、次のコマンドを実行して、最初の起動ウィザードおよび初期設定ウィザードを有効にします。
# sed -ie 's/RUN_FIRSTBOOT=NO/RUN_FIRSTBOOT=YES/' /etc/sysconfig/firstboot # systemctl enable firstboot-graphical # systemctl enable initial-setup-graphical
注記次回の起動時に実行するウィザードは、仮想マシンから削除された設定によって異なります。また、クローンの初回起動時には、ホスト名を変更することが推奨されます。
4.2. 仮想マシンのクローン作成
4.2.1. virt-clone を使用したゲストのクローン作成
--orginal
のみが必要です。オプションのリストを表示するには、次のコマンドを実行します。
# virt-clone --help
例4.1 virt-clone を使用したゲストのクローン作成
# virt-clone --original demo --auto-clone
例4.2 virt-clone を使用したゲストのクローン作成
# virt-clone --connect qemu:///system --original demo --name newdemo --file /var/lib/libvirt/images/newdemo.img --file /var/lib/libvirt/images/newdata.img
4.2.2. virt-manager を使用したゲストのクローン作成
手順4.2 virt-manager を使用した仮想マシンのクローンの作成
virt-manager を開く
virt-manager を起動します。 メニューおよび サブメニューから アプリケーションを起動します。または、root で virt-manager を実行します。Virtual Machine Manager にあるゲスト仮想マシンのリストから、クローンを作成するゲスト仮想マシンを選択します。クローンを作成するゲスト仮想マシンを右クリックし、を選択します。Clone Virtual Machine ウィンドウが開きます。図4.1 Clone Virtual Machine ウィンドウ
クローンの設定
- クローンの名前を変更する場合は、クローンの新しい名前を入力します。
- ネットワーク設定を変更する場合は、Details を選択します。クローンの新しい MAC アドレスを入力します。OK をクリックします。
図4.2 Change MAC Address ウィンドウ
- クローンを作成したゲスト仮想マシンのディスクごとに、次のいずれかのオプションを選択します。
Clone this disk
- ディスクは、クローンとして作成されたゲスト仮想マシンのクローンとして作成されます。Share disk with guest virtual machine name
- ディスクは、クローンを作成されるゲスト仮想マシンとそのクローンで共有されます。Details
- ストレージパスの変更 画面を開きます。これにより、ディスクへの新しいパスの選択が可能になります。図4.3 Change
storage path
ウィンドウ
ゲスト仮想マシンのクローンを作成する
Clone をクリックします。
第5章 KVM 準仮想化 (virtio) ドライバー
virtio
パッケージに同梱されています。virtio パッケージは、ブロック (ストレージ) デバイスおよびネットワークインターフェイスコントローラーに対応しています。
5.1. 既存のストレージデバイスへの KVM virtio ドライバーの使用
virtio
ドライバーを使用できます。このセクションの例では、libvirt 設定ファイルを編集します。これらの手順を実行するためにゲスト仮想マシンをシャットダウンする必要はありませんが、ゲストが完全にシャットダウンされて再起動されるまで、変更は適用されないことに注意してください。
手順5.1 既存のデバイスへの KVM virtio ドライバーの使用
- この手順を続行する前に、適切なドライバー (
viostor
) がインストールされていることを確認してください。 - root で virsh edit guestname コマンドを実行し、使用しているデバイスの XML 設定ファイルを編集します。たとえば、virsh edit guest1 です。設定ファイルは、
/etc/libvirt/qemu/
ディレクトリーにあります。 - 以下は、仮想化 IDE ドライバーを使用したファイルベースのブロックデバイスです。これは、virtio ドライバーを使用しない仮想マシンの一般的なエントリーです。
<disk type='file' device='disk'> ... <source file='/var/lib/libvirt/images/disk1.img'/> <target dev='hda' bus='ide'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </disk>
- bus= エントリーを virtio に変更して、virtio デバイスを使用するエントリーを変更します。ディスクが以前 IDE だった場合は、
hda
、hdb
、またはhdc
のようなターゲットがあることに注意してください。bus=virtio に変更する場合は、それに応じてターゲットをvda
、vdb
、またはvdc
に変更する必要があります。<disk type='file' device='disk'> ... <source file='/var/lib/libvirt/images/disk1.img'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </disk>
- ディスク タグ内の アドレス タグを削除します。これは、この手順が機能するために必ず行う必要があります。libvirt は、仮想マシンが次に起動したときに、アドレス タグを適切に再生成します。
5.2. 新しいストレージデバイス用に KVM virtio ドライバーを使用する
手順5.2 virtio ストレージドライバーを使用したストレージデバイスの追加
- virt-manager でゲストの名前をダブルクリックして、ゲスト仮想マシンを開きます。
- をクリックして、Show virtual hardware details タブを開きます。
- Show virtual hardware details タブで、Add Hardware ボタンをクリックします。
ハードウェアタイプの選択
Hardware typeとして Storage を選択します。図5.1 Add new virtual hardware ウィザード
ストレージデバイスとドライバーを選択します。
新しいディスクイメージを作成するか、ストレージプールボリュームを選択します。Device type を Disk device に設定し、 Bus type を VirtIO に設定して、virtio ドライバーを使用します。図5.2 Add new virtual hardware ウィザード
Finish をクリックして手順を完了します。
手順5.3 virtio ネットワークドライバーを使用したネットワークデバイスの追加
- virt-manager でゲストの名前をダブルクリックして、ゲスト仮想マシンを開きます。
- をクリックして、Show virtual hardware details タブを開きます。
- Show virtual hardware details タブで、Add Hardware ボタンをクリックします。
ハードウェアタイプの選択
Hardware type として Network を選択します。図5.3 Add new virtual hardware ウィザード
ネットワークデバイスとドライバーを選択します。
Device model を virtio に設定して、virtio ドライバーを使用します。必要な Host device を選択します。図5.4 Add new virtual hardware ウィザード
Finish をクリックして手順を完了します。
5.3. ネットワークインターフェイスデバイス用の KVM virtio ドライバーの使用
- または、virt-manager インターフェイスで、ゲストの Virtual hardware details 画面に移動し、 をクリックします。Add New Virtual Hardware 画面で Network を選択し、Device model を
virtio
に変更します。 - 既存インターフェイスのタイプを virtio に変更するするには、virsh edit コマンドを使用して、目的のゲストの XML 設定を変更し、
model type
属性をvirtio
に変更します。以下に例を示します。<devices> <interface type='network'> <source network='default'/> <target dev='vnet1'/> <model type='virtio'/> <driver name='vhost' txmode='iothread' ioeventfd='on' event_idx='off'/> </interface> </devices> ...
または、virt-manager インターフェイスで、ゲストの Virtual hardware details 画面に移動し、NIC
アイテムを選択して、Device model をvirtio
に変更します。
virtio-net
) であることを確認してください。詳細は、Red Hat ナレッジベースを参照してください。
第6章 Network Configuration
- ネットワークアドレス変換 (NAT) を使用した仮想ネットワーク
- PCI デバイスの割り当てを使用して直接割り当てた物理デバイス
- PCIe SR-IOV を使用して直接割り当てられた仮想機能
- ブリッジネットワーク
6.1. libvirt を使用した NAT (ネットワークアドレス変換)
ホストの設定
すべての標準的なlibvirt
インストールでは、デフォルトの仮想ネットワークとして、仮想マシンに NAT ベースの接続が提供されます。virsh net-list --all コマンドで使用できることを確認します。
# virsh net-list --all
Name State Autostart
-----------------------------------------
default active yes
# ll /etc/libvirt/qemu/
total 12
drwx------. 3 root root 4096 Nov 7 23:02 networks
-rw-------. 1 root root 2205 Nov 20 01:20 r6.4.xml
-rw-------. 1 root root 2208 Nov 8 03:19 r6.xml
/etc/libvirt/qemu/networks/default.xml
から定義されます。
# virsh net-autostart default
Network default marked as autostarted
# virsh net-start default
Network default started
libvirt
のデフォルトネットワークが実行すると、分離されたブリッジデバイスが表示されます。このデバイスには、物理インターフェイスが追加されていません。新しいデバイスは、NAT および IP 転送を使用して物理ネットワークに接続します。新規インターフェイスを追加しないでください。
# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.000000000000 yes
virbr0
デバイスにアタッチされたゲスト仮想マシンとの間のトラフィックを許可する iptables ルールを追加します。次に、libvirt は ip_forward パラメーターを有効にしようとします。他のアプリケーションではip_forward が無効になる場合があるため、最善の選択肢は、以下を /etc/sysctl.conf
に追加することです。
net.ipv4.ip_forward = 1
ゲスト仮想マシンの設定
ホストの設定が完了したら、ゲスト仮想マシンは、その名前を基にして仮想ネットワークに接続できます。ゲストを 'default' の仮想ネットワークに接続するには、ゲストの XML 設定ファイル (/etc/libvirtd/qemu/myguest.xml
など) で以下を使用できます。
<interface type='network'> <source network='default'/> </interface>
<interface type='network'> <source network='default'/> <mac address='00:16:3e:1a:b3:4a'/> </interface>
6.2. vhost-net の無効化
vhost-net
ドライバー) に virtio パケット処理タスクを移動することで仮想化オーバーヘッドを低減します。vhost-net は virtio ネットワークインターフェイスでのみ利用できます。vhost-net カーネルモジュールが読み込まれていると、すべての virtio インターフェイスでデフォルトで有効になりますが、vhost-net の使用時に特定のワークロードでパフォーマンスが低下する場合は、インターフェイス設定で無効にできます。
<interface>
サブ要素を変更し、次のようにネットワークを定義します。
<interface type="network"> ... <model type="virtio"/> <driver name="qemu"/> ... </interface>
qemu
に設定すると、パケット処理が QEMU ユーザー空間に強制され、そのインターフェイスの vhost-net を事実上無効にします。
6.3. vhost-net のゼロコピーの有効化
/etc/modprobe.d
に新しいファイルvhost-net.conf
を追加します。
options vhost_net experimental_zcopytx=1
modprobe -r vhost_net
modprobe vhost_net experimental_zcopytx=0
$ cat /sys/module/vhost_net/parameters/experimental_zcopytx
0
6.4. ブリッジネットワーク
6.4.1. Red Hat Enterprise Linux 7 ホストでのブリッジネットワークの設定
6.4.2. Virtual Machine Manager を使用したブリッジネットワーク
手順6.1 virt-manager を使用したブリッジの作成
- virt-manager のメインメニューで、 をクリックして、Connection Details ウィンドウを開きます。
- 画面下部のをクリックして、新しいネットワークインターフェイスを設定します。
図6.1 ブリッジの追加
- ドロップダウンメニューから、を選択します。以下のいずれかを選択します。
- none - ブリッジを非アクティブにします。
- onboot - 次回のゲスト仮想マシンの再起動時にブリッジをアクティブにします。
- hotplug - ゲストの仮想マシンが実行中であっても、ブリッジをアクティブにします。
- すぐにブリッジを有効にするには、のチェックボックスを選択します。
- 仮想マシンに接続する物理インターフェイスを選択します。 インターフェイスが現在別のゲスト仮想マシンで使用されている場合は、警告メッセージが表示されます。
図6.2 ブリッジの追加
6.4.3. libvirt を使用したブリッジネットワーク
<bridge>
要素の macTableManager
属性を 'libvirt'
に設定します。
<bridge name='br0' macTableManager='libvirt'/>これにより、すべてのブリッジポートでラーニング (flood) モードが無効になり、libvirt は必要に応じて FDB にエントリーを追加または削除します。MAC アドレス用の適切なフォワーディングポートを学習するオーバーヘッドを取り除くとともに、これにより、カーネルはブリッジをネットワークに接続する物理デバイスで無差別モードを無効にし、オーバーヘッドをさらに削減できます。
第7章 KVM でのオーバーコミット
7.1. 導入部分
7.2. メモリーのオーバーコミット
7.3. 仮想 CPU のオーバーコミット
第8章 KVM ゲストのタイミング管理
- 割り込みは、すべてのゲスト仮想マシンに常に同時に瞬時に配信されるとは限りません。これは、仮想マシンの割り込みは真の割り込みではないためです。代わりに、ホストマシンによりゲスト仮想マシンに挿入されます。
- ホストは、別のゲスト仮想マシンを実行している場合や、別のプロセスの場合があります。したがって、割り込みにより通常必要とされる正確なタイミングは、常に可能となるとは限りません。
ntpd
サービスにより実装されます。詳細は、Red Hat Enterprise 6 Deployment Guide を参照してください。
ntpd
または chronyd
サービスによって提供できます。Chrony には、仮想マシンに利点があることに注意してください。詳細は、Red Hat Enterprise Linux 7 System Administrator's Guide の Configuring NTP Using the chrony Suite および Configuring NTP Using ntpd セクションを参照してください。
ゲスト仮想マシンの時間同期のメカニズム
デフォルトでは、ゲストは次のようにハイパーバイザーと時刻を同期します。
- ゲストシステムの起動時に、ゲストはエミュレートリアルタイムクロック (RTC) から時間を読み取ります。
- NTP プロトコルが開始すると、ゲストクロックが自動的に同期します。その後、通常のゲスト操作時に、NTP はゲストでクロック調整を実行します。
- 一時停止または復元プロセス後にゲストを再開する場合は、管理ソフトウェアー (virt-manager など) がゲストのクロックを指定した値に同期させるコマンドを実行する必要があります。この同期は、QEMU ゲストエージェントがゲストにインストールされており、この機能に対応している場合にのみ機能します。ゲストのクロックが同期する値は、通常、ホストのクロック値です。
Constant タイムスタンプカウンター (TSC)
最新の Intel および AMD の CPU では、Constant TSC (Time Stamp Counter) が提供されます。消費電力ポリシーに従うなど、CPU コア自体の周波数が変更しても、Constant TSC のカウント周波数は変化しません。TSC を KVM ゲストのクロックソースとして使用するには、Constant TSC 周波数の CPU が必要です。
constant_tsc
フラグが存在する場合、CPU には一定のタイムスタンプカウンターがあります。CPU に constant_tsc
フラグがあるかどうかを確認するには、次のコマンドを実行します。
$ cat /proc/cpuinfo | grep constant_tsc
constant_tsc
ビットがあります。出力が表示されない場合は、以下の手順に従ってください。
Constant タイムスタンプカウンターを使用しないホストの設定
TSC の周波数が一定でないシステムは、仮想マシンのクロックソースとして TSC を使用できないため、追加の設定が必要になります。電源管理機能は正確な時間管理を妨げるため、ゲスト仮想マシンが KVM で時間を正確に保持するには、無効にする必要があります。
constant_tsc
ビットがない場合は、 で省電力機能をすべて無効にしてください。各システムには、時間を維持するために使用するいくつかのタイマーがあります。TSC はホストで安定していません。これは、cpufreqの変更、ディープ C ステート、またはより高速な TSC を使用したホストへの移行が原因である場合があります。ディープ C のスリープ状態は、TSC を停止する可能性があります。 ディープ C 状態を使用するカーネルを防ぐには、processor.max_cstate=1 をカーネルブートに追加します。この変更を永続化するには、/etc/default/grub
file で GRUB_CMDLINE_LINUX キーの値を変更します。たとえば、システムの起動ごとに緊急モードを有効にする場合は、以下のようにエントリーを編集します。
GRUB_CMDLINE_LINUX="emergency"
cpupower.service
(systemctl enable cpupower.service) を有効にします。ゲスト仮想マシンが起動するたびにこのサービスを無効にする場合は、/etc/sysconfig/cpupower
の設定ファイルを変更して CPUPOWER_START_OPTS および CPUPOWER_STOP_OPTS を変更します。有効な制限は、/sys/devices/system/cpu/cpuid/cpufreq/scaling_available_governors
ファイルに記載されています。このパッケージの詳細、または電源管理およびガバナーの詳細は、『Red Hat Enterprise Linux 7 Power Management Guide』 を参照してください。
8.1. ホスト全体の時間同期
- 再起動後に読み込む
ptp_kvm
モジュールを設定します。# echo ptp_kvm > /etc/modules-load.d/ptp_kvm.conf
/dev/ptp0
クロックを chrony 設定のリファレンスとして追加します。# echo "refclock PHC /dev/ptp0 poll 2" >> /etc/chrony.conf
- chrony デーモンを再起動します。
# systemctl restart chronyd
- host-guest の時刻同期が正しく設定されていることを確認するには、ゲストで chronyc sources コマンドを使用します。この出力は、以下のようになります。
# chronyc sources 210 Number of sources = 1 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== #* PHC0 0 2 377 4 -6ns[ -6ns] +/- 726ns
8.2. Red Hat Enterprise Linux ゲストに必要な時間管理パラメーター
/etc/grub2.cfg
ファイルの /kernel
行の末尾に追加することで設定できます。
Red Hat Enterprise Linux のバージョン | ゲストカーネルの追加パラメーター |
---|---|
7.0 以降 (AMD64 および Intel 64 システム、kvm-clock 使用) | 追加のパラメーターは必要ありません。 |
6.1 以降 (AMD64 および Intel 64 システム、kvm-clock 使用) | 追加のパラメーターは必要ありません。 |
6.0 (AMD64 および Intel 64 システム、kvm-clock 使用) | 追加のパラメーターは必要ありません。 |
6.0 (AMD64 および Intel 64 システム、kvm-clock 使用せず) | notsc lpj=n |
lpj
パラメーターでは、ゲスト仮想マシンを実行している特定の CPU の jiffy あたりのループ数 値と同じ数値が必要です。この値がわからない場合は、lpj
パラメーターを設定しないでください。
8.3. スチールタイムアカウンティング
/proc/stat
の CPU 時間フィールドで報告されます。これは、top および vmstat などのユーティリティーにより自動的に報告されます。これは、"%st" または "st" 列で表示されます。これは、オフにできないことに注意してください。
第9章 libvirt でのネットワークブート
9.1. ブートサーバーの準備
- PXE サーバー (DHCP および TFTP) - libvirt の内部サーバー、手動で設定した dhcpd および tftpd、dnsmasq、Cobbler が設定したサーバー、またはその他のサーバーを指します。
- ブートイメージ - たとえば、手動または Cobbler で設定した PXELINUX。
9.1.1. プライベートの libvirt ネットワークに PXE ブートサーバーを設定する
手順9.1 PXE ブートサーバーの設定
- PXE ブートイメージおよび設定を
/var/lib/tftpboot
に置きます。 - 以下のコマンドを実行します。
# virsh net-destroy default # virsh net-edit default
- デフォルト ネットワークの設定ファイルの
<ip>
要素を編集して、適切なアドレス、ネットワークマスク、DHCP アドレス範囲、および起動ファイルを追加します。BOOT_FILENAME は、ゲスト仮想マシンの起動に使用するファイル名を表します。<ip address='192.168.122.1' netmask='255.255.255.0'> <tftp root='/var/lib/tftpboot' /> <dhcp> <range start='192.168.122.2' end='192.168.122.254' /> <bootp file='BOOT_FILENAME' /> </dhcp> </ip>
- 以下を実行します。
# virsh net-start default
- PXE を使用してゲストを起動します (「PXE を使用したゲストの起動」 を参照)。
9.2. PXE を使用したゲストの起動
9.2.1. ブリッジネットワークの使用
手順9.2 PXE およびブリッジネットワークを使用したゲストの起動
- ネットワークで PXE ブートサーバーが使用できるように、ブリッジが有効になっていることを確認します。
- PXE 起動が有効になっているゲスト仮想マシンを起動します。以下のコマンド例に示すように、virt-install コマンドを使用して、PXE ブートが有効になっている新しい仮想マシンを作成できます。
virt-install --pxe --network bridge=breth0 --prompt
または、以下の例のように、ゲストネットワークがブリッジネットワークを使用するように設定されており、XML ゲスト設定ファイルの<os>
要素内に<boot dev='network'/>
要素があることを確認します。<os> <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type> <boot dev='network'/> <boot dev='hd'/> </os> <interface type='bridge'> <mac address='52:54:00:5a:ad:cb'/> <source bridge='breth0'/> <target dev='vnet0'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface>
9.2.2. プライベートの libvirt ネットワークの使用
手順9.3 プライベートの libvirt ネットワークの使用
- 「プライベートの libvirt ネットワークに PXE ブートサーバーを設定する」 に示すように、libvirt で PXE ブートを設定します。
- PXE 起動を有効にして libvirt を使用してゲスト仮想マシンを起動します。virt-install コマンドを使用して、PXE を使用して新しい仮想マシンを作成/インストールできます。
virt-install --pxe --network network=default --prompt
<os>
要素内に <boot dev='network'/>
要素があることを確認します。
<os> <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type> <boot dev='network'/> <boot dev='hd'/> </os>
<interface type='network'> <mac address='52:54:00:66:79:14'/> <source network='default'/> <target dev='vnet0'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface>
第10章 ハイパーバイザーおよび仮想マシンの登録
- 仮想システムに固有のサブスクリプションは簡単に利用でき、関連するすべてのゲスト仮想マシンに適用できます。
- ハイパーバイザーから継承できるすべてのサブスクリプションのメリットは、すぐに利用でき、関連するすべてのゲスト仮想マシンに適用できます。
10.1. ホストの物理マシンに virt-who をインストールする
KVM ハイパーバイザーの登録
ホスト物理マシンの root ユーザーで、ターミナルで subscription-manager register [options] コマンドを実行して、KVM Hypervisor を登録します。# subscription-manager register --help メニューを使用すると、より多くのオプションを使用できます。ユーザーネームおよびパスワードを使用している場合は、Subscription Manager アプリケーションが認識している認証情報を使用します。初めてサブスクライブする際に、ユーザーアカウントがない場合は、カスタマーサポートにご連絡ください。たとえば、仮想マシンを 'admin' として登録 (パスワードは 'secret') するには、次のコマンドを送信します。[root@rhel-server ~]# subscription-manager register --username=admin --password=secret --auto-attach
virt-who パッケージをインストールします。
ホストの物理マシンで次のコマンドを実行して、virt-who パッケージをインストールします。# yum install virt-who
virt-who 設定ファイルの作成
ハイパーバイザーごとに、/etc/virt-who.d/
ディレクトリーに設定ファイルを追加します。ファイルには、少なくとも以下のスニペットが含まれている必要があります。[libvirt] type=libvirt
virt-who の設定の詳細は、「virt-who の設定」 を参照してください。virt-who サービスを再起動します。
ホストの物理マシンで次のコマンドを実行して、virt-who サービスを起動します。# systemctl start virt-who.service # systemctl enable virt-who.service
virt-who サービスがゲスト情報を受信していることを確認する
この時点で、virt-who サービスは、ホストからドメインのリストの収集を開始します。ホストの物理マシンの/var/log/rhsm/rhsm.log
ファイルを確認して、ゲスト仮想マシンのリストがファイルに含まれていることを確認します。例:2015-05-28 12:33:31,424 DEBUG: Libvirt domains found: [{'guestId': '58d59128-cfbb-4f2c-93de-230307db2ce0', 'attributes': {'active': 0, 'virtWhoType': 'libvirt', 'hypervisorType': 'QEMU'}, 'state': 5}]
手順10.1 カスタマーポータルでのサブスクリプションの管理
ハイパーバイザーのサブスクライブ
仮想マシンはハイパーバイザーと同じサブスクリプションのメリットを享受するため、ハイパーバイザーに有効なサブスクリプションがあり、仮想マシンがサブスクリプションを使用できることが重要です。カスタマーポータルへのログイン
Red Hat カスタマーポータルで Red Hat アカウントの認証情報を指定してログインします。Systems リンクをクリックします。
My Subscriptions インターフェイスの Systems セクションに移動します。ハイパーバイザーを選択します。
Systems ページには、サブスクライブしているすべてのシステムの表があります。ハイパーバイザーの名前 (localhost.localdomain
など) を選択します。表示された詳細ページで Attach a subscription をクリックし、リスト表示されたすべてのサブスクリプションを選択します。 をクリックします。これにより、ホストの物理サブスクリプションがハイパーバイザーに割り当てられ、ゲストがサブスクリプションを利用できるようになります。
ゲスト仮想マシンのサブスクライブ - 初めての使用
この手順は、新しいサブスクリプションを持っていて、これまでゲスト仮想マシンをサブスクライブしたことがない人を対象としています。仮想マシンを追加する場合は、この手順をスキップします。virt-who サービスを実行しているマシンで、ハイパーバイザープロファイルに割り当てられたサブスクリプションを使用するには、ゲスト仮想マシンのターミナルで次のコマンドを実行して自動サブスクライブします。[root@virt-who ~]# subscription-manager attach --auto
追加のゲスト仮想マシンのサブスクライブ
初めて仮想マシンをサブスクライブする場合は、この手順を省略してください。仮想マシンを追加する場合、このコマンドを実行しても、必ずしも同じサブスクリプションがゲスト仮想マシンに再接続されるとは限らないことに注意してください。これは、すべてのサブスクリプションを削除してから自動登録を許可して、指定したゲスト仮想マシンに必要なものを解決できるようにすると、以前とは異なるサブスクリプションが使用される可能性があるためです。これはシステムには影響を及ぼさない可能性がありますが、注意してください。以下で説明されていない手動の接続手順を使用して仮想マシンを接続した場合は、自動接続が機能しないため、これらの仮想マシンを手動で再接続する必要があります。次のコマンドを使用して、最初に古いゲストのサブスクリプションを削除してから、自動アタッチを使用してすべてのゲストにサブスクリプションを割り当てます。ゲスト仮想マシンで次のコマンドを実行します。[root@virt-who ~]# subscription-manager remove --all [root@virt-who ~]# subscription-manager attach --auto
サブスクリプションが割り当てられていることを確認する
ゲスト仮想マシンで次のコマンドを実行して、サブスクリプションがハイパーバイザーに割り当てられていることを確認します。[root@virt-who ~]# subscription-manager list --consumed
以下のような出力が表示されます。サブスクリプションの詳細に注意してください。'Subscription is current' と表示されるはずです。[root@virt-who ~]# subscription-manager
list --consumed
+-------------------------------------------+ Consumed Subscriptions +-------------------------------------------+ Subscription Name: Awesome OS with unlimited virtual guests Provides: Awesome OS Server Bits SKU: awesomeos-virt-unlimited Contract: 0 Account: ######### Your account number ##### Serial: ######### Your serial number ###### Pool ID: XYZ123 Provides Management: No Active: True Quantity Used: 1 Service Level: Service Type: Status Details: Subscription is current Subscription Type: Starts: 01/01/2015 Ends: 12/31/2015 System Type: Virtual- ???
- The ID for the subscription to attach to the system is displayed here. You will need this ID if you need to attach the subscription manually.
- ???
- Indicates if your subscription is current. If your subscription is not current, an error message appears. One example is Guest has not been reported on any host and is using a temporary unmapped guest subscription. In this case the guest needs to be subscribed. In other cases, use the information as indicated in 「サブスクリプションステータスエラーが表示された場合の対応」.
追加のゲストを登録
ハイパーバイザーに新しいゲスト仮想マシンをインストールする場合は、ゲスト仮想マシンで次のコマンドを実行して、新しい仮想マシンを登録し、ハイパーバイザーに割り当てたサブスクリプションを使用する必要があります。# subscription-manager register # subscription-manager attach --auto # subscription-manager list --consumed
10.1.1. virt-who の設定
/etc/virt-who.conf
- 接続されているハイパーバイザーで変更を確認する間隔など、一般的な設定情報が含まれます。/etc/virt-who.d/hypervisor_name.conf
- 特定のハイパーバイザーの設定情報が含まれます。
virt-who.conf
に必要なスニペットを生成する Web ベースのウィザードが提供されます。ウィザードを実行する場合は、カスタマーポータルの Red Hat Virtualization Agent (virt-who) Configuration Helper を参照します。
Subscription Asset Manager
libvirt
10.2. 新しいゲスト仮想マシンの登録
[root@virt-server ~]# subscription-manager register --username=admin --password=secret --auto-attach
10.3. ゲスト仮想マシンエントリーの削除
[root@virt-guest ~]# subscription-manager unregister
サブスクリプションマネージャーへのログイン
サブスクリプションマネージャーは、Red Hat カスタマーポータルにあります。画面最上部にあるログインアイコンをクリックし、ユーザー名とパスワードを使用してカスタマーポータルにログインします。Subscriptions タブをクリックします。
Subscriptions タブをクリックします。Systems リンクをクリックします。
ページを下にスクロールして、Systems をクリックします。システムを削除します。
システムプロファイルを削除するには、テーブルで指定したシステムのプロファイルを検索し、その名前の横にあるチェックボックスを選択して、をクリックします。
10.4. 手動での virt-who のインストール
手順10.2 サブスクリプションを手動で割り当てる方法
サブスクリプション情報のリストを表示し、プール ID を見つけます。
最初に、仮想タイプで利用可能なサブスクリプションをリスト表示する必要があります。以下のコマンドを入力します。[root@server1 ~]# subscription-manager list
--avail --match-installed | grep 'Virtual' -B12
Subscription Name: Red Hat Enterprise Linux ES (Basic for Virtualization) Provides: Red Hat Beta Oracle Java (for RHEL Server) Red Hat Enterprise Linux Server SKU: ------- Pool ID: XYZ123 Available: 40 Suggested: 1 Service Level: Basic Service Type: L1-L3 Multi-Entitlement: No Ends: 01/02/2017 System Type: Virtual表示されたプール ID をメモします。この ID は、次の手順で必要に応じてコピーします。プール ID を使用したサブスクリプションの割り当て
前の手順でコピーしたプール ID を使用して、attach コマンドを実行します。プール ID XYZ123 を、取得したプール ID に置き換えます。以下のコマンドを入力します。[root@server1 ~]# subscription-manager attach
--pool=XYZ123
Successfully attached a subscription for: Red Hat Enterprise Linux ES (Basic for Virtualization)
10.5. virt-who のトラブルシューティング
10.5.1. ハイパーバイザーのステータスが赤である理由
10.5.2. サブスクリプションステータスエラーが表示された場合の対応
- System not properly subscribed
- Status unknown
- Late binding of a guest to a hypervisor through virt-who (host/guest mapping)
/var/log/rhsm/
ディレクトリーにある rhsm.log
という名前の virt-who ログファイルを開きます。
第11章 QEMU ゲストエージェントおよび SPICE エージェントでの仮想化の強化
11.1. QEMU ゲストエージェント
11.1.1. QEMU ゲストエージェントとホスト間の通信の設定
11.1.1.1. Linux ゲストでの QEMU ゲストエージェントの設定
手順11.1 シャットダウンした Linux ゲストで、ゲストエージェントとホストとの間の通信を virsh を使用して設定する
仮想マシンのシャットダウン
QEMU ゲストエージェントを設定する前に、仮想マシン (この例では rhel7 という名前) がシャットダウンしていることを確認します。# virsh shutdown rhel7
QEMU ゲストエージェントチャネルをゲスト XML 設定に追加します。
ゲストの XML ファイルを編集して、QEMU ゲストエージェントの詳細を追加します。# virsh edit rhel7
ゲストの XML ファイルに以下を追加し、変更を保存します。<channel type='unix'> <target type='virtio' name='org.qemu.guest_agent.0'/> </channel>
仮想マシンの起動
# virsh start rhel7
ゲストに QEMU ゲストエージェントをインストールします。
ゲスト仮想マシンに QEMU ゲストエージェントがインストールされていない場合はインストールします。# yum install qemu-guest-agent
ゲストでの QEMU ゲストエージェントの起動
ゲストで QEMU ゲストエージェントサービスを起動します。# systemctl start qemu-guest-agent
手順11.2 実行中の Linux ゲストでのゲストエージェントとホスト間の通信の設定
QEMU ゲストエージェントの XML ファイルの作成
# cat agent.xml <channel type='unix'> <target type='virtio' name='org.qemu.guest_agent.0'/> </channel>
QEMU ゲストエージェントの仮想マシンへの割り当て
このコマンドを使用して、QEMU ゲストエージェントを、実行中の仮想マシン (この例では rhel7) に割り当てます。# virsh attach-device rhel7 agent.xml
ゲストに QEMU ゲストエージェントをインストールします。
ゲスト仮想マシンに QEMU ゲストエージェントがインストールされていない場合はインストールします。# yum install qemu-guest-agent
ゲストでの QEMU ゲストエージェントの起動
ゲストで QEMU ゲストエージェントサービスを起動します。# systemctl start qemu-guest-agent
手順11.3 virt-manager を使用した QEMU ゲストエージェントとホスト間の通信の設定
仮想マシンのシャットダウン
QEMU ゲストエージェントを設定する前に、仮想マシンがシャットダウンしていることを確認します。仮想マシンをシャットダウンするには、Virtual Machine Manager の仮想マシン一覧から仮想マシンを選択し、メニューバーのライトスイッチアイコンをクリックします。QEMU ゲストエージェントチャネルをゲストに追加します。
ゲストウィンドウ上部の電球アイコンをクリックして、仮想マシンのハードウェアの詳細を開きます。Add New Virtual Hardware ウィンドウを開き、Channel を選択します。ボタンをクリックしてName ドロップダウンリストから QEMU ゲストエージェントを選択し、 をクリックします。図11.1 QEMU ゲストエージェントチャネルデバイスの選択
仮想マシンの起動
仮想マシンを起動するには、Virtual Machine Manager の仮想マシンリストから仮想マシンを選択し、メニューバーの をクリックします。ゲストに QEMU ゲストエージェントをインストールします。
ゲストを virt-manager で開き、ゲスト仮想マシンにインストールされていない場合は QEMU ゲストエージェントをインストールします。# yum install qemu-guest-agent
ゲストでの QEMU ゲストエージェントの起動
ゲストで QEMU ゲストエージェントサービスを起動します。# systemctl start qemu-guest-agent
11.2. libvirt での QEMU ゲストエージェントの使用
- virsh shutdown --mode=agent - このシャットダウン方法は、virsh shutdown --mode=acpi よりも信頼性が高くなります。QEMU ゲストエージェントで使用する virsh shutdown は、クリーンな状態で協調ゲストをシャットダウンすることが保証されます。エージェントが存在しない場合、libvirt は代わりに ACPI シャットダウンイベントの挿入に依存する必要がありますが、一部のゲストはそのイベントを無視するため、シャットダウンしません。virsh reboot と同じ構文で使用できます。
- virsh snapshot-create --quiesce - スナップショットが作成される前に、ゲストが I / O を安定した状態にフラッシュできるようにします。これにより、fsck を実行したり、データベーストランザクションの一部を失うことなくスナップショットを使用できます。ゲストエージェントは、ゲストの相互作用を提供することで、高レベルのディスクコンテンツの安定性を実現します。
- virsh domfsfreeze および virsh domfsthaw - ゲストファイルシステムを分離して静止します。
- virsh domfstrim - ファイルシステムをトリミングするようにゲストに指示します。
- virsh domtime - ゲストの時計をクエリーまたは設定します。
- virsh setvcpus --guest - CPU をオフラインにするようにゲストに指示します。
- virsh domifaddr --source agent - ゲストエージェントを介してゲストオペレーティングシステムの IP アドレスを問い合わせます。
- virsh domfsinfo - 実行中のゲストでマウントされているファイルシステムのリストを表示します。
- virsh set-user-password - ゲストのユーザーアカウントのパスワードを設定します。
11.2.1. ゲストディスクのバックアップの作成
- ファイルシステムアプリケーション/データベースは、作業バッファーを仮想ディスクにフラッシュし、クライアント接続の受け入れを停止します。
- アプリケーションがデータファイルを一貫した状態にします。
- メインフックスクリプトが返されます。
- qemu-guest-agent がファイルシステムをフリーズし、、管理スタックがスナップショットを取得します。
- スナップショットが確認されました。
- ファイルシステムの機能が再開します。
/etc/qemu-ga/fsfreeze-hook.d/
というラベルが付いた表の行の 表11.1「QEMU ゲストエージェントパッケージの内容」 にリスト表示されている restorecon -FvvR コマンドを実行した後、ファイルシステムノードへのアクセスがすぐに機能するようになります。
File name | 説明 |
---|---|
/usr/lib/systemd/system/qemu-guest-agent.service | QEMU ゲストエージェントのサービス制御スクリプト (start/stop) |
/etc/sysconfig/qemu-ga | /usr/lib/systemd/system/qemu-guest-agent.service 制御スクリプトにより読み込まれる QEMU ゲストエージェントの設定ファイル。設定は、シェルスクリプトのコメントが記載されたファイルで説明されています。 |
/usr/bin/qemu-ga | QEMU ゲストエージェントのバイナリーファイル。 |
/etc/qemu-ga | フックスクリプトのルートディレクトリー。 |
/etc/qemu-ga/fsfreeze-hook | メインフックスクリプト。ここでは変更は必要ありません。 |
/etc/qemu-ga/fsfreeze-hook.d | 個々のアプリケーション固有のフックスクリプトのディレクトリー。ゲストシステム管理者は、フックスクリプトを手動でこのディレクトリーにコピーし、適切なファイルモードビットを確認してから、このディレクトリーで restorecon -FvvR を実行する必要があります。 |
/usr/share/qemu-kvm/qemu-ga/ | サンプルスクリプトを含むディレクトリー (サンプル目的のみ)ここに含まれるスクリプトは実行されません。 |
/etc/qemu-ga/fsfreeze-hook
は、独自のメッセージと、アプリケーション固有のスクリプトの標準出力およびエラーメッセージを、ログファイル /var/log/qemu-ga/fsfreeze-hook.log
に記録します。詳細は、libvirt アップストリームの Web サイト を参照してください。
11.3. SPICE エージェント
11.3.1. SPICE エージェントとホスト間の通信の設定
手順11.4 Linux ゲストで virsh を使用したゲストエージェントとホスト間の通信の設定
仮想マシンのシャットダウン
SPICE エージェントを設定する前に、仮想マシン (この例では rhel7 という名前) がシャットダウンしていることを確認します。# virsh shutdown rhel7
SPICE エージェントチャネルをゲスト XML 設定に追加します。
ゲストの XML ファイルを編集して、SPICE エージェントの詳細を追加します。# virsh edit rhel7
ゲストの XML ファイルに以下を追加し、変更を保存します。<channel type='spicevmc'> <target type='virtio' name='com.redhat.spice.0'/> </channel>
仮想マシンの起動
# virsh start rhel7
ゲストに SPICE エージェントをインストールします。
ゲスト仮想マシンに SPICE エージェントがインストールされていない場合はインストールします。# yum install spice-vdagent
ゲストで SPICE エージェントを起動します。
ゲストで SPICE エージェントサービスを起動します。# systemctl start spice-vdagent
手順11.5 SPICE エージェントと、実行中の Linux ゲストのホストとの間の通信の設定
SPICE エージェントの XML ファイルの作成
# cat agent.xml <channel type='spicevmc'> <target type='virtio' name='com.redhat.spice.0'/> </channel>
SPICE エージェントの仮想マシンへの割り当て
このコマンドを使用して、SPICE エージェントを、実行中の仮想マシン (この例では rhel7) に割り当てます。# virsh attach-device rhel7 agent.xml
ゲストに SPICE エージェントをインストールします。
ゲスト仮想マシンに SPICE エージェントがインストールされていない場合はインストールします。# yum install spice-vdagent
ゲストで SPICE エージェントを起動します。
ゲストで SPICE エージェントサービスを起動します。# systemctl start spice-vdagent
手順11.6 virt-manager を使用した SPICE エージェントとホスト間の通信の設定
仮想マシンのシャットダウン
SPICE エージェントを設定する前に、仮想マシンがシャットダウンしていることを確認します。仮想マシンをシャットダウンするには、Virtual Machine Manager の仮想マシン一覧から仮想マシンを選択し、メニューバーのライトスイッチアイコンをクリックします。SPICE エージェントチャネルをゲストに追加します。
ゲストウィンドウ上部の電球アイコンをクリックして、仮想マシンのハードウェアの詳細を開きます。Add New Virtual Hardware ウィンドウを開き、Channel を選択します。ボタンをクリックしてName ドロップダウンリストから SPICE エージェントを選択し、チャネルアドレスを変更して、 をクリックします。図11.2 SPICE エージェントのチャネルデバイスの選択
仮想マシンの起動
仮想マシンを起動するには、Virtual Machine Manager の仮想マシンリストから仮想マシンを選択し、メニューバーの をクリックします。ゲストに SPICE エージェントをインストールします。
ゲストを virt-manager で開き、ゲスト仮想マシンにインストールされていない場合は SPICE エージェントをインストールします。# yum install spice-vdagent
ゲストで SPICE エージェントを起動します。
ゲストで SPICE エージェントサービスを起動します。# systemctl start spice-vdagent
第12章 Nested Virtualization
12.1. 概要
12.2. 設定
- 有効: この機能はデフォルトで無効になっています。これを有効にするには、L0 ホストの物理マシンで次の手順を使用します。Intel の場合:
- ネストされた仮想化がホストシステムで利用可能であるかどうかを確認します。
$ cat /sys/module/kvm_intel/parameters/nested
このコマンドがY
または1
を返すと、機能が有効になります。コマンドが0
またはN
を返す場合は、手順 ii および iii を使用します。 kvm_intel
モジュールをアンロードします。# modprobe -r kvm_intel
- ネスト機能をアクティブにします。
# modprobe kvm_intel nested=1
- ネスト機能は、L0 ホストの次回起動時まで有効になります。永続的に有効にするには、以下の行を
/etc/modprobe.d/kvm.conf
ファイルに追加します。options kvm_intel nested=1
AMD の場合:- ネストされた仮想化がシステムで利用可能であるかどうかを確認します。
$ cat /sys/module/kvm_amd/parameters/nested
このコマンドがY
または1
を返すと、機能が有効になります。コマンドが0
またはN
を返す場合は、手順 ii および iii を使用します。 kvm_amd
モジュールをアンロードします。# modprobe -r kvm_amd
- ネスト機能をアクティブにします。
# modprobe kvm_amd nested=1
- ネスト機能は、L0 ホストの次回起動時まで有効になります。永続的に有効にするには、以下の行を
/etc/modprobe.d/kvm.conf
ファイルに追加します。options kvm_amd nested=1
- 以下のいずれかの方法で、ネストした仮想化用に L1 仮想マシンを設定します。
- virt-manager
- 目的のゲストの GUI を開き、Show Virtual Hardware Details アイコンをクリックします。
- Processor メニューを選択し、Configuration セクションで、Model フィールドに
host-passthrough
と入力し (ドロップダウン選択を使用しません)、Apply をクリックします。
[D]
- ドメイン XML
- ゲストのドメイン XML ファイルに、次の行を追加します。
<cpu mode='host-passthrough'/>
ゲストの XML 設定ファイルに<cpu>
要素がすでに含まれる場合は、これを書き直してください。
- ネストされた仮想化の使用を開始するするには、L1 ゲスト内に L2 ゲストをインストールします。これには、L1 ゲストのインストールと同じ手順に従います。詳細は 3章仮想マシンの作成 を参照してください。
12.3. 制限事項
- L0 ホストおよび L1 ゲストで Red Hat Enterprise Linux 7.2 以降を実行することが強く推奨されます。L2 ゲストには、Red Hat がサポートするゲストシステムを含めることができます。
- L1 または L2 ゲストの移行はサポートされていません。
- ハイパーバイザーとしての L2 ゲストの使用および L3 ゲストの作成はサポートされていません。
- ホストで利用可能な機能がすべて L1 ハイパーバイザーで使用できる訳ではありません。たとえば、IOMMU/VT-d や APICv は、L1 ハイパーバイザーでは使用できません。
- ネストされた仮想化を使用するには、ホストの CPU に必要な機能フラグが必要です。L0 ハイパーバイザーおよび L1 ハイパーバイザーが正しく設定されているかを確認するには、L0 および L1 の両方で cat /proc/cpuinfo コマンドを使用し、両方のハイパーバイザーの各 CPU に次のフラグが記載されていることを確認します。
- Intel の場合 - -vmx (ハードウェア仮想化) およびept (拡張ページテーブル)
- AMD の場合 - svm (vmx と同等) および npt (ept と同等)
パート II. 管理
qemu-img
ツール、virt-manager
ツール、および virsh
ツールを使用したデバイスおよびゲストの仮想マシンの管理方法も説明します。
第13章 仮想マシン用のストレージの管理
13.1. ストレージの概念
手順13.1 ストレージの作成と割り当て
ストレージプールの作成
利用可能なストレージメディアから、1 つ以上のストレージプールを作成します。詳細は、「ストレージプールの使用」 を参照してください。ストレージボリュームの作成
利用可能なストレージプールから、ストレージボリュームを 1 つ以上作成します。詳細は、「ストレージボリュームの使用」 を参照してください。仮想マシンへのストレージデバイスの割り当て
ストレージボリュームから抽象化されたストレージデバイスを、ゲスト仮想マシンに割り当てます。詳細は、「ゲストへのストレージデバイスの追加」 を参照してください。
13.2. ストレージプールの使用
13.2.1. ストレージプールの概念
- ローカルストレージのプール
- ローカルストレージプールは、ホストサーバーに直接割り当てることができます。これには、ローカルデバイスのローカルディレクトリー、直接接続したディスク、物理パーティション、および論理ボリューム管理 (LVM) ボリュームグループが含まれます。ローカルストレージプールは、移行や大量の仮想マシンを必要としない開発、テスト、および小規模なデプロイメントに役立ちます。ローカルストレージプールは、ライブマイグレーションに使用できないため、多くの実稼働環境には適していない場合があります。
- ネットワーク (共有) ストレージプール
- ネットワークストレージプールには、標準プロトコルを使用してネットワーク経由で共有されるストレージデバイスが含まれます。virt-manager を使用してホスト間で仮想マシンを移行する場合はネットワークストレージが必要ですが、virsh を使用して移行する場合は任意です。仮想マシンの移行の詳細は、15章KVM の移行 を参照してください。
- ディレクトリーベースのストレージプール
- ディスクベースのストレージプール
- パーティションベースのストレージプール
- GlusterFS ストレージプール
- iSCSI ベースのストレージプール
- LVM ベースのストレージプール
- NFS ベースのストレージプール
- SCSI デバイスを使用した vHBA ベースのストレージプール
- マルチパスベースのストレージプール
- RBD ベースのストレージプール
- sheepdog ベースのストレージプール
- vstorage ベースのストレージプール
- ZFS ベースのストレージプール
13.2.2. ストレージプールの作成
13.2.2.1. virsh を使用したストレージプールの作成
手順13.2 virsh を使用したストレージプールの作成
推奨事項を読み、前提条件がすべて満たされていることを確認します。
ストレージプールによっては、このガイドでは特定の方法に従うことが推奨されます。また、一部のタイプのストレージプールには前提条件があります。推奨事項および前提条件 (存在する場合) を表示する場合は、「ストレージプール固有のもの」 を参照してください。ストレージプールの定義
ストレージプールは永続的または一時的なものにできます。永続ストレージプールは、ホストマシンのシステムを再起動しても維持します。一時的なストレージプールは、ホストが再起動すると削除されます。次のいずれかを行います。- XML ファイルを使用してストレージプールを定義します。a.新規デバイスに必要なストレージプール情報を含む一時的な XML ファイルを作成します。XML ファイルには、ストレージプールのタイプに基づいた特定のフィールドが含まれている必要があります。詳細は、「ストレージプール固有のもの」 を参照してください。以下は、ストレージプール定義の XML ファイルの例を示しています。この例では、ファイルは
~/guest_images.xml
に保存されています。<pool type='fs'> <name>guest_images_fs</name> <source> <device path='/dev/sdc1'/> </source> <target> <path>/guest_images</path> </target> </pool>
b.virsh pool-define コマンドを使用して、永続ストレージプールを作成するか、virsh pool-create コマンドを使用して一時ストレージプールを作成して起動します。# virsh pool-define ~/guest_images.xml Pool defined from guest_images_fs
または# virsh pool-create ~/guest_images.xml Pool created from guest_images_fs
c.手順 a で作成した XML ファイルを削除します。 - virsh pool-define-as コマンドを使用して、永続ストレージプールを作成するか、virsh pool-create-as コマンドを使用して一時的なストレージプールを作成します。以下の例では、永続化した後、
/guest_images
ディレクトリーから/dev/sdc1
にマッピングされた一時的なファイルシステムベースのストレージプールを作成します。# virsh pool-define-as guest_images_fs fs - - /dev/sdc1 - "/guest_images" Pool guest_images_fs defined
または# virsh pool-create-as guest_images_fs fs - - /dev/sdc1 - "/guest_images" Pool guest_images_fs created
注記virsh インターフェイスを使用する場合、コマンド内のオプション名は任意です。オプション名を使用しない場合は、指定する必要のないフィールドにハイフンを使用します。
プールが作成されたことを確認します。
virsh pool-list --allを使用して、存在するすべてのストレージプールのリストを表示します。# virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images_fs inactive no
ストレージプールのターゲットパスの定義
virsh pool-build コマンドを使用して、フォーマット済みファイルシステムのストレージプール用のストレージプールターゲットパスを作成し、ストレージソースデバイスを初期化して、データのフォーマットを定義します。次に、virsh pool-list を使用して、ストレージプールがリスト表示されていることを確認します。# 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 .. # virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images_fs inactive no
注記ターゲットパスの構築は、ディスクベース、ファイルシステムベース、論理ストレージプールにのみ必要です。libvirt は、overwrite
オプションが指定されている場合を除き、ソースストレージデバイスのデータフォーマットが、選択したストレージプールタイプと異なることを検出すると、ビルドに失敗します。ストレージプールを起動します。
virsh pool-start コマンドを使用して、ソースデバイスを使用できるように準備します。実行されるアクションは、ストレージプールのタイプによって異なります。たとえば、ファイルシステムベースのストレージプールの場合、virsh pool-start コマンドはファイルシステムをマウントします。LVM ベースのストレージプールの場合、virsh pool-start コマンドは、vgchange コマンドを使用してボリュームグループをアクティブにします。次に、virsh pool-list command を使用して、ストレージプールがアクティブであることを確認します。# virsh pool-start guest_images_fs Pool guest_images_fs started # virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images_fs active no
注記virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。自動起動を有効にする (オプション)
デフォルトでは、virsh で定義されたストレージプールは、libvirtd
が起動するたびに自動的に起動するように設定されていません。virsh pool-autostart を使用すると、ストレージプールを自動的に起動するように設定できます。# virsh pool-autostart guest_images_fs Pool guest_images_fs marked as autostarted # virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images_fs active yes
ストレージプールは、libvirtd
が起動するたびに自動的に起動するようになりました。ストレージプールを確認します。
ストレージプールが正しく作成され、報告されたサイズが期待どおりで、状態が running と報告されたことを確認します。ファイルシステムのターゲットパスに 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
13.2.2.2. Virtual Machine Manager を使用したストレージプールの作成
手順13.3 Virtual Machine Manager を使用したストレージプールの作成
ストレージプールを作成するメディアを準備します。
これは、ストレージプールのタイプにより異なります。詳細は 「ストレージプール固有のもの」 を参照してください。この例では、GUID Partition Table でディスクに再ラベル付けする必要がある場合があります。ストレージ設定を開く
- Virtual Machine Manager で、設定するホスト接続を選択します。Edit メニューを開き、Connection Details を選択します。
- Connection Details ウィンドウの Storage タブをクリックします。
図13.1 ストレージタブ
新しいストレージプールを作成します。
注記Virtual Machine Manager を使用して、永続ストレージプールのみを作成できます。一時ストレージプールは、virsh を使用してのみ作成できます。新しいストレージプールの追加 (パート 1)
ウィンドウんの下部の ボタンをクリックします。Add a New Storage Pool ウィザードが表示されます。ストレージプールのを入力します。この例では、guest_images_fs という名前を使用します。fs: Pre-Formatted Block Device を使用しています。ドロップダウンリストから、作成するストレージプールの種類を選択します。この例では、図13.2 ストレージプールの名前とタイプ
新しいプールの追加 (パート 2)
図13.3 ストレージプールのパス
関連するパラメーターを使用してストレージプールを設定します。各タイプのストレージプールのパラメーターの詳細は、「ストレージプール固有のもの」 を参照してください。ストレージプールの種類によっては、Build Pool チェックボックスが表示されます。ストレージからストレージプールを構築する場合は、Build Pool チェックボックスをチェックします。詳細を確認し、をクリックしてストレージプールを作成します。
13.2.3. ストレージプール固有のもの
13.2.3.1. ディレクトリーベースのストレージプール
パラメーター
説明 | XML | pool-define-as | Virtual Machine Manager |
---|---|---|---|
ストレージプールのタイプ | <pool type='dir'> | [type] directory | dir: ファイルシステムディレクトリー |
ストレージプールの名前 | <name>name</name> | [name] name | Name |
ターゲットを指定するパス。ストレージプールに使用されるパスになります。 |
<target> | target path_to_pool | ターゲットパス |
例
/guest_images
ディレクトリーに基づいたストレージプールの XML ファイルの例です。
<pool type='dir'> <name>dirpool</name> <target> <path>/guest_images</path> </target> </pool>
/guest_images
ディレクトリーに基づいてストレージプールを作成するコマンドの例になります。
# virsh pool-define-as dirpool dir --target "/guest_images"
Pool FS_directory defined
/guest_images
ディレクトリーに基づいてストレージプールを作成するための、Virtual Machine Manager の Add a New Storage Pool ダイアログボックスの例を示しています。
図13.4 新しいディレクトリーベースのストレージプールの例を追加します。
13.2.3.2. ディスクベースのストレージプール
推奨事項
- 使用されている libvirt のバージョンに応じて、ディスクをストレージプール専用にすると、現在ディスクデバイスに格納されているすべてのデータが再フォーマットされて消去される可能性があります。ストレージプールを作成する前に、ストレージデバイスのデータのバックアップを作成することを強く推奨します。
- ゲストには、ディスク全体またはブロックデバイス (
/dev/sdb
など) への書き込みアクセス権を付与しないでください。パーティション (/dev/sdb1
など) または LVM ボリュームを使用します。ブロックデバイス全体をゲストに渡すと、ゲストはブロックデバイスをパーティションに分割するか、ブロックデバイスに独自の LVM グループを作成します。これにより、ホストの物理マシンがこのようなパーティションや LVM グループを検出し、エラーが発生する場合があります。
前提条件
# 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.
#
パラメーター
説明 | XML | pool-define-as | Virtual Machine Manager |
---|---|---|---|
ストレージプールのタイプ | <pool type='disk'> | [type] disk | disk: 物理ディスクデバイス |
ストレージプールの名前 | <name>name</name> | [name] name | Name |
ストレージデバイスを指定するパス。たとえば、/dev/sdb |
<source> | source-dev path_to_disk | ソースパス |
ターゲットを指定するパス。ストレージプールに使用されるパスになります。 |
<target> | target path_to_pool | ターゲットパス |
例
<pool type='disk'> <name>phy_disk</name> <source> <device path='/dev/sdb'/> <format type='gpt'/> </source> <target> <path>/dev</path> </target> </pool>
# virsh pool-define-as phy_disk disk --source-format=gpt --source-dev=/dev/sdb --target /dev
Pool phy_disk defined
図13.5 新しいディスクベースのストレージプールの例を追加します。
13.2.3.3. ファイルシステムベースのストレージプール
推奨事項
/dev/sdb
など) をストレージプールとして割り当てないでください。ゲストには、ディスク全体またはブロックデバイスへの書き込みアクセス権を付与しないでください。この方法は、パーティション (/dev/sdb1
など) をストレージプールに割り当てる場合に限り使用してください。
前提条件
# mkfs.ext4 /dev/sdc1
パラメーター
説明 | XML | pool-define-as | Virtual Machine Manager |
---|---|---|---|
ストレージプールのタイプ | <pool type='fs'> | [type] fs | fs: フォーマット済みブロックデバイス |
ストレージプールの名前 | <name>name</name> | [name] name | Name |
パーミッションを指定するパス。たとえば、/dev/sdc1 |
<source> | [source] path_to_partition | ソースパス |
ファイルシステムのタイプ (ext4 など)。 |
<format type='fs_type' /> | [ソースフォーマット]FS-format | 該当なし |
ターゲットを指定するパス。ストレージプールに使用されるパスになります。 |
<target> | [target] path_to_pool | ターゲットパス |
例
<pool type='fs'> <name>guest_images_fs</name> <source> <device path='/dev/sdc1'/> <format type='auto'/> </source> <target> <path>/guest_images</path> </target> </pool>
# virsh pool-define-as guest_images_fs fs --source-dev /dev/sdc1 --target /guest_images
Pool guest_images_fs defined
図13.6 新しいファイルシステムベースのストレージプールの例を追加します。
13.2.3.4. GlusterFS ベースのストレージプール
推奨事項
前提条件
手順13.4 Gluster サーバーの準備
- 次のコマンドを使用してそのステータスをリスト表示して、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
- glusterfs-fuse パッケージがインストールされていない場合はインストールします。
- virt_use_fusefs ブール値が有効になっていない場合は有効にします。有効になっていることを確認します。
# setsebool virt_use_fusefs on # getsebool virt_use_fusefs virt_use_fusefs --> on
パラメーター
説明 | XML | pool-define-as | Virtual Machine Manager |
---|---|---|---|
ストレージプールのタイプ | <pool type='gluster'> | [type] gluster | Gluster: Gluster ファイルシステム |
ストレージプールの名前 | <name>name</name> | [name] name | Name |
Gluster サーバーのホスト名または IP アドレス |
<source> | source-host hostname | ホスト名 |
Gluster サーバーの名前 | <name='Gluster-name' /> | source-name Gluster-name | ソース名 |
ストレージプールに使用される Gluster サーバーのパス。 |
<dir path='Gluster-path' /> | source-path Gluster-path | ソースパス |
例
<pool type='gluster'> <name>Gluster_pool</name> <source> <host name='111.222.111.222'/> <dir path='/'/> <name>gluster-vol1</name> </source> </pool>
# pool-define-as --name Gluster_pool --type gluster --source-host 111.222.111.222 --source-name gluster-vol1 --source-path /
Pool Gluster_pool defined
図13.7 新しい GlusterFS ベースのストレージプールの例を追加します。
13.2.3.5. iSCSI ベースのストレージプール
推奨事項
前提条件
手順13.5 iSCSI ターゲットの作成
targetcli パッケージのインストール
# yum install targetcli
targetcli コマンドセットの起動
# targetcli
ストレージオブジェクトの作成
ストレージプールを使用して、3 つのストレージオブジェクトを作成します。- ブロックストレージオブジェクトの作成
/backstores/block
ディレクトリーに移動します。- create コマンドを実行します。
# create [block-name][filepath]
以下に例を示します。# create block1 dev=/dev/sdb1
- fileio オブジェクトの作成
/fileio
ディレクトリーに移動します。- create コマンドを実行します。
# create [fileio-name][image-name] [image-size]
以下に例を示します。# create fileio1 /foo.img 50M
- ramdisk オブジェクトの作成
/ramdisk
ディレクトリーに移動します。- create コマンドを実行します。
# create [ramdisk-name] [ramdisk-size]
以下に例を示します。# create ramdisk1 1M
- この手順で作成したディスクの名前を書き留めておきます。これらは後で使用されます。
iSCSI ターゲットの作成
/iscsi
ディレクトリーに移動します。- ターゲットの作成には、以下の 2 つの方法があります。
- パラメーターを指定せずに create コマンドを実行します。iSCSI qualified name (IQN) は自動的に生成されます。
- IQN とサーバーを指定して create コマンドを実行します。以下に例を示します。
# create iqn.2010-05.com.example.server1:iscsirhel7guest
ポータル IP アドレスの定義
iSCSI 経由でブロックストレージをエクスポートするには、最初にポータル、LUN、および access control lists ACL を設定する必要があります。ポータルには、ターゲットが監視する IP アドレスと TCP、および接続するイニシエーターが含まれます。iSCSI はポート 3260 を使用します。このポートはデフォルトで設定されています。ポート 3260 への接続:/tpg
ディレクトリーに移動します。- 以下のコマンドを実行します。
# portals/ create
このコマンドを実行すると、ポート 3260 をリッスンしている利用可能な IP アドレスがすべて使用できるようになります。ポート 3260 をリッスンする IP アドレスを 1 つだけにする場合は、コマンドの末尾に IP アドレスを追加します。以下に例を示します。# portals/ create 143.22.16.33
LUN の設定と、ストレージオブジェクトのファブリックへの割り当て
この手順では、ストレージオブジェクトの作成 で作成したストレージオブジェクトを使用します。- ポータルの IP アドレスの定義 で作成した TPG の
luns
ディレクトリーに移動します。以下に例を示します。# iscsi>iqn.iqn.2010-05.com.example.server1:iscsirhel7guest
- 最初の LUN を ramdisk に割り当てます。以下に例を示します。
# create /backstores/ramdisk/ramdisk1
- 2 番目の LUN をブロックディスクに割り当てます。以下に例を示します。
# create /backstores/block/block1
- 3 番目の LUN を fileio ディスクに割り当てます。以下に例を示します。
# create /backstores/fileio/fileio1
- 作成される LUN のリストを表示します。
/iscsi/iqn.20...csirhel7guest ls o- tgp1 ............................................................[enabled, auth] o- acls...................................................................[0 ACL] o- luns..................................................................[3 LUNs] | o- lun0......................................................[ramdisk/ramdisk1] | o- lun1...............................................[block/block1 (dev/vdb1)] | o- lun2................................................[fileio/file1 (foo.img)] o- portals.............................................................[1 Portal] o- IP-ADDRESS:3260.........................................................[OK]
各イニシエーターの ACL の作成
イニシエーターの接続時に認証を有効にします。指定した LUN を、指定したイニシエーターに制限することもできます。ターゲットとイニシエーターには一意の名前があります。iSCSI イニシエーターは IQN を使用します。- イニシエーター名を使用して、iSCSI イニシエーターの IQN を検索します。以下に例を示します。
# cat /etc/iscsi/initiator2.iscsi InitiatorName=create iqn.2010-05.com.example.server1:iscsirhel7guest
この IQN は、ACL を作成するために使用されます。 acls
ディレクトリーへ移動します。- 次のいずれかを実行して ACL を作成します。
- パラメーターを指定せずに create コマンドを実行して、すべての LUN およびイニシエーターに ACL を作成します。
# create
- 特定の LUN およびイニシエーターに ACL を作成し、iSCSI インティエーターの IQN を指定して create コマンドを実行します。以下に例を示します。
# create iqn.2010-05.com.example.server1:888
- すべてのイニシエーターに 1 つのユーザー ID とパスワードを使用するように、カーネルターゲットを設定します。
# set auth userid=user_ID # set auth password=password # set attribute authentication=1 # set attribute generate_node_acls=1
この手順を完了したら、ストレージプールをセキュリティー保護 して続行します。設定を保存します。
以前の起動設定を上書きして、設定を永続化します。# saveconfig
サービスを有効にします。
次回の起動時に保存した設定を適用するには、サービスを有効にします。# systemctl enable target.service
オプションの手順
手順13.6 RAID アレイでの論理ボリュームの設定
RAID5 アレイの作成
RAID5 アレイの作成方法は、『Red Hat Enterprise Linux 7 Storage Administration Guide』 を参照してください。RAID5 アレイに LVM 論理ボリュームを作成する
RAID5 アレイで LVM 論理ボリュームを作成する方法は、『Red Hat Enterprise Linux 7 Logical Volume Manager Administration Guide』 を参照してください。
手順13.7 検出可能性のテスト
新しい iSCSI デバイスが検出可能であることを確認します。
# iscsiadm --mode discovery --type sendtargets --portal server1.example.com 143.22.16.33:3260,1 iqn.2010-05.com.example.server1:iscsirhel7guest
手順13.8 デバイスの接続のテスト
新しい iSCSI デバイスの接続
新しいデバイス (iqn.2010-05.com.example.server1:iscsirhel7guest) を接続して、デバイスを接続できるかどうかを判断します。# iscsiadm -d2 -m node --login scsiadm: Max file limits 1024 1024 Logging in to [iface: default, target: iqn.2010-05.com.example.server1:iscsirhel7guest, portal: 143.22.16.33,3260] Login to [iface: default, target: iqn.2010-05.com.example.server1:iscsirhel7guest, portal: 143.22.16.33,3260] successful.
デバイスの取り外し
# iscsiadm -d2 -m node --logout scsiadm: Max file limits 1024 1024 Logging out of session [sid: 2, target: iqn.2010-05.com.example.server1:iscsirhel7guest, portal: 143.22.16.33,3260 Logout of [sid: 2, target: iqn.2010-05.com.example.server1:iscsirhel7guest, portal: 143.22.16.33,3260] successful.
手順13.9 iSCSI ストレージプールで libvirt のシークレットを使用する
libvirt の秘密ファイルを作成する
チャレンジハンドシェイク認証プロトコル (CHAP) のユーザー名を使用して、libvirt シークレットファイルを作成します。以下に例を示します。<secret ephemeral='no' private='yes'> <description>Passphrase for the iSCSI example.com server</description> <usage type='iscsi'> <target>iscsirhel7secret</target> </usage> </secret>
シークレットの定義
# virsh secret-define secret.xml
UUID の確認
# virsh secret-list UUID Usage -------------------------------------------------------------------------------- 2d7891af-20be-4e5e-af83-190e8a922360 iscsi iscsirhel7secret
UID へのシークレットの割り当て
以下のコマンドを使用して、前の手順の出力の UUID に、シークレットを割り当てます。これにより、CHAP ユーザー名とパスワードが、libvirt が制御するシークレットリストにあることが保証されます。# MYSECRET=`printf %s "password123" | base64` # virsh secret-set-value 2d7891af-20be-4e5e-af83-190e8a922360 $MYSECRET
ストレージプールに認証エントリーを追加します。
virsh edit を使用して、ストレージプールの XML ファイル内の<source>
エントリーを変更し、authentication type
、username
、およびsecret usage
を指定して<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>
は、ゲスト XML 内の<pool>
要素および<disk>
要素の異なる場所に存在します。<pool>
の場合は、<auth>
が<source>
要素内に指定されます。認証は一部のプールソース (iSCSI および RBD) のプロパティーであるため、これはプールソースの検索場所を説明する要素となります。ドメインのサブ要素である<disk>
の場合、iSCSI ディスクまたは RBD ディスクに対する認証は、ディスクのプロパティーになります。また、ディスクのサブ要素<auth>
は、ストレージプールのサブ要素とは異なります。<auth username='redhat'> <secret type='iscsi' usage='iscsirhel7secret'/> </auth>
変更を有効にします。
この変更をアクティブにするには、ストレージプールを起動する必要があります。- ストレージプールが起動していない場合は、virsh を使用したストレージプールの作成 の手順に従ってストレージプールを定義し、起動します。
- プールがすでに起動している場合は、次のコマンドを入力してストレージプールを停止し、再起動します。
# virsh pool-destroy iscsirhel7pool # virsh pool-start iscsirhel7pool
パラメーター
説明 | XML | pool-define-as | Virtual Machine Manager |
---|---|---|---|
ストレージプールのタイプ | <pool type='iscsi'> | [type] iscsi | iscsi: iSCSI ターゲット |
ストレージプールの名前 | <name>name</name> | [name] name | Name |
ホストの名前。 |
<source> | source-host hostname | ホスト名 |
iSCSI IQN |
device path="iSCSI_IQN" /> | source-dev iSCSI_IQN | ソース IQN |
ターゲットを指定するパス。ストレージプールに使用されるパスになります。 |
<target> | target path_to_pool | ターゲットパス |
(必要に応じて) iSCSI イニシエーターの IQN。これは、ACL が LUN を特定のイニシエーターに制限する場合に限り必要です。 |
<initiator> | 以下の注記を参照してください。 | イニシエーター IQN |
例
<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>
# virsh pool-define-as --name iSCSI_pool --type iscsi --source-host server1.example.com --source-dev iqn.2010-05.com.example.server1:iscsirhel7guest --target /dev/disk/by-path
Pool iSCSI_pool defined
図13.8 新しい iSCSI ベースのストレージプールの例を追加します。
13.2.3.6. LVM ベースのストレージプール
推奨事項
- LVM ベースのストレージプールは、LVM の柔軟性を完全には提供しません。
- libvirt は、シン論理ボリュームに対応しますが、シンストレージプールの機能は提供しません。
- LVM ベースのストレージプールは、ボリュームグループです。Logical Volume Manager コマンド、または virsh コマンドを使用して、ボリュームグループを作成できます。virsh インターフェイスを使用してボリュームグループを管理する場合は、virsh コマンドを使用してボリュームグループを作成します。ボリュームグループの詳細は、『Red Hat Enterprise Linux Logical Volume Manager Administration Guide』 を参照してください。
- LVM ベースのストレージプールには、完全なディスクパーティションが必要です。この手順で新しいパーティションまたはデバイスをアクティベートすると、パーティションはフォーマットされ、すべてのデータが削除されます。ホストの既存のボリュームグループ (VG) を使用すると、何も消去されません。以下の手順を開始する前に、ストレージデバイスのバックアップを作成することが推奨されます。LVM ボリュームグループの作成方法は、『Red Hat Enterprise Linux Logical Volume Manager Administration Guide』 を参照してください。
- 既存の VG に LVM ベースのストレージプールを作成する場合は、pool-build コマンドを実行しないでください。
パラメーター
説明 | XML | pool-define-as | Virtual Machine Manager |
---|---|---|---|
ストレージプールのタイプ | <pool type='logical'> | [type] logical | 論理: LVM ボリュームグループ |
ストレージプールの名前 | <name>name</name> | [name] name | Name |
ストレージプールのデバイスのパス |
<source> | source-dev device_path | ソースパス |
ボリュームグループの名前 | <name='VG-name' /> | source-name VG-name | ソースパス |
仮想グループの形式 |
<format type='lvm2' /> | source-format lvm2 | 該当なし |
ターゲットパス |
<target> | target target-path | ターゲットパス |
<source> <device path='/dev/sda1'/> <device path='/dev/sdb3'/> <device path='/dev/sdc2'/> ... </source>
例
<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>
# virsh pool-define-as guest_images_lvm logical --source-dev=/dev/sdc --source-name libvirt_lvm --target /dev/libvirt_lvm
Pool guest_images_lvm defined
図13.9 新しい LVM ベースのストレージプールの例を追加します。
13.2.3.7. NFS ベースのストレージプール
前提条件
パラメーター
説明 | XML | pool-define-as | Virtual Machine Manager |
---|---|---|---|
ストレージプールのタイプ | <pool type='netfs'> | [type] netfs | netfs: Network Exported Directory |
ストレージプールの名前 | <name>name</name> | [name] name | Name |
マウントポイントが置かれている NFS サーバーのホスト名。これは、ホスト名または IP アドレスになります。 |
<source> | source-host host_name | ホスト名 |
NFS サーバーで使用されるディレクトリー |
<dir path='source_path' /> | source-path source_path | ソースパス |
ターゲットを指定するパス。ストレージプールに使用されるパスになります。 |
<target> | target target_path | ターゲットパス |
例
<pool type='netfs'> <name>nfspool</name> <source> <host name='localhost'/> <dir path='/home/net_mount'/> </source> <target> <path>/var/lib/libvirt/images/nfspool</path> </target> </pool>
# virsh pool-define-as nfspool netfs --source-host localhost --source-path /home/net_mount --target /var/lib/libvirt/images/nfspool
Pool nfspool defined
図13.10 新しい NFS ベースのストレージプールの追加の例
13.2.3.8. SCSI デバイスを使用する vHBA ベースのストレージプール
推奨事項
scsi_host#
または WWNN/WWPN ペアとして定義できます。
scsi_host#
として定義され、ハードウェアがホストマシンに追加されている場合、scsi_host#
の割り当てが変更される可能性があります。したがって、WWNN/WWPN のペアを使用して親 HBA を定義することが推奨されます。
- libvirt コードは、virsh コマンドの出力を使用すると、LUN のパスを簡単に見つけることができます。
- 仮想マシンの移行には、ターゲットマシンで同じ vHBA 名を持つストレージプールの定義と起動のみが必要です。これを行うには、仮想マシンの XML 設定で、vHBA LUN、libvirt ストレージプール、およびボリューム名を指定する必要があります。例は、「SCSI デバイスを使用する vHBA ベースのストレージプール」 を参照してください。
'scsi'
ストレージプール XML ファイルを作成します。同じ物理 HBA 上のストレージプールを使用する 1 つの vHBA を作成する場合は、システムの /dev/disk/by-{path|id|uuid|label}
のような場所など、<path>
値に安定した場所を使用することが推奨されます。
<path>
フィールドの値を /dev/
のみにする必要があります。それ以外の場合は、ストレージプールボリュームが 1 つの vHBA からしか確認できず、NPIV 設定で、ホストのデバイスを複数のゲストに公開することができません。
前提条件
手順13.10 vHBA の作成
ホストシステムで HBA の場所を特定します。
ホストシステムの HBA を特定するには、virsh nodedev-list --cap vports コマンドを使用します。以下の例は、vHBA に対応する HBA が 2 つ搭載されているホストを示しています。# virsh nodedev-list --cap vports scsi_host3 scsi_host4
HBA の詳細を確認します。
virsh nodedev-dumpxml HBA_device コマンドを実行して、HBA の詳細を表示します。# virsh nodedev-dumpxml scsi_host3
コマンドの出力には、vHBA の作成に使用する<name>
、<wwnn>
、および<wwpn>
フィールドの一覧が表示されます。サポートされる vHBA の最大数が<max_vports>
に表示されます。以下に例を示します。<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 の作成後に更新されます。vHBA ホストデバイスの作成
vHBA ホスト用に、以下のいずれかの XML ファイルを作成します。この例では、ファイル名は vhba_host3.xml です。次の例では、scsi_host3
を使用して親 vHBA を説明します。# cat vhba_host3.xml <device> <parent>scsi_host3</parent> <capability type='scsi_host'> <capability type='fc_host'> </capability> </capability> </device>
次の例では、WWNN/WWPN のペアを使用して親 vHBA を説明します。# cat vhba_host3.xml <device> <name>vhba</name> <parent wwnn='20000000c9848140' wwpn='10000000c9848140'/> <capability type='scsi_host'> <capability type='fc_host'> </capability> </capability> </device>
注記WWNN および WWPN の値は、手順13.10「vHBA の作成」 に表示される HBA の詳細にある値と一致する必要があります。<parent>
フィールドは、この vHBA デバイスに関連付ける HBA デバイスを指定します。<device>
タグの詳細は、ホスト用の新しい vHBA デバイスを作成するために、次の手順で使用されます。nodedev
XML 形式の詳細は、libvirt アップストリームページ を参照してください。vHBA ホストデバイスに新しい vHBA を作成します。
vhba_host3 に基づいて vHBA を作成するには、virsh nodedev-create コマンドを使用します。# virsh nodedev-create vhba_host3.xml Node device scsi_host5 created from vhba_host3.xml
vHBA の確認
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>
パラメーター
説明 | XML | pool-define-as |
---|---|---|
ストレージプールのタイプ | <pool type='scsi'> | scsi |
ストレージプールの名前 | <name>name</name> | --adapter-name name |
vHBA の識別子。parent 属性はオプションです。 |
<source> |
[--adapter-parent parent] |
ターゲットを指定するパス。ストレージプールに使用されるパスになります。 |
<target> | target path_to_pool |
<path>
フィールドが /dev/
の場合、libvirt は、ボリュームデバイスパスで一意の短いデバイスパスを生成します。たとえば、/dev/sdc
です。それ以外の場合は、物理ホストパスが使用されます。たとえば、/dev/disk/by-path/pci-0000:10:00.0-fc-0x5006016044602198-lun-0
などです。一意の短いデバイスパスを使用すると、複数のストレージプールで、同じボリュームを複数のゲストにリスト表示できます。物理ホストのパスを複数のゲストで使用すると、デバイスタイプが重複していることを示す警告が発生することがあります。
parent
属性は、<adapter>
フィールドで、パスを変更して NPIV LUN を使用できる物理 HBA の親を識別するために使用できます。このフィールドの scsi_hostN
は、vports
属性および max_vports
属性と組み合わせて、親 ID を完了します。parent
属性、parent_wwnn
属性、parent_wwpn
属性、または parent_fabric_wwn
属性では、ホストの再起動後に同じ HBA が使用されるというさまざまな程度の保証を提供します。
parent
を指定しないと、libvirt は、NPIV に対応する最初のscsi_hostN
アダプターを使用します。parent
のみが指定されている場合、設定に SCSI ホストアダプターを追加すると、問題が発生する可能性があります。parent_wwnn
またはparent_wwpn
を指定した場合は、ホストの再起動後に同じ HBA が使用されます。parent_fabric_wwn
を使用する場合は、ホストの再起動後、使用されているscsi_hostN
に関係なく、同じファブリックの HBA が選択されます。
例
parent
属性を使用して、SCSI ホストデバイスを識別するいくつかのストレージプールの 1 つであるストレージプールの例になります。
<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>
<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>
# virsh pool-define-as vhbapool_host3 scsi --adapter-parent scsi_host3 --adapter-wwnn 5001a4a93526d0a1 --adapter-wwpn 5001a4ace3ee047d --target /dev/disk/by-path
Pool vhbapool_host3 defined
parent_wwnn
属性、parent_wwpn
属性、または parent_fabric_wwn
属性を定義する方法は提供されていません。
vHBA LUN を使用するように仮想マシンを設定する
- 仮想マシンの XML に、仮想マシンにディスクボリュームを作成します。
<source>
パラメーターで、storage pool
とstorage volume
を指定します。
<disk type='volume' device='disk'> <driver name='qemu' type='raw'/> <source pool='vhbapool_host3' volume='unit:0:4:0'/> <target dev='hda' bus='ide'/> </disk>
disk
の代わりにlun
デバイスーを指定するには、以下の例を参照してください。
<disk type='volume' device='lun' sgio='unfiltered'> <driver name='qemu' type='raw'/> <source pool='vhbapool_host3' volume='unit:0:4:0' mode='host'/> <target dev='sda' bus='scsi'/> <shareable /> </disk>
fast_io_fail_tmo
オプションおよび dev_loss_tmo
オプションを変更することが推奨されます。詳細は、Reconnecting to an exposed LUN after a hardware failure を参照してください。
13.2.4. ストレージプールの削除
13.2.4.1. ストレージプールを削除するための前提条件
13.2.4.2. virsh を使用したストレージプールの削除
- 定義したストレージプールのリストを表示します。
# virsh pool-list --all Name State Autostart ----------------------------------------- default active yes guest_images_pool active yes
- 削除するストレージプールを停止します。
# virsh pool-destroy guest_images_disk
- (任意) ストレージプールの種類によっては、ストレージプールが含まれるディレクトリーを削除できる場合があります。
# virsh pool-delete guest_images_disk
- ストレージプールの定義を削除します。
# virsh pool-undefine guest_images_disk
- プールが定義されていないことを確認します。
# virsh pool-list --all Name State Autostart ----------------------------------------- default active yes
13.2.4.3. Virtual Machine Manager を使用したストレージプールの削除
- Connection Details ウィンドウ の Storage タブにあるストレージプールリストで、削除するストレージプールを選択します。
- Storage ウィンドウの下部にある をクリックします。これによりストレージプールが停止し、使用中のリソースがすべて解放されます。
- をクリックします。注記アイコンは、ストレージプールが停止している場合にのみ有効になります。ストレージプールが削除されます。
13.3. ストレージボリュームの使用
13.3.1. ストレージボリュームの概念
--pool
storage_pool volume_name の形式を取ります。
# virsh vol-info --pool guest_images firstimage
Name: firstimage
Type: block
Capacity: 20.00 GB
Allocation: 20.00 GB
13.3.2. ストレージボリュームの作成
13.3.2.1. virsh を使用したストレージボリュームの作成
- XML ファイルを使用してストレージボリュームを定義します。a.新規デバイスに必要なストレージボリューム情報を含む一時 XML ファイルを作成します。XML ファイルには、以下を含む特定のフィールドが含まれている必要があります。
名前
- ストレージボリュームの名前。割り当て
- ストレージボリュームのストレージ割り当ての合計数。容量
- ストレージボリュームの論理容量。ボリュームがスパースの場合、この値はallocation
の値とは異なります。ターゲット
- ホストシステムのストレージボリュームのパス、さらに任意でそのパーミッションとラベル。
以下は、ストレージボリューム定義の XML ファイルの例です。この例では、ファイルは~/guest_volume.xml
に保存されます。<volume> <name>volume1</name> <allocation>0</allocation> <capacity>20G</capacity> <target> <path>/var/lib/virt/images/sparse.img</path> </target> </volume>
b.virsh vol-create コマンドを使用して、XML ファイルに基づいてストレージボリュームを作成します。# virsh vol-create guest_images_dir ~/guest_volume.xml Vol volume1 created
c.手順 a で作成した XML ファイルを削除します。 - virsh vol-create-as を実行して、ストレージボリュームを作成します。
# virsh vol-create-as guest_images_dir volume1 20GB --allocation 0
- virsh vol-clone コマンドを使用して、既存のストレージボリュームのクローンを作成します。virsh vol-clone コマンドは、クローンを作成するストレージボリュームを含むストレージプールと、新しく作成したストレージボリュームの名前を指定する必要があります。
# virsh vol-clone --pool guest_images_dir volume1 clone1
13.3.2.2. Virtual Machine Manager を使用したストレージボリュームの作成
手順13.11 Virtual Machine Manager を使用したストレージボリュームの作成
ストレージ設定を開く
- Virtual Machine Manager で Edit メニューを開き、Connection Details を選択します。
- Connection Details ウィンドウの Storage タブをクリックします。
図13.11 ストレージタブ
Connection Details ウィンドウの左側のペインには、ストレージプールのリストが表示されます。
ストレージボリュームを作成するストレージプールを選択します。
ストレージプールのリストで、ストレージボリュームを作成するストレージプールをクリックします。選択したストレージプールに設定したストレージボリュームは、画面下部の Volumes ペインに表示されます。新しいストレージボリュームの追加
Volumes リストの上にある ボタンをクリックします。Add a Storage Volume のダイアログが表示されます。図13.12 ストレージボリュームの作成
ストレージボリュームの設定
以下のパラメーターを使用して、ストレージボリュームを設定します。- Name フィールドにストレージプールの名前を入力します。
- Format リストからストレージボリュームの形式を選択します。
- Max Capacity フィールドに、ストレージボリュームの最大サイズを入力します。
作成を終了します。
Add a Storage Volume のダイアログが閉じ、ストレージボリュームが Volumes リストに表示されます。をクリックします。
13.3.3. ストレージボリュームの表示
# virsh vol-create-as guest_images_disk volume1 8G Vol volume1 created # virsh vol-create-as guest_images_disk volume2 8G Vol volume2 created # virsh vol-create-as guest_images_disk volume3 8G Vol volume3 created # virsh vol-list guest_images_disk Name Path ----------------------------------------- volume1 /home/VirtualMachines/guest_images_dir/volume1 volume2 /home/VirtualMachines/guest_images_dir/volume2 volume3 /home/VirtualMachines/guest_images_dir/volume3
13.3.4. データの管理
13.3.4.1. ストレージボリュームのワイプ
# virsh vol-wipe new-vol vdisk
13.3.4.2. ストレージボリュームへのデータのアップロード
# virsh vol-upload --pool pool-or-uuid --offset bytes --length bytes
vol-name-or-key-or-path local-file
--pool pool-or-uuid
- ボリュームが存在するストレージプールの名前または UUID です。vol-name-or-key-or-path
- アップロードするボリュームの名前または鍵またはパスです。--offset bytes
データの書き込みを開始するストレージボリュームの位置。--length length
- アップロードするデータ量の上限です。注記local-file が指定した--length
よりも大きい場合は、エラーが発生します。
例13.1 ストレージボリュームへのデータのアップロード
# virsh vol-upload sde1 /tmp/data500m.empty disk-pool
sde1
は、disk-pool
ストレージプールのボリュームです。/tmp/data500m.empty
のデータが sde1
にコピーされます。
13.3.4.3. ストレージボリュームへのデータのダウンロード
# vol-download --pool pool-or-uuid --offset bytes --length bytes
vol-name-or-key-or-path local-file
--pool pool-or-uuid
- ボリュームが存在するストレージプールの名前または UUID です。vol-name-or-key-or-path
- ダウンロードするボリュームの名前、鍵、またはパスを指定します。--offset
- データの読み込みを開始するストレージボリュームの位置です。--length length
- ダウンロードするデータ量の上限です。
例13.2 ストレージボリュームからのデータのダウンロード
# virsh vol-download sde1 /tmp/data-sde1.tmp disk-pool
sde1
は、disk-pool
ストレージプールのボリュームです。sde1
のデータは、/tmp/data-sde1.tmp
にダウンロードされます。
13.3.4.4. ストレージボリュームのサイズ変更
# virsh vol-resize --pool pool-or-uuid
vol-name-or-path pool-or-uuid capacity --allocate
--delta
--shrink
--pool pool-or-uuid
が必要です。また、このコマンドでサイズを変更するには、ボリュームのvol-name-or-key-or-path、名前、鍵、またはパスが必要です。
--allocate
が指定されていない限り、新しい容量はスパースである可能性があります。通常、容量は新しいサイズになりますが、--delta
が存在する場合は、既存のサイズに追加されます。--shrink
が存在しない限り、ボリュームを縮小しようとすると失敗します。
--shrink
が指定されていない限り、容量 を負にすることはできず、負の符号は必要ないことに注意してください。capacity はスケーリングされた整数であり、接尾辞がない場合はデフォルトでバイトになります。さらに、このコマンドは、アクティブなゲストが使用していないストレージボリュームに対してのみ安全であることに注意してください。ライブサイズの変更については、「ゲスト仮想マシンのブロックデバイスのサイズの変更」 を参照してください。
例13.3 ストレージボリュームのサイズを変更
# virsh vol-resize --pool disk-pool sde1 100M
13.3.5. ストレージボリュームの削除
13.3.5.1. virsh を使用したストレージボリュームの削除
# virsh vol-delete volume_name --pool guest_images_dir
vol volume_name deleted
13.3.5.2. Virtual Machine Manager を使用したストレージボリュームの削除
手順13.12 Virtual Machine Manager を使用したストレージボリュームの削除
ストレージ設定を開く
- Virtual Machine Manager で Edit メニューを開き、Connection Details を選択します。
- Connection Details ウィンドウの Storage タブをクリックします。
図13.13 ストレージタブ
Connection Details ウィンドウの左側のペインには、ストレージプールのリストが表示されます。
削除するストレージボリュームを選択します。
- ストレージプールのリストで、ストレージボリュームが抽象化されたストレージプールをクリックします。選択したストレージプールに設定されているストレージボリュームのリストが、画面下部の Volumes ペインに表示されます。
- 削除するストレージボリュームを選択します。
ストレージボリュームを削除します。
- ボタン (Volumes リストの上) をクリックします。確認ダイアログが表示されます。
13.3.6. ゲストへのストレージデバイスの追加
13.3.6.1. virsh を使用したゲストへのストレージデバイスの追加
<disk type='file' device='disk>'> <driver name='qemu' type='raw' cache='none'/> <source file='/var/lib/libvirt/images/FileName.img'/> <target dev='vdb' bus='virtio'/> </disk>
NewStorage.xml
と呼ばれる XML ファイルを使用して、ディスクを Guest1 に割り当てます。
# virsh attach-disk --config Guest1 ~/NewStorage.xml
# virsh attach-disk --config Guest1 --source /var/lib/libvirt/images/FileName.img --target vdb
13.3.6.2. Virtual Machine Manager を使用したゲストへのストレージデバイスの追加
13.3.6.2.1. ゲストへのストレージボリュームの追加
仮想マシンのハードウェアの詳細ウィンドウで Virtual Machine Manager を開きます。
root で virt-manager コマンドを実行するか、Applications → System Tools → Virtual Machine Manager を開き、virt-manager を開きます。図13.14 Virtual Machine Manager ウィンドウ
ストレージボリュームを追加するゲスト仮想マシンを選択します。をクリックします。ハードウェアの詳細ウィンドウが表示されます。図13.15 Hardware Details ウィンドウ
Add New Virtual Hardware ウィンドウが開きます。
ハードウェアタイプペインで Storage が選択されていることを確認します。図13.16 Add New Virtual Hardware ウィンドウ
ストレージボリュームのリストを表示します。
Select or create custom storage オプションのボタンを選択します。図13.17 Select Storage Volume ウィンドウ
ストレージボリュームを選択します。
Select Storage Volume ウィンドウの左側にあるリストからストレージプールを選択します。選択したストレージプールのストレージボリュームのリストが、Volumes リストに表示されます。注記ストレージプールは、Select Storage Volume ウィンドウから作成できます。詳細は、「Virtual Machine Manager を使用したストレージプールの作成」 を参照してください。Volumes リストからストレージボリュームを選択します。注記Select Storage Volume ウィンドウから、ストレージボリュームを作成できます。詳細は、「Virtual Machine Manager を使用したストレージボリュームの作成」 を参照してください。ストレージボリュームの設定
Device type リストからデバイスタイプを選択します。利用可能なタイプは、ディスクデバイス、フロッピーデバイス、および LUN パススルーです。Bus type リストからバスの種類を選択します。利用可能なバスの種類は、選択したデバイスタイプによって異なります。Cache modeリストからキャッシュモードを選択します。利用可能なキャッシュモードは次のとおりです: Hypervisor default、none、writethrough、writeback、directsync、unsafe
13.3.6.2.2. ゲストへのデフォルトストレージの追加
/var/lib/libvirt/images/
ディレクトリーのファイルベースのイメージです。
仮想マシンのハードウェアの詳細ウィンドウで Virtual Machine Manager を開きます。
root で virt-manager コマンドを実行するか、Applications → System Tools → Virtual Machine Manager を開き、virt-manager を開きます。図13.18 Virtual Machine Manager ウィンドウ
ストレージボリュームを追加するゲスト仮想マシンを選択します。をクリックします。ハードウェアの詳細ウィンドウが表示されます。図13.19 Hardware Details ウィンドウ
Add New Virtual Hardware ウィンドウが開きます。
ハードウェアタイプペインで Storage が選択されていることを確認します。図13.20 Add New Virtual Hardware ウィンドウ
ゲスト用のディスクの作成
Create a disk image for the virtual machine が選択できることを確認します。Create a disk image for the virtual machine オプションボタンの下にあるテキストボックスに、作成するディスクのサイズを入力します。
13.3.6.3. ゲストへの SCSI LUN ベースのストレージの追加
sgio
属性は、非特権 SCSI ジェネリック I/O (SG_IO) コマンドでdevice='lun'
ディスクをフィルターにかけるかどうかを制御します。sgio
属性は 'filtered'
または 'unfiltered'
に指定できますが、SG_IO ioctl コマンドが永続予約でゲストを通過できるようにするには、'unfiltered'
に設定する必要があります。
sgio='unfiltered'
の設定に加えて、<shareable>
要素を設定してゲスト間で LUN を共有する必要があります。指定されていない場合、sgio
属性のデフォルトは 'filtered'
になります。
<disk>
XML 属性の device='lun'
は、次のゲストディスク設定で有効です。
<source dev=
の'/dev/disk/by-{path|id|uuid|label}'
/>type='block'
<disk type='block' device='lun' sgio='unfiltered'> <driver name='qemu' type='raw'/> <source dev='/dev/disk/by-path/pci-0000\:04\:00.1-fc-0x203400a0b85ad1d7-lun-0'/> <target dev='sda' bus='scsi'/> <shareable/> </disk>
注記<source>
デバイス名のコロンの前にあるバックスラッシュは必須です。<source protocol='iscsi'... />
のtype='network'
<disk type='network' device='lun' sgio='unfiltered'> <driver name='qemu' type='raw'/> <source protocol='iscsi' name='iqn.2013-07.com.example:iscsi-net-pool/1'> <host name='example.com' port='3260'/> <auth username='myuser'> <secret type='iscsi' usage='libvirtiscsi'/> </auth> </source> <target dev='sda' bus='scsi'/> <shareable/> </disk>
type='volume'
(iSCSI または NPIV/vHBA のソースプールを SCSI ソースプールとして使用する場合)。以下の XML 例は、iSCSI ソースプール (名前は iscsi-net-pool) を SCSI ソースプールとして使用するゲストを示しています。<disk type='volume' device='lun' sgio='unfiltered'> <driver name='qemu' type='raw'/> <source pool='iscsi-net-pool' volume='unit:0:0:1' mode='host'/> <target dev='sda' bus='scsi'/> <shareable/> </disk>
注記<source>
タグ内のmode=
オプションはオプションになりますが、使用する場合は'direct'
ではなく'host'
に設定する必要があります。'host'
に設定すると、libvirt はローカルホストデバイスへのパスを見つけます。'direct'
に設定すると、libvirt はソースプールのソースホストデータを使用してデバイスへのパスを生成します。上記の例の iSCSI プール (iscsi-net-pool) の設定は、以下のようになります。# virsh pool-dumpxml iscsi-net-pool <pool type='iscsi'> <name>iscsi-net-pool</name> <capacity unit='bytes'>11274289152</capacity> <allocation unit='bytes'>11274289152</allocation> <available unit='bytes'>0</available> <source> <host name='192.168.122.1' port='3260'/> <device path='iqn.2013-12.com.example:iscsi-chap-netpool'/> <auth type='chap' username='redhat'> <secret usage='libvirtiscsi'/> </auth> </source> <target> <path>/dev/disk/by-path</path> <permissions> <mode>0755</mode> </permissions> </target> </pool>
iSCSI ソースプールで利用可能な LUN の詳細を確認するには、次のコマンドを実行します。# virsh vol-list iscsi-net-pool Name Path ------------------------------------------------------------------------------ unit:0:0:1 /dev/disk/by-path/ip-192.168.122.1:3260-iscsi-iqn.2013-12.com.example:iscsi-chap-netpool-lun-1 unit:0:0:2 /dev/disk/by-path/ip-192.168.122.1:3260-iscsi-iqn.2013-12.com.example:iscsi-chap-netpool-lun-2
type='volume'
(NPIV/vHBA ソースプールを SCSI ソースプールとして使用する場合)。以下の XML の例は、NPIV/vHBA ソースプール (名前は vhbapool_host3) を SCSI ソースプールとして使用するゲストを示しています。<disk type='volume' device='lun' sgio='unfiltered'> <driver name='qemu' type='raw'/> <source pool='vhbapool_host3' volume='unit:0:1:0'/> <target dev='sda' bus='scsi'/> <shareable/> </disk>
上記の例の NPIV/vHBA プール (vhbapool_host3) の設定は、以下のようになります。# virsh pool-dumpxml vhbapool_host3 <pool type='scsi'> <name>vhbapool_host3</name> <capacity unit='bytes'>0</capacity> <allocation unit='bytes'>0</allocation> <available unit='bytes'>0</available> <source> <adapter type='fc_host' parent='scsi_host3' managed='yes' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee045d'/> </source> <target> <path>/dev/disk/by-path</path> <permissions> <mode>0700</mode> <owner>0</owner> <group>0</group> </permissions> </target> </pool>
vHBA で利用可能な LUN の詳細を確認するには、次のコマンドを入力します。# virsh vol-list vhbapool_host3 Name Path ------------------------------------------------------------------------------ unit:0:0:0 /dev/disk/by-path/pci-0000:10:00.0-fc-0x5006016044602198-lun-0 unit:0:1:0 /dev/disk/by-path/pci-0000:10:00.0-fc-0x5006016844602198-lun-0
SCSI デバイスで NPIV vHBA を使用する方法は、「SCSI デバイスを使用する vHBA ベースのストレージプール」 を参照してください。
<disk device='lun'>
ゲストディスク設定は、この方法で割り当てることができます。使用環境に応じて、設定を置き換えます。
手順13.13 SCSI LUN ベースのストレージのゲストへの割り当て
- <disk> 要素を新しいファイルに書き込んでデバイスファイルを作成し、このファイルに XML 拡張子 (この例では sda.xml) を付けて保存します。
# cat sda.xml <disk type='volume' device='lun' sgio='unfiltered'> <driver name='qemu' type='raw'/> <source pool='vhbapool_host3' volume='unit:0:1:0'/> <target dev='sda' bus='scsi'/> <shareable/> </disk>
- sda.xml で作成したデバイスをゲスト仮想マシン (Guest1 など) に関連付けます。
# virsh attach-device --config Guest1 ~/sda.xml
注記--config
を指定して virsh attach-device コマンドを実行すると、ゲストを再起動してデバイスをゲストに永続的に追加する必要があります。また、--config
の代わりに--persistent
オプションを使用することもできます。これを使用すると、デバイスをゲストにホットプラグできます。
図13.21 virt-manager を使用した SCSI LUN ストレージの設定
ハードウェア障害後に公開された LUN に再接続する
dev_loss_tmo
オプションおよび fast_io_fail_tmo
カーネルオプションを変更します。
dev_loss_tmo
は、SCSI デバイスに障害が発生してから、SCSI レイヤーが障害としてマークされるまでの待ち時間を制御します。タイムアウトを防ぐため、最大値 (2147483647
) に設定することが推奨されます。fast_io_fail_tmo
は、SCSI デバイスに障害が発生してから I / O にフェイルバックするまでに SCSI 層が待機する時間を制御します。dev_loss_tmo
がカーネルに無視されないようにするには、このオプションの値をdev_loss_tmo
より小さい値に設定します。
dev_loss_tmo
および fast_io_fail
を変更するには、以下のいずれかの操作を行います。
/etc/multipath.conf
ファイルを編集し、defaults
セクションに値を設定します。defaults { ... fast_io_fail_tmo 20 dev_loss_tmo infinity }
dev_loss_tmo
およびfast_io_fail
は、以下のように、FC ホストまたはリモートポートのレベルで設定します。# echo 20 > /sys/devices/pci0000:00/0000:00:06.0/0000:13:00.0/host1/rport-1:0-0/fc_remote_ports/rport-1:0-0/fast_io_fail_tmo # echo 2147483647 > /sys/devices/pci0000:00/0000:00:06.0/0000:13:00.0/host1/rport-1:0-0/fc_remote_ports/rport-1:0-0/dev_loss_tmo
dev_loss_tmo
および fast_io_fail
の新しい値が有効であることを確認するには、以下のコマンドを使用します。
# find /sys -name dev_loss_tmo -print -exec cat {} \;
pci0000:00/0000:00:06.0/0000:13:00.0/host1/rport-1:0-0/fc_remote_ports/rport-1:0-0
の代わりに、適切なデバイスが使用されます)。
# find /sys -name dev_loss_tmo -print -exec cat {} \;
...
/sys/devices/pci0000:00/0000:00:06.0/0000:13:00.0/host1/rport-1:0-0/fc_remote_ports/rport-1:0-0/dev_loss_tmo
2147483647
...
13.3.6.4. ゲスト仮想マシンでのストレージコントローラーの管理
手順13.14 仮想 SCSI コントローラーの作成
- ゲスト仮想マシン (
Guest1
) の設定を表示し、以前から存在している SCSI コントローラーを検索します。# virsh dumpxml Guest1 | grep controller.*scsi
デバイスコントローラーが存在する場合は、このコマンドにより、次のような行が 1 つ以上出力されます。<controller type='scsi' model='virtio-scsi' index='0'/>
- 前の手順でデバイスコントローラーが表示されなかった場合は、以下の手順に従って、新しいファイルにデバイスコントローラーの説明を作成し、仮想マシンに追加します。
- 新しいファイルに
<controller>
要素を書き込んでデバイスコントローラーを作成し、このファイルを XML 拡張子で保存します。たとえば、virtio-scsi-controller.xml
となります。<controller type='scsi' model='virtio-scsi'/>
virtio-scsi-controller.xml
で作成したデバイスコントローラーをゲスト仮想マシン (例: Guest1) に関連付けます。# virsh attach-device --config Guest1 ~/virtio-scsi-controller.xml
この例では、--config
オプションはディスクと同じように動作します。詳細は、「ゲストへのストレージデバイスの追加」 を参照してください。
- 新しい SCSI ディスクまたは CD-ROM を追加します。新規ディスクは、「ゲストへのストレージデバイスの追加」 の方法を使用して追加できます。SCSI ディスクを作成する場合は、sd で始まるターゲットデバイス名を指定します。注記各コントローラーでサポートされる制限は 1024 virtio-scsi ディスクですが、ホストで利用可能なその他のリソース (ファイル記述子など) が使い切られ、ディスクが少なくなる可能性があります。詳細は、次の Red Hat Enterprise Linux 6 ホワイトペーパーを参照してください: The next-generation storage interface for the Red Hat Enterprise Linux Kernel Virtual Machine: virtio-scsi
# virsh attach-disk Guest1 /var/lib/libvirt/images/FileName.img sdb --cache none
ゲスト仮想マシンのドライバーのバージョンによっては、実行中のゲスト仮想マシンで新しいディスクがすぐに検出されない場合があります。『Red Hat Enterprise Linux Storage Administration Guide』 の手順に従います。
13.3.7. ゲストからのストレージデバイスの削除
13.3.7.1. virsh を使用した仮想マシンからのストレージの削除
# virsh detach-disk Guest1 vdb
13.3.7.2. Virtual Machine Manager を使用した仮想マシンからのストレージの削除
手順13.15 Virtual Machine Manager を使用した仮想マシンからのストレージの削除
仮想マシンのハードウェアの詳細ウィンドウで Virtual Machine Manager を開きます。
root で virt-manager コマンドを実行するか、Applications → System Tools → Virtual Machine Manager を開き、virt-manager を開きます。ストレージデバイスを削除するゲスト仮想マシンを選択します。をクリックします。ハードウェアの詳細ウィンドウが表示されます。ゲスト仮想マシンからストレージを削除します。
ハードウェアの詳細ペインの左側にあるハードウェアのリストから、ストレージデバイスを選択します。
第14章 qemu-img の使用
14.1. ディスクイメージの確認
# qemu-img check [-f format
] imgname
14.2. イメージへの変更の確定
# qemu-img commit [-f fmt] [-t cache] imgname
14.3. イメージの比較
-s
オプションを指定しても、イメージのサイズが異なる場合、またはセクターが 1 つのイメージに割り当てられており、2 番目のイメージには割り当てられていない場合に、イメージは同一とは見なされません。
# qemu-img compare [-f fmt] [-F fmt] [-p] [-s] [-q] imgname1 imgname2
0
- イメージは同一です。1
- イメージが異なります。2
- イメージの 1 つを開いている際にエラーが発生しました。3
- セクター割り当ての確認中にエラーが発生しました。4
- データの読み取り中にエラーが発生しました。
14.4. イメージのマッピング
# qemu-img map [-f fmt] [--output=fmt] imgname
human
形式と json
形式の 2 つがあります。
14.4.1. human
形式
human
) は、ゼロ以外で割り当てられたファイル部分のみをダンプします。この出力により、データの読み取り元となるファイルと、ファイル内のオフセットが識別されます。各行には、4 つのフィールドが含まれます。以下は、出力の例になります。
Offset Length Mapped to File 0 0x20000 0x50000 /tmp/overlay.qcow2 0x100000 0x10000 0x95380000 /tmp/backing.qcow2
0x20000
(131072) バイトが、オフセット 0x50000
(327680) から始まる tmp/overlay.qcow2
(raw 形式で開かれた) で利用可能であることを示しています。圧縮、暗号化、または raw 形式で利用できないデータは、human
形式が指定されているとエラーを発生させます。
human
形式の出力を解析しても安全ではありません。
14.4.2. json
形式
json
を指定すると、JSON 形式の辞書の配列を返します。human
オプションに記載されている情報のほかに、以下の情報が含まれます。
data
- セクターにデータが含まれるかどうかを示すブール値フィールドです。zero
- データがゼロとして読み取られることが知られているかどうかを示すブール値フィールドです。depth
-filename
のバッキングファイルの深さです。
json
オプションが指定されている場合、offset
フィールドはオプションになります。
14.5. イメージの修正
# qemu-img amend [-p] [-f fmt] [-t cache] -o options filename
14.6. 既存のイメージを別の形式に変換
convert
オプションは、認識されたイメージ形式を、別のイメージ形式に変換するために使用されます。使用可能な形式のリストは、「対応する qemu-img 形式」 を参照してください。
# qemu-img convert [-c] [-p] [-f fmt
] [-t cache
] [-O output_fmt
] [-o options
] [-S sparse_size
] filename output_filename
-p
パラメーターはコマンドの進捗を示し (すべてのコマンドではなく任意)、-S
フラグは、ディスクイメージに含まれる sparse file の作成を許可します。ゼロのみを含む (つまり、何も含まない) 物理ブロックを除いて、あらゆる目的のスパースファイルは標準ファイルのように機能します。オペレーティングシステムがこのファイルを認識すると、たとえ実際にはディスクを使用していなくても、存在しているものとして扱われ、実際のディスク領域を消費します。ゲスト仮想マシン用のディスクを作成する場合に特に役立ちます。これにより、ディスクに必要なディスク領域よりもはるかに多くのディスク領域が使用されるようになります。たとえば、10Gb のディスクイメージで -S を 50Gb に設定すると、実際には 10Gb しか使用されていなくても、そのディスク領域の 10Gb は 60Gb に見えます。
output_format
を使用して、ディスクイメージのfilename
を、ディスクイメージのoutput_filename
に変換します。ディスクイメージは、-c
オプションで圧縮するか、-o encryption
を設定して -o
オプションで暗号化できます。-o
パラメーターで使用できるオプションは、選択した形式により異なることに注意してください。
qcow2
と qcow2 形式のみが暗号化または圧縮をサポートします。qcow2
暗号化は、セキュアな 128 ビット鍵で AES 形式を使用します。qcow2
圧縮は読み取り専用であるため、圧縮したセクターが qcow2
形式から変換されると、非圧縮データとして新しい形式に書き込まれます。
14.7. 新しいイメージまたはデバイスの作成とフォーマット
size
で形式が format
の新しいディスクイメージfilenameを作成します。
# qemu-img create [-f format
] [-o options] filename [size
]
-o backing_file=filename
で指定されている場合は、イメージ自体とベースイメージの違いのみが記録されます。バッキングファイルは、commit コマンドを使用しない限り変更されません。この場合、サイズの指定は必要ありません。
14.8. イメージ情報の表示
# qemu-img info [-f format] filename
# qemu-img info /dev/vg-90.100-sluo/lv-90-100-sluo
image: /dev/vg-90.100-sluo/lv-90-100-sluo
file format: qcow2
virtual size: 20G (21474836480 bytes)
disk size: 0
cluster_size: 65536
14.9. イメージのバックアップファイルの再生
# qemu-img rebase [-f fmt] [-t cache] [-p] [-u] -b backing_file [-F backing_fmt] filename
safe
と unsafe
の 2 つがあります。
safe
モードは、デフォルトで使用され、実際のリベース操作を実行します。新しいバッキングファイルは古いファイルとは異なる場合があり、qemu-img rebase は、ゲストの仮想マシンで認識される filename の内容を変更せずに保持します。これを実現するため、filename の backing_file と古いバッキングファイルとで異なるクラスターは、すべて filename にマージされてから、バッキングファイルを変更します。
safe
モードはイメージの変換に相当する費用のかかる動作であることに注意してください。古いバッキングファイルは、正常に完了するために必要です。
unsafe
モードは、-u オプションが qemu-img rebase に渡される場合に使用されます。このモードでは、ファイルの内容を確認せずに、バッキングファイルの名前と filename の形式のみが変更されます。新しいバッキングファイルが正しく指定されていることを確認してください。指定されていない場合、イメージのゲストに表示されるコンテンツが破損します。
14.10. ディスクイメージのサイズ変更
# qemu-img resize filename size
+
を付けて拡大するか、-
を付けてディスクイメージのサイズをそのバイト数だけ縮小します。ユニットの接尾辞を追加すると、イメージのサイズをキロバイト (K)、メガバイト (M)、ギガバイト (G)、またはテラバイト (T) で設定できます。
# qemu-img resize filename [+|-]size[K|M|G|T]
14.11. スナップショットのリスト表示、作成、適用、および削除
# qemu-img snapshot [ -l | -a snapshot | -c snapshot | -d snapshot ] filename
- -l は、指定したディスクイメージに関連付けられているすべてのスナップショットをリスト表示します。
- apply オプション -a は、ディスクイメージ (filename) を、以前保存したスナップショットの状態に戻します。
- -c は、イメージ (filename) のスナップショット (snapshot) を作成します。
- -d は、指定したスナップショットを削除します。
14.12. 対応する qemu-img 形式
- raw - raw ディスクイメージ形式 (デフォルト)これは、ファイルベースで最も高速な形式になります。ファイルシステムがホール (ext2 や ext3 など ) に対応している場合は、書き込まれたセクターのみが領域を確保します。qemu-img info を使用して、イメージが使用する実際のサイズを取得するか、Unix/Linux の ls -ls を取得します。raw イメージは最適なパフォーマンスを提供しますが、raw イメージでは非常に基本的な機能しか利用できません。たとえば、スナップショットは利用できません。
- qcow2 - QEMU イメージ形式。最も汎用性が高く、機能セットが最適な形式です。これを使用して、オプションの AES 暗号化、zlib ベースの圧縮、複数の仮想マシンスナップショットへの対応、および小規模イメージを取得します。これは、ホールに対応していないファイルシステムで役に立ちます 。この拡張機能セットはパフォーマンスに影響を与えることに注意してください。ゲスト仮想マシンまたはホスト物理マシンでの実行には上記の形式のみを使用できますが、qemu-img は、raw、または qcow2 形式に変換するために、以下の形式も認識してサポートします。イメージの形式は、通常、自動的に検出されます。この形式を raw または qcow2 に変換することに加えて、raw または qcow2 から元の形式に戻すことができます。Red Hat Enterprise Linux 7 に同梱される qcow2 バージョンは 1.1 であることに注意してください。以前のバージョンの Red Hat Enterprise Linux に同梱されている形式は 0.10 です。イメージファイルは、以前のバージョンの qcow2 に戻すことができます。使用しているバージョンを確認するには、qemu-img info qcow2 [imagefilename.img] コマンドを実行します。qcow バージョンを変更するには、「target 要素の設定」 を参照してください。
- bochs - Bochs ディスクイメージ形式。
- cloop - Linux Compressed Loop イメージ。Knoppix CD-ROM などにある直接圧縮 CD-ROM イメージを再利用する場合にのみ役立ちます。
- cow - User Mode Linux Copy On Write イメージ形式。cow 形式は、以前のバージョンとの互換性のためにのみ同梱されています。
- dmg - Mac ディスクイメージ形式。
- nbd - ネットワークブロックデバイス。
- parallels - パラレル仮想化ディスクイメージ形式。
- qcow - 古い QEMU イメージ形式。古いバージョンとの互換性にのみ含まれます。
- qed - 古い QEMU イメージ形式。古いバージョンとの互換性にのみ含まれます。
- vdi - Oracle VM VirtualBox ハードディスクイメージ形式。
- vhdx - Microsoft Hyper-V virtual hard disk-X ディスクイメージ形式。
- vmdk - VMware 3 および 4 互換のイメージ形式。
- vfat - Virtual VFAT ディスクイメージ形式。
第15章 KVM の移行
15.1. 移行の定義と利点
- 負荷分散
- ゲスト仮想マシンは、ホストマシンが過負荷になった場合、または別のホストマシンが十分に活用されていない場合に、使用率の低いホスト物理マシンに移動できます。
- ハードウェアの非依存性
- ホストの物理マシンでハードウェアデバイスのアップグレード、追加、または削除が必要になった場合は、ゲスト仮想マシンを別のホストの物理マシンに安全に再配置できます。つまり、ゲスト仮想マシンでは、ハードウェアの改善のためのダウンタイムが発生しません。
- エネルギー節約
- 仮想マシンは他のホスト物理マシンに再配布できるため、アンロードしたホストシステムの電源を電力使用量の少ない時間帯に切ることで、節電やコスト削減が可能になります。
- 地理的な移行
- 仮想マシンは、待ち時間を短縮するため、または他の理由で必要な場合に、別の場所に移動できます。
15.2. 移行の要件および制限
移行の要件
- 次のいずれかのプロトコルを使用して、共有ストレージにインストールされたゲスト仮想マシン。
- ファイバーチャネルベースの LUN
- iSCSI
- NFS
- GFS2
- SCSI RDMA プロトコル (SCSI RCP) - Infiniband アダプターおよび 10GbE iWARP アダプターで使用されるブロックエクスポートプロトコル
libvirtd
サービスが有効で、実行していることを確認します。# systemctl enable libvirtd.service # systemctl restart libvirtd.service
- 効果的に移行する機能は、
/etc/libvirt/libvirtd.conf
ファイル内のパラメーター設定により異なります。このファイルを編集するには、以下の手順を使用します。手順15.1 libvirtd.conf の設定
libvirtd.conf
を開くには、root で次のコマンドを実行する必要があります。# vim /etc/libvirt/libvirtd.conf
- 必要に応じてパラメーターを変更し、ファイルを保存します。
libvirtd
サービスを再起動します。# systemctl restart libvirtd
- 移行プラットフォームとバージョンは、表15.1「ライブマイグレーションの互換性」 に対してチェックする必要があります。
- 共有ストレージメディアをエクスポートする別のシステムを使用してください。ストレージは、移行に使用される 2 台のホスト物理マシンのいずれにも存在しないようにする必要があります。
- 共有ストレージは、移行元システムと移行先システムの同じ場所にマウントする必要があります。マウントするディレクトリー名は同じである必要があります。別のパスを使用してイメージを保持することもできますが、推奨されません。virt-manager を使用して移行を実行する場合は、パス名が同じである必要があります。virsh を使用して移行を実行する場合は、
--xml
オプションまたは pre-hooks で別のネットワーク設定とマウントディレクトリーを使用できます。pre-hooks の詳細は libvirt upstream documentation を参照し、XML オプションの詳細は23章ドメイン XML の操作 を参照してください。 - パブリックブリッジ + タップネットワーク内の既存のゲスト仮想マシンで移行を試行する場合、移行元ホストマシンと移行先ホストマシンが同じネットワークに存在する必要があります。この手順を行わないと、ゲストの仮想マシンネットワークが移行後に動作しません。
移行の制限
- KVM に基づく仮想化技術を使用する Red Hat Enterprise Linux でゲスト仮想マシンの移行を使用する場合には、以下の制限があります。
- ポイントツーポイント移行 – 送信元ハイパーバイザーから宛先ハイパーバイザーを指定するには手動で実行する必要があります
- 検証またはロールバックは利用できません
- ターゲットの決定は手動でのみ行うことができます。
- ストレージの移行は Red Hat Enterprise Linux 7™ ではライブで実行できませんが、ゲスト仮想マシンの電源がオフのときにストレージを移行できます。ライブストレージの移行は、Red Hat Virtualization™ で利用できます。詳細は、サービス担当者にお問い合わせください。
15.3. ライブマイグレーションと Red Hat Enterprise Linux バージョンの互換性
移行の方法 | リリースタイプ | 例 | ライブ移行のサポート | 注記 |
---|---|---|---|---|
前方 | メジャーリリース | 6.5+ → 7.x | フルサポート | 問題がある場合は報告する必要があります |
後方 | メジャーリリース | 7.x → 6.y | サポート対象外 | |
前方 | マイナーリリース | 7.x → 7.y (7.0 → 7.1) | フルサポート | 問題がある場合は報告する必要があります |
後方 | マイナーリリース | 7.y → 7.x (7.1 → 7.0) | フルサポート | 問題がある場合は報告する必要があります |
移行に関する問題のトラブルシューティング
- 移行プロトコルの問題 - 後方移行が "unknown section error" で終了する場合は、一時的なエラーである可能性があるため、移行プロセスを繰り返すことで問題を修復できます。そうでない場合は、問題を報告してください。
- オーディオデバイスに関する問題 - Red Hat Enterprise Linux 6.x から Red Hat Enterprise Linux 7.y への移行時に、es1370 オーディオカードに対応しなくなった点に注意してください。代わりに ac97 オーディオカードを使用してください。
- ネットワークカードに関する問題 - Red Hat Enterprise Linux 6.x から Red Hat Enterprise Linux 7.y に移行する際に、pcnet ネットワークカードおよび ne2k_pci ネットワークカードに対応しなくなった点に注意してください。代わりに virtio-net ネットワークデバイスを使用してください。
ネットワークストレージの設定
共有ストレージを設定し、共有ストレージにゲスト仮想マシンをインストールします。
15.5. virsh を使用した KVM のライブ移行
# virsh migrate --live GuestName DestinationURL
GuestName
パラメーターは、移行するゲスト仮想マシンの名前を表します。
DestinationURL
パラメーターは、宛先ホスト物理マシンの接続 URL です。移行先システムで同じバージョンの Red Hat Enterprise Linux を実行し、同じハイパーバイザーを使用し、libvirt を実行している必要があります。
DestinationURL
パラメーターのセマンティックは異なります。
- 通常の移行 -
DestinationURL
は、移行元ゲスト仮想マシンから見た、移行先ホストの物理マシンの URL です。 - peer2peer 移行:
DestinationURL
は、ソースホスト物理マシンから見たターゲットホスト物理マシンの URL です。
例: virsh を使用したライブマイグレーション
この例では、host1.example.com
から host2.example.com
に移行します。使用環境に合わせて、ホストの物理マシン名を変更します。この例では、guest1-rhel6-64
という名前の仮想マシンを移行します。
ゲスト仮想マシンが実行していることを確認します。
移行元システムで、host1.example.com
を実行し、guest1-rhel6-64
が実行していることを確認します。[root@host1 ~]# virsh list Id Name State ---------------------------------- 10 guest1-rhel6-64 running
ゲスト仮想マシンの移行
次のコマンドを実行して、ゲスト仮想マシンを移行先host2.example.com
にライブ移行します。リンク先の URL の末尾に/system
を追加し、フルアクセスが必要であることを libvirt に指示します。# virsh migrate --live
guest1-rhel7-64 qemu+ssh://host2.example.com/system
コマンドを入力すると、インストール先システムの root パスワードを求められます。Wait
負荷やゲスト仮想マシンのサイズによっては、移行に時間がかかる場合があります。virsh はエラーのみを報告します。ゲスト仮想マシンは、完全に移行するまで、移行元ホストの物理マシンで実行し続けます。ゲスト仮想マシンが移行先ホストに到達していることを確認する
移行先システムから、host2.example.com
、guest1-rhel7-64
が実行していることを確認します。[root@host2 ~]# virsh list Id Name State ---------------------------------- 10 guest1-rhel7-64 running
# virsh migrate --offline --persistent
15.5.1. virsh を使用した移行に関する追加のヒント
- 手順15.1「libvirtd.conf の設定」 の説明に従って、libvirtd.conf ファイルを開きます。
- Processing controls のセクションを探します。
################################################################# # # Processing controls # # The maximum number of concurrent client connections to allow # over all sockets combined. #max_clients = 5000 # The maximum length of queue of connections waiting to be # accepted by the daemon. Note, that some protocols supporting # retransmission may obey this so that a later reattempt at # connection succeeds. #max_queued_clients = 1000 # The minimum limit sets the number of workers to start up # initially. If the number of active clients exceeds this, # then more threads are spawned, upto max_workers limit. # Typically you'd want max_workers to equal maximum number # of clients allowed #min_workers = 5 #max_workers = 20 # The number of priority workers. If all workers from above # pool will stuck, some calls marked as high priority # (notably domainDestroy) can be executed in this pool. #prio_workers = 5 # Total global limit on concurrent RPC calls. Should be # at least as large as max_workers. Beyond this, RPC requests # will be read into memory and queued. This directly impact # memory usage, currently each request requires 256 KB of # memory. So by default upto 5 MB of memory is used # # XXX this isn't actually enforced yet, only the per-client # limit is used so far #max_requests = 20 # Limit on concurrent requests from a single client # connection. To avoid one client monopolizing the server # this should be a small fraction of the global max_requests # and max_workers parameter #max_client_requests = 5 #################################################################
max_clients
パラメーターおよびmax_workers
パラメーターの設定を変更します。両方のパラメーターの番号が同じであることが推奨されます。max_clients
は、移行ごとに 2 つのクライアント (各側に 1 つ) を使用します。max_workers
は、実行フェーズ中に移行元で 1 つのワーカーと、移行先で 0 のワーカーを使用し、終了フェーズ中に移行先でワーカーを 1 つ使用します。重要max_clients
パラメーターおよびmax_workers
パラメーターの設定は、libvirtd サービスへのゲスト仮想マシンのすべての接続の影響を受けます。つまり、同じゲスト仮想マシンを使用し、同時に移行を実行しているユーザーは、max_clients
パラメーターおよびmax_workers
パラメーターの設定で設定された制限に従います。このため、同時ライブマイグレーションを実行する前に、最大値を慎重に検討する必要があります。重要max_clients
パラメーターは、libvirt への接続を許可するクライアントの数を制御します。一度に多数のコンテナーを起動すると、この制限に簡単に到達して超過する可能性があります。max_clients
パラメーターの値は、これを回避するために増やすことができますが、増やすと、インスタンスに対する DoS (DoS) 攻撃に対してシステムが脆弱になる可能性があります。この問題を軽減するために、Red Hat Enterprise Linux 7.0 では、許可されているものの、まだ認証されていない接続の制限を指定する新しいmax_anonymous_clients
設定が導入されました。ワークロードに合わせて、max_clients
とmax_anonymous_clients
を組み合わせて実装できます。- ファイルを保存し、サービスを再起動します。注記起動したにもかかわらず認証されていない ssh セッションが多すぎるために、移行接続が切断する場合があります。デフォルトでは、
sshd
で許可されるセッションは 10 セッションのみで、常に "pre-authenticated state" となります。この設定は、sshd 設定ファイル (ここでは/etc/ssh/sshd_config
) のMaxStartups
パラメーターで制御されます。これには調整が必要な場合があります。この制限は DoS 攻撃 (および一般的なリソースの過剰使用) を防ぐために設定されているため、このパラメーターの調整は慎重に行ってください。この値を高く設定しすぎると、目的が無効になります。このパラメーターを変更するには、ファイル/etc/ssh/sshd_config
を変更し、MaxStartups 行の先頭から#を削除して、10
(デフォルト値) をより大きな数値に変更します。必ず保存して、sshd
サービスを再起動してください。詳細は、man ページのsshd_config
を参照してください。
15.5.2. virsh migrate コマンドの追加オプション
- --direct - 直接移行に使用されます。
- --p2p - ピアツーピア移行に使用されます。
- --tunneled - トンネルマイグレーションに使用されます。
- --offline - 移行先のドメインを起動せず、また、移行元ホストで停止することなく、ドメイン定義を移行します。オフラインマイグレーションは、非アクティブなドメインで使用できるため、--persistent オプションで使用する必要があります。
- --persistent - 移行先ホストの物理マシンでドメインを永続的な状態にします。
- --undefinesource - 移行元ホストの物理マシンでドメインの定義を解除する
- --suspend - ドメインを移行先ホスト物理マシンで一時停止したままにします。
- --change-protection - 移行の進行中に、互換性のない設定変更がドメインに行われないように強制します。ハイパーバイザーによるサポートがある場合にこのフラグが暗黙的に有効になりますが、ハイパーバイザーに変更保護の対応がない場合に明示的に使用して移行を拒否できます。
- --unsafe - すべての安全手順を無視して、強制的に移行を実行します。
- --verbose - 移行の進行状況を表示します。
- --compressed - ライブマイグレーション中に繰り返し転送する必要があるメモリーページの圧縮をアクティブにします。
- --abort-on-error - 移行中にソフトエラー (I/O エラーなど) が発生すると、移行をキャンセルします。
- --domain [name] - ドメインネーム、ID、または UUID を設定します。
- --desturi [URI] - クライアント (通常の移行) またはソース (p2p 移行) から見た宛先ホストの接続 URI。
- --migrateuri [URI] - 移行 URI です。通常は省略できます。
- --graphicsuri [URI] - シームレスなグラフィックス移行に使用されるグラフィックス URI。
- --listen-address [address] - 移行先のハイパーバイザーが着信時にバインドするリッスンアドレスを設定します。
- --timeout [seconds] - ライブマイグレーションカウンターが N 秒を超えると、ゲスト仮想マシンが強制的にサスペンドします。ライブマイグレーションでのみ使用できます。タイムアウトが開始されると、一時停止されたゲスト仮想マシンで移行が続行されます。
- --dname [newname] - 移行中にドメインの名前を変更するために使用されますが、通常は省略できます。
- --xml [filename] - 指定されたファイル名を使用して、宛先で使用する別の XML ファイルを提供できます。このファイル名は、基となるストレージへのアクセスで、ソースと宛先の名前の相違を考慮するなど、ホスト固有のドメイン XML の部分にさらに多くの変更を加えます。このオプションは通常、省略されます。
- --migrate-disks [disk_identifiers] - このオプションを使用して、移行中にコピーするディスクを選択できます。これにより、特定のディスクをコピーすることが望ましくない場合 (コピー先にディスクがすでに存在する場合や、不要になった場合など) に、より効率的なライブマイグレーションが可能になります。[disk_identifiers] は、ドメイン XML ファイルの
<target dev= />
行にある引数で識別される、移行するディスクのコンマ区切りのリストに置き換える必要があります。
- virsh migrate-setmaxdowntime [domain] [downtime] - 別のホストにライブマイグレーションされているドメインで許容されるダウンタイムの上限を設定します。指定されたダウンタイムはミリ秒単位で表されます。指定するドメインは、移行するドメインと同じである必要があります。
- virsh migrate-compcache [domain]
--size
- ライブマイグレーション中に繰り返し転送されるメモリーページを圧縮するために使用されるキャッシュのサイズ (バイト) を設定または取得します。--size
を使用しないと、圧縮キャッシュの現在のサイズが表示されます。--size
を使用し、バイト単位で指定すると、ハイパーバイザーは、指定されたサイズに合わせて圧縮を変更するように求められます。これに続いて、現在のサイズが表示されます。--size
引数は、ドメインがライブマイグレーション中に、マイグレーションの進捗状況と、domjobinfoから取得される圧縮キャッシュミスの数の増加への反応として使用されることになっています。 - virsh migrate-setspeed [domain] [bandwidth] - 別のホストに移行される指定されたドメインの移行帯域幅を Mib /秒で設定します。
- virsh migrate-getspeed [domain] - 指定されたドメインで使用可能な最大移行帯域幅を Mib /秒で取得します。
15.6. virt-manager を使用した移行
ターゲットホストの物理マシンへの接続
virt-manager インターフェイス で、 メニューを選択して、ターゲットホストの物理マシンに接続し、 をクリックします。接続の追加
Add Connection ウィンドウが表示されます。図15.1 ターゲットホストの物理マシンへの接続の追加
以下の詳細を入力します。- Hypervisor: を選択します。
- Method: 接続方法を選択します。
- Username: リモートホストの物理マシンのユーザー名を入力します。
- Hostname: リモートホストの物理マシンのホスト名を入力します。
注記接続オプションの詳細は、「リモート接続の追加」 を参照してください。図15.2 パスワードを入力
共有ストレージの設定
移行元ホストと移行先ホストの両方が、ストレージ (NFS の使用 など) を共有していることを確認します。ゲスト仮想マシンの移行
移行するゲストを右クリックし、をクリックします。図15.3 移行先ホストの物理マシンの選択と、移行プロセスの開始
進捗ウィンドウが表示されます。図15.4 進捗ウィンドウ
移行が問題なく終了すると、virt-manager は、移行先ホストで実行している、新しく移行したゲスト仮想マシンを表示します。図15.5 移行先ホストの物理マシンで実行している移行ゲスト仮想マシン
第16章 ゲスト仮想マシンのデバイス設定
- エミュレートされたデバイス は、実際のハードウェアを模倣する純粋な仮想デバイスであり、未変更のゲストオペレーティングシステムが標準のインボックスドライバーを使用して動作できるようにします。
- Virtio デバイス (paravirtualized とも呼ばれます) は、純粋に仮想マシンで最適に機能するように設計された仮想デバイスです。Virtio デバイスはエミュレートされたデバイスに似ていますが、Linux 以外の仮想マシンには、デフォルトで必要なドライバーが含まれません。Virtual Machine Manager (virt-manager) や Red Hat Virtualization Hypervisor などの仮想化管理ソフトウェアは、サポートされている Linux 以外のゲストオペレーティングシステム用にこれらのドライバーを自動的にインストールします。Red Hat Enterprise Linux 7 は、最大 216 の virtio デバイスに対応します。詳細は、5章KVM 準仮想化 (virtio) ドライバー. を参照してください。
- 割り当てられたデバイス は、仮想マシンに公開される物理デバイスです。この方法は passthrough としても知られています。デバイスの割り当てにより、仮想マシンはさまざまなタスクで PCI デバイスに排他的にアクセスできるようになり、PCI デバイスがゲストオペレーティングシステムに物理的に接続されているかのように見え、動作します。Red Hat Enterprise Linux 7 は、仮想マシンごとに最大 32 の割り当てられたデバイスをサポートします。デバイスの割り当ては、一部のグラフィックデバイス を含む PCIe デバイスでサポートされています。パラレル PCI デバイスは、割り当てられたデバイスとしてサポートされる場合がありますが、セキュリティーとシステム設定の競合のために厳しい制限があります。
vfio_iommu_type1
モジュールへの allow_unsafe_interrupts
を使用した PCI デバイスの割り当てを引き続き許可するように、管理者がオプトインする場合があります。これは、以下を含む /etc/modprobe.d
に .conf ファイル (local.conf
など) を追加することで、永続的に実行できます。
options vfio_iommu_type1 allow_unsafe_interrupts=1または sysfs エントリーを使用して動的に同じことを行います。
# echo 1 > /sys/module/vfio_iommu_type1/parameters/allow_unsafe_interrupts
16.1. PCI デバイス
手順16.1 PCI デバイス割り当てのための Intel システムの準備
Intel VT-d 仕様を有効にする
Intel VT-d 仕様では、物理デバイスを仮想マシンに直接割り当てるハードウェアサポートが提供されます。この仕様は、Red Hat Enterprise Linux で PCI デバイスの割り当てを使用するために必要です。Intel VT-d 仕様は、BIOS で有効にする必要があります。システムの製造元によっては、この仕様をデフォルトで無効にしている場合があります。これらの仕様を表示するのに使用される用語はメーカーにより異なります。適切な用語は、システムの製造元のドキュメントを参照してください。カーネルで Intel VT-d をアクティブにします。
/etc/sysconfig/grub
ファイル内の GRUB_CMDLINX_LINUX 行の末尾に、引用符で囲んでintel_iommu=on
パラメーターおよびiommu=pt
パラメーターを追加して、カーネル内で Intel VT-d をアクティブにします。以下は、Intel VT-d を有効にした修正grub
です。GRUB_CMDLINE_LINUX="rd.lvm.lv=vg_VolGroup00/LogVol01 vconsole.font=latarcyrheb-sun16 rd.lvm.lv=vg_VolGroup_1/root vconsole.keymap=us $([ -x /usr/sbin/rhcrashkernel-param ] && /usr/sbin/ rhcrashkernel-param || :) rhgb quiet intel_iommu=on iommu=pt"
設定ファイルの再生成
以下を実行して /etc/grub2.cfg を再生成します。grub2-mkconfig -o /etc/grub2.cfg
UEFI ベースのホストを使用している場合は、ターゲットファイルが/etc/grub2-efi.cfg
であることに注意してください。使用準備完了
システムを再起動して、変更を有効にします。これで、システムで PCI デバイスの割り当てが可能になります。
手順16.2 PCI デバイス割り当て用の AMD システムの準備
AMD IOMMU 仕様を有効にする
Red Hat Enterprise Linux で PCI デバイスの割り当てを使用するには、AMD IOMMU の仕様が必要です。この仕様は、BIOS で有効にする必要があります。システムの製造元によっては、この仕様をデフォルトで無効にしている場合があります。IOMMU カーネルサポートの有効化
システムの起動時に AMD IOMMU 仕様が有効になるように、/etc/sysconfig/grub
の GRUB_CMDLINX_LINUX 行の末尾に引用符で囲ってiommu=pt
を追加します。設定ファイルの再生成
以下を実行して /etc/grub2.cfg を再生成します。grub2-mkconfig -o /etc/grub2.cfg
UEFI ベースのホストを使用している場合は、ターゲットファイルが/etc/grub2-efi.cfg
であることに注意してください。使用準備完了
システムを再起動して、変更を有効にします。これで、システムで PCI デバイスの割り当てが可能になります。
16.1.1. virsh を使用した PCI デバイスの割り当て
pci_0000_01_00_0
、および完全に仮想化されたゲストマシン guest1-rhel7-64 を持つ PCIe ネットワークコントローラーを使用します。
手順16.3 virsh を使用した PCI デバイスのゲスト仮想マシンへの割り当て
デバイスの識別
まず、仮想マシンへのデバイス割り当てに指定されている PCI デバイスを特定します。使用可能な PCI デバイスのリストを表示する場合は、lspci コマンドを実行します。grep を使用して、lspci の出力を絞り込むことができます。この例では、以下の出力で強調表示されているイーサネットコントローラーを使用します。# lspci | grep Ethernet 00:19.0 Ethernet controller: Intel Corporation 82567LM-2 Gigabit Network Connection 01:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01) 01:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
このイーサネットコントローラーは、短い識別子00:19.0
で表示されます。この PCI デバイスを仮想マシンに割り当てるには、virsh が使用する完全な ID を確認する必要があります。これを行うには、virsh nodedev-list コマンドを使用して、ホストマシンに接続されている特定タイプ (pci
) のデバイスをすべてリスト表示します。次に、使用するデバイスの短い識別子にマップする文字列の出力を調べます。この例では、短い識別子00:19.0
を使用して、イーサネットコントローラーにマップする文字列を示しています。:
文字および.
文字は、完全識別子の下線に置き換えられることに注意してください。# virsh nodedev-list --cap pci pci_0000_00_00_0 pci_0000_00_01_0 pci_0000_00_03_0 pci_0000_00_07_0 pci_0000_00_10_0 pci_0000_00_10_1 pci_0000_00_14_0 pci_0000_00_14_1 pci_0000_00_14_2 pci_0000_00_14_3 pci_0000_00_19_0 pci_0000_00_1a_0 pci_0000_00_1a_1 pci_0000_00_1a_2 pci_0000_00_1a_7 pci_0000_00_1b_0 pci_0000_00_1c_0 pci_0000_00_1c_1 pci_0000_00_1c_4 pci_0000_00_1d_0 pci_0000_00_1d_1 pci_0000_00_1d_2 pci_0000_00_1d_7 pci_0000_00_1e_0 pci_0000_00_1f_0 pci_0000_00_1f_2 pci_0000_00_1f_3 pci_0000_01_00_0 pci_0000_01_00_1 pci_0000_02_00_0 pci_0000_02_00_1 pci_0000_06_00_0 pci_0000_07_02_0 pci_0000_07_03_0
使用するデバイスにマップする PCI デバイス番号を記録します。これは別の手順で必要になります。デバイス情報の確認
ドメイン、バス、および機能の情報は、virsh nodedev-dumpxml コマンドの出力から取得できます。図16.1 ダンプの内容
# virsh nodedev-dumpxml pci_0000_00_19_0 <device> <name>pci_0000_00_19_0</name> <parent>computer</parent> <driver> <name>e1000e</name> </driver> <capability type='pci'> <domain>0</domain> <bus>0</bus> <slot>25</slot> <function>0</function> <product id='0x1502'>82579LM Gigabit Network Connection</product> <vendor id='0x8086'>Intel Corporation</vendor> <iommuGroup number='7'> <address domain='0x0000' bus='0x00' slot='0x19' function='0x0'/> </iommuGroup> </capability> </device>
注記IOMMU グループは、IOMMU からの視認性とデバイスの分離に基づいて決定されます。各 IOMMU グループには、1 つ以上のデバイスを含めることができます。複数のデバイスが存在する場合は、グループ内のすべてのデバイスがゲストに割り当てられるため、IOMMU グループ内のすべてのエンドポイントが要求されます。これは、追加のエンドポイントをゲストに割り当てるか、virsh nodedev-detach を使用してホストドライバーから外すことで実行できます。1 つのグループに含まれるデバイスが複数のゲストに分割されたり、ホストとゲストが分割されたりすることはありません。PCIe root ポート、スイッチポート、ブリッジなどのエンドポイント以外のデバイスは、ホストドライバーから分離しないでください。また、エンドポイントの割り当てに影響を及ぼしません。IOMMU グループ内のデバイスは、virsh nodedev-dumpxml 出力の IOMMU グループセクションを使用して決定できます。グループの各メンバーは、別のアドレスフィールドで提供されます。この情報は、sysfs で以下を使用して取得することもできます。$ ls /sys/bus/pci/devices/0000:01:00.0/iommu_group/devices/
この出力の例を以下に示します。0000:01:00.0 0000:01:00.1
ゲストに 0000.01.00.0 のみを割り当てるには、ゲストを起動する前に、使用されていないエンドポイントをホストから分離する必要があります。$ virsh nodedev-detach pci_0000_01_00_1
必要な設定の詳細を決定する
設定ファイルに必要な値は、virsh nodedev-dumpxml pci_0000_00_19_0 コマンドの出力を参照してください。この例のデバイスは、bus = 0、slot = 25、および function = 0 の値を持ちます。10 進数の設定では、この 3 つの値が使用されます。bus='0' slot='25' function='0'
設定の詳細の追加
virsh edit を実行し、仮想マシン名を指定し、<devices>
セクションにデバイスエントリーを追加して、PCI デバイスをゲスト仮想マシンに割り当てます。以下に例を示します。# virsh edit guest1-rhel7-64
図16.2 PCI デバイスの追加
<devices> [...] <hostdev mode='subsystem' type='pci' managed='yes'> <source> <address domain='0' bus='0' slot='25' function='0'/> </source> </hostdev> [...] </devices>
または、virsh attach-device を実行して、仮想マシンの名前とゲストの XML ファイルを指定します。virsh attach-device guest1-rhel7-64
file.xml
注記PCI デバイスには、デバイスファームウェアまたはデバイス用の起動前ドライバー (PXE など) を提供するための オプションの読み取り専用メモリー (ROM) モジュール (オプション ROM または 拡張 ROM としても知られている) が含まれます。通常、このオプション ROM は、PCI デバイスの割り当てを使用して物理 PCI デバイスを仮想マシンに接続する際に、仮想環境でも機能します。ただし、オプション ROM が必要ない場合があります。これにより、仮想マシンの起動に時間がかかったり、デバイスが提供する起動前ドライバーが仮想化と互換性がなくなり、ゲスト OS の起動に失敗する可能性があります。この場合、Red Hat は、仮想マシンからオプション ROM をマスクすることを推奨します。これを行うには、以下を行います。- ホストで、割り当てるデバイスに拡張 ROM ベースアドレスレジスタ (BAR) があることを確認します。これを行うには、デバイスに対して lspci -v コマンドを使用し、以下を含む行の出力を確認します。
Expansion ROM at
- <rom bar='off'/> 要素を、ゲストの XML 設定の <hostdev> 要素の子として追加します。
<hostdev mode='subsystem' type='pci' managed='yes'> <source> <address domain='0' bus='0' slot='25' function='0'/> </source> <rom bar='off'/> </hostdev>
仮想マシンの起動
# virsh start guest1-rhel7-64
16.1.2. virt-manager を使用した PCI デバイスの割り当て
手順16.4 virt-manager を使用した PCI デバイスのゲスト仮想マシンへの割り当て
ハードウェア設定を開く
ゲスト仮想マシンを開き、をクリックして、仮想マシンに新しいデバイスを追加します。図16.3 仮想マシンのハードウェア情報ウィンドウ
PCI デバイスの選択
左側の Hardware リストから PCI Host Device を選択します。未使用の PCI デバイスを選択します。現在、別のゲストが使用している PCI デバイスを選択すると、エラーが発生することに注意してください。この例では、予備のオーディオコントローラーが使用されています。Finish を選択して設定を完了します。図16.4 Add new virtual hardware ウィザード
新しいデバイスの追加
セットアップが完了し、ゲスト仮想マシンが PCI デバイスに直接アクセスできるようになりました。図16.5 仮想マシンのハードウェア情報ウィンドウ
16.1.3. virt-install を使用した PCI デバイスの割り当て
--host-device
パラメーターを使用します。
手順16.5 virt-install を使用した、仮想マシンへの PCI デバイスの割り当て
デバイスの識別
ゲスト仮想マシンにデバイス割り当てに指定されている PCI デバイスを特定します。# lspci | grep Ethernet 00:19.0 Ethernet controller: Intel Corporation 82567LM-2 Gigabit Network Connection 01:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01) 01:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
virsh nodedev-list コマンドは、システムに接続されているすべてのデバイスのリストを表示し、各 PCI デバイスを文字列で識別します。出力を PCI デバイスに限定するには、次のコマンドを実行します。# virsh nodedev-list --cap pci pci_0000_00_00_0 pci_0000_00_01_0 pci_0000_00_03_0 pci_0000_00_07_0 pci_0000_00_10_0 pci_0000_00_10_1 pci_0000_00_14_0 pci_0000_00_14_1 pci_0000_00_14_2 pci_0000_00_14_3 pci_0000_00_19_0 pci_0000_00_1a_0 pci_0000_00_1a_1 pci_0000_00_1a_2 pci_0000_00_1a_7 pci_0000_00_1b_0 pci_0000_00_1c_0 pci_0000_00_1c_1 pci_0000_00_1c_4 pci_0000_00_1d_0 pci_0000_00_1d_1 pci_0000_00_1d_2 pci_0000_00_1d_7 pci_0000_00_1e_0 pci_0000_00_1f_0 pci_0000_00_1f_2 pci_0000_00_1f_3 pci_0000_01_00_0 pci_0000_01_00_1 pci_0000_02_00_0 pci_0000_02_00_1 pci_0000_06_00_0 pci_0000_07_02_0 pci_0000_07_03_0
PCI デバイス番号を記録します。この番号は他の手順で確認する必要があります。ドメイン、バス、および機能の情報は、virsh nodedev-dumpxml コマンドの出力から取得できます。# virsh nodedev-dumpxml pci_0000_01_00_0
図16.6 PCI デバイスファイルの内容
<device> <name>pci_0000_01_00_0</name> <parent>pci_0000_00_01_0</parent> <driver> <name>igb</name> </driver> <capability type='pci'> <domain>0</domain> <bus>1</bus> <slot>0</slot> <function>0</function> <product id='0x10c9'>82576 Gigabit Network Connection</product> <vendor id='0x8086'>Intel Corporation</vendor> <iommuGroup number='7'> <address domain='0x0000' bus='0x00' slot='0x19' function='0x0'/> </iommuGroup> </capability> </device>
注記IOMMU グループに複数のエンドポイントがあり、そのすべてがゲストに割り当てられていない場合は、ゲストを起動する前に次のコマンドを実行して、ホストからその他のエンドポイントの割り当てを手動で解除する必要があります。$ virsh nodedev-detach pci_0000_00_19_1
IOMMU グループの詳細は、「virsh を使用した PCI デバイスの割り当て」 の 注記 を参照してください。デバイスの追加
virsh nodedev コマンドから出力された PCI 識別子を、--host-device
パラメーターの値として使用します。virt-install \ --name=guest1-rhel7-64 \ --disk path=/var/lib/libvirt/images/guest1-rhel7-64.img,size=8 \ --vcpus=2 --ram=2048 \ --location=http://example1.com/installation_tree/RHEL