Virsh: criando e gerenciando VMs pelo terminal

O virsh é um utilitário criado para gerenciar máquinas virtuais de tecnologias como KVM, Xen, VMware ESX, QEMU entre outras. Esse suporte se deve ao fato do virsh ser construído utilizando a libvirt como base.

De uma forma simples, a libvirt é uma API/daemon criada pela Red Hat para gerenciar máquinas virtuais. Assim como o virsh, outras ferramentas são baseadas na libvirt para gerenciar VMs, como virt-manager, OpenStack e oVirt. Apesar de ser escrita em C, existem bindings para outras linguagens, como Python, Perl, Ruby, Java e PHP.

Para instalar os pacotes necessários para este tutorial em uma distro Red Hat-like, execute o seguinte comando:

sudo yum install qemu-img libvirt-client virt-viewer virt-install

Para iniciar, vamos criar um HD para nossa VM. Na verdade, o HD é um arquivo dentro do sistemas de arquivos da sua distro, onde a VM irá utilizar como se fosse um HD propriamente dito.

qemu-img create -f qcow2 guest.qcow2 8192M

O qemu-img é um utilitário de imagens de disco do QEMU. Com ele é possível aumentar e diminuir o tamanho das imagens de disco, converter entre formatos, e muito mais. No comando acima, estamos criando uma nova imagem de disco, com o formato qcow2 (que é o padrão do QEMU, mas podem ser utilizados outros formatos como VMDK, VHDX, RAW, VDI e outros), com 8G de espaço e com o nome de guest.qcow2.

O comando a seguir cria uma nova maquina virtual utilizando o o disco previamente criado com uma imagem live do Fedora 22:

virt-install -r 1024 -f guest.qcow2 -n Fedora_Guest --cdrom data/isos/Fedora-Live-LXDE-x86_64-20-1.iso --virt-type kvm --network bridge=virbr0 --vnc

-r: memória RAM em megabytes
-f: disco onde será instalado o sistema
-n: Nome da máquina virtual
–cdrom: Para para o ISO de uma distro da sua escolha. Aqui escolhi uma imagem do Fedora que eu tinha disponível
–network: Tipo de rede que você deseja habilitar para a VM. Neste caso eu já havia criado uma rede bridge antes, e então decidi usar esta. Para desabilitar a rede basta informar none
–vnc: Inicia um VNC server para esta VM. Este vai ser utilizado posteriormente

O parâmetro virt-type merece um destaque, pois ele informa o tipo de virtualização que será utilizado na máquina. Na minha máquina em questão, meu processador tem suporte a KVM (Kernel Virtual Machine), que possibilita uma alta performance quando executando uma VM. Para verificar se o seu processador tem essa tecnologia, execute:

virsh capabilities

Se no output deste comando houver uma tag como:

   <domain type='kvm'>
        <emulator>/usr/bin/qemu-kvm</emulator>
        <machine canonical='pc-i440fx-2.3' maxCpus='255'>pc</machine>
        <machine maxCpus='255'>pc-1.3</machine>
        <machine maxCpus='255'>pc-0.12</machine>
        <machine maxCpus='255'>pc-q35-1.6</machine>

Então seu processador tem esta tecnologia. Se este não tiver, utilize qemu como parâmetro do virt-type.

Após executar este comando, vemos algo do tipo:

[[email protected] ~]$ virt-install -r 1024 -f guest.qcow2 -n Fedora_Guest --cdrom data/isos/Fedora-Live-LXDE-x86_64-20-1.iso --virt-type kvm --network bridge=virbr0 --vnc
WARNING  Graphics requested but DISPLAY is not set. Not running virt-viewer.
WARNING  No console to launch for the guest, defaulting to --wait -1

Starting install...
Criando o domínio...                                                                                                                                 |    0 B  00:00:00
Domain installation still in progress. Waiting for installation to complete.

Se você estiver executando estes comandos no console da máquina em questão, então irá aparecer o virt-viewer mostrando a execução da VM, tal qual o Virtual Box, virt-manager e outros gerenciadores de máquinas virtuais fazem. Mas se por acaso você estiver acessando esta máquina por uma conexão ssh, então nenhuma janela será mostrada e o shell ficará preso até você configurar o SO que foi iniciado. Para poder visualizar a VM via VNC na rede, basta executar o comando abaixo:

virt-viewer -c qemu+ssh:[email protected]/system Fedora_Guest

Para utilizar o VNC na mesma máquina, basta colocar -c qemu:///sytem.

Com este comando, será solicitado o usuário e senha do máquina que você está conectando, e após este será exibido o virt-viewer com a imagem da VM sendo executada:
Captura de tela de 2015-06-15 21-23-27

Após instalar a VM, o processo é todo feito como um gerenciador de VMs qualquer, com a vantagem de poder acessar as VMs por VNC de qualquer lugar que quiser.

Com o virsh é possível gerenciar essas VMs, com os seguintes comandos:
virsh list: Lista todos as VMs criadas e seu estado de funcionamento.
virsh shutdown : Envia comando de desligamento para a VM.
virsh destroy : Faz um force shutdown na VM.
virsh start : Liga a VM

Entre vários outros comandos. Com o virsh é possível ainda manipular discos nas VMs, adicionando e removendo discos conforme a necessidade, alterar parâmetros de rede, criando e removendo interfaces e vários outros.

O virsh se mostra realmente uma ótima ferramenta para gerenciar suas máquinas virtuais. Se você deseja uma ferramenta com interface gráfica não esquece de ver este artigo sobre o virt-manager, que é basicamente um front-end para o virsh.

Espero que tenham gostado desta pequena explicação sobre o virsh. Até a próxima!

Referências:
Wikipédia – libvirt
man virsh
man virt-install
man virt-viewer
virt-tools.org