Introdução
A administração de máquinas virtuais envolve mais do que criar e iniciar um domínio. Frequentemente, os operadores assumem o controle de uma VM existente e precisam alterar sua definição persistente de recursos: aumentar a memória, disponibilizar CPUs virtuais adicionais, anexar armazenamento, ativar a inicialização automática e comprovar que o estado em execução corresponde à configuração solicitada.
Na terminologia do libvirt, uma máquina virtual é um domínio. Um domínio persistente possui uma definição salva — conceitualmente, seu projeto de hardware — mesmo quando nenhum processo QEMU está em execução. Iniciar o domínio cria uma instância em execução a partir dessa definição; interrompê-lo remove a instância em execução, mas preserva o projeto. Manter a configuração persistente separada do estado de execução é a ideia central deste laboratório.
Neste laboratório, um domínio libvirt desligado chamado lfcs-config já está definido com um pequeno disco de inicialização, 64 MiB de memória e uma vCPU. Você inspecionará essa configuração inicial e usará comandos de gerenciamento de recursos do virsh para reconfigurá-la. O ambiente não disponibiliza /dev/kvm, portanto o QEMU usa emulação por software, e os discos não contêm um sistema operacional convidado. Ainda assim, o fluxo de gerenciamento e a configuração persistente do libvirt são reais.
Inspecionar a configuração existente do domínio
Nesta etapa, você verificará a configuração persistente e o estado de execução do domínio lfcs-config antes de fazer alterações.
Acesse o diretório do projeto.
cd /home/labex/project
Liste todos os domínios. A opção --all inclui os domínios interrompidos, portanto lfcs-config deverá aparecer no estado shut off.
sudo virsh list --all
Sem --all, virsh list normalmente exibe apenas os domínios ativos. Ver um nome interrompido na lista expandida confirma que o libvirt ainda conhece sua definição persistente, embora a VM não esteja consumindo tempo de CPU como um convidado em execução.
Inspecione o resumo do domínio.
sudo virsh dominfo lfcs-config
dominfo reúne informações sobre identidade, ciclo de vida, CPU, memória, persistência e inicialização automática. Neste momento, interprete esses dados como uma referência inicial, não como o estado final: a saída posterior deverá mudar apenas nos campos que você reconfigurar deliberadamente.
Concentre-se nos campos estáveis da configuração:
Name: lfcs-config
State: shut off
CPU(s): 1
Max memory: 65536 KiB
Used memory: 65536 KiB
Persistent: yes
Autostart: disable
O libvirt informa a memória em KiB neste ponto. Como 1 MiB equivale a 1024 KiB, 65536 KiB corresponde a 64 MiB. Persistent: yes significa que a definição permanece após o desligamento, enquanto Autostart: disable indica que o libvirt não iniciará automaticamente esse domínio quando o serviço de virtualização for iniciado.
Liste os dispositivos de bloco anexados. vda é o disco raiz preparado, e sua origem é a imagem qcow2 existente.
sudo virsh domblklist lfcs-config --details
Nesta tabela, Target é o nome do dispositivo apresentado ao convidado, enquanto Source é o caminho no host onde os dados são armazenados. O disco virtio chamado vda é equivalente a uma unidade virtual conectada à VM; o arquivo de origem qcow2 é a imagem de suporte dessa unidade no host.
Essa referência inicial separa o que já existe das alterações de recursos que serão feitas nas etapas seguintes.
Configurar memória persistente e vCPUs
Nesta etapa, você aumentará a memória máxima persistente, a alocação de memória atual e o número de vCPUs do domínio enquanto ele estiver desligado.
O libvirt diferencia o limite máximo de memória da quantidade atribuída na próxima inicialização. Primeiro, defina o máximo persistente como 128 MiB. A opção --config altera a definição salva do domínio, em vez de um valor temporário de execução.
sudo virsh setmaxmem lfcs-config 128M --config
O limite deve ser suficientemente grande para comportar a quantidade atribuída. Pense em max memory como a capacidade de memória da máquina virtual e em current memory como a quantidade solicitada para uso normal. Como o domínio está desligado, alterar a configuração com --config é previsível e terá efeito na próxima inicialização.
Defina a memória atribuída na próxima inicialização como 96 MiB.
sudo virsh setmem lfcs-config 96M --config
O sufixo M instrui o virsh a interpretar o valor em mebibytes. Mais adiante, a saída de dominfo converterá 128 MiB em 131072 KiB e 96 MiB em 98304 KiB; são as mesmas quantidades expressas em unidades diferentes.
O número máximo de vCPUs deve ser aumentado antes que a alocação persistente atual possa usar duas CPUs.
sudo virsh setvcpus lfcs-config 2 --config --maximum
Este primeiro comando de CPU altera o limite superior na definição salva. Ele não atribui, por si só, duas vCPUs utilizáveis. Separar o máximo da alocação ativa permite que uma definição de VM reserve capacidade para expansão futura.
Defina duas vCPUs para a próxima inicialização.
sudo virsh setvcpus lfcs-config 2 --config
O segundo comando define a alocação persistente dentro do novo limite. A ordem é importante: solicitar duas vCPUs atribuídas enquanto o máximo ainda for uma fará a operação falhar.
Inspecione a definição persistente atualizada.
sudo virsh dominfo lfcs-config
Os campos relevantes deverão agora exibir:
CPU(s): 2
Max memory: 131072 KiB
Used memory: 98304 KiB
Criar e anexar um disco de dados persistente
Nesta etapa, você criará uma segunda imagem qcow2 e a anexará como um disco virtio persistente chamado vdb.
Crie uma imagem qcow2 esparsa de 64 MiB no diretório de imagens do libvirt.
sudo qemu-img create -f qcow2 /var/lib/libvirt/images/lfcs-config-data.qcow2 64M
O comando cria um contêiner de disco virtual, não um sistema de arquivos nem um diretório montado. -f qcow2 seleciona o formato de imagem copy-on-write do QEMU, e 64M define sua capacidade virtual. Inicialmente, uma imagem esparsa recém-criada ocupa muito menos armazenamento no host do que seu tamanho virtual e cresce conforme os dados são gravados pelo convidado.
Permita que o processo QEMU deste ambiente de treinamento abra a imagem descartável.
sudo chmod 666 /var/lib/libvirt/images/lfcs-config-data.qcow2
O modo 666 concede permissão de leitura e gravação a todas as classes de usuários. Essa permissão ampla mantém este laboratório descartável independente das configurações específicas de usuário e grupo do QEMU no host, mas não é uma recomendação para produção. Em um host real, prefira a propriedade, o grupo, o rótulo SELinux ou a política do AppArmor exigidos pelo serviço libvirt local.
Anexe o arquivo a lfcs-config. A opção --target vdb define o nome do dispositivo de bloco no convidado, --subdriver qcow2 registra o formato da imagem e --config modifica a definição persistente para a próxima inicialização.
sudo virsh attach-disk lfcs-config \
/var/lib/libvirt/images/lfcs-config-data.qcow2 \
vdb --targetbus virtio --subdriver qcow2 --config
O caminho de origem pertence ao host; vdb é o nome que o convidado verá. --targetbus virtio seleciona uma interface de disco paravirtualizada, normalmente usada para obter eficiência em convidados Linux. Como o domínio está desligado e o comando usa --config, o libvirt registra o dispositivo no projeto salvo em vez de tentar conectá-lo dinamicamente.
Liste a configuração persistente dos dispositivos de bloco.
sudo virsh domblklist lfcs-config --details
A saída deverá conter agora vda e vdb, com vdb apontando para lfcs-config-data.qcow2.
Neste ponto, o arquivo de imagem e a conexão com o domínio são dois fatos distintos. Criar um arquivo qcow2, por si só, não o conecta a uma VM, e remover um disco posteriormente não excluirá automaticamente o arquivo de origem.
Ativar a inicialização automática e validar o estado de execução
Nesta etapa, você ativará a inicialização automática do domínio, iniciará a VM agora e comparará seus recursos em execução com as configurações persistentes.
Ative a inicialização automática para que o libvirt marque este domínio para ser iniciado quando o serviço de virtualização for iniciado.
sudo virsh autostart lfcs-config
A inicialização automática é uma política salva, não uma solicitação para iniciar o domínio imediatamente. Ela é útil para serviços de infraestrutura que devem retornar automaticamente após a reinicialização do host ou do serviço libvirt.
Inicie o domínio usando sua definição persistente atualizada.
sudo virsh start lfcs-config
A inicialização cria um processo QEMU a partir da definição salva que você editou: duas vCPUs, os novos limites de memória e os dois discos. O comando informa que o domínio foi iniciado; dominfo e domblklist fornecem as evidências de que seu estado corresponde à configuração pretendida.
Aguarde alguns segundos para que o QEMU entre no estado de execução.
sleep 3
Inspecione o domínio. Ele deverá estar em execução com duas vCPUs, 128 MiB de memória máxima e a inicialização automática ativada.
sudo virsh dominfo lfcs-config
Neste domínio emulado por software, o campo Used memory normalmente será de 128 MiB durante a execução, embora a solicitação persistente de currentMemory seja de 96 MiB. Não há um sistema operacional convidado nem um driver balloon cooperando com o libvirt para reduzir a alocação em execução. Inspecione o XML inativo para confirmar que a configuração da próxima inicialização ainda registra 96 MiB:
sudo virsh dumpxml lfcs-config --inactive | grep -E '<memory|<currentMemory|<vcpu'
dumpxml --inactive solicita a definição salva, em vez da visão do QEMU em execução. O pipe encaminha esse XML para grep, que exibe apenas os elementos de memória e CPU. Essa comparação concentrada evita que uma diferença esperada na forma de informar o estado de execução seja confundida com uma alteração de configuração malsucedida.
Os valores estáveis incluem <memory unit='KiB'>131072</memory>, <currentMemory unit='KiB'>98304</currentMemory> e um valor de vCPU igual a 2. Essa comparação mostra por que a configuração persistente e os recursos informados em tempo de execução devem ser verificados separadamente.
Liste os discos do domínio ativo.
sudo virsh domblklist lfcs-config --details
vda e vdb deverão aparecer. Isso demonstra que a configuração salva foi aplicada quando o QEMU foi iniciado.
Parar a VM e confirmar o estado persistente
Nesta etapa, você interromperá o processo convidado preservando o domínio configurado, o armazenamento e a configuração de inicialização automática.
Como os discos de treinamento não contêm um sistema operacional, um desligamento normal do convidado não pode ser concluído. Use destroy para interromper imediatamente o processo QEMU. Isso altera o estado de execução, mas não exclui a definição persistente do domínio.
sudo virsh destroy lfcs-config
Apesar do nome, virsh destroy se aproxima mais de cortar a energia do que de excluir uma VM. Ele é apropriado aqui somente porque o exercício não possui sistema operacional convidado nem dados importantes. Para um convidado real em execução, prefira virsh shutdown e permita que o sistema operacional grave os dados pendentes e seja encerrado corretamente.
Confirme que o domínio está parado.
sudo virsh domstate lfcs-config
A saída deverá ser:
shut off
Inspecione a configuração persistente uma última vez.
sudo virsh dominfo lfcs-config
O estado esperado shut off descreve apenas o estado de execução. CPU, memória, discos anexados e inicialização automática permanecem na definição persistente. Remover essa definição exigiria uma operação diferente, como virsh undefine; mesmo remover a definição de um domínio não necessariamente exclui os arquivos de imagem dos discos.
Liste todos os domínios e seus estados de inicialização automática. O domínio lfcs-config, embora parado, deverá continuar definido e marcado para inicialização automática.
sudo virsh list --all --autostart
A VM está agora parada, mas pronta para ser iniciada posteriormente com a configuração de recursos que você criou.
Resumo
Você assumiu o controle de um domínio libvirt existente e alterou sua configuração persistente de recursos sem reescrever o XML. Aumentou a memória máxima e atribuída, configurou duas vCPUs, criou e anexou um segundo disco qcow2, ativou a inicialização automática, validou a configuração em um domínio QEMU em execução e interrompeu o processo preservando a VM gerenciada. Essa é a diferença prática entre simplesmente explorar o ciclo de vida de uma VM e configurá-la para atingir um estado-alvo solicitado.



