web-dev-qa-db-ja.com

rawディスクイメージを、kvmおよびvirt-managerで使用する別のイメージに基づくコピーオンライトイメージに変換する方法は?

私は仮想Windowsマシンをkvmで実行しています。現在、90GBのrawディスクイメージがあります。 90GBのrawディスクイメージのコピーを2つ保持する必要なしに、このVMを複製したいと思います。

これを行うための良いアプローチは、オリジナルに基づいて2つの新しいqcowまたはqcow2イメージを作成することです。まず、生の画像をqcow2画像に変換しました。

qemu-img convert -O qcow2 basewindowsxp.img basewindowsxp.qcow2

それから私はこれに裏打ちされた新しい画像を作成してみました:

qemu-img create -F qcow2 -f qcow2 -b `pwd`/basewindowsxp.qcow2 windowsxp-1.qcow2

次に、virt-managerを使用して、元のVM at windowsxp-1.qcow2をポイントしました。ただし、この新しい構成でVM= 、virt-managerがエラーを報告します:

Traceback (most recent call last):
  File "/usr/share/virt-manager/virtManager/engine.py", line 588, in run_domain
    vm.startup()
  File "/usr/share/virt-manager/virtManager/domain.py", line 150, in startup
    self._backend.create()
  File "/usr/lib/python2.6/dist-packages/libvirt.py", line 300, in create
    if ret == -1: raise libvirtError ('virDomainCreate() failed', dom=self)
libvirtError: internal error unable to start guest: qemu: could not open disk image /var/lib/libvirt/images/windowsxp-1.qcow2

このエラーは、ファイル名が誤って指定されているか、ファイルシステムの権限が制限されていることを示していますが、どちらも当てはまりません。

$ ls -l /var/lib/libvirt/images/windowsxp-1.qcow2 
-rwxrwxrwx 1 root root 262144 2010-05-27 08:32 /var/lib/libvirt/images/windowsxp-1.qcow2

Virt-managerがこのvmを起動しないのはなぜですか?

4

この問題は、libvirtがapparmorを使用する方法が原因で発生しました。

デフォルトの動作では、ホスト上の仮想化プロセスがアクセスを許可されるファイルを制限することにより、ゲストに対してホストをある程度保護します。 libvirtは、仮想化プロセス(この場合はkvm)が適切に動作するためにディスクイメージを必要とすることを認識しているため、windowsxp-1.qcow2へのアクセスを許可するapparmorプロファイルを作成します。ただし、windowsxp-1.qcow2basewindowsxp.qcow2によってサポートされていることは認識されていないため、apparmorプロファイルはそのファイルへのアクセスを許可しません。

Kvmからのエラー報告が非常に少ないのは残念です。 basewindowsxp.qcowを開いたときの根本的な障害はほぼ間違いなくEPERMでしたが、明らかにこのエラーは平坦化され、有用な情報が失われました。

ただし、システムログを読むと、apparmorが何かをしていることがわかります。例えば、

5月28日13:12:28ホスト名カーネル:[5338.835932] type = 1503 audit(1275066748.269:42):operation = "open" pid = 10601 parent = 1 profile = "libvirt-b1a29fd0-698c-11df-9c21-f78cb972735d" requested_mask = ":: w" denied_mask = ":: w" fsuid = 0 ouid = 1001 name = "/ var/lib/libvirt/images/basewindowsxp.img"

これは、apparmorプロファイルがプロセスのファイルへの書き込みアクセスを拒否したときに何が起こるかを示しています。この構成ミスのためにvmの起動が失敗するたびに、このログメッセージが/ var/log/messagesに表示されました。

この問題にはいくつかの解決策があります。

1)apparmor保護を無効にします。これは、virt-manager GUIを介して制御できます。概要セクション、セキュリティサブセクションでは、apparmorを無効にできます。

2)手動で追加ファイルへのアクセスを許可します。これは、/ etc/apparmor.d/libvirt /ディレクトリにあるapparmorファイルを変更することによって制御されます。次のような行を追加します。

"/var/lib/libvirt/images/basewindowsxp.img" r,

問題のvmのuuidに一致するファイルに対して、引用符で囲まれたファイル名への読み取りアクセスを許可します。

3)apparmor/libvirt /ベースプラットフォームの新しいバージョンにアップグレードし、VMを再作成します。どうやらこの誤設定は認識されており、問題のソフトウェアの十分に新しいバージョンで自動的に対処されます。

8