「Libvirt」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
135行目: 135行目:
 
{{hc|/etc/conf.d/libvirtd|2=LIBVIRTD_ARGS="--listen"}}
 
{{hc|/etc/conf.d/libvirtd|2=LIBVIRTD_ARGS="--listen"}}
   
==使用方法==
+
== テスト ==
   
  +
システムレベルでデーモンが正しく動作しているかテスト:
===新しい VM をインストールする===
 
新しい VM を作成するには、何がしかのインストールメディアが必要で、通常は {{ic|.iso}} ファイルが基本です。ファイルを {{ic|/var/lib/libvirt/images/}} ディレクトリにコピーしてください (または、virt-manager で新しい''ストレージプール''ディレクトリを作成してそこにコピーすることもできます)。
 
   
  +
$ virsh -c qemu:///system
{{Note|[[SELinux]] はデフォルトで {{ic|/var/lib/libvirt/images/}} に仮想マシンが保存されることを必要とします。SELinux を使っていて仮想マシンに問題が起こる場合、あなたの VM がそのディレクトリにするか確認、またはあなたが使用している非デフォルトのディレクトリの適当なラベリングを追加してください。}}
 
   
  +
ユーザーセッションで libvirt が正しく動作するかテスト:
それから {{ic|virt-manager}} を起動して、サーバーに接続します、接続を右クリックして '''New''' を選択してください。名前を決めたら、'''Local install media''' を選択してください。ウィザードを進めて下さい。
 
   
  +
$ virsh -c qemu:///session
'''ステップ4'''で、''Allocate entire disk now'' のチェックを外すことができます -- VM がディスクの全てを使用していないときに容量を節約します。ただし、ディスクのフラグメンテーションが増加する可能性があるので、VM ホストのディスクの合計空き容量に''注意してください''、VM にディスク容量を追加で割り当てるほうが簡単だからです。
 
   
  +
== 管理 ==
'''ステップ5'''では、'''Advanced options''' を開いて ''Virt Type'' を '''kvm''' に設定してください。kvm が選べない場合、上の [[#QEMU の KVM アクセラレーションを有効にする|QEMU の KVM アクセラレーションを有効にする]]を見て下さい。
 
   
  +
Libvirt の管理は3つのツールで行うことができます: 一つは GUI {{ic|virt-manager}} で、二つはコマンドラインツールです: {{ic|virsh}} と {{ic|guestfish}} ({{AUR|libguestfs}} に含まれています)。
===virt-manager でストレージプールを作成する===
 
まず、既存のサーバーに接続してください。そこで、右クリックして '''Details''' を選んで下さい。'''Storage''' に行き左下の '''+''' アイコンを押して下さい。それからはウィザードに従って下さい。 :)
 
   
  +
=== virsh ===
===virt-manager で VirtualBox を使う===
 
{{Note|libvirt の [[VirtualBox|VirtualBox]] サポートはまだあまり安定しておらず libvirtd がクラッシュする可能性があります。通常はクラッシュしてもデーモンを再起動すれば全てが元に戻るはずです。}}
 
   
  +
virsh はゲスト''ドメイン'' (仮想マシン) の管理のためのプログラムですが、仮想化管理のスクリプトにも使えます。ほとんどの virsh コマンドは実行するのに root 権限を必要とします。ただしドメインの作成や実行などは (VirtualBox と同じように) 通常ユーザーで実行することができます。
virt-manager では GUI から VirtualBox の接続を追加することはできません。しかしながら、コマンドラインから起動することが可能です:
 
$ virt-manager -c vbox:///system
 
   
  +
Virsh にはインタラクティブなターミナルが含まれており、コマンドを何も指定しないで実行したときに起動します (オプションは指定することができます): {{ic|virsh}}。インタラクティブターミナルはタブ補完をサポートしています。
また、SSH でリモートシステムを管理したい場合:
 
$ virt-manager -c vbox+ssh://username@host/system
 
   
  +
コマンドラインから:
===ライブスナップショット===
 
外部スナップショットという機能を使うことで仮想マシンを停止することなくライブスナップショットを取得することができます。現在は qcow2 と raw ファイルベースのイメージでだけで動作します。
 
   
  +
$ virsh [option] <command> [argument]...
スナップショットが作成されると、KVM は使用されている仮想マシンに新しいブロックデバイスとして新規スナップショットイメージを加えます。新しいデータは直接そこに保存され元のディスクイメージはオフラインになるため簡単にコピーやバックアップを取ることが可能です。その後、仮想マシンをシャットダウンせずに、元のイメージにスナップショットイメージをマージすることができます。
 
   
  +
インタラクティブターミナルから:
以下、使用方法です。
 
   
  +
virsh # <command> [argument]...
現在動作中の仮想マシン:
 
{{hc|# virsh list --all|<nowiki>
 
Id Name State
 
----------------------------------------------------
 
3 archey running
 
</nowiki>}}
 
   
  +
ヘルプを見るには:
現在のイメージを全て表示:
 
  +
{{hc|# virsh domblklist archey|<nowiki>
 
  +
$ 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''
  +
$ virsh pool-start ''poolname''
  +
$ virsh pool-autostart ''poolname''
  +
  +
削除するには:
  +
  +
$ virsh pool-undefine ''poolname''
  +
  +
{{Tip|LVM ストレージプールの場合:
  +
* ボリュームグループはストレージプール専用にするほうが良いでしょう。
  +
* LVM ボリュームグループの名前はプールの名前と変えて下さい。ストレージプールを削除したときに LVM グループも削除されてしまいます。
  +
}}
  +
  +
==== virt-manager を使って新しいプールを作成 ====
  +
  +
まず、既存のサーバーに接続してください。そこで、右クリックして ''Details'' を選んで下さい。''Storage'' に行き左下の ''+'' アイコンを押して下さい。それからはウィザードに従って下さい。
  +
  +
=== ストレージボリューム ===
  +
  +
プールを作成したら、プールの中にボリュームを作成することができます。新しいドメイン (仮想マシン) を作成する場合、ドメインの作成時にボリュームを作成できるのでこの手順はスキップできます。
  +
  +
==== virsh を使って新しいボリュームを作成 ====
  +
  +
ボリュームの作成、確認、リサイズ、削除:
  +
  +
$ virsh vol-create-as ''poolname'' ''volumename'' 10GiB
  +
$ 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 の補助記憶 ====
  +
  +
新しいバージョンの {{ic|virt-manager}} では新しいディスクを作成するときに補助記憶を指定することができます。新しい仮想システムをプロビジョニングする場合にベースイメージを基にして新しいドメインを作ることができるため、時間と容量の両方を節約できてとても便利です。ただし現在のバージョンの {{ic|virt-manager}} にはバグ (https://bugzilla.redhat.com/show_bug.cgi?id=1235406) が存在し、補助イメージが {{ic|qcow2}} タイプの場合に {{ic|virt-manager}} が間違ったタイプの補助イメージを選択してしまいます。この場合、補助タイプとして {{ic|raw}} が選択されます。補助記憶から新しいイメージが読み取れなくなり、補助記憶を用意する意味が完全に失われます。
  +
  +
この問題の回避策として {{ic|qemu-img}} を使うことで直接補助記憶を指定することができます。バグが修正されるまでは、補助記憶を使いたい場合、以下のコマンドを使って下さい:
  +
  +
$ qemu-img create -f qcow2 -o backing_file=<path to backing image>,backing_fmt=qcow2 <disk name> <disk size>
  +
  +
作成したイメージを新しいドメインのベースとすることで COW ボリュームとして補助記憶が使用され時間と容量が節約されます。
  +
  +
=== ドメイン ===
  +
  +
libvirt では仮想マシンは''ドメイン''と呼ばれます。コマンドラインから使う場合、{{ic|virsh}} でドメインを確認・作成・停止・シャットダウンできます。{{ic|virt-viewer}} を使って {{ic|virsh}} で起動したドメインを確認することも可能です。ドメインの作成は {{ic|virt-manager}} でグラフィカルに行うか {{ic|virt-install}} ({{pkg|virt-manager}} パッケージに含まれているコマンドラインプログラム) を使います。
  +
  +
新しいドメインを作成するときは、インストールメディアを使用します。ドメインの作成後にロードします。ストレージプールから {{ic|.iso}} を参照したり、光学ドライブを参照することができます。
  +
  +
有効または無効なドメインを確認:
  +
  +
# virsh list --all
  +
  +
{{Note|[[SELinux]] はデフォルトで {{ic|/var/lib/libvirt/images/}} にボリュームが保存されることを必要とします。SELinux を使っていてボリュームに問題が起こる場合、ボリュームがそのディレクトリにあるか確認、またはあなたが使用している非デフォルトのディレクトリの適当なラベリングを追加してください。}}
  +
  +
==== virt-install を使って新しいドメインを作成 ====
  +
  +
ドメイン (仮想マシン) を細かく設定したい場合、[[#virt-manager を使って新しいドメインを作成|virt-manager を使って新しいドメインを作成]]する方が簡単です。しかしながら、基本的な設定は {{ic|virt-install}} で行うことができます。最低でも指定する必要があるのは {{ic|--name}}, {{ic|--memory}}, ゲストストレージ ({{ic|--disk}}, {{ic|--filesystem}} または {{ic|--nodisks}}), インストール方法 ({{ic|.iso}} または CD) です。
  +
  +
Arch Linux のインストール (2GiB, raw フォーマットのボリューム作成; ユーザーネットワーク):
  +
  +
$ 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=raw \
  +
--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
  +
  +
{{Tip|{{ic|--os-variant}} の引数を取得するには {{ic|1=osinfo-query --fields=name,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}} カーネルパラメータを有効にします。}}
  +
  +
=== スナップショット ===
  +
  +
スナップショットは現時点でのドメインのディスク・メモリ・デバイスの状態を取得して、将来のために保存します。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)
190行目: 371行目:
 
</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
 
------------------------------------------------------------
 
------------------------------------------------------------
200行目: 383行目:
 
</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 が提供されます。
   
265行目: 432行目:
 
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()
275行目: 442行目:
 
break
 
break
   
  +
== 参照 ==
== ブリッジネットワーク ==
 
仮想マシンから''物理イーサネット''を使用するには、物理イーサネットデバイス (ここでは ''eth0'') とか VM が使用する仮想イーサネットデバイスの間に''ブリッジ''を作成する必要があります。
 
 
=== ホスト設定 ===
 
 
libvirt は NAT ネットワークのためにブリッジ ''virbr0'' を作成するため、''br0'' や ''virbr1'' など他の名前を使って下さい。
 
[[Netctl|netctl]] や [[Systemd-networkd|systemd-networkd]] の新しいプロファイルを作ってブリッジを設定する必要があります、例えば (DHCP を使う設定):
 
 
{{hc|/etc/netctl/br0|<nowiki>
 
Description="Bridge connection for kvm"
 
Interface=br0
 
Connection=bridge
 
BindsToInterfaces=(eno1)
 
IP=dhcp
 
</nowiki>}}
 
   
  +
* [http://libvirt.org/drvqemu.html libvirt 公式ウェブサイト]
{{out of date|The tip below needs to be updated for [[netctl]].}}
 
  +
* [https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Virtualization_Deployment_and_Administration_Guide/index.html Red Hat Virtualization Deployment and Administration Guide]
{{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.}}
 
  +
* [https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Virtualization_Tuning_and_Optimization_Guide/index.html Red Hat Virtualization Tuning and Optimization Guide]
 
  +
* [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]
そして ''VM'' の中で''ブリッジインターフェイス''を有効にします。
 
最新の Linux マシンの場合、''.xml'' ファイルの以下のコードが使えます:
 
 
[...]
 
<interface type='bridge'>
 
<source bridge='br0'/>
 
<mac address='24:42:53:21:52:49'/>
 
<model type='virtio' />
 
</interface>
 
[...]
 
 
このコードはマシン上の ''virtio'' デバイスを有効化します。Windows では追加のドライバーをインストールする (こちらからドライバーを取得できます [http://www.linux-kvm.org/page/WindowsGuestDrivers/Download_Drivers Windows KVM VirtIO drivers]) か {{ic|<model type<nowiki>=</nowiki>'virtio' />}} 行を削除する必要があります:
 
 
[...]
 
<interface type='bridge'>
 
<source bridge='br0'/>
 
<mac address='24:42:53:21:52:49'/>
 
</interface>
 
[...]
 
 
== 参照 ==
 
* [http://libvirt.org/drvqemu.html libvirt ウェブサイト]
 

2015年8月31日 (月) 18:16時点における版

関連記事

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 パッケージと、どれか一つハイパーバイザーをインストールしてください:

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

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

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

クライアント

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

  • virsh はドメインを管理・設定するためのコマンドラインプログラムです。libvirt パッケージに含まれています。
  • virt-manager は仮想マシンを管理するためのグラフィカルユーザーインターフェイスです。
  • virtviewer は仮想化されたゲスト OS のグラフィカルな画面を操作するための軽量なインターフェイスです。
  • gnome-boxes はリモートや仮想システムにアクセスするためのシンプルな GNOME 3 アプリケーションです。

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

設定

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

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

認証を設定

libvirt: Connection authentication より:

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

libvirt は依存パッケージとして polkit をインストールするので、unix_sock_auth パラメータのデフォルト値としては 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#パスワードプロンプトの迂回 を見て下さい。

RW デーモンソケットにアクセスするときに認証するグループを変更したい場合、以下のファイルを作成:

/etc/polkit-1/rules.d/49-org.libvirt.unix.manager.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)、グループが存在することと、ユーザーがグループに属していることを確認してください (詳しくはユーザーとグループを参照)。グループの変更を適用するには再ログインが必要です。

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

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.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"

テスト

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

$ virsh -c qemu:///system

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

$ virsh -c qemu:///session

管理

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

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
$ 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-manager パッケージに含まれているコマンドラインプログラム) を使います。

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

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

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

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

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

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

$ 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=raw  \
  --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,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 カーネルパラメータを有効にします。

スナップショット

スナップショットは現時点でのドメインのディスク・メモリ・デバイスの状態を取得して、将来のために保存します。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

参照