VirtualBox na linha de comando

virtualbox_maxosx

Para quem (ainda) não conhece o (Oracle VM) Virtualbox é um hipervisor para arquitetura x86 (32-bit e 64-bit) que permite criação e a execução de máquinas virtuais com diversos sistemas operacionais. Ele tanto é  usado como uma uma aplicação desktop  comum ou integrado em outras ferramentas como o Boot2Docker e Vagrant.

Foi originalmente desenvolvido pela alemã Innotek GmbH, que foi adquirida em 2008 pela Sun Microsystems e esta, comprada pela Oracle Corporation em 2010 — ou seja, um destino muito parecido com o que teve o MySQL e outros projetos.

Usando o console

Eu considero o cliente gráfico do VirtualBox muito limitado e como acesso as máquinas virtuais por SSH acabei me habituando a realizar algumas ações diretamente pela linha de comando.

Tanto que montei um pequeno roteiro.

Ligando, desligando etc

A primeira, e a mais óbvia de todas, é iniciar a/as máquina/máquinas virtual/virtuais:

$ vboxmanage startvm --type headless «UUID/Nome da VM»
Waiting for VM "«Nome da VM»" to power on...
VM "«Nome da VM»" has been successfully started.

No parâmetro “–type” a opção “headless” não criará uma janela para a máquina virtual que será executada em segundo plano. Também são são válidas as opções “sdl” que abrirá uma janela mas sem os controles habituais (ou seja, ela não capturará o mouse e outras coisas), e “gui” que abrirá uma janela comum do VirtualBox com todas as opções disponíveis.

O que são “UUID” e “Nome da VM”? Fácil é a forma como cada máquina virtual está registrada no hipervisor, através de um identificador único (UUID) ou de uma string, o nome definido para a máquina virtual na sua criação.

Antes que eu esqueça VBoxManage e vboxmanage são a mesma coisa, ambos são links para o “/usr/share/virtualbox/VBox.sh” — ao menos nas distribuições baseadas em Debian.

Para conhecer as máquinas virtuais registradas digite:

$ vboxmanage list vms
"CentOS_64_WildFly" {30f1efb1-4a58-451f-9827-a4c330091ce4}
"Ubuntu_64_Juju" {b05dd0fc-f80e-4933-b43f-28a4b4d8b1c6}
"Ubuntu_64_Chef" {f416f540-ee42-41cd-8e52-84af0fa57e3c}

Para saber quais estão em execução use:

$ vboxmanage list runningvms
"Ubuntu_64_Chef" {f416f540-ee42-41cd-8e52-84af0fa57e3c}

Para desligar as máquinas virtuais… A melhor opção é fazer a partir do próprio sistema operacional convidado:

$ sudo poweroff
W: molly-guard: SSH session detected!
Please type in hostname of the machine to poweroff:

Quase todas responderão educada e prontamente a solicitação 🙂

Uma dica bastante útil, sempre instale o pacote molly-guard (é original da Debian mas há uma versão para RHEL) nas instalações,  a função dele é evitar o host errado seja desligado por acidente — visto que você é obrigado a confirmar escrevendo o nome dele.

Mas se algo falhar, pode-se pedir que o hipervisor informe ao sistema operacional convidado que é hora de desligar (enviando o sinal de que o “botão” de liga/desliga foi pressionado):

$ vboxmanage controlvm «UUID/nome da VM» acpipowerbutton

Ou, em um momento de desespero, pedir que o hipervisor desligue e ponto final:

$ vboxmanage controlvm «UUID/nome da VM» poweroff

Também é possível pausar (“pause”), restaurar (“resume”), salvar o estado (“savestate”) e até mesmo reiniciá-la (“reset”), basta substituir a ação no final do comando.

Snapshots

Precisando fazer um “instantâneo” (eu gosto do termo) da máquina virtual o comando é o seguinte:

$  vboxmanage snapshot «UUID/Nome da VM» take "«nome do snapshot»"
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

Para listar os snapshots em uma máquina virtual:

$ vboxmanage snapshot «UUID/Nome da VM» list
   Name: "snapshot1" (UUID: XX-X-X-X-XX1)
      Name: "snapshot1.1" (UUID: XX-X-X-X-XX2)
         Name: "snapshot1.1.1" (UUID: XX-X-X-X-XX3) *

O asterisco (“*”) serve para indicar qual o snapshot encontra-se em uso no momento, para trocar/usar outro use:

$ vboxmanage snapshot «UUID/Nome da VM» \
  restore «UUID do snapshot/nome do snapshot»

Por exemplo:

$ vboxmanage snapshot "Ubuntu_64_Chef" list
   Name: antes do apache (UUID: f78280ef-...4f)
      Name: antes do mysql (UUID: 99af2405-..8d)
         Name: antes de atualizar (UUID: a3eeff38-..6f) *
$ vboxmanage snapshot "Ubuntu_64_Chef" restore "antes do mysql"
$ vboxmanage snapshot "Ubuntu_64_Chef" list
   Name: antes do apache (UUID: f78280ef-...4f)
      Name: antes do mysql (UUID: 99af2405-..8d) *
         Name: antes de atualizar (UUID: a3eeff38-..6f)

E utilizando:

$ vboxmanage snapshot «UUID/Nome da VM» \
 delete «UUID do snapshot/nome do snapshot»

Você remove um snapshot.

Simplificando

Uma simples constatação:

virtualbox_bash

Após a digitação do terceiro “vboxmanage …” todo mundo já começa a ficar irritado em escrever tanta coisa, eu inclusive, então fiz algo para simplificar um pouco:

E o que isto faz? Cria um conjunto de apelidos e duas funções no Bash que simplificam o uso do VBoxManage tornando a vida mais fácil.

Utilização

Salve o arquivo e use-o da seguinte forma:

$ source ~/vbshortcuts

Para testar experimente:

$ vbls
"CentOS_64_WildFly" {30f1efb1-4a58-451f-9827-a4c330091ce4}
"Ubuntu_64_Juju" {b05dd0fc-f80e-4933-b43f-28a4b4d8b1c6}
"Ubuntu_64_Chef" {f416f540-ee42-41cd-8e52-84af0fa57e3c}

Melhor que digitar “vboxmanage list vms” ou ficar procurando o comando no histórico.  🙂

Apelidos

Esta é a descrição completa, inclui um análogo aos comandos listados mais acima e alguns outros:

  • Informações:
    • vbls : Mostra todas máquinas virtuais registradas.
    • vbwho : Exibe as máquinas virtuais em execução.
    • vbinfo «UUID/nome da VM» :Lista a configuração e parâmetros da máquina virtual.
  • Ligar, desligar etc:
    • vbrun «UUID/nome da VM» : Inicia uma máquina virtual em segundo plano (modo headless).
    • vbacpi «UUID/nome da VM» : Envia o sinal de desligamento via ACPI para a máquina virtual.
    • vbstop «UUID/nome da VM» : Desliga a máquina virtual.
    • vbreset «UUID/nome da VM» : Reinicia a máquina virtual.
    • vbsave «UUID/nome da VM» :   Salva o estado de execução da máquina virtual.
    • vbpause «UUID/nome da VM» : Pausa a execução de uma máquina virtual.
    • vbresume «UUID/nome da VM» : Tira a máquina pausada virtual da pausa.
  • Snapshots:
    • vbnapshot «UUID/nome da VM» «nome do snapshot» : Criar um snapshot de uma máquina virtual específica.
    • vbsnaplist «UUID/nome da VM» : Lista os snapshots daquela máquina virtual.
    • vbsnapdel «UUID/nome da VM» «UUID do snapshot/nome do snapshot» : Apaga um snapshot específico.
    • vbsnaprestore  «UUID/nome da VM» «UUID do snapshot/nome do snapshot» : Restaura um snapshot específico.

Creio que isto engloba o básico e precisando basta acrescentar o que estiver faltando (e depois compartilhar a melhoria). Testei tanto em Linux quanto em MacOS X e creio que funcionará sem problemas em Windows com Cygwin — ou então convertendo-o para DOSKEY.

Ah, e ainda é possível fazer isto aqui:

$ export _JUJU="Ubuntu_64_Juju"
$ export _CHEF="Ubuntu_64_Chef"
$ export _WYLD="CentOS_64_WildFly"
$ vbrun $_«TAB»
$_CHEF $_JUJU $_WYLD
$ vbrun $_WYLD 
Waiting for VM "CentOS_64_WildFly" to power on...
VM "CentOS_64_WildFly" has been successfully started.

Para usar a tecla «TAB» ao seu favor.

E para fechar

Creio que não cheguei nem em 10% das opções do VBoxManage mas este pouco já é o suficiente para mostrar o que se pode fazer sem precisar usar a interface gráfica do VirtualBox cuja sensação é de que não incorpora novas funcionalidades desde a versão 2!

Basta consultar a documentação para ver a quantidade de recursos interessantes acessíveis somente pelo VBoxManage.

Anúncios

7 comentários sobre “VirtualBox na linha de comando

  1. Pingback: VirtualBox na linha de comando - Peguei do

    • Somente as já existentes. A criação pelo VBoxManage envolve usar uma série de comandos (“createvm”, “modifyvm”, “createhd” etc) para primeiro registrar e depois configurar o CPU, memória RAM, unidades de disco, controladoras etc. No final acaba sendo mais rápido usar o assistente da interface gráfica, até comecei a fazer um cara pra fazer isto mas ele está incompleto.

      Curtir

    • Que legal! Eu acabei construindo esta minha ferramenta por conta dos textos sobre o Chef, geralmente estava utilizando cerca de quatro máquinas virtuais distribuídas em dois hosts físicos, ou seja, quase impossível de administrar ficando só na interface padrão do VirtualBox.

      Curtir

  2. Pingback: Controle de banda no VirtualBox | giovannireisnunes

  3. Pingback: Teletransporte no VirtualBox | giovannireisnunes

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s