Назад | Перейти на главную страницу

Автоматическое изменение размера диска виртуальной машины

У меня есть установка 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

Это должно сработать на этапе клонирования.