다음 설정을 사용하여 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를 가리키거나 스크립트를 실행할 때 제대로 작동합니다.한 번따라서 백업 파일은 하나뿐입니다. 그러나 일련의 백업 파일(예: 백업 파일도 포함하는 백업 파일)이 있는 경우 다음 오류가 발생합니다.
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을 사용하여 병합을 시도했는데 이미지가 한두 개만 남으면 게스트가 시작됩니다.
"열 수 없음" 권한 오류처럼 보이므로 권한을 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