Manual básico do Virtualbox via linha de comando

01/07/2012 por

O Virtualbox é uma ferramenta da Oracle para virtualização muito prática. A interface é tão simples que um usuário não muito experiente consegue instalar em seu desktop e criar uma máquina em poucos minutos. Mesmo assim o Virtualbox é utilizado em ambientes empresariais com um bom nível de confiança e desempenho, ainda sendo gratuito. Com uma máquina virtualizada você pode facilmente simular ambientes de produção e inclusive experimentar aquelas distribuições de sistemas operacionais mais exóticas sem ter de reinstalar todas as suas aplicações caso algo dê errado.

Há vários manuais na Internet que explicam como utilizar o Virtualbox no modo gráfico, mas poucos conhecem a interface mais completa por linha de comando. Este manual o guiará pelo processo completo de instalação e uso em uma máquina com Linux através de um terminal de linha de comando. Note que poucas variações acontecem entre sistemas operacionais Linux, e até em sistemas Windows a variação é pequena, provavelmente terá de alterar apenas os caminhos de arquivos e nomes das interfaces de rede em alguns casos.

O que é um sistema hospedeiro (host) e o que é um sistema convidado (guest)?

O sistema hospedeiro nada mais é que o sistema operacional instalado em sua máquina física. Enquanto o sistema convidado é o sistema operacional instalado nas máquinas virtuais (VMs). Note que a escolha do sistema hospedeiro nem sempre influencia no desempenho do sistema convidado. Mas quanto mais programas estiverem executando e concorrendo com suas máquinas virtuais, pior será o desempenho das mesmas. Por isso escolha uma distribuição limpa, um disco de netinst do Debian é perfeito para isso.

A distribuição Linux utilizada nos testes e formulação deste manual é um Debian 6. Foi instalado a partir de um disco netinst que possui aproximadamente 60Mbs. Só foi necessário instalar o pacote do OpenSSH para permitir a configuração remota. No Windows você pode utilizar o Putty ou o PenguiNet. No Linux, use o comando ssh. Se você não souber como utilizar estes aplicativos recomendo que utilize a versão do gráfica do Virtualbox.

Este sistema hospedeiro será considerado um ambiente headless (sem interface gráfica). Normalmente este tipo de ambiente é o utilizado em ambientes corporativos, onde não há um monitor, mouse e teclado em cada máquina/servidor. Afinal se o ambiente é virtualizado, porque limitar-se ao espaço físico da máquina onde suas máquinas virtuais estão?

Leitura para mais tarde: cloud computing.

E o que afinal é o Virtualbox?

O Virtualbox nesta história é o hypervisor, também conhecido como VMM (Virtual Machine Manager). Ele é quem tem a árdua tarefa de simular a máquina física em uma máquina virtual. É claro que algumas vezes ele conta com a ajuda do processador que expôe alguns recursos para virtualização como o VT-x da Intel e o AMD-V da AMD.

Há dois tipos de hypervisors: B{Tipo 1 (Bare metal)}B: aquele hypervisor que executa diretamente sobre a máquina. Estes são os melhores, pois estes não são instalados sobre um sistema hospedeiro, e sim diretamente na máquina. Evitando assim a problemática dos aplicativos instalados no sistema hospedeiro. O Citrix XenServer é um exemplo de hypervisor bare metal.

B{Tipo 2 (Hosted)}B: um hypervisor que executa sobre um sistema hospedeiro. Esse é o caso do Virtualbox. O desempenho não é o melhor possível, porém ainda assim o resultado é muito bom quando combinado com recursos do processador como o VT-x ou AMD-V.

Organizando as pastas para o ambiente de virtualização

Como sugestão, crie algumas pastas para organizar seu ambiente. Se há algo inconveniente na instalação e uso padrão do Virtualbox são os espaços criados automaticamente nos nomes das pastas. Espaços só encomodam durante o uso da interface por linha de comando.

# Primeiro de tudo, entre no modo ROOT
su
# Criando a pasta do ambiente de virtualização
mkdir /virt
# Criando uma pasta para armazenar todas as máquinas criadas
mkdir /virt/vms
# Criando uma pasta para armazenar as ISOs de instalação
mkdir /virt/isos
# Criando uma pasta para armazenar alguns pacotes utilizados na instalação/configuração 
# do Virtualbox
mkdir /virt/packs
# Definindo permissões liberais para a pasta de vms
chmod 0777 -R /virt/vms

Instalação do Virtualbox no Debian

Antes de começar com os passos de instalação saiba que os links utilizados nos comandos wget abaixo podem não funcionar. A frequência de atualização do Virtualbox é bem grande. Visite o site do Virtualbox para pegar os links atualizados se algum dos links abaixo falhar. Como é um sistema operacional Debian, utilizaremos o apt-get para instalar os pacotes.

# Entrando na pasta de pacotes
cd /virt/packs
# Inserindo o repositório do Virtualbox na lista de sources do apt-get
echo deb http://download.virtualbox.org/virtualbox/debian squeeze contrib non-free \
    >> /etc/apt/sources.list
# Registrando a chave da Oracle para o apt-get
wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- \
    | sudo apt-key add -
# Não esqueça de atualizar as definições de pacotes
sudo apt-get update
# Instalando o Virtualbox de fato
sudo apt-get install virtualbox-4.1 dkms
# Instalando o pacote de extensões para ativar o acesso remoto a máquina virtual
wget http://phcco.com/public/res/vbox/extpack.php -O extpack.vbox-extpack
# Utilize o vboxmanage do Virtualbox para instalar o pacote adicional
vboxmanage extpack install extpack.vbox-extpack
# Acabaram as tarefas de root
exit

Se no último passo você não encontrar o vboxmanage provávelmente houve algum problema na instalação do pacote. Lembre-se que no Windows a variável PATH precisa ser configurada para utilizar também a pasta de binários do Virtualbox.

Após a instalação saia do modo administrador. Se você criar as máquinas utilizando o usuário root poderá ter problemas ao inicializar a máquina virtual.

Baixando a ISO do Debian para instalar como sistema convidado

Enquanto criamos a máquina virtual, abra um novo terminal e coloque para baixar a ISO do Debian 6. Este será o sistema operacional convidado que será instalado. A versão utilizada neste exemplo é 64 bits. Recomenda-se utilizar um sistema hospedeiro 64 bits e sempre que possível um sistema convidado também 64 bits.

wget http://cdimage.debian.org/debian-cd/6.0.5/amd64/iso-cd/debian-6.0.5-amd64-netinst.iso \
    -O /virt/isos/debian-6.0.5-amd64-netinst.iso

Criando a maquina virtual

Para criar a máquina virtual você precisa definir o sistema operacional convidado, assim o Virtualbox pode ajustar o hypervisor adequadamente. Você pode escolher um tipo de sistema operacional diferente, porém há chances do sistema não funcionar corretamente. No nosso caso vamos procurar o ID do Debian.

# Omita o "| grep Debian" se quiser dar uma olhada no cardápio
vboxmanage list ostypes | grep Debian
# Criando a máquina virtual de fato, no nosso exemplo chamaremos a máquina de Deb64
# Evite o espaço no nome!
vboxmanage createvm --name Deb64 --ostype Debian_64 --register --basefolder /vms
# Agora defina quantos processores esta máquina utilizará e qual é o tamanho da memória RAM e VRAM
vboxmanage modifyvm Deb64 --cpus 4 --memory 1024 --vram 8

Lembre-se que de nada adianta definir 4 processadores se sua máquina física só possuir 2 núcleos. Defina no máximo a quantidade real de núcleos que sua máquina possui. O Virtualbox até permite que você defina 36 processadores em uma máquina virtual, mas com um processador de quatro núcleos a sua máquina virtual vai perder mais tempo simulando os 28 processadores extras do que executando suas aplicações.

Como este sistema hospedeiro não possui interface gráfica, não defina uma quantidade muito grande de memória VRAM, ela será inútil. Oito Mbs já são suficientes para a maioria dos sistemas Linux sem gerenciador de janelas. Para Windows recomendo utilizar 16Mbs.

Configurações avançadas de máquina

Com as instruções acima já é possível iniciar a máquina. Mas vale a pena definir algumas propriedades extras na máquina. O comando abaixo ativa recursos de virtualização do processador. Algumas são válidas apenas para máquinas Intel com VT-x. Se estiver curioso por mais detalhes sobre o que cada parametro faz visite o manual oficial do Virtualbox.

vboxmanage modifyvm Deb64 --pae on --hwvirtex on --hwvirtexexcl on \
    --nestedpaging on --largepages on --vtxvpid on

O parâmetro cpuexecutioncap permite que você restrinja a execução da máquina virtual para que o sistema convidado não utilize toda a capacidade de processamento do seu sistema hospedeiro. É um valor em porcentagem, no exemplo abaixo permitimos o uso de 75% do poder de processamento. Só é útil em ambientes onde há mais de uma máquina virtual executando e você não quer que uma das máquinas exaure recursos reservados por outra.

vboxmanage modifyvm Deb64 --cpuexecutioncap 75

O comando abaixo irá ativar o ACPI da máquina virtual e o I/O APIC. O primeiro ativa recursos de gerenciamento de energia da máquina virtual e o segundo ativa um recurso que é necessário para que alguns SO detectem mais de um processador.

vboxmanage modifyvm Deb64 --acpi on --ioapic on

Alguns ajustes na configuração da BIOS são importantes. É necessário configurar a ordem de boot e desabilitar a exibição da tela de BIOS na máquina virtual.

# Eliminando o logotipo da virtualbox que simula a BIOS
vboxmanage modifyvm Deb64 --bioslogodisplaytime 0
# Definindo a ordem de boot, primeiro o DVD e depois o HD
vboxmanage modifyvm Deb64 --boot1 dvd
vboxmanage modifyvm Deb64 --boot2 disk

Uma máquina virtual precisa ter uma controladora para os discos rígidos e para drive de dvd. Então criamos um adaptador SATA com duas portas.

# Criamos uma interface de nome SATA, para facilitar, com duas portas
vboxmanage storagectl Deb64 --name sata --add sata --sataportcount 2
# Desabilitamos o cache de IO, só utilize ON se seu disco rígido for ruim 
vboxmanage storagectl Deb64 --name sata --hostiocache off
# Definimos que é possível bootar por ele
vboxmanage storagectl Deb64 --name sata --bootable on

O uso do hostiocache exige processamento extra, por isso desabilite se estiver utilizando um disco de estado sólido ou um disco rápido (com 7200 RPM ou mais). Em discos lentos deixe-o ativo para ter um melhor desempenho em escritas e leituras consecutivas. O cache também pode lhe causar corrupção de disco virtual caso o seu sistema hospedeiro feche forçadamente as máquinas virtuais.

Opções extras

Como esta máquina virtual será I{headless}, desabilite coisas inúteis.

# Removendo o audio
vboxmanage modifyvm Deb64 --audio none 
# Removendo a área de transferência
vboxmanage modifyvm Deb64 --clipboard disabled
# Removendo a interface USB
vboxmanage modifyvm Deb64 --usb off --usbehci off

Configurando a rede

Há duas formas distintas de configuração de uma interface de rede virtual. O modo bridge expôe o sistema convidado à mesma rede do sistema hospedeiro. Enquanto o NAT faz com que seu sistema hospedeiro atue como um roteador que oculta as máquinas virtuais. Na prática o NAT só é útil quando você não tiver um serviço DHCP configurado na rede onde seu sistema hospedeiro está.

Ao fim dos parâmetros de rede sempre haverá um número, ele indica qual é a interface de rede do convidado relacionada ao comando. Uma máquina virtual pode ter até 9 interfaces de rede, começando no número 1.

Opções de rede para bridge

Se você for utilizar o modo bridge você poderá definir um MAC específico para a placa, e atribuir um IP fixo em seu servidor DHCP. Obviamente é necessário definir qual será o adaptador utilizado no sistema hospedeiro. No nosso caso será a eth0.

vboxmanage modifyvm Deb64 --nic1 bridged --bridgeadapter1 eth0 --macaddress1 ca0ca0ca0ca0 \
    --cableconnected1 on --nicpromisc1 deny

Note que negamos o uso do modo promíscuo. Sem esta definição o sistema convidado poderá ler todos os pacotes que passam pela rede.

Opções de rede para NAT

Se você quiser utilizar o modo NAT recomendo utilizar as configurações abaixo.

vboxmanage modifyvm Deb64 --nic1 nat --natnet1 "192.168.0/24" --natdnsproxy1 on \
    --nataliasmode1 sameports

Definimos a faixa de rede que será utilizada pela máquina virtual (há um serviço DHCP interno do Virtualbox que irá entregar um IP nesta faixa). Definimos que o hypervisor também irá atuar como servidor de DNS, assim você não irá expor a configuração de DNS do seu sistema hospedeiro. Também definimos que o NAT irá tentar utilizar as mesmas portas de saída do sistema convidado no sistema hospedeiro. Isso reduz alguns problemas de compatibilidade.

Criando Port Forwardings no NAT

É possível configurar também algumas portas do sistema convidado para criar conexões de entrada na máquina virtual. Neste caso configuramos para que a porta 2222 do sistema hospedeiro seja redirecionada para a porta 22 do sistema convidado.

# Sintaxe dos parâmetros
#  vboxmanage modifyvm Deb64 --natpf<1-N> "[<name>],tcp|udp,,<hostport>,,<guestport>"
# Criamos o redirecionamento
vboxmanage modifyvm Deb64 --natpf1 "guestssh,tcp,,2222,,22"
# Para apagar basta utilizar o comando delete
# vboxmanage modifyvm Deb64 --natpf1 delete "guestssh"

Configurando a interface remota (VRDE)

Para um ambiente headless é muito importante configurar o VRDE. O VRDE é uma variação do RDP e você pode usar o mstsc (no Windows) ou o tsclient (no Linux) para acessar a máquina virtual durante a instalação do sistema convidado.

# Habilitamos o VRDE, e informamos qual é a porta do serviço
vboxmanage modifyvm Deb64 --vrde on --vrdeport 5000 
# Ajustamos alguns parâmetros para otimizar o VRDE
vboxmanage modifyvm Deb64 --vrdereusecon on --vrdemulticon off --vrdevideochannel on \
    --vrdevideochannelquality 75

# Informamos que não é necessário solicitar usuário e senha para abrir o VRDE
vboxmanage modifyvm Deb64 --vrdeauthtype null

# Abaixo desabilitamos algumas funcionalidades para melhorar o desempenho
vboxmanage modifyvm Deb64 --vrdeproperty Client/DisableUSB=1
vboxmanage modifyvm Deb64 --vrdeproperty Client/DisableAudio=1
vboxmanage modifyvm Deb64 --vrdeproperty Client/DisableClipboard=1
vboxmanage modifyvm Deb64 --vrdeproperty Client/DisableUpstreamAudio=1

O uso da máquina virtual sem senha é inseguro, mas para os testes em uma máquina em ambiente controlado não é tão útil configura-lo. Para configurar o usuário e senha utilize o procedimento abaixo.

# Habilitamos a autenticação externa do VRDE
vboxmanage modifyvm Deb64 --vrdeauthtype external
# Para criar um usuário e senha primeiro gere a senha
# O comando abaixo criará um hash
vboxmanage internalcommands passwordhash "pass"
# Copie o hash gerado e passe como parâmetro no comando abaixo
# Recomenda-se utilizar um nome de usuário que exista no sistema hospedeiro
# vboxmanage setextradata Deb64 "VBoxAuthSimple/users/<user>" <hash>
# O comando abaixo adiciona um usuário de nome user com a senha pass
vboxmanage setextradata Deb64 "VBoxAuthSimple/users/user" \
    d74ff0ee8da3b9806b18c877dbf29bbde50b5bd8e4dad7a3a725000feb82e8f1

Note que esta porta VRDE é aberta no sistema hospedeiro e não no convidado. Portanto não é necessário configurar nenhuma porta dentro do sistema convidado. Lembre-se de utilizar portas acima de 1024 para não ter problemas com as diretivas de segurança do Linux.

Criando um HD virtual

Para criar um HD utilize os comandos abaixo. O formato VDI é o recomendado pelo Virtualbox, mas você pode escolhar VMDK ou VHD para ter compatibilidade com outro hypervisor.

# Crie um disco informando o caminho completo do arquivo
# O tamanho deve ser informado em megabytes
vboxmanage createhd --filename /virt/vms/Deb64/disk1.vdi --size 16384 --format vdi

O arquivo do HD não irá utilizar o mesmo tamanho do tamanho do HD especificado, ele irá crescer de acordo com os arquivos salvos no HD virtual. Se você utilizar o HD virtual até o limite você pode usar dois comandos.

O comando resize aumenta o tamanho do HD. Mas não ajusta a tabela de partições portanto não esqueça de reparticionar o disco.

vboxmanage modifyhd /virt/vms/Deb64/disk1.vdi --resize 20480

Você também pode utilizar o compact para reduzir o tamanho do arquivo de acordo com o uso interno. Assim após remover o espaço excedente que não é mais utilizado por partições no sistema convidado e poderá recuperar o espaço em disco do sistema hospedeiro.

vboxmanage modifyhd /virt/vms/Deb64/disk1.vdi --compact

Após criar o HD é importante conectar à controladora SATA que criamos anteriormente. Note que estamos conectando na porta 0 da controladora, e utilizando o modo normal.

vboxmanage storageattach Deb64 --storagectl sata --port 0 --type hdd \
    --medium /virt/vms/Deb64/disk1.vdi --mtype normal

Dentre os outros modos existentes, o modo existente é o immutable é útil após instalar o sistema operacional do convidado em modo normal. No modo immutable qualquer modificação no HD é eliminada após desligar a máquina virtual. Este modo é muito útil em sistemas onde você cria uma máquina temporária para testes. Para tal ajuste de modo você deve utilizar o comando abaixo.

vboxmanage storageattach Deb64 --storagectl sata --port 0 --type hdd \
    --medium /virt/vms/Deb64/disk1.vdi --mtype immutable

Criando um CD/DVD a partir de uma imagem de disco ISO

Precisamos criar um drive de CD/DVD para instalar o sistema operacional convidado. É necessário informar o caminho completo para o ISO no parâmetro medium.

vboxmanage storageattach Deb64 --storagectl sata --port 1 --type dvddrive \
    --medium /virt/isos/debian-6.0.5-amd64-netinst.iso

Para remover o disco após o uso utilize o comando abaixo.

# Neste caso removemos o drive
vboxmanage storageattach Deb64 --storagectl sata --port 1 --type dvddrive \
    --medium none
# Neste outro apenas indicamos que removemos o disco do drive
vboxmanage storageattach Deb64 --storagectl sata --port 1 --type dvddrive \
    --medium emptydrive

Instalando o sistema operacional

Com a máquina configurada basta iniciar a máquina virtual com o parâmetro informando que está no modo headless.

# Inicializa a máquina
vboxmanage startvm Deb64 --type headless

# Você pode conferir o estado da máquina executando o comando
vboxmanage showvminfo Deb64 | grep State

Lembre-se que configuramos a porta 5000 para o serviço de terminal remoto, então use a sua aplicação RDP para visualizar o que está acontecendo e proceder com a instalação do Debian na sua máquina virtual.

É importante que instale um pacote SSH no sistema convidado para administra-lo. O VRDE é muito lento para trabalhar durante um longo tempo e consome muito processamento. Em máquinas Windows recomenda-se habilitar o terminal remoto nativo, a melhora na resposta com o uso do servidor nativo é muito grande.

Manipulando a máquina virtual

Agora que você já está com a máquina virtual configurada em seu servidor vou apresentar outros comandos importantes.

# Pausa a máquina, é similar ao sleep porém o sistema convidado não dorme
vboxmanage controlvm Deb64 pause
# Retoma a execução da máquina virtual após uma pausa, é como o wakeup
vboxmanage controlvm Deb64 resume
# Faz o reset da máquina, o efeito é o mesmo que o botão físico
vboxmanage controlvm Deb64 reset
# Salva o estado da máquina e a desliga, é equivalente ao hibernar
vboxmanage controlvm Deb64 savestate
# O efeito é o mesmo do botão físico de power
vboxmanage controlvm Deb64 acpipowerbutton
# Caso o modo ACPI não resolva seu problema em desligar a maquina virtual
# utilize a versão equivalente ao desligamento de energia
vboxmanage controlvm Deb64 poweroff
# O efeito é o mesmo da tecla sleep no teclado, neste caso o sistema convidado dorme
vboxmanage controlvm Deb64 acpisleepbutton

É interessante informar que as versões mais novas do Virtualbox pausam a máquina virtual quando há um problema de espaço em disco físico. Naturalmente pela característica do arquivo do HD crescer apenas com o uso do mesmo você pode ter vários discos virtuais de 100 GBs em um disco físico de 100 GBs por exemplo. Portanto quando um disco virtual não consegue alocar o espaço em disco físico o Virtualbox pausa a máquina para evitar perda de dados.

Você também pode modificar configurações de rede durante o funcionamento da máquina virtual.

# Alterando o estado de conexão da rede (algo como "cabo ligado" ou o contrário)
vboxmanage controlvm Deb64 setlinkstate1 off
# Alterando o modo de rede
vboxmanage controlvm Deb64 nic1 nat
# Apagando a regra de port forwarding para o SSH em NAT
vboxmanage controlvm Deb64 natpf1 delete "guestssh"

É possível também alterar as restrições de execução da máquina.

# Removendo toda a restrição de execução
vboxmanage modifyvm Deb64 cpuexecutioncap 100

E ativar/desativar o VRDE, o que é muito útil ao fim de todas as configurações necessárias. Ou ainda trocar a porta usada pelo serviço.

vboxmanage modifyvm Deb64 vrde on
vboxmanage modifyvm Deb64 vrdeport 3000

Criando e manipulando snapshots

Snapshots são cópias completas de uma configuração da máquina virtual. Não somente em definições da máquina, como em informações na memória RAM e disco rígido. Através do snapshot é possível restaurar um estado anterior da máquina.

# Criando um snapshot chamado Snap1
vboxmanage snapshot Deb64 take Snap1
# Restaurando um snapshot
vboxmanage snapshot Deb64 restore Snap1
# Listando todos os snapshots de uma máquina
vboxmanage snapshot Deb64 list
# Apagando um snapshot
vboxmanage snapshot Deb64 delete Snap1

É importante lembrar que um I{snapshot} não funciona como um backup completo, pois ele cria "HDs parciais", que correspondem as modificações a partir de determinado ponto.

Exportando uma máquina virtual (appliance)

Exportar uma máquina virtual é muito útil para salvar máquinas virtuais prontas. Através de um appliance você pode distribuir uma máquina pronta com as configurações ajustadas. O appliance é exportado com as configurações atuais e leva consigo todos os HDs ligados a suas controladoras.

vboxmanage export Deb64 --output appliance.ova

Importando uma máquina virtual (appliance)

Ao receber um appliance em formato OVF ou OVA basta executar o comando de importar para registrar a máquina virtual. É possível alterar alguns parâmetros da máquina durante a importação. Porém a maioria dos parâmetros só pode ser ajustada posteriormente através dos comandos exibidos nos outros tópicos.

# Para simular uma importação e ver os parâmetros disponíveis
vboxmanage import appliance.ova --dry-run
# Para importar alterando basta o comando
vboxmanage import appliance.ova --vsys 0 --vmname NovaMaquina

Comandos úteis

Algunas comandos úteis para consultar a situação das máquinas virtuais.

# Listando as VMs registradas
vboxmanage list vms
# Listando as VMs em execução
vboxmanage list runningvms
# Exibindo propriedades do sistema hospedeiro
vboxmanage list systemproperties
# Exibindo informações da máquina
vboxmanage list hostinfo

Referências