Eu tenho uma configuração KVM/Qemu que funciona muito bem. Agora quero agilizar o provisionamento de novas VMs.
As duas maneiras óbvias são clonar um disco existente ou instalar do zero (com um preseed/kickstart automatizado).
Em meus testes, a instalação com preseed/kickstart leva pelo menos alguns minutos desde a criação até a instalação e execução (mesmo com espelhos locais). O resultado é ótimo, mas demora muito.
A clonagem é obviamente muito mais rápida, mas cria problemas assim que você precisa de um disco maior que o de origem.
Agora, se fosse apenas uma coisa única, teria sido trivial inicializá-lo e expandir o disco manualmente. No entanto, pretendo fazer isso de forma automatizada na primeira inicialização.
Existem basicamente três tarefas que precisam ser executadas:
- Expanda o disco (fdisk/cfdisk etc)
- Redimensione o pool de volumes (no caso de LVM)
- Expanda o sistema de arquivos real
Embora fosse possível criar um script para isso, eu queria abordá-lo aqui, pois duvido que seja o único que queira fazer isso de forma automatizada. A coisa mais próxima que encontrei éraspi-configpara o Raspberry Pi, que oferece uma ferramenta automatizada para isso.
É claro que eu poderia retirar o código do raspi-config, mas ele faz muitas suposições, então esperava que houvesse uma ferramenta mais universal disponível.
Responder1
libguestfspode estar à altura da tarefa, mas não pode fazê-lo no lugar, citação:
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
Fazer isso como etapa de clonagem deve funcionar.
Responder2
Acontece que growroot
, que faz parteInicialização na nuvemposso fazer isso. Para um exemplo completo de como isso funciona, dê uma olhada na minha implementação emvmprep.