「Libvirt」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(Pkg/AUR テンプレートの更新)
 
(2人の利用者による、間の9版が非表示)
1行目: 1行目:
 
{{DISPLAYTITLE:libvirt}}
 
{{DISPLAYTITLE:libvirt}}
 
[[Category:仮想化]]
 
[[Category:仮想化]]
[[en:libvirt]]
+
[[en:Libvirt]]
[[zh-CN:libvirt]]
+
[[zh-hans:Libvirt]]
  +
[[zh-hant:Libvirt]]
 
{{Related articles start}}
 
{{Related articles start}}
{{Related2|QEMU|QEMU}}
+
{{Related|QEMU}}
{{Related2|KVM|KVM}}
+
{{Related|KVM}}
{{Related2|VirtualBox|VirtualBox}}
+
{{Related|VirtualBox}}
 
{{Related|Xen}}
 
{{Related|Xen}}
{{Related2|VMware|VMware}}
+
{{Related|VMware}}
  +
{{Related|OVMF による PCI パススルー}}
 
{{Related articles end}}
 
{{Related articles end}}
libvirt は仮想マシン (VM) を管理するための仮想化 API とデーモンです -- リモートまたはローカルを問わず、複数の仮想化バックエンドを使用できます ([[QEMU|QEMU]]/[[KVM|KVM]], [[VirtualBox|VirtualBox]], [[Xen]] など)。この記事では libvirt に関すること全ては扱わず、一目見ただけでは直感的にわからなかったり、あまりドキュメントが整っていないことだけをカバーします。
 
   
  +
[http://wiki.libvirt.org/page/FAQ#Libvirt_FAQ libvirt: The virtualization API] より:
==インストール==
 
  +
:Libvirt は仮想マシンや、ストレージ・ネットワークインターフェイスの管理などの仮想化機能を管理するための便利な手段を提供するソフトウェアのコレクションです。ソフトウェアには API ライブラリ、デーモン (libvirtd)、コマンドラインユーティリティ (virsh) が含まれています。
サーバー側では、[[公式リポジトリ]]から以下のパッケージと、さらに [[QEMU|QEMU]] などの仮想化バックエンドを[[pacman|インストール]]する必要があります:
 
* {{Pkg|libvirt}}
 
* {{Pkg|virt-manager}} (VM をインストール・管理するプログラム、そして GUI インターフェイスが含まれています)
 
* {{Pkg|bridge-utils}} または {{Pkg|dnsmasq}} (ネットワーク共有のため)
 
   
  +
:libvirt の目標は様々な仮想化プロバイダ/ハイパーバイザを管理する共通の手段を提供することにあります。
クライアント側では、以下のパッケージが必要です:
 
* {{Pkg|virt-manager}}
 
* {{Pkg|virtviewer}}
 
   
  +
:libvirt の主な特徴は以下の通りです:
{{Note|サーバーとクライアントは同じ物理マシンにすることができます。}}
 
  +
:*''VM 管理'': 起動・停止・一時停止・保存・復旧・移行などの様々なドメイン操作。ディスク・ネットワークインターフェイス・メモリ・CPU など多数のデバイスのホットプラグ制御。
  +
:*''リモートマシンのサポート'': libvirt デーモンが走ってるマシンなら libvirt の機能は全て使うことができます。リモートマシンも例外ではありません。リモートで接続するための様々なネットワーク転送をサポートしています。一番シンプルなのは SSH で、細かい設定を必要としません。
  +
:*''ストレージ管理'': libvirt デーモンを動かしているホストを使って様々なタイプのストレージを管理できます: 様々なフォーマットのファイルイメージを作成 (qcow2, vmdk, raw, ...)、NFS 共有のマウント、既存の LVM ボリュームグループの列挙、新しい LVM ボリュームグループや論理ボリュームの作成、ディスクデバイスのパーティション、iSCSI 共有のマウントなど。
  +
:*''ネットワークインターフェイス管理'': libvirt デーモンを動かしているホストを使って物理・論理ネットワークインターフェイスを管理できます。既存のインターフェイスを列挙するだけでなく、インターフェイス・ブリッジ・仮想 LAN・ボンドデバイスを設定 (作成) できます。
  +
:*''仮想 NAT とルートベースネットワーク'': libvirt デーモンを動かしているホストを使って仮想ネットワークを管理・作成できます。Libvirt の仮想ネットワークはファイアウォールのルールを使うことでルーターとして動作し、VM からホストマシンのネットワークに透過的にアクセスすることを可能にします。
   
  +
libvirt には [[QEMU|KVM/QEMU]], [[Xen]], [[LXC]], [http://openvz.org OpenVZ], [[VirtualBox]] などの[[:カテゴリ:仮想化|仮想化]]バックエンドを、リモート・ローカルを問わず管理するために、統一の抽象化レイヤーが備わっています ([http://libvirt.org/drivers.html その他])。
===Xen 用に libvirt をビルドする===
 
[[公式リポジトリ]]の {{Pkg|libvirt}} と [[AUR|AUR]] の {{AUR|libvirt-git}} は現在どちらも [[PKGBUILD|PKGBUILD]] で make する間に {{ic|--without-xen}} フラグを使うことによって [[Xen]] のサポートが無効になっています。libvirt を使って Xen を管理したい場合、[[Arch Build System|Arch Build System]] を使って Xen サポートを有効にして libvirt パッケージをビルドするために[https://projects.archlinux.org/svntogit/community.git/tree/libvirt/repos/community-x86_64/ ファイルセットを全て入手]する必要があります。Xen サポートを付けて libvirt をビルドするには [[AUR|AUR]] の {{AUR|xen}} パッケージが必要です。
 
   
  +
長期的に安定した C の API を用意することで、[http://libvirt.org/apps.html 様々なツール] で ''libvirtd'' デーモンに接続して多数の仮想化エンジンを管理することが可能です。libvirt デフォルトのクライアントは ''virsh'' と呼ばれています。
The alternative XenAPI driver is lacking a package at the moment? (2010-05-23, friesoft)
 
  +
  +
== インストール ==
  +
  +
デーモン・クライアントアーキテクチャをとっているため、''libvirt'' をインストールする必要があるのは仮想化システムをホストするマシンだけです。サーバーとクライアントは同じ物理マシンにすることができます。
  +
  +
=== サーバー ===
  +
  +
{{pkg|libvirt}} パッケージと、どれか一つハイパーバイザを[[インストール]]してください:
  +
  +
* [http://libvirt.org/drvqemu.html libvirt KVM/QEMU ドライバー] は基本の ''libvirt'' ドライバーなので [[QEMU#KVM を有効にする|KVM が有効]]になっていれば、完全に仮想化された、ハードウェアによる支援を受けたゲストを使うことができます。詳しくは [[QEMU]] の記事を見て下さい。
  +
  +
* 他にも仮想化バックエンドとして [[LXC]], [[VirtualBox]], [[Xen]] などが存在します。インストール方法はそれぞれのページを参照してください。
  +
:{{Note|[http://libvirt.org/drvlxc.html libvirt LXC ドライバー] は {{Pkg|lxc}} に含まれている [[LXC]] のユーザースペースツールに依存していません。そのため、このドライバーを使う場合はパッケージをインストールする必要はありません。}}
  +
:{{Warning|[[Xen]] のサポートはデフォルトでは利用できない状態になっています。[[ABS]] を使って {{Pkg|libvirt}} の [[PKGBUILD]] を修正して {{ic|--without-xen}} オプションを外してビルドする必要があります。VirtualBox は安定的に Xen をサポートする予定がないため {{ic|--without-vbox}} に置き換えても良いでしょう。}}
  +
  +
他にサポートされているハイパーバイザは [http://libvirt.org/drivers.html こちら] に記載されています。
  +
  +
ネットワークに接続するために、以下をインストールしてください:
  +
  +
* [http://wiki.libvirt.org/page/VirtualNetworking#The_default_configuration デフォルト] の NAT/DHCP ネットワークの場合 {{Pkg|ebtables}} と {{Pkg|dnsmasq}}。
  +
* ブリッジネットワークの場合 {{Pkg|bridge-utils}}。
  +
* [[SSH]] によるネットワーク管理の場合 {{Pkg|openbsd-netcat}}。
  +
  +
=== クライアント ===
  +
  +
クライアントは仮想マシンを管理するために使用するユーザーインターフェイスです。
  +
  +
* ''virsh'' はドメインを管理・設定するためのコマンドラインプログラムです。{{Pkg|libvirt}} パッケージに含まれています。
  +
* {{Pkg|virt-manager}} は仮想マシンを管理するためのグラフィカルユーザーインターフェイスです。
  +
* {{Pkg|virt-viewer}} は仮想化されたゲスト OS のグラフィカルな画面を操作するための軽量なインターフェイスです。
  +
* {{Pkg|gnome-boxes}} はリモートや仮想システムにアクセスするためのシンプルな GNOME 3 アプリケーションです。
  +
* {{AUR|virt-manager-qt5}}{{Broken package link|パッケージが存在しません}} は virt-manager の Qt 版です。
  +
* {{AUR|libvirt-sandbox}} はアプリケーションのサンドボックスツールキットです。
  +
  +
libvirt に対応しているソフトウェアのリストは [http://libvirt.org/apps.html こちら] にあります。
   
 
==設定==
 
==設定==
   
Libvirt はイントーしただけでは使えません。少なくとも、[[#デーモンを起動する|デーモンを起動]]して、[[#認証|認証]]を設定する必要があります。また、[[#QEMU の KVM アクセラレーションを有効にする|QEMU の KVM アクセラレーションを有効にする]]ことも推奨されています。
+
テムレベの管理をする場合、少なくとも、[[#認証を設定|認証を設定]]して、[[#デーモンを起動|デーモンを起動]]する必要があります。
   
  +
{{Note|ユーザーセッションの管理をする場合、デーモンの設定は必要ありません。ただし、認証はローカルに限定され、フロントエンドは ''libvirtd'' デーモンのローカルインスタンスを起動します。}}
===デーモンを起動する===
 
   
  +
=== 認証を設定 ===
{{ic|/etc/libvirt/qemu.conf}} にあるデフォルトのユーザーとグループを変更してください。QEMU のデフォルトは nobody:nobody です。
 
   
  +
[http://libvirt.org/auth.html#ACL_server_config libvirt: Connection authentication] より:
[[Systemd#ユニットを使う|systemd]] を使って {{ic|libvirtd.service}} を起動・有効化してください。
 
  +
:''libvirt'' デーモンではクライアントの接続に使用する認証メカニズムを管理者が選択することができます。基本的に libvirt デーモンのメイン設定ファイルである {{ic|/etc/libvirt/libvirtd.conf}} で設定します。libvirt のソケットごとに別々の認証メカニズムを設定できます。今のところ {{ic|none}}, {{ic|polkit}}, {{ic|sasl}} の中から選べます。
   
  +
{{Pkg|libvirt}} は依存パッケージとして {{Pkg|polkit}} をインストールするので、{{ic|unix_sock_auth}} パラメータのデフォルト値としては [[#polkit を使う|polkit]] が使われます ([http://libvirt.org/auth.html#ACL_server_polkit ソース])。また、[[#ファイルベースのパーミッションで認証|ファイルベースのパーミッション]]を使うこともできます。
{{Note|マルチキャスト DNS によるローカルの libvirt ホストの検出に Avahi デーモンが使われます。この機能を無効にするには、{{ic|/etc/libvirt/libvirtd.conf}} で {{ic|1=mdns_adv = 0}} を設定してください。}}
 
   
===認証===
+
==== polkit を使う ====
   
  +
{{Note|{{ic|polkit}} による認証を正しく動作させるにはシステムを再起動する必要があります。}}
まず、''libvirt'' [[ユーザーとグループ|グループ]]を作成して、libvirt にアクセスしたいユーザーをそのグループに追加してください:
 
# groupadd libvirt
 
# gpasswd -a ''user'' libvirt
 
   
  +
''libvirt'' デーモンは {{ic|/usr/share/polkit-1/actions/org.libvirt.unix.policy}} で2つの [[Polkit#アクション|polkit アクション]]を提供します:
今ログインしているユーザーのグループを更新するには一度ログアウトしてからログインしなおす必要があります。また、シェルで次のコマンドを使うことで libvirt を起動するユーザーのグループを更新することもできます:
 
  +
* 完全なアクセス管理のための {{ic|org.libvirt.unix.manage}} (RW デーモンソケット)
$ newgrp libvirt
 
  +
* アクセスの監視のための {{ic|org.libvirt.unix.monitor}} (読み取り専用ソケット).
   
  +
RW デーモンソケットのデフォルトポリシーを使うには管理者として認証する必要があります。[[sudo]] 認証と似ていますが、クライアントアプリケーションを root で動かす必要があるというわけではありません。また、デフォルトポリシーではどんなアプリケーションでも RO ソケットに接続することはできます。
それから [[#polkit 認証|polkit 認証]]か[[#ファイルベースのパーミッション|ファイルベースのパーミッション]]どちらかの方法に従って下さい:
 
   
  +
Arch では {{ic|wheel}} グループのユーザーを管理者として認識します: これは {{ic|/etc/polkit-1/rules.d/50-default.rules}} で定義されています ([[Polkit#管理者の識別]] を参照)。そのためユーザーを {{ic|wheel}} グループに追加さえすれば、新しいグループやルールファイルを作成する必要はありません。({{Pkg|virt-manager}} などで) RW ソケットに接続する時にユーザーのパスワードを入力するように求められます。
====polkit 認証====
 
''libvirt'' グループのユーザーが仮想マシンを管理できるようにするために、以下のファイルを作成する必要があります:
 
   
  +
{{Note|パスワードの入力を要求するときは[[Polkit#認証エージェント|認証エージェント]]を使用します。コンソールを使っている場合、デフォルトの {{ic|pkttyagent}} エージェントが上手く動作しないことがあります。}}
{{hc|/etc/polkit-1/rules.d/50-org.libvirt.unix.manage.rules|<nowiki>
 
  +
  +
{{Tip|認証でパスワードを入力しなくてもよいように設定したい場合、[[Polkit#パスワードプロンプトの迂回]] を見て下さい。}}
  +
  +
libvirt 1.2.16 から {{ic|libvirt}} グループのメンバーはデフォルトで RW デーモンソケットにパスワードを入力しなくてもアクセスすることができます [http://libvirt.org/git/?p=libvirt.git;a=commit;h=e94979e901517af9fdde358d7b7c92cc055dd50c]。libvirt グループを作成してユーザーをグループに追加するのが一番簡単です。RW デーモンソケットにアクセスするときに認証するグループを変更したい場合、以下のファイルを作成:
  +
  +
{{hc|/etc/polkit-1/rules.d/50-libvirt.rules|<nowiki>
  +
/* Allow users in kvm group to manage the libvirt
  +
daemon without authentication */
 
polkit.addRule(function(action, subject) {
 
polkit.addRule(function(action, subject) {
 
if (action.id == "org.libvirt.unix.manage" &&
 
if (action.id == "org.libvirt.unix.manage" &&
subject.isInGroup("libvirt")) {
+
subject.isInGroup("kvm")) {
 
return polkit.Result.YES;
 
return polkit.Result.YES;
 
}
 
}
});
+
});</nowiki>
  +
}}
</nowiki>}}
 
   
  +
そして[[ユーザーとグループ#ユーザー管理の他の例|ユーザー]]を {{ic|kvm}} グループに追加して再ログインしてください。''kvm'' は好きなグループに置き換えることができます。グループが存在することと、ユーザーがグループに属していることを確認してください (詳しくは[[ユーザーとグループ]]を参照)。グループの変更を適用するには再ログインが必要です。
もしくは、{{ic|org.libvirt.unix.monitor}} を使うことで監視権限だけを与えることもできます。
 
   
  +
==== ファイルベースのパーミッションで認証 ====
詳細は、[http://wiki.libvirt.org/page/SSHPolicyKitSetup#Configuring_management_access_via_PolicyKit libvirt wiki] を見て下さい。
 
   
====ファイルベースのパーミッション====
+
''libvirt'' グループのユーザーが仮想マシンを管理できるようにファイルベースのパーミッションを定義するには、以下の行をアンコメントします:
''libvirt'' グループのユーザーが libvirt を使えるようにするために、{{ic|/etc/libvirt/libvirtd.conf}} の以下の行をアンコメントしてください (それぞれの行のファイル内での位置は散らばっています):
 
   
 
{{hc|/etc/libvirt/libvirtd.conf|<nowiki>
 
{{hc|/etc/libvirt/libvirtd.conf|<nowiki>
 
#unix_sock_group = "libvirt"
 
#unix_sock_group = "libvirt"
#unix_sock_ro_perms = "0777"
+
#unix_sock_ro_perms = "0777" # set to 0770 to deny non-group libvirt users
 
#unix_sock_rw_perms = "0770"
 
#unix_sock_rw_perms = "0770"
 
#auth_unix_ro = "none"
 
#auth_unix_ro = "none"
79行目: 120行目:
 
</nowiki>}}
 
</nowiki>}}
   
  +
ガイドによっては libvird の特定のディレクトリのパーミッションを変更すると管理がしやすくなると書かれていることがありますが、パッケージをアップデートする際に変更したパーミッションは元に戻ってしまうので注意してください。システムディレクトリを編集するときは、root ユーザーを使うようにしてください。
{{Note|''libvirt'' グループのメンバーではない人の読み取り専用のアクセスを禁止するには {{ic|unix_sock_ro_perms}} を {{ic|0777}} から {{ic|0770}} に変更してください。}}
 
  +
  +
===デーモンを起動===
  +
  +
[[Systemd#ユニットを使う|systemd]] を使って {{ic|libvirtd.service}} と {{ic|virtlogd.service}} を起動してください。任意で {{ic|libvirtd.service}} を[[有効化]]してください。{{ic|libvirtd.service}} が有効化された場合、{{ic|virtlogd.socket}} と {{ic|virtlockd.socket}} も有効化されるため、{{ic|virtlogd.service}} を有効化する必要はありません。
  +
  +
=== TCP/IP ソケットの暗号化の解除 ===
  +
  +
{{Warning|この設定をすると、信頼されたネットワーク内における、リモートドメインの接続速度が向上します。セキュリティ的には完全な無防備なので注意してください。テスト目的であったり、セキュアでプライベート、信頼されたネットワークでおいてのみ使って下さい。SASL を有効にしないため、全ての TCP 通信は''クリアテキスト''になります。通常はどんなときでも SASL を有効にするようにしてください。}}
  +
  +
{{ic|/etc/libvirt/libvirtd.conf}} を編集:
  +
{{hc|/etc/libvirt/libvirtd.conf|<nowiki>
  +
listen_tls = 0
  +
listen_tcp = 1
  +
auth_tcp=none
  +
</nowiki>}}
  +
  +
また、{{ic|/etc/conf.d/libvirtd}} を編集してサーバーをリスニングモードで起動する必要があります:
  +
  +
{{hc|/etc/conf.d/libvirtd|2=LIBVIRTD_ARGS="--listen"}}
  +
  +
=== ホストネームを使って仮想マシンにアクセス ===
  +
  +
ブリッジネットワークを使ってホストからゲストにアクセスするには、{{Pkg|libvirt}} に含まれている {{ic|libvirt}} NSS モジュールを有効にしてください。
  +
  +
{{ic|/etc/nsswitch.conf}} を編集:
  +
{{hc|/etc/nsswitch.conf|<nowiki>
  +
hosts: files libvirt dns myhostname
  +
</nowiki>}}
  +
  +
{{Note|{{ic|ping}} や {{ic|ssh}} などのコマンドで仮想マシンのホストネームを使うことができるようになりますが、{{ic|host}} や {{ic|nslookup}} などのコマンドは DNS に依存するため使えない可能性があります。{{ic|getent hosts <vm-hostname>}} を使ってください。}}
  +
  +
== テスト ==
  +
  +
システムレベルでデーモンが正しく動作しているかテスト:
  +
  +
$ virsh -c qemu:///system
  +
  +
ユーザーセッションで libvirt が正しく動作するかテスト:
  +
  +
$ virsh -c qemu:///session
  +
  +
== 管理 ==
  +
  +
Libvirt の管理は3つのツールで行うことができます: 一つは GUI {{ic|virt-manager}} で、二つはコマンドラインツールです: {{ic|virsh}} と {{ic|guestfish}} ({{Pkg|libguestfs}} に含まれています)。
  +
  +
=== virsh ===
  +
  +
virsh はゲスト''ドメイン'' (仮想マシン) の管理のためのプログラムですが、仮想化管理のスクリプトにも使えます。ほとんどの virsh コマンドは実行するのに root 権限を必要とします。ただしドメインの作成や実行などは (VirtualBox と同じように) 通常ユーザーで実行することができます。
  +
  +
Virsh にはインタラクティブなターミナルが含まれており、コマンドを何も指定しないで実行したときに起動します (オプションは指定することができます): {{ic|virsh}}。インタラクティブターミナルはタブ補完をサポートしています。
  +
  +
コマンドラインから:
  +
  +
$ virsh [option] <command> [argument]...
  +
  +
インタラクティブターミナルから:
  +
  +
virsh # <command> [argument]...
  +
  +
ヘルプを見るには:
  +
  +
$ virsh help [option*] or [group-keyword*]
  +
  +
=== ストレージプール ===
  +
  +
プールはストレージ''ボリューム''を保存しておく場所です。libvirt における''ボリューム''は、他のハイパーバイザでは"仮想ディスク"または"仮想マシンイメージ"と定義されていることがあります。プールの場所はディレクトリでも、ネットワークファイルシステムでも、パーティションでもかまいません ([[LVM]] を含む)。プールは有効・無効を切り替えたり領域を予約することができます。
  +
  +
システムレベルでは、デフォルトで {{ic|/var/lib/libvirt/images/}} が有効になります。ユーザーセッションでは {{ic|virt-manager}} は {{ic|$HOME/VirtualMachines}} を作成します。
  +
  +
有効または無効なストレージプールを確認:
  +
  +
$ virsh pool-list --all
  +
  +
==== virsh を使って新しいプールを作成 ====
  +
  +
ストレージプールを追加したい場合、以下がコマンド形式、ディレクトリの追加、LVM ボリュームの追加の例です:
  +
  +
$ virsh pool-define-as name type [source-host] [source-path] [source-dev] [source-name] [<target>] [--source-format format]
  +
$ virsh pool-define-as ''poolname'' dir - - - - /home/''username''/.local/libvirt/images
  +
$ virsh pool-define-as ''poolname'' fs - - ''/dev/vg0/images'' - ''mntpoint''
  +
  +
上記のコマンドはプールの情報を定義します。ビルドするには:
   
  +
$ virsh pool-build ''poolname''
===QEMU の KVM アクセラレーションを有効にする===
 
  +
$ virsh pool-start ''poolname''
{{Note|[[KVM|KVM]] は [[VirtualBox|VirtualBox]] と衝突します。KVM と VirtualBox を同時に使うことはできません。}}
 
  +
$ virsh pool-autostart ''poolname''
   
  +
削除するには:
通常の [[QEMU|QEMU]] エミュレーションで仮想マシンを動かしても (つまり KVM を使わない場合)、そのスピードは'''痛々しいほどに遅い'''ものになります。CPU が KVM をサポートしているのならば KVM サポートを有効にしたいとかならず思うはずです。サポートしているか確認するには、次のコマンドを実行してください:
 
$ egrep --color "vmx|svm" /proc/cpuinfo
 
   
  +
$ virsh pool-undefine ''poolname''
このコマンドで出力が返ってきた場合、あなたの CPU は KVM によるハードウェアアクセラレーションをサポートしています。コマンドによって何も''出力されなかった''場合、''KVM を使うことはできません''。
 
   
  +
{{Tip|LVM ストレージプールの場合:
KVM が動作''していない''ときは、{{ic|/var/log/libvirt/qemu/VIRTNAME.log}} で以下のメッセージを確認できます:
 
  +
* ボリュームグループはストレージプール専用にするほうが良いでしょう。
{{hc|/var/log/libvirt/qemu/VIRTNAME.log|
 
  +
* LVM ボリュームグループの名前はプールの名前と変えて下さい。ストレージプールを削除したときに LVM グループも削除されてしまいます。
Could not initialize KVM, will disable KVM support
 
 
}}
 
}}
   
  +
==== virt-manager を使って新しいプールを作成 ====
詳細は [http://www.linux-kvm.org/page/FAQ 公式の KVM FAQ] を参照してください。
 
   
  +
まず、既存のサーバーに接続してください。そこで、右クリックして ''Details'' を選んで下さい。''Storage'' に行き左下の ''+'' アイコンを押して下さい。それからはウィザードに従って下さい。
=== ホストのシャットダウン・起動でゲストを停止・復帰する ===
 
{{ic|libvirt-guests.service}} systemd サービスを使うことでホストのシャットダウン時に自動的にゲストの実行をサスペンド (もしくは) シャットダウンさせることができます。同じデーモンでホストの起動時に自動的にサスペンド (シャットダウン) されたゲストが復帰 (起動) されます。
 
libvirt-guests のオプションは {{ic|/etc/conf.d/libvirt-guests}} をチェックしてください。
 
   
  +
=== ストレージボリューム ===
=== 起動時に KVM 仮想マシンを実行する ===
 
   
  +
プールを作成したら、プールの中にボリュームを作成することができます。新しいドメイン (仮想マシン) を作成する場合、ドメインの作成時にボリュームを作成できるのでこの手順はスキップできます。
''virt-manager'' や ''virsh'' を VM ツールとして使っている場合、これはとても簡単です。起動時に自動的に VM を実行するように設定するには、コマンドラインで次を実行してください:
 
   
  +
==== virsh を使って新しいボリュームを作成 ====
$ virsh autostart <domain>
 
   
  +
ボリュームの作成、確認、リサイズ、削除:
自動起動を無効にするには:
 
   
  +
$ virsh vol-create-as ''poolname'' ''volumename'' 10GiB --format aw|bochs|raw|qcow|qcow2|vmdk
$ virsh autostart --disable <domain>
 
  +
$ virsh vol-upload --pool ''poolname'' ''volumename'' ''volumepath''
  +
$ virsh vol-list ''poolname''
  +
$ virsh vol-resize --pool ''poolname'' ''volumename'' 12GiB
  +
$ virsh vol-delete --pool ''poolname'' ''volumename''
  +
$ virsh vol-dumpxml --pool ''poolname'' ''volumename'' # for details
   
  +
==== virt-manager の補助記憶 ====
''virt-manager'' には VM の起動オプションのところに自動起動のチェックボックスがあります。
 
   
  +
新しいバージョンの {{ic|virt-manager}} では新しいディスクを作成するときに補助記憶を指定することができます。新しい仮想システムをプロビジョニングする場合にベースイメージを基にして新しいドメインを作ることができるため、時間と容量の両方を節約できてとても便利です。ただし現在のバージョンの {{ic|virt-manager}} にはバグ (https://bugzilla.redhat.com/show_bug.cgi?id=1235406) が存在し、補助イメージが {{ic|qcow2}} タイプの場合に {{ic|virt-manager}} が間違ったタイプの補助イメージを選択してしまいます。この場合、補助タイプとして {{ic|raw}} が選択されます。補助記憶から新しいイメージが読み取れなくなり、補助記憶を用意する意味が完全に失われます。
{{Note|コマンドラインから QEMU や KVM によって起動した VM は ''virt-manager'' で管理することができません。}}
 
   
  +
この問題の回避策として {{ic|qemu-img}} を使うことで直接補助記憶を指定することができます。バグが修正されるまでは、補助記憶を使いたい場合、以下のコマンドを使って下さい:
==使用方法==
 
   
  +
$ qemu-img create -f qcow2 -o backing_file=<path to backing image>,backing_fmt=qcow2 <disk name> <disk size>
===新しい VM をインストールする===
 
新しい VM を作成するには、何がしかのインストールメディアが必要で、通常は {{ic|.iso}} ファイルが基本です。ファイルを {{ic|/var/lib/libvirt/images/}} ディレクトリにコピーしてください (または、virt-manager で新しい''ストレージプール''ディレクトリを作成してそこにコピーすることもできます)。
 
   
  +
作成したイメージを新しいドメインのベースとすることで COW ボリュームとして補助記憶が使用され時間と容量が節約されます。
{{Note|[[SELinux]] はデフォルトで {{ic|/var/lib/libvirt/images/}} に仮想マシンが保存されることを必要とします。SELinux を使っていて仮想マシンに問題が起こる場合、あなたの VM がそのディレクトリにするか確認、またはあなたが使用している非デフォルトのディレクトリの適当なラベリングを追加してください。}}
 
   
  +
=== ドメイン ===
それから {{ic|virt-manager}} を起動して、サーバーに接続します、接続を右クリックして '''New''' を選択してください。名前を決めたら、'''Local install media''' を選択してください。ウィザードを進めて下さい。
 
   
  +
libvirt では仮想マシンは''ドメイン''と呼ばれます。コマンドラインから使う場合、{{ic|virsh}} でドメインを確認・作成・停止・シャットダウンできます。{{ic|virt-viewer}} を使って {{ic|virsh}} で起動したドメインを確認することも可能です。ドメインの作成は {{ic|virt-manager}} でグラフィカルに行うか {{ic|virt-install}} ({{pkg|virt-install}} パッケージに含まれているコマンドラインプログラム) を使います。
'''ステップ4'''で、''Allocate entire disk now'' のチェックを外すことができます -- VM がディスクの全てを使用していないときに容量を節約します。ただし、ディスクのフラグメンテーションが増加する可能性があるので、VM ホストのディスクの合計空き容量に''注意してください''、VM にディスク容量を追加で割り当てるほうが簡単だからです。
 
   
  +
新しいドメインを作成するときは、インストールメディアを使用します。ドメインの作成後にロードします。ストレージプールから {{ic|.iso}} を参照したり、光学ドライブを参照することができます。
'''ステップ5'''では、'''Advanced options''' を開いて ''Virt Type'' を '''kvm''' に設定してください。kvm が選べない場合、上の [[#QEMU の KVM アクセラレーションを有効にする|QEMU の KVM アクセラレーションを有効にする]]を見て下さい。
 
   
  +
有効または無効なドメインを確認:
===virt-manager でストレージプールを作成する===
 
まず、既存のサーバーに接続してください。そこで、右クリックして '''Details''' を選んで下さい。'''Storage''' に行き左下の '''+''' アイコンを押して下さい。それからはウィザードに従って下さい。 :)
 
   
  +
# virsh list --all
===virt-manager で VirtualBox を使う===
 
{{Note|libvirt の [[VirtualBox|VirtualBox]] サポートはまだあまり安定しておらず libvirtd がクラッシュする可能性があります。通常はクラッシュしてもデーモンを再起動すれば全てが元に戻るはずです。}}
 
   
  +
{{Note|[[SELinux]] はデフォルトで {{ic|/var/lib/libvirt/images/}} にボリュームが保存されることを必要とします。SELinux を使っていてボリュームに問題が起こる場合、ボリュームがそのディレクトリにあるか確認、またはあなたが使用している非デフォルトのディレクトリの適当なラベリングを追加してください。}}
virt-manager では GUI から VirtualBox の接続を追加することはできません。しかしながら、コマンドラインから起動することが可能です:
 
$ virt-manager -c vbox:///system
 
   
  +
==== virt-install を使って新しいドメインを作成 ====
また、SSH でリモートシステムを管理したい場合:
 
$ virt-manager -c vbox+ssh://username@host/system
 
   
  +
ドメイン (仮想マシン) を細かく設定したい場合、[[#virt-manager を使って新しいドメインを作成|virt-manager を使って新しいドメインを作成]]する方が簡単です。しかしながら、基本的な設定は {{ic|virt-install}} で行うことができます。最低でも指定する必要があるのは {{ic|--name}}, {{ic|--memory}}, ゲストストレージ ({{ic|--disk}}, {{ic|--filesystem}} または {{ic|--nodisks}}), インストール方法 ({{ic|.iso}} または CD) です。オプションについて詳しくは {{man|1|virt-install}} を見てください。
===ライブスナップショット===
 
外部スナップショットという機能を使うことで仮想マシンを停止することなくライブスナップショットを取得することができます。現在は qcow2 と raw ファイルベースのイメージでだけで動作します。
 
   
  +
Arch Linux のインストール (2GiB, qcow2 フォーマットのボリューム作成; ユーザーネットワーク):
スナップショットが作成されると、KVM は使用されている仮想マシンに新しいブロックデバイスとして新規スナップショットイメージを加えます。新しいデータは直接そこに保存され元のディスクイメージはオフラインになるため簡単にコピーやバックアップを取ることが可能です。その後、仮想マシンをシャットダウンせずに、元のイメージにスナップショットイメージをマージすることができます。
 
   
  +
$ virt-install \
以下、使用方法です。
 
  +
--name arch-linux_testing \
  +
--memory 1024 \
  +
--vcpus=2,maxvcpus=4 \
  +
--cpu host \
  +
--cdrom $HOME/Downloads/arch-linux_install.iso \
  +
--disk size=2,format=qcow2 \
  +
--network user \
  +
--virt-type kvm
   
  +
Fedora testing (Xen ハイパーバイザ, 非デフォルトのプール, オリジナルの表示を使わない):
現在動作中の仮想マシン:
 
{{hc|# virsh list --all|<nowiki>
 
Id Name State
 
----------------------------------------------------
 
3 archey running
 
</nowiki>}}
 
   
  +
$ virt-install \
現在のイメージを全て表示:
 
  +
--connect xen:/// \
{{hc|# virsh domblklist archey|<nowiki>
 
  +
--name fedora-testing \
  +
--memory 2048 \
  +
--vcpus=2 \
  +
--cpu=host \
  +
--cdrom /tmp/fedora20_x84-64.iso \
  +
--os-type=linux --os-variant=fedora20 \
  +
--disk pool=testing,size=4 \
  +
--network bridge=br0 \
  +
--graphics=vnc \
  +
--noautoconsole
  +
$ virt-viewer --connect xen:/// fedora-testing
  +
  +
Windows:
  +
  +
$ virt-install \
  +
--name=windows7 \
  +
--memory 2048 \
  +
--cdrom /dev/sr0 \
  +
--os-variant=win7 \
  +
--disk /mnt/storage/domains/windows7.qcow2,size=20GiB \
  +
--network network=vm-net \
  +
--graphics spice
  +
  +
{{Tip|{{ic|--os-variant}} の引数を取得するには {{ic|1=osinfo-query --fields=name,short-id,version os}} を実行してください。ドメインの仕様を定義するのに役立ちます。ただし、{{ic|--memory}} と {{ic|--disk}} を入力する必要があります。仕様が必要な場合は適当な {{ic|/usr/share/libosinfo/db/oses/''os''.xml}} を見て下さい。インストール後、[https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Host_Configuration_and_Guest_Installation_Guide/form-Virtualization_Host_Configuration_and_Guest_Installation_Guide-Para_virtualized_drivers-Mounting_the_image_with_virt_manager.html VirtIO ドライバー] が含まれている [http://www.spice-space.org/download.html Spice Guest Tools] をインストールすると良いでしょう。Windows の VirtIO ネットワークドライバーは {{Aur|virtio-win}} にもあります。ドライバーはゲストの {{ic|.xml}} 設定のデバイスセクションに {{ic|1=<model type='virtio' />}} で指定します。詳細は [[QEMU#Windows ゲストを用意する|QEMU]] の記事を読んで下さい。}}
  +
  +
既存のボリュームをインポート:
  +
  +
$ virt-install \
  +
--name demo \
  +
--memory 512 \
  +
--disk /home/user/VMs/mydisk.img \
  +
--import
  +
  +
==== virt-manager を使って新しいドメインを作成 ====
  +
  +
まずハイパーバイザに接続します (例: QEMU/KVM ''システム''またはユーザー''セッション'')。接続を右クリックして ''New'' を選択して、ウィザードに従って下さい。
  +
  +
* ''ステップ4'' で、''Allocate entire disk now'' のチェックを外すことができます -- VM がディスクの全てを使用していないときに容量を節約します。ただし、ディスクのフラグメンテーションが増加する可能性があるので、VM ホストのディスクの合計空き容量に''注意してください''、VM にディスク容量を追加で割り当てるほうが簡単だからです。
  +
  +
* ''ステップ5'' では、''Advanced options'' を開いて ''Virt Type'' を ''kvm'' に設定してください。追加のハードウェア設定が必要な場合、''Customize configuration before install'' オプションを選んで下さい。
  +
  +
==== ドメインの管理 ====
  +
  +
ドメインを起動:
  +
  +
$ virsh start ''domain''
  +
$ virt-viewer --connect qemu:///session ''domain''
  +
  +
ドメインを上品にシャットダウン、または強制的にオフにする:
  +
  +
$ virsh shutdown ''domain''
  +
$ virsh destroy ''domain''
  +
  +
libvirtd の起動時にドメインを自動実行:
  +
  +
$ virsh autostart ''domain''
  +
$ virsh autostart ''domain'' --disable
  +
  +
ホストのシャットダウン時にドメインもシャットダウン:
  +
  +
: {{ic|libvirt-guests.service}} systemd サービスを使うことでホストのシャットダウン時に自動的にゲストの実行をサスペンド (もしくは) シャットダウンさせることができます。同じデーモンでホストの起動時に自動的にサスペンド (シャットダウン) されたゲストが復帰 (起動) されます。サービスのオプションは {{ic|/etc/conf.d/libvirt-guests}} をチェックしてください。
  +
  +
ドメインの設定を編集:
  +
  +
$ virsh edit ''domain''
  +
  +
{{note|QEMU によって直接起動した仮想マシンは libvirt ツールで管理できません。}}
  +
  +
=== ネットワーク ===
  +
  +
デフォルトでは、{{ic|libvird}} systemd サービスが起動すると、''default'' という名前の NAT ブリッジが作成されて外部ネットワークに接続できるようになります。
  +
  +
他のネットワーク接続が必要な場合、ドメインとの接続を作成することができる4つのネットワークタイプが存在します:
  +
  +
* bridge — 仮想デバイス。物理インターフェイスと直接データを共有します。ホストで''固定''ネットワークを使う場合や他のドメインに接続する必要がない場合、またはドメインに完全なインバウンドとアウトバウンドの通信が必要な場合やドメインを''システムレベル''で動作させる場合、ブリッジを使って下さい。ブリッジを追加する方法は[[ネットワークブリッジ]]を参照。作成後、ゲストの {{ic|.xml}} 設定ファイルで指定する必要があります。
  +
* network — 仮想ネットワーク。他のドメインと共有することができます。ホストが''動的''ネットワーク (例: NetworkManager) やワイヤレスを使う場合仮想ネットワークを使って下さい。
  +
* macvtap — ホストの物理インターフェイスに直接接続。
  +
* user — ローカルのネットワーク。ユーザー''セッション''の場合に使って下さい。
  +
  +
{{ic|virsh}} にはネットワークを作成するための様々なオプションが存在していますが、({{ic|virt-manager}} などの) グラフィカルユーザーインターフェイスを使ったり [[#virt-install を使って新しいドメインを作成|virt-install でドメインを作成]]するときにネットワーク接続を作成する方が簡単です。
  +
  +
{{note|libvirt は {{pkg|dnsmasq}} で DHCP や DNS を管理し、仮想ネットワークごとにインスタンスを起動します。また、適切なルーティングが行われるように iptables ルールを追加して、{{ic|ip_forward}} カーネルパラメータを有効にします。libvirt を使うのにホストで dnsmasq を実行する必要はありません (libvirt の dnsmasq インスタンスと干渉する可能性があります)。}}
  +
  +
==== IPv6 ====
  +
  +
設定ツールを使って IPv6 アドレスを追加した際に、以下のようなエラーが表示されることがあります:
  +
Check the host setup: enabling IPv6 forwarding with RA routes without accept_ra set to 2 is likely to cause routes loss. Interfaces to look at: ''eth0''
  +
  +
以下のファイルを作成することで問題を解決できます ({{ic|''eth0''}} は物理インターフェイスの名前に置き換えてください):
  +
  +
{{hc|/etc/sysctl.d/libvirt-bridge.conf|2=
  +
net.ipv6.conf.eth0.accept_ra = 2
  +
}}
  +
  +
設定したらマシンを再起動してください。
  +
  +
=== スナップショット ===
  +
  +
スナップショットは現時点でのドメインのディスク・メモリ・デバイスの状態を取得して、将来のために保存します。OS の"クリーン"なコピーを保存することから、ドメインが破壊される前にドメインの状態を保存することまで、様々な理由で使われます。スナップショットは一意な名前で識別されます。
  +
  +
スナップショットはボリュームの中に保存されるためボリュームが次の形式である必要があります: qcow2 または raw。スナップショットは差分を使用するので大量の容量を使用することはありません。
  +
  +
==== スナップショットの作成 ====
  +
  +
スナップショットが取得されると新しいブロックデバイスとして保存されオリジナルのスナップショットはオフラインになります。スナップショットは他のスナップショットから選択したりマージすることができます (ドメインをシャットダウンする必要はありません)。
  +
  +
動作中のドメインのボリュームを確認 (動作中のドメインは {{ic|virsh list}} で確認できます):
  +
  +
{{hc|# virsh domblklist ''domain''|<nowiki>
 
Target Source
 
Target Source
 
------------------------------------------------
 
------------------------------------------------
vda /vms/archey.img
+
vda /vms/domain.img
 
</nowiki>}}
 
</nowiki>}}
   
イメジファイルのプロパティを確認:
+
ボリュ物理プロパティを確認するには:
  +
{{hc|# qemu-img info /vms/archey.img|<nowiki>
 
image: /vms/archey.img
+
{{hc|# qemu-img info /vms/domain.img|<nowiki>
  +
image: /vms/domain.img
 
file format: qcow2
 
file format: qcow2
 
virtual size: 50G (53687091200 bytes)
 
virtual size: 50G (53687091200 bytes)
169行目: 402行目:
 
</nowiki>}}
 
</nowiki>}}
   
disk-only スナップショットを作成{{ic|--atomic}} スイッチはスナップショットの作成が失敗した場合に VM に変更が加わっていないを確認します
+
disk-only スナップショットを作成 ({{ic|--atomic}} オプションはスナップショットの作成が失敗した場合にボリュームに変更が加わっていないことを確認します):
# virsh snapshot-create-as archey snapshot1 --disk-only --atomic
 
   
  +
# virsh snapshot-create-as ''domain'' snapshot1 --disk-only --atomic
スナップショットを見たい場合は表示する:
 
  +
{{hc|# virsh snapshot-list archey|<nowiki>
 
  +
スナップショットを確認:
  +
  +
{{hc|# virsh snapshot-list ''domain''|<nowiki>
 
Name Creation Time State
 
Name Creation Time State
 
------------------------------------------------------------
 
------------------------------------------------------------
179行目: 414行目:
 
</nowiki>}}
 
</nowiki>}}
   
virsh によって作成された新しいスップショットイメージとそのイメジプロパティに注目してください。たった数 MiB の容量しかなくオリジナルの"バックイメージ/チェイン"リンクされています
+
{{ic|1=cp -sparse=true}} や {{ic|rsync -S}} を使ってオリジルのイメージをコピーしてオリジナルのイメージをスナップショットマージできます:
{{hc|# qemu-img info /vms/archey.snapshot1|<nowiki>
 
image: /vms/archey.snapshot1
 
file format: qcow2
 
virtual size: 50G (53687091200 bytes)
 
disk size: 18M
 
cluster_size: 65536
 
backing file: /vms/archey.img
 
</nowiki>}}
 
   
  +
# virsh blockpull --domain ''domain'' --path /vms/''domain''.snapshot1
この段階で、{{ic|1=cp -sparse=true}} や {{ic|rsync -S}} を使ってオリジナルのイメージをコピーすることができます。
 
そしてオリジナルのイメージをスナップショットにマージできます。
 
# virsh blockpull --domain archey --path /vms/archey.snapshot1
 
   
これでオリジナルイメージからブロックが引っぱり出されるので、ファイル {{ic|/vms/archey.snapshot1}} 新しいディスクイメになります。ディスクのサイズを確認てどうなっているか見て下さい。この後、オリジナルのイメ {{ic|/vms/archey.img}} とスナップショットのメタデータは安全に削除できます。{{ic|virsh blockcommit}} が {{ic|blockpull}} と反対の動作をするようになる予定ですが qemu-kvm 1.3 でまだ開発中です (snapshot-revert 機能を含む)。来年リリースされるスケジュールが組まれています
+
{{ic|domain.snapshot1}} 新しいボリュになります。マージが完了たらオリジナルのボリュ ({{ic|domain.img}} とスナップショットのメタデータは削除できます。{{ic|virsh blockcommit}} が {{ic|blockpull}} と反対の動作をするようになる予定ですが現在開発中です ({{ic|snapshot-revert}} 機能を含む来年リリース予定)
   
  +
=== 他の管理 ===
この KVM の新機能はファイルシステムを破損するリスクを負うことなくライブバックアップを頻繁に取得したいと思ってる人にとって特に重宝します。
 
   
  +
非デフォルトのハイパーバイザに接続:
==libvirt へのリモートアクセス==
 
   
  +
$ virsh --connect xen:///
===暗号化されない TCP/IP ソケットを使う (一番シンプル、セキュリティは低い)===
 
  +
virsh # uri
{{Warning|This should ''only'' be used for testing or use over a secure, private, and trusted network.}}
 
  +
xen:///
   
  +
SSH で QEMU ハイパーバイザに接続してログイン:
{{ic|/etc/libvirt/libvirtd.conf}} を編集してください:
 
{{hc|/etc/libvirt/libvirtd.conf|<nowiki>
 
listen_tls = 0
 
listen_tcp = 1
 
auth_tcp=none
 
</nowiki>}}
 
   
  +
$ virsh --connect qemu+ssh://''username''@''host''/system
{{Warning|We do not enable SASL here, so all TCP traffic is cleartext! For real world use, ''always'' enable SASL.}}
 
  +
$ LIBVIRT_DEBUG=1 virsh --connect qemu+ssh://''username''@''host''/system
   
  +
SSH でグラフィカルコンソールに接続:
さらに {{ic|/etc/conf.d/libvirtd}} を編集してサーバーを listening モードで起動する必要があります:
 
{{hc|/etc/conf.d/libvirtd|2=LIBVIRTD_ARGS="--listen"}}
 
   
  +
$ virt-viewer --connect qemu+ssh://''username''@''host''/system ''domain''
===SSH を使う===
 
  +
$ virt-manager --connect qemu+ssh://''username''@''host''/system ''domain''
[[Secure Shell|SSH]] によるリモート管理には {{Pkg|openbsd-netcat}} パッケージが必要です。
 
   
  +
{{Note|(Arch 以外の) RHEL リモートサーバーに接続するときに問題が発生する場合、{{bug|30748}} と {{bug|22068}} に書かれている方法を試してみて下さい。}}
{{ic|virsh}} を使ってリモートのシステムに接続するには:
 
$ virsh -c qemu+ssh://''username''@''host''/system
 
   
  +
VirtualBox ハイパーバイザに接続 (libvirt における VirtualBox のサポートはまだ安定していないため libvirtd がクラッシュする可能性があります):
何か問題が起こった場合、次のコマンドでログを取得できます:
 
$ LIBVIRT_DEBUG=1 virsh -c qemu+ssh://''username''@''host''/system
 
   
  +
$ virsh --connect vbox:///system
仮想マシンにグラフィカルコンソールを表示するには:
 
$ virt-viewer --connect qemu+ssh://''username''@''host''/system myvirtualmachine
 
   
  +
ネットワークの設定:
仮想マシンのデスクトップ管理ツールを表示するには:
 
$ virt-manager -c qemu+ssh://''username''@''host''/system
 
   
  +
$ virsh -c qemu:///system net-list --all
{{Note|If you are having problems connecting to a remote RHEL server (or anything other than Arch, really), try the two workarounds mentioned in {{bug|30748}} and {{bug|22068}}.}}
 
  +
$ virsh -c qemu:///system net-dumpxml default
  +
  +
== Python 接続コード ==
   
=== Python を使う ===
 
 
{{Pkg|libvirt-python}} パッケージによって {{ic|/usr/lib/python2.7/site-packages/libvirt.py}} に {{Pkg|python2}} API が提供されます。
 
{{Pkg|libvirt-python}} パッケージによって {{ic|/usr/lib/python2.7/site-packages/libvirt.py}} に {{Pkg|python2}} API が提供されます。
   
244行目: 463行目:
 
import libvirt
 
import libvirt
 
if (__name__ == "__main__"):
 
if (__name__ == "__main__"):
conn = libvirt.open("qemu+ssh://xxx/system")
+
<nowiki>conn = libvirt.open("qemu+ssh://xxx/system")</nowiki>
 
print "Trying to find node on xxx"
 
print "Trying to find node on xxx"
 
domains = conn.listDomainsID()
 
domains = conn.listDomainsID()
254行目: 473行目:
 
break
 
break
   
== ブリッジネットワ ==
+
== UEFI サポ ==
仮想マシンから''物理イーサネット''を使用するには、物理イーサネットデバイス (ここでは ''eth0'') とか VM が使用する仮想イーサネットデバイスの間に''ブリッジ''を作成する必要があります。
 
   
  +
Libvirt は QEMU と [https://github.com/tianocore/edk2 OVMF] で UEFI 仮想マシンをサポートしています。
=== ホスト設定 ===
 
   
  +
{{Pkg|ovmf}}{{Broken package link|置換パッケージ: {{Pkg|edk2-ovmf}}}} パッケージをインストールしてください。
libvirt は NAT ネットワークのためにブリッジ ''virbr0'' を作成するため、''br0'' や ''virbr1'' など他の名前を使って下さい。
 
[[Netctl|netctl]] や [[Systemd-networkd|systemd-networkd]] の新しいプロファイルを作ってブリッジを設定する必要があります、例えば (DHCP を使う設定):
 
   
  +
{{ic|/etc/libvirt/qemu.conf}} に以下を追加してください:
{{hc|/etc/netctl/br0|<nowiki>
 
  +
{{hc|/etc/libvirt/qemu.conf|<nowiki>
Description="Bridge connection for kvm"
 
  +
nvram = [
Interface=br0
 
  +
"/usr/share/ovmf/ovmf_code_x64.bin:/usr/share/ovmf/ovmf_vars_x64.bin"
Connection=bridge
 
  +
]
BindsToInterfaces=(eno1)
 
  +
</nowiki>
IP=dhcp
 
  +
}}
</nowiki>}}
 
   
  +
その後 {{ic|libvirtd}} を[[再起動]]してください。
{{out of date|The tip below needs to be updated for [[netctl]].}}
 
{{Tip|It is recommended that you enable [[Wikipedia:Spanning_Tree_Protocol|Spanning Tree Protocol]] (STP) on the virtual bridge (e.g. ''br0'') that you create to avoid any potential bridging loops. You can automatically enable STP by appending {{ic|1=POST_UP="brctl stp $INTERFACE on"}} to the netcfg profile.}}
 
   
  +
これで UEFI 仮想マシンを作成する準備が整いました。{{Pkg|virt-manager}} で新しい仮想マシンを作成してください。'New VM' ウィザードの最後のページで、以下のようにしてください:
=== ゲスト設定 ===
 
そして ''VM'' の中で''ブリッジインターフェイス''を有効にします。
 
最新の Linux マシンの場合、''.xml'' ファイルの以下のコードが使えます:
 
   
  +
* 'Customize before install' をクリックして 'Finish' を選択してください。
[...]
 
  +
* 'Overview' 画面で 'Firmware' フィールドを変更して 'UEFI x86_64' オプションを選択してください。
<interface type='bridge'>
 
  +
* 'Begin Installation' をクリックしてください。
<source bridge='br0'/>
 
  +
* 起動画面で linuxefi コマンドによってインストーラーが起動され、システムの中で efibootmgr を実行することで UEFI OS が実行していることが確認できます。
<mac address='24:42:53:21:52:49'/>
 
<model type='virtio' />
 
</interface>
 
[...]
 
   
  +
詳しくは [https://fedoraproject.org/wiki/Using_UEFI_with_QEMU fedora の wiki ページ] を参照。
このコードはマシン上の ''virtio'' デバイスを有効化します。Windows では追加のドライバーをインストールする (こちらからドライバーを取得できます [http://www.linux-kvm.org/page/WindowsGuestDrivers/Download_Drivers Windows KVM VirtIO drivers]) か {{ic|<model type<nowiki>=</nowiki>'virtio' />}} 行を削除する必要があります:
 
   
  +
== PulseAudio ==
[...]
 
  +
<interface type='bridge'>
 
  +
[[PulseAudio]] デーモンは通常のユーザーアカウントで動作し、同じユーザーからの接続だけを許可します。[[libvirt]] を使って root で QEMU を動作させた場合は困ることになります。通常ユーザーで QEMU を動作させるには {{ic|/etc/libvirt/qemu.conf}} を編集して {{ic|user}} オプションでユーザー名を指定してください:
<source bridge='br0'/>
 
  +
<mac address='24:42:53:21:52:49'/>
 
  +
user = "dave"
</interface>
 
  +
[...]
 
  +
また、PulseAudio バックエンドを使用してサーバーに接続するように QEMU を設定する必要があります。{{ic|virsh edit}} を使ってデーモンの設定に以下のセクションを追加してください:
  +
  +
<qemu:commandline>
  +
<qemu:env name='QEMU_AUDIO_DRV' value='pa'/>
  +
<qemu:env name='QEMU_PA_SERVER' value='/run/user/1000/pulse/native'/>
  +
</qemu:commandline>
  +
  +
{{ic|1000}} はあなたのユーザー ID に置き換えてください。
   
 
== 参照 ==
 
== 参照 ==
  +
* [http://libvirt.org/drvqemu.html libvirt ウェブサイト]
 
  +
* [http://libvirt.org/drvqemu.html libvirt 公式ウェブサイト]
  +
* [https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/Virtualization_Deployment_and_Administration_Guide/index.html Red Hat の仮想化の導入および管理ガイド]
  +
* [https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/Virtualization_Tuning_and_Optimization_Guide/index.html Red Hat の仮想化のチューニングと最適化ガイド]
  +
* [http://docs.slackware.com/howtos:general_admin:kvm_libvirt Slackware KVM and libvirt]
  +
* [http://www-01.ibm.com/support/knowledgecenter/linuxonibm/liaat/liaatkvm.htm IBM KVM]
  +
* [https://jamielinux.com/docs/libvirt-networking-handbook/ libvirt Networking Handbook]

2020年12月31日 (木) 14:45時点における最新版

関連記事

libvirt: The virtualization API より:

Libvirt は仮想マシンや、ストレージ・ネットワークインターフェイスの管理などの仮想化機能を管理するための便利な手段を提供するソフトウェアのコレクションです。ソフトウェアには API ライブラリ、デーモン (libvirtd)、コマンドラインユーティリティ (virsh) が含まれています。
libvirt の目標は様々な仮想化プロバイダ/ハイパーバイザを管理する共通の手段を提供することにあります。
libvirt の主な特徴は以下の通りです:
  • VM 管理: 起動・停止・一時停止・保存・復旧・移行などの様々なドメイン操作。ディスク・ネットワークインターフェイス・メモリ・CPU など多数のデバイスのホットプラグ制御。
  • リモートマシンのサポート: libvirt デーモンが走ってるマシンなら libvirt の機能は全て使うことができます。リモートマシンも例外ではありません。リモートで接続するための様々なネットワーク転送をサポートしています。一番シンプルなのは SSH で、細かい設定を必要としません。
  • ストレージ管理: libvirt デーモンを動かしているホストを使って様々なタイプのストレージを管理できます: 様々なフォーマットのファイルイメージを作成 (qcow2, vmdk, raw, ...)、NFS 共有のマウント、既存の LVM ボリュームグループの列挙、新しい LVM ボリュームグループや論理ボリュームの作成、ディスクデバイスのパーティション、iSCSI 共有のマウントなど。
  • ネットワークインターフェイス管理: libvirt デーモンを動かしているホストを使って物理・論理ネットワークインターフェイスを管理できます。既存のインターフェイスを列挙するだけでなく、インターフェイス・ブリッジ・仮想 LAN・ボンドデバイスを設定 (作成) できます。
  • 仮想 NAT とルートベースネットワーク: libvirt デーモンを動かしているホストを使って仮想ネットワークを管理・作成できます。Libvirt の仮想ネットワークはファイアウォールのルールを使うことでルーターとして動作し、VM からホストマシンのネットワークに透過的にアクセスすることを可能にします。

libvirt には KVM/QEMU, Xen, LXC, OpenVZ, VirtualBox などの仮想化バックエンドを、リモート・ローカルを問わず管理するために、統一の抽象化レイヤーが備わっています (その他)。

長期的に安定した C の API を用意することで、様々なツールlibvirtd デーモンに接続して多数の仮想化エンジンを管理することが可能です。libvirt デフォルトのクライアントは virsh と呼ばれています。

インストール

デーモン・クライアントアーキテクチャをとっているため、libvirt をインストールする必要があるのは仮想化システムをホストするマシンだけです。サーバーとクライアントは同じ物理マシンにすることができます。

サーバー

libvirt パッケージと、どれか一つハイパーバイザをインストールしてください:

  • libvirt KVM/QEMU ドライバー は基本の libvirt ドライバーなので KVM が有効になっていれば、完全に仮想化された、ハードウェアによる支援を受けたゲストを使うことができます。詳しくは QEMU の記事を見て下さい。
  • 他にも仮想化バックエンドとして LXC, VirtualBox, Xen などが存在します。インストール方法はそれぞれのページを参照してください。
ノート: libvirt LXC ドライバーlxc に含まれている LXC のユーザースペースツールに依存していません。そのため、このドライバーを使う場合はパッケージをインストールする必要はありません。
警告: Xen のサポートはデフォルトでは利用できない状態になっています。ABS を使って libvirtPKGBUILD を修正して --without-xen オプションを外してビルドする必要があります。VirtualBox は安定的に Xen をサポートする予定がないため --without-vbox に置き換えても良いでしょう。

他にサポートされているハイパーバイザは こちら に記載されています。

ネットワークに接続するために、以下をインストールしてください:

クライアント

クライアントは仮想マシンを管理するために使用するユーザーインターフェイスです。

  • virsh はドメインを管理・設定するためのコマンドラインプログラムです。libvirt パッケージに含まれています。
  • virt-manager は仮想マシンを管理するためのグラフィカルユーザーインターフェイスです。
  • virt-viewer は仮想化されたゲスト OS のグラフィカルな画面を操作するための軽量なインターフェイスです。
  • gnome-boxes はリモートや仮想システムにアクセスするためのシンプルな GNOME 3 アプリケーションです。
  • virt-manager-qt5AUR[リンク切れ: パッケージが存在しません] は virt-manager の Qt 版です。
  • libvirt-sandboxAUR はアプリケーションのサンドボックスツールキットです。

libvirt に対応しているソフトウェアのリストは こちら にあります。

設定

システムレベルの管理をする場合、少なくとも、認証を設定して、デーモンを起動する必要があります。

ノート: ユーザーセッションの管理をする場合、デーモンの設定は必要ありません。ただし、認証はローカルに限定され、フロントエンドは libvirtd デーモンのローカルインスタンスを起動します。

認証を設定

libvirt: Connection authentication より:

libvirt デーモンではクライアントの接続に使用する認証メカニズムを管理者が選択することができます。基本的に libvirt デーモンのメイン設定ファイルである /etc/libvirt/libvirtd.conf で設定します。libvirt のソケットごとに別々の認証メカニズムを設定できます。今のところ none, polkit, sasl の中から選べます。

libvirt は依存パッケージとして polkit をインストールするので、unix_sock_auth パラメータのデフォルト値としては polkit が使われます (ソース)。また、ファイルベースのパーミッションを使うこともできます。

polkit を使う

ノート: polkit による認証を正しく動作させるにはシステムを再起動する必要があります。

libvirt デーモンは /usr/share/polkit-1/actions/org.libvirt.unix.policy で2つの polkit アクションを提供します:

  • 完全なアクセス管理のための org.libvirt.unix.manage (RW デーモンソケット)
  • アクセスの監視のための org.libvirt.unix.monitor (読み取り専用ソケット).

RW デーモンソケットのデフォルトポリシーを使うには管理者として認証する必要があります。sudo 認証と似ていますが、クライアントアプリケーションを root で動かす必要があるというわけではありません。また、デフォルトポリシーではどんなアプリケーションでも RO ソケットに接続することはできます。

Arch では wheel グループのユーザーを管理者として認識します: これは /etc/polkit-1/rules.d/50-default.rules で定義されています (Polkit#管理者の識別 を参照)。そのためユーザーを wheel グループに追加さえすれば、新しいグループやルールファイルを作成する必要はありません。(virt-manager などで) RW ソケットに接続する時にユーザーのパスワードを入力するように求められます。

ノート: パスワードの入力を要求するときは認証エージェントを使用します。コンソールを使っている場合、デフォルトの pkttyagent エージェントが上手く動作しないことがあります。
ヒント: 認証でパスワードを入力しなくてもよいように設定したい場合、Polkit#パスワードプロンプトの迂回 を見て下さい。

libvirt 1.2.16 から libvirt グループのメンバーはデフォルトで RW デーモンソケットにパスワードを入力しなくてもアクセスすることができます [1]。libvirt グループを作成してユーザーをグループに追加するのが一番簡単です。RW デーモンソケットにアクセスするときに認証するグループを変更したい場合、以下のファイルを作成:

/etc/polkit-1/rules.d/50-libvirt.rules
/* Allow users in kvm group to manage the libvirt
daemon without authentication */
polkit.addRule(function(action, subject) {
    if (action.id == "org.libvirt.unix.manage" &&
        subject.isInGroup("kvm")) {
            return polkit.Result.YES;
    }
});

そしてユーザーkvm グループに追加して再ログインしてください。kvm は好きなグループに置き換えることができます。グループが存在することと、ユーザーがグループに属していることを確認してください (詳しくはユーザーとグループを参照)。グループの変更を適用するには再ログインが必要です。

ファイルベースのパーミッションで認証

libvirt グループのユーザーが仮想マシンを管理できるようにファイルベースのパーミッションを定義するには、以下の行をアンコメントします:

/etc/libvirt/libvirtd.conf
#unix_sock_group = "libvirt"
#unix_sock_ro_perms = "0777"  # set to 0770 to deny non-group libvirt users
#unix_sock_rw_perms = "0770"
#auth_unix_ro = "none"
#auth_unix_rw = "none"

ガイドによっては libvird の特定のディレクトリのパーミッションを変更すると管理がしやすくなると書かれていることがありますが、パッケージをアップデートする際に変更したパーミッションは元に戻ってしまうので注意してください。システムディレクトリを編集するときは、root ユーザーを使うようにしてください。

デーモンを起動

systemd を使って libvirtd.servicevirtlogd.service を起動してください。任意で libvirtd.service有効化してください。libvirtd.service が有効化された場合、virtlogd.socketvirtlockd.socket も有効化されるため、virtlogd.service を有効化する必要はありません。

TCP/IP ソケットの暗号化の解除

警告: この設定をすると、信頼されたネットワーク内における、リモートドメインの接続速度が向上します。セキュリティ的には完全な無防備なので注意してください。テスト目的であったり、セキュアでプライベート、信頼されたネットワークでおいてのみ使って下さい。SASL を有効にしないため、全ての TCP 通信はクリアテキストになります。通常はどんなときでも SASL を有効にするようにしてください。

/etc/libvirt/libvirtd.conf を編集:

/etc/libvirt/libvirtd.conf
listen_tls = 0
listen_tcp = 1
auth_tcp=none

また、/etc/conf.d/libvirtd を編集してサーバーをリスニングモードで起動する必要があります:

/etc/conf.d/libvirtd
LIBVIRTD_ARGS="--listen"

ホストネームを使って仮想マシンにアクセス

ブリッジネットワークを使ってホストからゲストにアクセスするには、libvirt に含まれている libvirt NSS モジュールを有効にしてください。

/etc/nsswitch.conf を編集:

/etc/nsswitch.conf
hosts: files libvirt dns myhostname
ノート: pingssh などのコマンドで仮想マシンのホストネームを使うことができるようになりますが、hostnslookup などのコマンドは DNS に依存するため使えない可能性があります。getent hosts <vm-hostname> を使ってください。

テスト

システムレベルでデーモンが正しく動作しているかテスト:

$ virsh -c qemu:///system

ユーザーセッションで libvirt が正しく動作するかテスト:

$ virsh -c qemu:///session

管理

Libvirt の管理は3つのツールで行うことができます: 一つは GUI virt-manager で、二つはコマンドラインツールです: virshguestfish (libguestfs に含まれています)。

virsh

virsh はゲストドメイン (仮想マシン) の管理のためのプログラムですが、仮想化管理のスクリプトにも使えます。ほとんどの virsh コマンドは実行するのに root 権限を必要とします。ただしドメインの作成や実行などは (VirtualBox と同じように) 通常ユーザーで実行することができます。

Virsh にはインタラクティブなターミナルが含まれており、コマンドを何も指定しないで実行したときに起動します (オプションは指定することができます): virsh。インタラクティブターミナルはタブ補完をサポートしています。

コマンドラインから:

$ virsh [option] <command> [argument]...

インタラクティブターミナルから:

virsh # <command> [argument]...

ヘルプを見るには:

$ virsh help [option*] or [group-keyword*]

ストレージプール

プールはストレージボリュームを保存しておく場所です。libvirt におけるボリュームは、他のハイパーバイザでは"仮想ディスク"または"仮想マシンイメージ"と定義されていることがあります。プールの場所はディレクトリでも、ネットワークファイルシステムでも、パーティションでもかまいません (LVM を含む)。プールは有効・無効を切り替えたり領域を予約することができます。

システムレベルでは、デフォルトで /var/lib/libvirt/images/ が有効になります。ユーザーセッションでは virt-manager$HOME/VirtualMachines を作成します。

有効または無効なストレージプールを確認:

$ virsh pool-list --all

virsh を使って新しいプールを作成

ストレージプールを追加したい場合、以下がコマンド形式、ディレクトリの追加、LVM ボリュームの追加の例です:

$ virsh pool-define-as name type [source-host] [source-path] [source-dev] [source-name] [<target>] [--source-format format]
$ virsh pool-define-as poolname dir - - - - /home/username/.local/libvirt/images
$ virsh pool-define-as poolname fs - -  /dev/vg0/images - mntpoint

上記のコマンドはプールの情報を定義します。ビルドするには:

$ virsh pool-build     poolname
$ virsh pool-start     poolname
$ virsh pool-autostart poolname

削除するには:

$ virsh pool-undefine  poolname
ヒント: LVM ストレージプールの場合:
  • ボリュームグループはストレージプール専用にするほうが良いでしょう。
  • LVM ボリュームグループの名前はプールの名前と変えて下さい。ストレージプールを削除したときに LVM グループも削除されてしまいます。

virt-manager を使って新しいプールを作成

まず、既存のサーバーに接続してください。そこで、右クリックして Details を選んで下さい。Storage に行き左下の + アイコンを押して下さい。それからはウィザードに従って下さい。

ストレージボリューム

プールを作成したら、プールの中にボリュームを作成することができます。新しいドメイン (仮想マシン) を作成する場合、ドメインの作成時にボリュームを作成できるのでこの手順はスキップできます。

virsh を使って新しいボリュームを作成

ボリュームの作成、確認、リサイズ、削除:

$ virsh vol-create-as      poolname volumename 10GiB --format aw|bochs|raw|qcow|qcow2|vmdk
$ virsh vol-upload  --pool poolname volumename volumepath
$ virsh vol-list           poolname
$ virsh vol-resize  --pool poolname volumename 12GiB
$ virsh vol-delete  --pool poolname volumename
$ virsh vol-dumpxml --pool poolname volumename  # for details

virt-manager の補助記憶

新しいバージョンの virt-manager では新しいディスクを作成するときに補助記憶を指定することができます。新しい仮想システムをプロビジョニングする場合にベースイメージを基にして新しいドメインを作ることができるため、時間と容量の両方を節約できてとても便利です。ただし現在のバージョンの virt-manager にはバグ (https://bugzilla.redhat.com/show_bug.cgi?id=1235406) が存在し、補助イメージが qcow2 タイプの場合に virt-manager が間違ったタイプの補助イメージを選択してしまいます。この場合、補助タイプとして raw が選択されます。補助記憶から新しいイメージが読み取れなくなり、補助記憶を用意する意味が完全に失われます。

この問題の回避策として qemu-img を使うことで直接補助記憶を指定することができます。バグが修正されるまでは、補助記憶を使いたい場合、以下のコマンドを使って下さい:

$ qemu-img create -f qcow2 -o backing_file=<path to backing image>,backing_fmt=qcow2 <disk name> <disk size>

作成したイメージを新しいドメインのベースとすることで COW ボリュームとして補助記憶が使用され時間と容量が節約されます。

ドメイン

libvirt では仮想マシンはドメインと呼ばれます。コマンドラインから使う場合、virsh でドメインを確認・作成・停止・シャットダウンできます。virt-viewer を使って virsh で起動したドメインを確認することも可能です。ドメインの作成は virt-manager でグラフィカルに行うか virt-install (virt-install パッケージに含まれているコマンドラインプログラム) を使います。

新しいドメインを作成するときは、インストールメディアを使用します。ドメインの作成後にロードします。ストレージプールから .iso を参照したり、光学ドライブを参照することができます。

有効または無効なドメインを確認:

# virsh list --all
ノート: SELinux はデフォルトで /var/lib/libvirt/images/ にボリュームが保存されることを必要とします。SELinux を使っていてボリュームに問題が起こる場合、ボリュームがそのディレクトリにあるか確認、またはあなたが使用している非デフォルトのディレクトリの適当なラベリングを追加してください。

virt-install を使って新しいドメインを作成

ドメイン (仮想マシン) を細かく設定したい場合、virt-manager を使って新しいドメインを作成する方が簡単です。しかしながら、基本的な設定は virt-install で行うことができます。最低でも指定する必要があるのは --name, --memory, ゲストストレージ (--disk, --filesystem または --nodisks), インストール方法 (.iso または CD) です。オプションについて詳しくは virt-install(1) を見てください。

Arch Linux のインストール (2GiB, qcow2 フォーマットのボリューム作成; ユーザーネットワーク):

$ virt-install  \
  --name arch-linux_testing \
  --memory 1024             \ 
  --vcpus=2,maxvcpus=4      \
  --cpu host                \
  --cdrom $HOME/Downloads/arch-linux_install.iso \
  --disk size=2,format=qcow2 \
  --network user            \
  --virt-type kvm

Fedora testing (Xen ハイパーバイザ, 非デフォルトのプール, オリジナルの表示を使わない):

$ virt-install  \
  --connect xen:///     \
  --name fedora-testing \
  --memory 2048         \
  --vcpus=2             \
  --cpu=host            \
  --cdrom /tmp/fedora20_x84-64.iso      \
  --os-type=linux --os-variant=fedora20 \
  --disk pool=testing,size=4            \
  --network bridge=br0                  \
  --graphics=vnc                        \
  --noautoconsole
$ virt-viewer --connect xen:/// fedora-testing

Windows:

$ virt-install \
  --name=windows7           \
  --memory 2048             \
  --cdrom /dev/sr0          \
  --os-variant=win7         \
  --disk /mnt/storage/domains/windows7.qcow2,size=20GiB \
  --network network=vm-net  \
  --graphics spice
ヒント: --os-variant の引数を取得するには osinfo-query --fields=name,short-id,version os を実行してください。ドメインの仕様を定義するのに役立ちます。ただし、--memory--disk を入力する必要があります。仕様が必要な場合は適当な /usr/share/libosinfo/db/oses/os.xml を見て下さい。インストール後、VirtIO ドライバー が含まれている Spice Guest Tools をインストールすると良いでしょう。Windows の VirtIO ネットワークドライバーは virtio-winAUR にもあります。ドライバーはゲストの .xml 設定のデバイスセクションに <model type='virtio' /> で指定します。詳細は QEMU の記事を読んで下さい。

既存のボリュームをインポート:

$ virt-install  \
  --name demo  \
  --memory 512 \
  --disk /home/user/VMs/mydisk.img \
  --import

virt-manager を使って新しいドメインを作成

まずハイパーバイザに接続します (例: QEMU/KVM システムまたはユーザーセッション)。接続を右クリックして New を選択して、ウィザードに従って下さい。

  • ステップ4 で、Allocate entire disk now のチェックを外すことができます -- VM がディスクの全てを使用していないときに容量を節約します。ただし、ディスクのフラグメンテーションが増加する可能性があるので、VM ホストのディスクの合計空き容量に注意してください、VM にディスク容量を追加で割り当てるほうが簡単だからです。
  • ステップ5 では、Advanced options を開いて Virt Typekvm に設定してください。追加のハードウェア設定が必要な場合、Customize configuration before install オプションを選んで下さい。

ドメインの管理

ドメインを起動:

$ virsh start domain
$ virt-viewer --connect qemu:///session domain

ドメインを上品にシャットダウン、または強制的にオフにする:

$ virsh shutdown domain
$ virsh destroy  domain

libvirtd の起動時にドメインを自動実行:

$ virsh autostart domain
$ virsh autostart domain --disable

ホストのシャットダウン時にドメインもシャットダウン:

libvirt-guests.service systemd サービスを使うことでホストのシャットダウン時に自動的にゲストの実行をサスペンド (もしくは) シャットダウンさせることができます。同じデーモンでホストの起動時に自動的にサスペンド (シャットダウン) されたゲストが復帰 (起動) されます。サービスのオプションは /etc/conf.d/libvirt-guests をチェックしてください。

ドメインの設定を編集:

$ virsh edit domain
ノート: QEMU によって直接起動した仮想マシンは libvirt ツールで管理できません。

ネットワーク

デフォルトでは、libvird systemd サービスが起動すると、default という名前の NAT ブリッジが作成されて外部ネットワークに接続できるようになります。

他のネットワーク接続が必要な場合、ドメインとの接続を作成することができる4つのネットワークタイプが存在します:

  • bridge — 仮想デバイス。物理インターフェイスと直接データを共有します。ホストで固定ネットワークを使う場合や他のドメインに接続する必要がない場合、またはドメインに完全なインバウンドとアウトバウンドの通信が必要な場合やドメインをシステムレベルで動作させる場合、ブリッジを使って下さい。ブリッジを追加する方法はネットワークブリッジを参照。作成後、ゲストの .xml 設定ファイルで指定する必要があります。
  • network — 仮想ネットワーク。他のドメインと共有することができます。ホストが動的ネットワーク (例: NetworkManager) やワイヤレスを使う場合仮想ネットワークを使って下さい。
  • macvtap — ホストの物理インターフェイスに直接接続。
  • user — ローカルのネットワーク。ユーザーセッションの場合に使って下さい。

virsh にはネットワークを作成するための様々なオプションが存在していますが、(virt-manager などの) グラフィカルユーザーインターフェイスを使ったり virt-install でドメインを作成するときにネットワーク接続を作成する方が簡単です。

ノート: libvirt は dnsmasq で DHCP や DNS を管理し、仮想ネットワークごとにインスタンスを起動します。また、適切なルーティングが行われるように iptables ルールを追加して、ip_forward カーネルパラメータを有効にします。libvirt を使うのにホストで dnsmasq を実行する必要はありません (libvirt の dnsmasq インスタンスと干渉する可能性があります)。

IPv6

設定ツールを使って IPv6 アドレスを追加した際に、以下のようなエラーが表示されることがあります:

Check the host setup: enabling IPv6 forwarding with RA routes without accept_ra set to 2 is likely to cause routes loss. Interfaces to look at: eth0

以下のファイルを作成することで問題を解決できます (eth0 は物理インターフェイスの名前に置き換えてください):

/etc/sysctl.d/libvirt-bridge.conf
net.ipv6.conf.eth0.accept_ra = 2

設定したらマシンを再起動してください。

スナップショット

スナップショットは現時点でのドメインのディスク・メモリ・デバイスの状態を取得して、将来のために保存します。OS の"クリーン"なコピーを保存することから、ドメインが破壊される前にドメインの状態を保存することまで、様々な理由で使われます。スナップショットは一意な名前で識別されます。

スナップショットはボリュームの中に保存されるためボリュームが次の形式である必要があります: qcow2 または raw。スナップショットは差分を使用するので大量の容量を使用することはありません。

スナップショットの作成

スナップショットが取得されると新しいブロックデバイスとして保存されオリジナルのスナップショットはオフラインになります。スナップショットは他のスナップショットから選択したりマージすることができます (ドメインをシャットダウンする必要はありません)。

動作中のドメインのボリュームを確認 (動作中のドメインは virsh list で確認できます):

# virsh domblklist domain
 Target     Source
 ------------------------------------------------
 vda        /vms/domain.img

ボリュームの物理プロパティを確認するには:

# qemu-img info /vms/domain.img
 image: /vms/domain.img
 file format: qcow2
 virtual size: 50G (53687091200 bytes)
 disk size: 2.1G
 cluster_size: 65536

disk-only スナップショットを作成 (--atomic オプションはスナップショットの作成が失敗した場合にボリュームに変更が加わっていないことを確認します):

# virsh snapshot-create-as domain snapshot1 --disk-only --atomic

スナップショットを確認:

# virsh snapshot-list domain
 Name                 Creation Time             State
 ------------------------------------------------------------
 snapshot1           2012-10-21 17:12:57 -0700 disk-snapshot

cp -sparse=truersync -S を使ってオリジナルのイメージをコピーしてオリジナルのイメージをスナップショットにマージできます:

# virsh blockpull --domain domain --path /vms/domain.snapshot1

domain.snapshot1 が新しいボリュームになります。マージが完了したらオリジナルのボリューム (domain.img とスナップショットのメタデータは削除できます。virsh blockcommitblockpull と反対の動作をするようになる予定ですが現在開発中です (snapshot-revert 機能を含む、来年リリース予定)。

他の管理

非デフォルトのハイパーバイザに接続:

$ virsh --connect xen:///
virsh # uri
xen:///

SSH で QEMU ハイパーバイザに接続してログイン:

$ virsh --connect qemu+ssh://username@host/system
$ LIBVIRT_DEBUG=1 virsh --connect qemu+ssh://username@host/system

SSH でグラフィカルコンソールに接続:

$ virt-viewer  --connect qemu+ssh://username@host/system domain
$ virt-manager --connect qemu+ssh://username@host/system domain
ノート: (Arch 以外の) RHEL リモートサーバーに接続するときに問題が発生する場合、FS#30748FS#22068 に書かれている方法を試してみて下さい。

VirtualBox ハイパーバイザに接続 (libvirt における VirtualBox のサポートはまだ安定していないため libvirtd がクラッシュする可能性があります):

$ virsh --connect vbox:///system

ネットワークの設定:

$ virsh -c qemu:///system net-list --all
$ virsh -c qemu:///system net-dumpxml default

Python 接続コード

libvirt-python パッケージによって /usr/lib/python2.7/site-packages/libvirt.pypython2 API が提供されます。

一般的なサンプルは /usr/share/doc/libvirt-python-your_libvirt_version/examples/ にあります。

qemuopenssh を使う非公式のサンプル:

#! /usr/bin/env python2
# -*- coding: utf-8 -*-
import socket
import sys
import libvirt
if (__name__ == "__main__"):
   conn = libvirt.open("qemu+ssh://xxx/system")
   print "Trying to find node on xxx"
   domains = conn.listDomainsID()
   for domainID in domains:
       domConnect = conn.lookupByID(domainID)
       if domConnect.name() == 'xxx-node':
           print "Found shared node on xxx with ID " + str(domainID)
           domServ = domConnect
           break

UEFI サポート

Libvirt は QEMU と OVMF で UEFI 仮想マシンをサポートしています。

ovmf[リンク切れ: 置換パッケージ: edk2-ovmf] パッケージをインストールしてください。

/etc/libvirt/qemu.conf に以下を追加してください:

/etc/libvirt/qemu.conf
nvram = [
    "/usr/share/ovmf/ovmf_code_x64.bin:/usr/share/ovmf/ovmf_vars_x64.bin"
]

その後 libvirtd再起動してください。

これで UEFI 仮想マシンを作成する準備が整いました。virt-manager で新しい仮想マシンを作成してください。'New VM' ウィザードの最後のページで、以下のようにしてください:

  • 'Customize before install' をクリックして 'Finish' を選択してください。
  • 'Overview' 画面で 'Firmware' フィールドを変更して 'UEFI x86_64' オプションを選択してください。
  • 'Begin Installation' をクリックしてください。
  • 起動画面で linuxefi コマンドによってインストーラーが起動され、システムの中で efibootmgr を実行することで UEFI OS が実行していることが確認できます。

詳しくは fedora の wiki ページ を参照。

PulseAudio

PulseAudio デーモンは通常のユーザーアカウントで動作し、同じユーザーからの接続だけを許可します。libvirt を使って root で QEMU を動作させた場合は困ることになります。通常ユーザーで QEMU を動作させるには /etc/libvirt/qemu.conf を編集して user オプションでユーザー名を指定してください:

user = "dave"

また、PulseAudio バックエンドを使用してサーバーに接続するように QEMU を設定する必要があります。virsh edit を使ってデーモンの設定に以下のセクションを追加してください:

 <qemu:commandline>
   <qemu:env name='QEMU_AUDIO_DRV' value='pa'/>
   <qemu:env name='QEMU_PA_SERVER' value='/run/user/1000/pulse/native'/>
 </qemu:commandline>

1000 はあなたのユーザー ID に置き換えてください。

参照