次の設定を使用して、Ubuntu 16.04でKVM用のQemu外部スナップショットを使用しようとしています(高速すぎるからです)。
- VM内のすべてのファイルは単一のディレクトリ(ゲスト名にちなんで名前付け)にあります。
head.qcow2
常にトップレベルの「ヘッド」qcow2画像を指すシンボリックリンクがあります。これにより、VM構成を継続的に更新する必要がなくなります。 (Vershによって編集されました)。- 元/下の画像が呼び出されます。
base.qcow2
次のスクリプトを使用してスナップショットを撮ります(新しいqcow2イメージを作成し、それをヘッドに設定します)。このスクリプトは、ゲストが実行されていない場合にのみ実行されます。
#!/bin/bash
UNIX_TIMESTAMP=$(date +%s)
CURRENT_BACKING_FILE=`readlink head.qcow2`
NEW_HEAD_FILE="`pwd`/`echo $UNIX_TIMESTAMP`.qcow2"
# Create the new "head" disk image where all future changes are made.
sudo qemu-img create \
-f qcow2 \
-b $CURRENT_BACKING_FILE \
$NEW_HEAD_FILE
# Update the symlink
rm head.qcow2
ln -s $NEW_HEAD_FILE head.qcow2
head.qcow2 が base.qcow2 を指すとき、またはスクリプトを実行すると正常に動作します。一度したがって、バックアップファイルは1つだけです。ただし、一連のバックアップファイル(バックアップファイルを含むバックアップファイルなど)がある場合は、次のエラーが発生します。
error: Failed to start domain template-ubuntu-docker2
error: internal error: early end of file from monitor, possible problem: 2018-04-05T19:04:55.597373Z qemu-system-x86_64: -drive file=/media/ssd_storage2/kvm/vms/templates/template-ubuntu-docker2/head.qcow2,format=qcow2,if=none,id=drive-virtio-disk0: Could not open backing file: Could not open backing file: Could not open '/media/ssd_storage2/kvm/vms/templates/template-ubuntu-docker2/base.qcow2': Permission denied
出力はqemu-img --backing-chain head.qcow2
次のとおりです
image: head.qcow2
file format: qcow2
virtual size: 20G (21474836480 bytes)
disk size: 196K
cluster_size: 65536
backing file: /media/ssd_storage2/kvm/vms/templates/template-ubuntu-docker2/1522954330.qcow2
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits: 16
corrupt: false
image: /media/ssd_storage2/kvm/vms/templates/template-ubuntu-docker2/1522954330.qcow2
file format: qcow2
virtual size: 20G (21474836480 bytes)
disk size: 4.1M
cluster_size: 65536
backing file: base.qcow2 (actual path: /media/ssd_storage2/kvm/vms/templates/template-ubuntu-docker2/base.qcow2)
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits: 16
corrupt: false
image: /media/ssd_storage2/kvm/vms/templates/template-ubuntu-docker2/base.qcow2
file format: qcow2
virtual size: 20G (21474836480 bytes)
disk size: 8.8G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: true
refcount bits: 16
corrupt: false
イメージを削除するか、qemu-img commit を使用してマージしようとしましたが、イメージが 1 つまたは 2 つしか残っていない場合は、ゲストが起動します。
「オープンできません」権限エラーのように見えるため、権限を777に設定しようとしましたが、まだ同じエラーメッセージが表示されるため、権限の問題ではないはずです。
私は何をすべきですか?
答え1
またAppArmorと関連があるようです。エマルジョン数年前、Ubuntu 14.04では忘れました。)
apparmor-utilsのインストール
sudo apt-get install apparmor-utils
次に、最新のシステムログでlibvirt IDを見つけます。
sudo cat /var/log/syslog | grep "apparmor" | grep "DENIED" | grep libvirt-
次に、そのIDとフルパスを使用して「苦情モード」に設定します。
sudo aa-complain \
/etc/apparmor.d/libvirt/libvirt-b0cd5bdf-6dfc-4f75-bc0f-e38adff1cdd2
それからゲストを始めなさい。
各ゲストに対して個別にこれを行う必要がある場合は、せいぜい回避策のように感じ、迷惑になります。誰かがより良い解決策を提供してくれたら、もっとうれしいです。
答え2
Debian Busterで同じ問題が発生すると、libvirt apparmor設定ファイルが/etc/apparmor.d/libvirt/に動的に作成され保存されます(@Programsterに感謝します)。このディレクトリで次のようなTEMPLATE.qemuを見つける必要があります。
#
# This profile is for the domain whose UUID matches this file.
#
#include <tunables/global>
profile LIBVIRT_TEMPLATE flags=(attach_disconnected) {
#include <abstractions/libvirt-qemu>
}
構成ファイルにqcow2が格納されているディレクトリの規則を追加する必要があります。
#
# This profile is for the domain whose UUID matches this file.
#
#include <tunables/global>
profile LIBVIRT_TEMPLATE flags=(attach_disconnected) {
#include <abstractions/libvirt-qemu>
/media/ssd_storage2/kvm/vms/templates/template-ubuntu-docker2/**.qcow2 rk,
}
「r」は読み取り権限を意味し、「k」はロック権限を意味する。
「dmesg -w」を使用して、衣類監査メッセージを追跡し、不足している権限に基づいて同様のメッセージを取得できます。
[ 4404.140981] audit: type=1400 audit(1566342100.488:254): apparmor="DENIED" operation="open" profile="libvirt-b24e7663-d71a-4970-9d6c-711d43629135" name="/home/libvirt/0.0.6-dev.19+20~811d1dc983b5.qcow2" pid=22384 comm="qemu-system-x86" requested_mask="r" denied_mask="r" fsuid=64055 ouid=64055
...
[ 4652.827860] audit: type=1400 audit(1566342349.172:263): apparmor="DENIED" operation="file_lock" profile="libvirt-b24e7663-d71a-4970-9d6c-711d43629135" name="/home/libvirt/0.0.6-dev.19+20~811d1dc983b5.qcow2" pid=23085 comm="qemu-system-x86" requested_mask="k" denied_mask="k" fsuid=64055 ouid=64055