Virtualização Conceitos e Prática Tópicos em Sistemas de Computação – 2014 Prof. Dr. Adriano Mauro Cansian [email protected] Estagiário Docente: Vinícius Oliveira [email protected] Agenda Objetivos. Introdução. Virtualização: conceitos. VirtualBox: • Princípios básicos; • Instalação; • Criando uma máquina virtual: • Utilizando interface gráfica (GUI); • Utilizando linha de comando (CLI); • Guest Additions; Disposições finais. Agenda Objetivos. Introdução. Virtualização: conceitos. VirtualBox: • Princípios básicos; • Instalação; • Criando uma máquina virtual: • Utilizando interface gráfica (GUI); • Utilizando linha de comando (CLI); • Guest Additions; Disposições finais. Objetivos Aprender conceitos sobre virtualização. Entender o funcionamento das plataformas virtualizadas, amplamente em uso. Aprender a criar e gerenciar máquinas virtuais com o VirtualBox. Introdução (1) O que é Virtualização? Não há um consenso. Engloba: • Emulação; • Simulação; Na computação, é um mecanismo capaz de executar em um mesmo computador dois ou mais sistemas, distintos ou não, de maneira isolada. Introdução (2) Um pouco de história: A virtualização de hoje é resultado de pesquisas realizadas pela IBM na década de 60 e 70. O intuito era criar um sistema capaz de fornecer multiprogramação e máquina estendida (alto nível). Década de 80 e 90: virtualização era pouco utilizada. Muito do que temos atualmente sobre virtualização com x86 é consequência destas pesquisas. Atualmente a virtualização é uma tendência, sendo muito utilizada em diferentes segmentos, principalmente de infraestrutura. Introdução (3) ≈ Mainframes: centralizando a computação. VS Introdução (4) Por que utilizar virtualização? • Consolidação de servidores: • Redução do número e dos tipos de servidores; • Diminuição de custos (manutenção, refrigeração, energia e etc); • Melhor uso dos recursos computacionais; • Facilidade de gerenciamento de um número reduzido de servidores. • • • • Confiabilidade; Disponibilidade; Encapsulamento; Dentre outros. Virtualização: conceitos (1) Virtualizar: • Executar simultaneamente múltiplos sistemas operacionais em uma mesma máquina física. Monitor de máquinas virtuais (MMV): • Gerencia a distribuição dos recursos de hardware a cada sistema operacional convidado. Máquina virtual: • Ambiente isolado criado pela MMV para cada sistema operacional convidado. Virtualização: conceitos (2) Instruções não privilegiadas: • Não modificam a alocação ou o estado de recursos compartilhados por vários processos simultâneos. Instruções privilegiadas: • Podem alterar o estado e a alocação dos recursos compartilhados. Estados de operação de um computador: • Modo usuário; • Modo de supervisor; Virtualização: conceitos (3) Sistema operacional hospedeiro (Host Operating System) : • Sistema operacional nativo da máquina; • Executado diretamente sobre o hardware físico; Sistema operacional visitante (Guest Operating System): • Sistema operacional que é executado na máquina virtual; • Geralmente executado sobre o hardware virtual; Virtualização: conceitos (4) Monitor de Máquina Virtual (MMV) ou Hypervisor: • Camada de software responsável por aplicar e monitorar políticas para as máquinas virtuais; • Responsável pela virtualização e controle de acesso aos recursos compartilhados para as máquinas virtuais; • Máquinas virtuais executam no modo usuário, sendo que o MMV executa no modo supervisor; • Para uma máquina virtual executar uma instrução privilegiada, o MMV é necessário; Virtualização: conceitos (5) Virtualização: conceitos (6) Tipos de virtualização: • Virtualização total ou completa: • MMV cria uma réplica do hardware da máquina hospedeira; • MMV cria drivers genéricos para traduzir os elementos de hardware da máquina hospedeira. • Cada instrução é testado pelo MMV e depois disso é executada em hardware, o que causa uma perda de performance. • Se a instrução for privilegiada, ela é simulada pelo MMV; • Não há modificações no sistema operacional visitante. • Com isso, a grande maioria dos sistemas operacionais existentes podem ser virtualizados. Virtualização: conceitos (7) Tipos de virtualização: • Virtualização total ou completa: Virtualização: conceitos (8) Tipos de virtualização: • Para-virtualização: • Não utiliza drivers genéricos, acessa diretamente o hardware (ganho de performance); • Uma instrução só é processada pelo MMV se ela for privilegiada, ou seja, se alterar o estado do sistema; • MMV não testa instrução por instrução como na virtualização total; • Sistema operacional visitante é modificado; • Reduz o número de sistemas os quais podem ser virtualizados; Virtualização: conceitos (9) Tipos de virtualização: • Para-virtualização: Virtualização: conceitos (10) Tipos de virtualização: • Virtualização assistida por hardware: • Semelhante ao modelo de virtualização total; • Entretanto, não precisa testar todas instruções; • Processador fornece um ambiente restrito para a execução de instruções das máquinas virtuais; • Há um aumento de performance considerável; • Intel VT e AMD-V são processadores que possuem essa característica; Virtualização: conceitos (11) Tipos de virtualização: • Virtualização assistida por hardware: VirtualBox (1) O VirtualBox é uma poderosa coleção de ferramentas para máquinas virtuais. Pode ser usado em computadores pessoais, servidores ou sistemas mais específicos (embarcados). Possibilita a virtualização de sistemas operacionais 32bit e 64-bit, tanto em processadores Intel quanto AMD. • Pode ser totalmente em software (virtualização total); • Pode usar recursos de hardware para virtualização (virtualização assistida por hardware); Desenvolvido pela Oracle e disponibilizado sob licença GPL. http://www.virtualbox.org/ VirtualBox (2) Outras características: • Portabilidade; • Arquitetura simples; • Não é necessário o suporte para virtualização assistida por hardware. • Guest Additions (adições de convidado); • Suporte de hardware avançado (USB, discos, som, etc.); • Suporte a pontos de restauração de sistema (snapshots); • Acesso remoto via VRDP (desktop remoto); VirtualBox (3) Sistemas hospedeiros suportados: • Windows XP (32-bit), Windows Server 2003 (32-bit), Windows Vista (32-bit e 64-bit), Windows Server 2008 (32-bit e 64-bit), Windows 7 (32-bit e 64-bit); • Apple Mac OS X: processador Intel como requisito. • Linux (32-bit e 64-bit): • • • • • • • • Debian GNU/Linux 3.1, 4.0 e 5.0; Fedora Core 4 ao 11; Gentoo Linux; Redhat Enterprise Linux 4 e 5; SUSE Linux 9 e 10, openSUSE 10.3, 11.0 e11.1 Ubuntu 6.06, 6.10, 7.04, 7.10, 8.04, 8.10, 9.04, 10.04 e 10.10. Mandriva 2007.1, 2008.0 e 2009.1 Solaris: Open Solaris e Solaris 10. VirtualBox (4) Sistemas visitantes suportados: • DOS, Windows 3.X, Windows 95, Windows 98, Windows ME, Windows NT 4.0, Windows 2000, Windows XP, Windows Vista, Windows Server 2008, Windows 7; • Linux 2.4 e 2.6; • Solaris 10 e OpenSolaris; • FreeBSD e OpenBSD; • OS/2 Warp 4.5; • Mac OS X e Mac OS X Server; Princípios básicos (1) O sistema que roda o VirtualBox é denominado “host” (sistema hospedeiro). O sistema virtual, instalado dentro do VirtualBox, é denominado “guest” (sistema visitante). O VirtualBox é capaz de fornecer virtualização de duas maneiras: • Inteiramente em software: • Todas as chamadas são interceptadas pelo VMM que fornece uma abstração. • Usando recursos assistidos por hardware, em processadores especiais: • IntelVT-x e AMD-V. – ESTE SUPORTE DEVE SER HABILITADO NO BIOS. Princípios básicos (2) Sistemas 64-bit como visitante: • Se a arquitetura do hospedeiro for 64-bit pode-se instalar sistemas 64-bit como visitante normalmente: • Habilitar o suporte para virtualização assistida em hardware; • Configurar a MV para utilizar este recurso; • Se a arquitetura do hospedeiro for 32-bit, ainda pode-se utilizar um sistema visitante 64-bit: • Cria-se um overhead no MMV. • Se as MVs forem criadas utilizando a interface gráfica, muitas destas configurações são feitas automaticamente; • MVs 64-bit só funciona adequadamente com virtualização assistida em hardware. Instalação (1) Existem diversos sistemas e maneiras para instalar o VirtualBox (Windows, Mac Os X, Linux, etc.). • A base será uma instalação no sistema Linux (Ubuntu), utilizando um repositório de pacotes do VirtualBox. • OBS.: para sistemas Linux é recomendável utilizar um gerenciador de pacotes do sistema (apt, yum, urpmi, etc) por motivos de manutenção da ferramenta; Antes de instalar, deve-se verificar algumas dependências: • Pacote de headers (linux-headers) do kernel para a compilação do módulo do VirtualBox. • apt-get install linux-headers-$(uname -r) • A versão do linux-headers deve ser a mesma do kernel em uso. • Pacote DKMS • apt-get install dkms • É um pacote capaz de recompilar automaticamente drivers quando há mudança de um kernel (MUITO IMPORTANTE). Instalação (2) Utilizando o sistema apt: • Adicionar source oficial do VirtualBox no arquivo /etc/apt/sources.list no Ubuntu 14.04: • deb http://download.virtualbox.org/virtualbox/debian squeeze contrib non-free • Adicionar as chaves do repositório, atualizar base e instalar: usuario@maquina:~$ wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add usuario@maquina:~$ apt-get update usuario@maquina:~$ apt-get install virtualbox-4.3 Criando uma máquina virtual (1) Existem duas maneiras de criar máquinas virtuais: • Usando uma interface gráfica (GUI): • Mais rápido e prático; • Configura automaticamente e corretamente diversos parâmetros,; • Necessita de um ambiente gráfico. • Usando linha de comando (CLI): • Nada prático; • Requer um esforço maior nas configurações mas fornece todos os parâmetros para otimização das máquinas virtuais; • Não necessita um ambiente gráfico (servidores); – Nesse caso a máquina virtual é iniciada e pode ser acessada via desktop remoto (RDP). Criando uma máquina virtual (2) VBox.log Logs VBox.log.1 VM1 $HOME VirtualBox VMs VM2 {0bf...8b}.vdi Snapshots 2014…Z.sav VM2.vbox VM2.vbox-prev VMn VM2.vdi Utilizando uma interface gráfica (GUI) (1) Utilizando uma interface gráfica (GUI) (2) Utilizando uma interface gráfica (GUI) (3) Informações requisitadas na criação da máquina virtual: • Nome da máquina virtual; • Tipo de sistema operacional visitante: • Utilizado para definir diversas otimizações para o sistema visitante, além de habilitar algumas configurações tais como virtualização assistida para sistemas 64-bit. • Quantidade de memória: • Este espaço será reservado para o VirtualBox e não poderá ser usado pelo sistema hospedeiro durante o tempo que a máquina virtual executar. – Portanto, cuidado ao definir a quantidade memória. Utilizando uma interface gráfica (GUI) (4) Utilizando uma interface gráfica (GUI) (5) Importante: o disco virtual é independente da máquina virtual. O disco é “registrado” para uma máquina virtual e quando ela é apagada, o disco virtual pode permanecer. Utilizando uma interface gráfica (GUI) (6) Utilizando uma interface gráfica (GUI) (7) 1 2 Utilizando uma interface gráfica (GUI) (8) Interface do VirtualBox com a máquina virtual criada: Utilizando uma interface gráfica (GUI) (9) Visualização de opções da máquina virtual: Utilizando uma interface gráfica (GUI) (10) Visualização das opções de sistema: Utilizando uma interface gráfica (GUI) (11) Visualização das opções de rede: Utilizando uma interface gráfica (GUI) (12) Snapshots: permite salvar o estado de uma máquina virtual. 3 2 1 4 Utilizando uma interface gráfica (GUI) (13) Snapshots: 2 4 1 3 Restaurar snapshot; Excluir snapshot; ou Exibir detalhes do snapshot. Utilizando uma interface gráfica (GUI) (14) Ao iniciar uma máquina virtual é possível acessá-la clicando com o mouse dentro de sua janela. Para sair do controle dessa máquina virtual, existem alguns atalhos de teclado: • O padrão é o CTRL da direita. • Retorna o mouse para o sistema hospedeiro. Utilizando uma interface gráfica (GUI) (15) Para desligar uma máquina virtual • Maneira convencional, desligando o sistema visitante: • Fechando a janela da máquina virtual; Utilizando linha de comando (CLI) (1) Command Line Interface (CLI): uma alternativa para a interface gráfica é a utilização de comandos para a criar e controlar máquinas virtuais. No VirtualBox o principal comando é o VBoxManage. Tudo que é realizado no ambiente gráfico GUI, também pode ser realizado através de CLI, permitindo maior especificidade. Serão mostrados alguns passos básicos para a criação de uma máquina virtual em CLI. Utilizando linha de comando (CLI) (2) Para criar uma MV (arquivo xml utilizado pelo VirtualBox) registrando-a para o usuário em questão: usuario@maquina:~$ VBoxManage createvm --name “Meu Windows” --ostype “WindowsXP” --register • --name: permite especificar o nome da máquina virtual. • --ostype: permite especificar o tipo de sistema operacional. Os tipos suportados podem ser vistos com o comando “VBoxManage list ostypes”. • --register: registra a máquina virtual criada para o ambiente do VirtualBox do usuário. Utilizando linha de comando (CLI) (3) Para modificar algumas configurações: usuario@maquina:~$ VBoxManage modifyvm "Meu Windows" --memory 512 --vram 64 --acpi on --boot1 dvd --nic1 bridged -bridgeadapter1 eth0 --vrde on • --memory: a quantidade de memória alocada para a máquina virtual. • --vram: a quantidade de memória de vídeo alocada para a máquina virtual. • --acpi: gerenciamento de energia. • --boot1: primeiro dispositivo de boot, se houver mídia no dispositivo. • --dvd: indica o dispositivo no sistema hospedeiro. • --nic1: insere uma interface de rede na máquina virtual, no modo bridge (pode ser host-only e nat). – --eth0: no caso de bridge, qual a interface do hospedeiro utilizar. • --vrde: habilita controle da MV por desktop remoto. Para uso deste recurso é necessário instalar o pacote de extensão Oracle VM VirtualBox Extension Pack junto ao VirtualBox. Utilizando linha de comando (CLI) (4) Criando o disco virtual: usuario@maquina:~$ VBoxManage createhd --filename “HD_MeuWindows.vdi” --size 10000 • --filename: nome do arquivo que conterá o disco virtual. • --size: tamanho em MB (10000 ≈ 10 GB). Precisamos anexar um disco a nossa máquina: usuario@maquina:~$ VBoxManage storagectl "Meu Windows" --name "SATA Controller" --add sata Vinculando o disco virtual criado com o disco anexado a máquina virtual: usuario@maquina:~$ VBoxManage storageattach “Meu Windows” --storagectl "SATA Controller" --port 0 -device 0 --type hdd --medium <ENDEREÇO_HD_VDI> Utilizando linha de comando (CLI) (5) Precisamos agora anexar uma mídia CD/DVD a nossa máquina: usuario@maquina:~$ VBoxManage storagectl “Meu Windows” --name "IDE Controller" --add ide Vinculando uma imagem .iso à mídia anexada a máquina virtual: usuario@maquina:~$ VBoxManage storageattach “Meu Windows” --storagectl "IDE Controller" --port 0 -device 0 --type dvddrive –medium <ENDEREÇO_IMAGEM_ISO> Utilizando linha de comando (CLI) (6) Uma vez criada a máquina virtual, é possível iniciá-la. Como nesse caso é utilizado um ambiente sem terminal gráfico, o comando utilizado para iniciar uma MV é o VBoxHeadless: usuario@maquina:~$ VBoxHeadless -startvm “Meu Windows” Observações: • Ao iniciar a MV, o efeito é o de dar boot por meio da imagem .iso associada. • Como acessar a MV? • Para o primeiro acesso a melhor opção é por Desktop remoto, entretanto, é necessário que o VirtualBox contenha o pacote de extensão Oracle VM VirtualBox Extension Pack. Utilizando linha de comando (CLI) (7) O acesso às máquinas virtuais pode ser realizado com ferramentas de desktop remoto que utilizam o protocolo RDP: • O Windows possui um utilitário nativo de desktop remoto. • No linux, recomenda-se o rdesktop. usuario@maquina:~$ rdesktop-vrdp <IP>:<Porta> Para desligar a máquina virtual: usuario@maquina:~$ VBoxManage controlvm “Meu Windows” poweroff Guest Additions (1) O Guest Additions é um pacote de ferramentas que otimizam um sistema visitante. • Deve ser instalado em cada sistema visitante. • Drivers de dispositivos. • Aplicações do sistema. Melhoram não só a performance, mas também a usabilidade. • Melhora o vídeo; • Permitem várias ações com o mouse. Pode ser baixado no site do próprio VirtualBox como um arquivo .ISO. No Linux Ubuntu, pode-se instalar o pacote virtualboxguest-additions que já possui a imagem .ISO. • apt-get install virtualbox-guest-additions Guest Additions (2) Instalação em sistema visitante Windows: • Carregar a imagem (.iso) do Guest Additions: • Caso não exista a opção, escolher manualmente a .ISO: Guest Additions (3) Seguir os passos como na instalação de qualquer programa em Windows: Guest Additions (4) 1 2 4 3 5 Guest Additions (5) Instalação em Windows: Guest Additions (6) Instalação para sistema visitante Linux: • Selecionar a imagem do Guest Additions igual ao processo realizado no Windows; • Montar o CD-ROM no sistema visitante: root@bt:~# mount /media/cdrom1 root@bt:~# ls /media/cdrom1 ... autorun.sh ... VBoxLinuxAdditions.run ... root@bt:~# cd /media/cdrom1 Guest Additions (7) Depois de montada a imagem no sistema Linux visitante: root@bt:~#./VBoxLinuxAdditions.run Uncompressing VirtualBox 4.0.6 Guest Additions for Linux... VirtualBox Guest Additions installer ... Do you wish to continue anyway? [yes or no] • Ou utilizar o autorun: root@bt:~#./autorun.sh Guest Additions (8) Pastas compartilhada com GUI: • Criar a pasta que será compartilhada no sistema hospedeiro. usuario@maquina:~$ mkdir pasta_hospedeiro • Selecionar as opções da máquina virtual no VirtualBox: 2 1 Guest Additions (9) Criar a pasta compartilhada no sistema visitante: 2 1 3 4 Guest Additions (10) Acessar o local da pasta compartilhada no sistema visitante Windows: • \\Vboxsvr 1 2 Acessar o local da pasta compartilhada no sistema visitante Linux: • sudo mount -t vboxsf -o uid=$UID,gid=$(id -g) pasta_compartilhada pasta_visitante • Monta a pasta compartilhada com permissão para o usuário. • UUID e GID podem ser consultados com “id usuário”. Guest Additions (11) Configurando uma pasta com CLI: usuario@maquina:~$ mkdir ~/hospedeiro usuario@maquina:~$ VBoxManage sharedfolder add “Meu Windows” -name “compartilhada” --hostpath “~/hospedeiro” • --name: um nome para o compartilhamento, registrado na máquina virtual (sistema visistante) em questão (podem existir várias pastas compartilhadas). • --hostpath: o caminho do diretório dentro do sistema hospedeiro. • Estes compartilhamentos são acessados dentro do ambiente de rede do sistema hospedeiro. Disposições finais (1) Virtualização é um conceito antigo, mas também um tema atual; É crescente a utilização de virtualização na área de TI, notadamente na parte de infraestruturas; Atualmente existe um aumento do número de soluções virtualizadas, tais como appliances; Torna-se visível uma mudança no paradigma de vendas e implementação de soluções de TI; Disposições finais (2) Entretanto, sempre há perda de desempenho; O MMV (hypervisor) e o Guest Addition é um software e todo software está sujeito a falhas: • Se o MMV estiver vulnerável, todas as máquinas virtuais também estarão! • Por exemplo: • Sun VirtualBox Guest Additions Denial of Service Vulnerability (16 de novembro de 2009).