Невозможно проверить XML для снимка KVM / QEMU в 20.10

При попытке для создания снимка 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

0
задан 26 November 2020 в 10:44

1 ответ

К вашему сведению: 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>

Сравнение других выпусков

  • Hirsute + Focal + Bionic => такой же сгенерированный XML
  • Hirsute + Focal => та же ошибка проверки
  • Bionic => сообщает о «неподдерживаемой конфигурации»

Проблема в том, что «внутренний» означает использование того же файла на диске, который является взаимоисключающим с созданием моментального снимка, включая состояние виртуальной машины.

Просматривая некоторые старые варианты использования, я увидел следующую небольшую модификацию: у меня сработало:

$ 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." (не уверен насчет промежуточных дисков в этом контексте)

1
ответ дан 26 November 2020 в 07:18

Другие вопросы по тегам:

Похожие вопросы: