Cambio de tamaño automático del disco de VM

Cambio de tamaño automático del disco de VM

Tengo una configuración KVM/Qemu que funciona muy bien. Ahora quiero optimizar el aprovisionamiento de nuevas máquinas virtuales.

Las dos formas obvias son clonar un disco existente o instalarlo desde cero (con un arranque previo/kickstart automatizado).

En mis pruebas, la instalación con un preseed/kickstart tarda al menos unos minutos desde la creación hasta el funcionamiento (incluso con réplicas locales). El resultado es estupendo, pero lleva demasiado tiempo.

Obviamente, la clonación es mucho más rápida, pero crea problemas tan pronto como se necesita un disco más grande que el original.

Ahora bien, si fuera algo puntual, habría sido trivial arrancarlo y expandir el disco a mano. Sin embargo, estoy buscando hacer esto de forma automática en el primer arranque.

Básicamente hay tres tareas que deben realizarse:

  • Expanda el disco (fdisk/cfdisk, etc.)
  • Cambiar el tamaño del grupo de volúmenes (en el caso de LVM)
  • Expandir el sistema de archivos real

Si bien sería posible crear un script para esto, quería mencionarlo aquí, ya que dudo que sea el único que busca hacerlo de forma automatizada. Lo más parecido que he encontrado esconfiguración raspipara Raspberry Pi, que ofrece una herramienta automatizada para ello.

Por supuesto, podría extraer el código de raspi-config, pero hace muchas suposiciones, por lo que esperaba que hubiera una herramienta más universal disponible.

Respuesta1

libguestfspodría estar a la altura de la tarea, aunque no puede hacerlo en el lugar. Cita:

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

Hacer esto como paso de clonación debería funcionar.

Respuesta2

Resulta que growroot, que es parte deInicio de la nubepuede hacer esto. Para obtener un ejemplo completo de cómo funciona esto, eche un vistazo a mi implementación envmprep.

información relacionada