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

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

У меня есть настройка KVM/Qemu, которая отлично работает. Теперь я хочу оптимизировать подготовку новых виртуальных машин.

Два очевидных способа — либо клонировать существующий диск, либо установить его с нуля (с помощью автоматизированного preseed/kickstart).

В моих тестах установка с preseed/kickstart занимает не менее нескольких минут от создания до запуска (даже с локальными зеркалами). Результат отличный, но это занимает слишком много времени.

Клонирование, очевидно, намного быстрее, но оно создает проблемы, как только вам требуется диск большего размера, чем исходный.

Теперь, если бы это было просто одноразовое событие, было бы тривиально загрузить его и расширить диск вручную. Однако я хочу сделать это автоматически при первой загрузке.

По сути, необходимо выполнить три задачи:

  • Расширьте диск (fdisk/cfdisk и т.д.)
  • Изменить размер пула томов (в случае LVM)
  • Расширить фактическую файловую систему

Хотя это можно было бы заскриптовать, я хотел бы поднять этот вопрос здесь, так как сомневаюсь, что я единственный, кто хочет сделать это в автоматическом режиме. Самое близкое, что я нашел, этоraspi-configдля Raspberry Pi, который предлагает для этого автоматизированный инструмент.

Конечно, я мог бы взять код из raspi-config, но он делает много предположений, поэтому я надеялся, что может быть доступен более универсальный инструмент.

решение1

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

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

решение2

Оказывается, что growroot, который является частьюОблачная инициализацияможет сделать это. Для полного примера того, как это работает, пожалуйста, взгляните на мою реализацию вvmprep.

Связанный контент