При попытке для создания снимка KVM с помощью virsh snapshot-create-as --domain vm --name vm-snap --disk-only --diskspec "sdc, snapshot = internal, file = / var / lib / libvirt / images /vm.qcow2,,new"
, я получаю сообщение об ошибке:
ошибка: XML-документ не прошел проверку на соответствие схеме: невозможно проверить документ на соответствие /usr/share/libvirt/schemas/domainsnapshot.rng
Диски дополнительных элементов в чередовании
Снимок доменов элемента не смог проверить контент
Тем не менее, XML-код проходит проверку с помощью visrh edit vm.xml
, но что-то здесь не проверяется.
ОС: Ubuntu 20.10
qemu: 1: 5.0-5ubuntu9.1
libvirt: 6.6.0-1ubuntu3.1
- BVS
К вашему сведению: XML можно просмотреть с помощью --print-xml
$ virsh snapshot-create-as --domain h-test --name h-test-snap --diskspec "vda,snapshot=internal,file=/var/lib/uvtool/libvirt/images/h-test.qcow.snapshot" --print-xml
<domainsnapshot>
<name>h-test-snap</name>
<disks>
<disk name='vda' snapshot='internal'>
<source file='/var/lib/uvtool/libvirt/images/h-test.qcow.snapshot'/>
</disk>
</disks>
</domainsnapshot>
Проблема в том, что «внутренний» означает использование того же файла на диске, который является взаимоисключающим с созданием моментального снимка, включая состояние виртуальной машины.
Просматривая некоторые старые варианты использования, я увидел следующую небольшую модификацию: у меня сработало:
$ virsh snapshot-create-as --domain h-test --name h-test-snap --disk-only --diskspec vda,file=/var/lib/uvtool/libvirt/images/h-test.qcow.snapshot
В вашем случае не указано --только для диска
, что означает, что вы хотите сохранить гостевую память
государство также. Но этого нельзя сделать в внутреннем
режиме.
Примечание: я обычно также добавляю --atomic --quiesce
Если мы сравним XML предложенной мной рабочей команды, в нем больше нет snapshot=internal.
<domainsnapshot>
<name>h-test-snap</name>
<disks>
<disk name='vda'>
<source file='/var/lib/uvtool/libvirt/images/h-test.qcow.snapshot'/>
</disk>
</disks>
</domainsnapshot>
Итак, чтобы решить вашу проблему, либо переключитесь в режим «внешний + только диск» (как было предложено выше), либо если вы действительно хотите сохранить состояние памяти И диски, но в то же время вам нужно контролировать файлы (все еще взаимоисключающие с внутренний режим, я думаю, но не уверен) вы можете использовать --memspec
, чтобы сообщить ему, куда поместить эти данные.
Это будет что-то вроде:
$ virsh snapshot-create-as --domain h-test2 --name h-test-snap --diskspec vda,snapshot=external,file=/var/lib/uvtool/libvirt/images/h-test2.qcow.snapshot --memspec snapshot=external,file=/var/lib/uvtool/libvirt/images/h-test2.mem --print-xml
<domainsnapshot>
<name>h-test-snap</name>
<memory snapshot='external' file='/var/lib/uvtool/libvirt/images/h-test2.mem'/>
<disks>
<disk name='vda' snapshot='external'>
<source file='/var/lib/uvtool/libvirt/images/h-test2.qcow.snapshot'/>
</disk>
</disks>
</domainsnapshot>
Примечание: последний все еще настолько необычен, что еще не имеет полной поддержки апброни,
и тем самым пропускает добавление правил для него вовремя. Я зарегистрировал ошибку 1905674 для этого.
В этом случае вам нужно будет добавить переопределение либо для всех гостей (/etc/apparmor.d/local/abstractions/libvirt-qemu
), либо для отдельного гостя (/etc/apparmor. d/libvirt/libvirt-
)
Примечание: Кстати, чтобы разрешить дополнительные модификации/эксперименты — вы можете проверить XML, не запуская фактический снимок, например:
$ virt-xml-validate snap.xml domainsnapshot
Relax-NG validity error : Extra element disks in interleave
snap.xml:3: element disks: Relax-NG validity error : Element domainsnapshot failed to validate content
snap.xml fails to validate
Примечание: обратите внимание, если у вашего гостя есть несколько дисков, и вы хотите вручную добавить diskspec, тогда вам нужно добавить его явно для все диски.В противном случае правила apparmor не могут быть созданы, и они будут сбой с: «Отказано в доступе»
Примечание: если вы хотите исключить некоторые диски из резервной копии, справочная страница объясняет: «Чтобы исключить диск из внешнего снимка, используйте --diskspec ,snapshot=no." (не уверен насчет промежуточных дисков в этом контексте)