Máquina Virtual

Máquina virtual (ou Virtual Machine, VM) é o nome dado a uma máquina implementada através de software e que executa programas como um computador real, só que ela não existe fisicamente, como se fosse um computador dentro de outro. Fazendo um paralelo com o filme Matrix, é como se a máquina virtual um dia descobrisse que ela é apenas um programa rodando em uma máquina real, a matrix.

Tela de com o software de virtualização VirtualBox rodando DOS + Windows 3.11 em uma máquina física rodando o sistema operacional Debian 7 (Wheezy).
Tela de com o software de virtualização VirtualBox rodando DOS + Windows 3.11 em uma máquina física rodando o sistema operacional Debian 7 (Wheezy).

O termo máquina virtual (ou emulador) foi descrito na década de 1960, empregue nos mainframes da IBM, utilizando um termo de sistema operacional: uma abstração de software (computador fictício criado por um programa de simulação) que enxerga um sistema físico (máquina real). Com o passar dos anos, o termo englobou um grande número de abstrações, como a Java Virtual Machine – JVM que não virtualiza um sistema real. O software que reproduz as funções de um determinado ambiente, a fim de permitir a execução de outros softwares sobre ele, é conhecido como emulador. São bastante conhecidos os emuladores de vídeo games antigos e os emuladores de microcomputadores, como o VMware, o KVM-Qemu e o VM VirtualBox (software livre da Oracle).

A utilização de máquinas virtuais em um mesmo computador envolve várias vantagens, por exemplo a economia de recursos como aquisição de computadores, espaço, ar condicionado e energia elétrica. Também facilita o aperfeiçoamento e testes de novos sistemas operacionais, utilizando um mesmo equipamento e de modo independente (não precisa formatar e particionar disco antes de instalar) e simultâneo (dá pra usar o Windows ao mesmo tempo que você está usando o Linux, por exemplo, sem a necessidade de reiniciar o computador). Existe maior facilidade no gerenciamento, migração e replicação de computadores, aplicações ou sistemas operacionais, ou seja, dá pra gravar um arquivo com a imagem de todo o sistema operacional, acionando-o em qualquer máquina que possua o programa que virtualiza máquinas (emulador). As configurações, programas e arquivos permanecem os mesmos, sendo fácil migrar para outra máquina física ou mesmo manter um backup de tudo.

Esquema demonstrando o funcionamento de uma máquina física e uma virtual.
Esquema demonstrando o funcionamento de uma máquina física e uma virtual.

Uma desvantagem é a introdução de uma camada extra de software entre o sistema operacional e o hardware, conhecido como VMM (Monitor de Máquina Virtual) e o hypervisor (controla o acesso dos sistemas operacionais visitantes aos dispositivos de hardware). Isso gera um custo de processamento superior ao que se teria sem a virtualização, e também utiliza uma porcentagem dos recursos da máquina física. Visando minimizar esse problema, surgiram processadores com tecnologia suporte à virtualização via hardware, como o AMD-V ou Intel VT, que permitem o uso direto do hardware pela máquina virtual em alguns processos, através do armazenamento dessas instruções no cache do próprio processador. Uma forma de verificar se o seu processador possui essa configuração e se ela está habilitada é através da BIOS. Geralmente, tem que clicar F10 durante inicialização para acessar a tela de configuração da BIOS, e então use as teclas de setas para rolar a tela até a opção Configuração do sistema, selecione a opção Tecnologia de Virtualização e pressione a tecla Enter, habilitando. Saia salvando e reinicie o computador. Caso não tenha suporte via hardware, será somente via software. Verifique a saída através do seguinte comando:

egrep -wo 'vmx|ept|vpid|npt|tpr_shadow|flexpriority|vnmi|lm|aes' /proc/cpuinfo | sort | uniq

Para saber se a máquina em que está trabalhando é virtual ou física, pode-se usar o seguinte comando:

sudo dmidecode -s system-manufacturer

Se aparecer algo como “VMware”, “innotek” (fabricante da virtualbox), etc, então é uma VM.

O libvirt (comando virsh) é um daemon e ferramenta de gestão para o gerenciamento de plataformas de virtualização. Ele pode ser usado na camada de hypervisors para gerenciar KVM, Xen, VMware ESX, QEMU e outras tecnologias de virtualização. Conheça as mais populares soluções para virtualização disponíveis.

KVM

O KVM (Kernel-based Virtual Machine) é uma solução de virtualização para Linux, com suporte a virtualização via hardware. Por si só, KVM não realiza nenhuma emulação. Ao invés disso, um programa de espaço de usuário usa a interface /dev/kvm para instalar o espaço de endereçamento da máquina virtual hóspede, alimenta-a com entrada/saída de dados simulada e mapeia o seu visor de vídeo para o do hospedeiro. Pelo menos dois programas aproveitam este recurso: uma versão modificada do Qemu e o próprio Qemu. Sua base de funcionamento é o daemon (programa de computador que roda de forma independente em background) libvirt-bin.

Para uma virtualização qemu-kvm, máquina física deve ter o suporte de virtualização ativado na BIOS. (apenas máquinas com esse suporte nativo do processador podem ser utilizadas). Após habilitar o suporte na bios, o ambiente pode ser instalado com um dos seguintes comandos:

apt install qemu-kvm libvirt-clients libvirt-daemon-system virt-manager # Debian Strecth
apt-get install qemu-kvm libvirt-bin virt-manager # Debian Jessie ou mais antigo

Agora chame pelo menu ou terminal virt-manager, que é um utilitário gráfico de gerenciamento das máquinas virtuais. Veja mais no link do Wiki Debian e como instalar/usar KVM a partir da linha de comando no Debian.

Deixando em rede virtual ‘defaul’ NAT e escolhendo a placa de rede do hospedeiro, a máquina virtual deve ser configurada como DHCP para receber um IP e conectar-se à mesma rede do hospedeiro. Ela enxerga as outras máquinas da mesma rede e a internet, mas para acessá-la é outra história.

O comando virsh permite edição via linha de comando através do terminal Linux ou também abrindo um terminal próprio. Por exemplo:

$ sudo virsh dominfo <nome da VM> # configurações da VM
$ sudo virsh shutdown <nome da VM> # desligar normalmente
$ sudo virsh destroy <nome da VM> # desligar forçosamente ("puxando o cabo da tomada")
$ sudo virsh start <nome da VM> # ligar VM

Para restaurar uma máquina virtual (ambiente Qemu-KVM):

  • Abrir o gerenciador de VMs com o comando “virt-manager” no terminal;
  • Wizard 1/4: nomeie a máquina, escolha a opção “import existing disk image” e clique em avançar;
  • Wizard 2/4: clique em “browse” e escolha a imagem (se não aparecer, escolha outra e renomeie no campo);
  • Escolha o sistema operacional, versão e clique avançar;
  • Wizard 3/4: mantenha as opções de memória (1GB), escolha 2 CPUs se for 64 bits e clique em avançar;
  • Wizard 4/4: em “advanced options”, escolha “Rede Virtual ‘default’ (NAT)” para a VM não conectar em rede com outros PCs, só a máquina hospedeira;

Caso apareça a mensagem “unsupported configuration: CPU mode ‘custom’ for x86_64 kvm domain on x86_64 host is not supported by hypervisor”, vá em Menu -> Editar -> Preferências -> Nova VM e “CPU predeterminada: Hipervisor por padrão”; além disso, executar no terminal:

sudo groupadd kvm #caso não exista esse grupo
sudo usermod -aG kvm USUARIO
sudo echo group="kvm" >> /etc/libvirt/qemu.conf
sudo reboot

Assim como no Xen e no LXC, a configuração de rede mais frequente envolve uma brigde agrupando as intefaces de rede das máquinas virtuais. Alternativamente, e na configuração padrão fornecida pelo KVM, um endereço privado é atribuído a máquina virtual (no intervalo 192.168.122.0/24), e o NAT é configurado para que a VM possa acessar a rede externa.

Para converter de imagem raw (qemu) para VirtualBox (VDI):

$ VBoxManage convertfromraw -format VDI <filename>.img <filename>.vdi

VirtualBox

Outro programa de virtualização é o VirtualBox, que pode ser instalado dentro das máquinas virtuais Windows e Linux. Apóia inteiramente o padrão Remote Desktop Protocol (RDP), que é um protocolo multi-canal que permite que um usuário se conecte a um computador rodando o Microsoft Terminal Services. Veja mais informações no manual do VirtualBox e como instalar o VirtualBox no Debian clicando nos respectivos links.

Para começar a usar, vá ao terminal e digite “virtualbox”. No Windows, acesse o site do VirtualBox, baixe o arquivo correspondente ao seu hardware (32 ou 64 bits) e execute o arquivo, seguindo as instruções que aparecerem.

Agora é só escolher um ou mais sistemas operacionais para instalar na máquina virtual. Clique em nova máquina e siga as instruções. Basicamente, você deverá nomear sua máquina, escolher o sistema operacional na lista de sistemas suportados, selecionar o uso de memória, selecionar o disco rígido virtual (crie um novo ou use um já existente, caso você já tenha criado um anteriormente), criar novo disco virtual (caso não tenha nenhum) e separar espaço de HD (fixo ou dinamicamente alocado). Com relação ao tipo de arquivo do disco virtual, tem as opções VDI (formato nativo do VirtualBox, geralmente opto por essa), VMDK (formato original da VMWare), VHD (nativo do Microsoft Virtual PC), HDD, QED (novo formato de disco Linux).

Após criar a VM, clique em iniciar. Em seu primeiro uso, abrirá uma janela para escolher a mídia com a máquina a ser usada para instalação do sistema operacional. No vídeo a seguir, é instalado o Windows XP – depois, instale também o Service Pack 3 (baixe a ISO, vá para o menu do VirtualBox e clique em Dispositivos > Dispositivos de CD/DVD > Selecione um arquivo de CD/DVD virtual), Office e um anti vírus:

Se já possuir uma VM, basta dar dois clique e seguir as instruções para importação. Caso queira converter o arquivo VDI para o formato utilizado no KVM, veja esse link.

Para compartilhar pastas entre máquina virtual e real, ainda no gerenciador de VMs, clique na que vai trabalhar e então em configurações. Clique me “pastas compartilhadas” e então no ícone para escolher o caminho da pasta a ser compartilhada no seu computador com a máquina virtual (marque as opções “montar automaticamente” e “tornar permanente” se preferir). Para acessá-la na VM, abra o gerenciador de arquivos, clique em “rede” (ou “network”) e vá em vboxsvr para encontrar a pasta.

Já para compartilhar o recurso de copiar e colar entre a VM e a máquina física, vá em propriedades, aba “Geral”, em “Avançado”, deixe a opção “Bi-direcional” nos campos “Área de Transferência Compartilhada” e em “Arrastar e soltar”.

Para criar um acesso de rede entre a máquina hospedeira e a virtual, primeiro crie uma rede exclusiva de hospedeiro, caso não exista. Para isso, clique no menu principal “Arquivo -> Preferências -> Rede -> Redes Exclusivas de Hospedeiro” e clique no ícone de acrescentar. Depois, clique na VM e vá em “Configurações -> Rede -> Adaptador 2” (ou outro valor não usado) para marcar a opção “Habilitar placa de rede” e “conectado a placa de rede exclusiva de hospedeiro (host-only)”. Na máquina hospedeira, o IP dela nessa rede deve ser 192.168.56.1. Ao reiniciar a VM, verifique a nova interface que apareceu (eth0, enps08 …) e crie a nova rede no arquivo “/etc/network/interfaces” para ela (sem gateway), com IP 192.168.58.101 (por exemplo) – mais detalhes nesse link.

Alguns problemas como tela muito pequena (mesmo maximizada) e insucesso no compartilhamento de pastas e dispositivos podem ser resolvidos instalando-se o “Virtualbox Guest additions”. Para isso, maximize a tela, clique no menu superior em “Dispositivos” e em “Inserir imagem de CD dos adicionais para convidados“. Seguindo as instruções, baixe e monte a imagem para executar o programa na raiz dessa imagem na máquina convidada.

Ao tentar instalar os adicionais, algumas distros do linux não reconhecem o VirtualBox, e acham que estão em uma maquina real – aparece “Erro ao executar software automaticamente Não foi possível localizar o programa automaticamente executável”. Portanto, temos que tratá-las como se fossem máquinas reais. Execute os seguintes comandos no terminal:

apt-get update && apt-get install -y linux-headers-$(uname -r)
cp /media/cdrom/VBoxLinuxAdditions.run /root/
chmod 755 /root/VBoxLinuxAdditions.run
cd /root
./VBoxLinuxAdditions.run

Após isso, reinicie a VM.

Para compartilhar um dispositivo conectado via USB, deve-se escolher a VM, clicar em “Configurações -> USB -> Habilitar Controladora USB”. Depois, quando estiver usando VM, a barra inferior possui um ícone de pendrive estilizado. Use- para montar o pendrive na VM. Caso tenha problemas com o uso, aqui vão algumas tentativas:

  1. Criar o arquivo etc/udev/rules.d/60-vboxdrv.rules e adicionar as seguintes linhas:
  2. SUBSYSTEM=="usb_device", ACTION=="add", RUN+="/usr/share/virtualbox/VBoxCreateUSBNode.sh $major $minor vboxusers"
    SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", RUN+="/usr/share/virtualbox/VBoxCreateUSBNode.sh $major $minor vboxusers"
    
  3. Adicionar u usuário vboxusers para o seu grupo de usuário:
  4. sudo usermod -a -G vboxusers $USER
    groups $USER # Verificar os usuários de seu grupo
    
  5. Baixar o arquivo VBoxCreateUSBNode.sh (disponível no link) e salvá-lo na pasta /usr/share/virtualbox.
  6. Baixar e instalar um pacote de extensão (acesse o link, escolha sua versão e baixe o arquivo, instalando conforme o comando abaixo:
  7. sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-VERSAO.vbox-extpack
    

Ao utilizar a VM em outro computador, caso apareça uma mensagem do tipo “VD: error VERR_FILE_NOT_FOUND opening image file”, clique na máquina virtual e peça para removê-la (somente remover, manter os arquivos). Então crie uma nova máquina e quando for escolher o disco, opte por um já existente e escolha o arquivo da VM.

Caso seja um saudosista e queira usar novamente o DOS rodando Windows 3.11, veja como fazer no site XM Downlodas (Virtualizando o antigão Windows 3.11). Para baixar a imagem do DOS, baixe-a no Win World, depois clique em arquivo, Gerenciador de Mídias Virtuais, abra a aba do disquete e arraste ícone da imagem DOS pra lá. Talvez seja necessário gravar a imagem ISO utilizando um programa que grave CDs (não precisa gravar a mídia, só o arquivo). Ou siga esse vídeo do youtube, que tem link para a imagem com tudo já instalado:

A Microsoft disponibilizava VMs de Windows (versões, 7, 8 e 10) gratuitamente em seu site, para diferentes plataformas, mas que expiram após 90 dias.

Por último, um vídeo mostrando a instalação numa VirtualBox do sistema operacional Linux distribuição Debian versão 7 (Wheezy):

VMWare

O VMWare é uma máquina virtual proprietária. Sendo uma das mais antigas que se tem por ai, também é uma das mais amplamente conhecidas. Ela funciona com princípios similares aos do QEMU. A VMWare propõe recursos avançados tais como “snapshotting” de uma máquina virtual em execução. O conceito de snapshot é o de guardar uma cópia (foto) do estado atual da máquina virtual antes de fazer a instalação de alguma aplicação que pode ocasionar problemas no sistema operacional da máquina virtual. Apesar de ser proprietário, costuma ser o mais indicado para alto processamento (como servidores e jogos). Aqui tem um tutorial de instalação do VMWare no Linux.

Xen

Xen é uma solução de “paravirtualização”. Ele introduz uma fina camada de abstração (hypervisor) entre o hardware e os sistemas superiores, agindo como um árbitro que controla o acesso ao hardware feito pelas máquinas virtuais. Entretanto, ele apenas lida com algumas das instruções, o resto é executado diretamente pelo hardware em nome dos sistemas. A principal vantagem é que o desempenho não se degradada, e os sistemas rodam perto da velocidade nativa; a desvantagem é que os núcleos dos sistemas operacionais que alguém deseja usar em um “hypervisor” Xen precisam ser adaptados para rodar o Xen.

LXC

O LXC (LinuX Containers) não é, estritamente falando, um sistema de virtualização, mas um sistema que isola grupos de processos uns dos outros mesmo que eles todos rodem no mesmo host. Ele tira proveito dos “control groups” do kernel, de maneira que diferentes conjuntos de processos (groups) tem diferentes visões de certos aspectos do sistema global (sem acesso a outros processos do sistema), como os identificadores de processo, a configuração de rede, e os pontos de montagem. Esses recursos podem ser combinados para isolar toda uma família de processos iniciando a partir do processo init, e o conjunto resultante se parece muito com uma máquina virtual, nomeado como “container”. Não há um segundo núcleo; o container usa o mesmo núcleo que o sistema hospedeiro.

A computação em nuvens permite a utilização de computadores remotos, dispostos em datacenters (ambientes físicos climatizados e seguros, com sistema de backup em caso de queda de energia elétrica). Uma possibilidade está em fazer funcionar na nuvem uma máquina virtual configurada por você, garantindo assim as configurações, programas e documento que você deseja utilizando um computador mais estável e com grande desempenho, de qualquer lugar do mundo que possua acesso à internet.

8 comments

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.