TL; DR внизу
Я создаю веб-интерфейс для libvirt как проект. Я использую libvirt-php в качестве языковой привязки к libvirt, и все работает, кроме создания домена, вроде того.
Проблема, с которой я столкнулся, связана с созданием домена, в котором я хотел бы создать домен на основе базового домена. Я уже задавал подобный вопрос раньше, где я задавал почти тот же вопрос. Я получил полезный ответ от модератора, который посоветовал мне проверить, как virt-install этого добился.
Итак, я сделал, я запустил virt-install, чтобы увидеть, как они достигли создания нового домена из базового, но, к моему разочарованию, это не сработало так, как я ожидал, так как в конечном итоге он просто поделился данным объемом хранилища, который я указал, если только Я что-то напортачил.
Поэтому я выбрал другой подход, в котором я бы создал новый том хранилища на основе того, который я хотел бы использовать в качестве хранилища для нового домена, используя virsh vol-create-from
команду, или в libvirt-php libvirt_storagevolume_create_xml_from()
функция.
Этот подход работал хорошо, я мог создать домен, указать объем хранилища, который я хотел бы использовать в качестве образа базового диска, и он просто сработал. Однако я сталкивался с новой проблемой всякий раз, когда пытался создать несколько доменов одновременно.
Видите ли, поскольку создание домена - это трудоемкий процесс, я решил просто поместить это задание в очередь beanstalkd и использовать supervisord, чтобы поддерживать выполнение процессов, создавая рабочие процессы для управления новыми заданиями. Здесь и возникла новая проблема, поскольку в журналах ошибок было следующее сообщение: Requested operation is not valid: volume 'ubuntu-14.04.3-x64' is still being allocated.
Получается, что мне нужно дождаться клонирования тома, прежде чем клонировать его снова. Это проблема, с которой я столкнулся.
TL; DR: Пытаясь создать домен в libvirt из базового домена, пробовали следующее:
Пытался посмотреть, как работает флаг virt-install --import, не дал никаких полезных результатов. (Возможно, что-то упустил).
Пытался создать том хранилища из базового тома хранилища. (Это работало, пока я не попытался клонировать том хранилища несколько раз, пока другие тома создавались из базового тома, который у меня был).
Решение, в котором я бы создал новый том для хранения на основе базы, кажется наиболее удобным, если бы оно позволяло мне создавать несколько томов на основе этой базы одновременно.
Вопрос:
Итак, мой вопрос: возможно ли:
Создать домен из образа базового диска в libvirt?
Клонировать том несколько раз, не дожидаясь завершения процесса клонирования? (Есть ли что-то, что я упускаю из виду в отношении конфигурации libvirt?)
Создать новый домен из снимка другого домена в libvirt? (Спросить об этом, поскольку это еще одно возможное решение, которое только что пришло мне в голову, когда я писал этот вопрос, и Google еще не дал никаких полезных ответов, в том числе о том, как восстановить домен до предыдущего снимка.)
Я бы просто использовал qemu-img
для этого. Если вы хотите увидеть код, посмотрите, как это делает vdsm.