У меня есть установка KVM / Qemu, которая отлично работает. Теперь я хочу упростить подготовку новых виртуальных машин.
Есть два очевидных способа: либо клонировать существующий диск, либо установить его с нуля (с автоматической предварительной загрузкой / кикстартом).
В моих тестах установка с использованием preseed / kickstart занимает не менее нескольких минут от создания до запуска (даже с локальными зеркалами). Результат отличный, но надолго.
Клонирование, очевидно, происходит намного быстрее, но оно создает проблемы, как только вам понадобится диск большего размера, чем исходный.
Теперь, если бы это было что-то одноразовое, было бы тривиально загрузить его и расширить диск вручную. Однако я хочу сделать это автоматически при первой загрузке.
В основном необходимо выполнить три задачи:
Хотя это можно было бы написать сценарием, я хотел бы поднять это здесь, так как сомневаюсь, что я единственный, кто хочет сделать это автоматически. Самое близкое, что я нашел, это raspi-config для Raspberry Pi, который предлагает автоматизированный инструмент для этого.
Я, конечно, мог бы поднять код из raspi-config, но он делает много предположений, поэтому я надеялся, что может быть доступен более универсальный инструмент.
Оказывается, что growroot
, который является частью Cloud Init может это сделать. Чтобы увидеть полный пример того, как это работает, взгляните на мою реализацию в vmprep.
libguestfs может справиться с задачей, но не может этого сделать, Цитата:
Copy olddisk to newdisk, extending one of the guest's partitions to fill the extra 5GB of space.
virt-filesystems --long -h --all -a olddisk
truncate -r olddisk newdisk
truncate -s +5G newdisk
# Note "/dev/sda2" is a partition inside the "olddisk" file.
virt-resize --expand /dev/sda2 olddisk newdisk
Это должно сработать на этапе клонирования.