Ferramentas do usuário

Ferramentas do site


espec:maquinas_virtuais_uml

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
espec:maquinas_virtuais_uml [2008/12/05 19:27]
maziero
espec:maquinas_virtuais_uml [2008/12/05 19:28] (atual)
maziero
Linha 1: Linha 1:
 +====== Máquinas Virtuais UML ======
 +
 +===== Introdução às Máquinas Virtuais =====
 +
 +Máquina Máquinas virtuais são uma abstração de hardware construída por um **monitor de máquina virtual**. As máquinas virtuais permitem executar vários sistemas operacionais "​convidados"​ sobre um mesmo hardware, simultaneamente. Dessa forma, cada sistema operacional acredita estar executando sobre uma máquina exclusiva.
 +
 +Há basicamente dois tipos de monitores de máquina virtual: os nativos (ou de tipo I) e os convidados (ou de tipo II):
 +
 +  * **Monitor nativo**: software de baixo nível que executa diretamente sobre o hardware, sendo carregado no computador antes de qualquer sistema operacional.
 +
 +  * **Monitor convidado**:​ executa sobre um sistema operacional nativo (chamado de sistema hospedeiro),​ sendo visto como um processo deste.
 +
 +Apesar de ser uma tecnologia dos anos 1960, as máquinas virtuais vêm sendo cada vez mais utilizadas em várias circunstâncias:​
 +
 +  * Executar vários sistemas operacionais sobre o mesmo hardware, simultaneamente;​
 +  * Consolidar servidores em ambientes corporativos;​
 +  * Web hosting: ao invés de oferecer uma conta em um servidor Web, alugar uma máquina virtual completa e totalmente configurável; ​
 +  * Desenvolvimento de núcleos de sistema e outros softwares de baixo nível;
 +  * Ensino: cada aluno pode lançar várias máquinas virtuais, com controle total sobre elas e sem interferência nos trabalhos dos demais alunos; as configurações individuais podem ser facilmente preservadas pelo aluno.
 +
 +Para o leitor interessado no assunto, {{:​so:​so-cap09.pdf|este texto}} oferece uma visão mais profunda e completa sobre máquinas virtuais.
 +
 +===== O User-Mode Linux =====
 +
 +O [[http://​user-mode-linux.sourceforge.net|User-Mode Linux]] (UML) é um monitor de máquinas virtuais convidado, que executa como um processo sobre um sistema nativo Linux. Ele recria um sistema Linux completo a partir de uma imagem de sistema em disco. O UML é um projeto //Open Source//, que integra o núcleo oficial Linux a partir da versão 2.6. 
 +
 +No UML, cada máquina virtual é vista como um processo do sistema Linux nativo subjacente. Esse processo contém internamente o monitor de máquina virtual, o núcleo (//​kernel//​) convidado e os processos da máquina virtual. Todos os dispositivos físicos usados dentro da máquina virtual são virtualizados a partir de recursos do sistema nativo:
 +
 +  * os discos da máquina virtual correpondem a arquivos no sistema nativo;
 +  * As interfaces de rede virtuais são providas por //daemons// executando no sistema nativo;
 +
 +Os usuários e processos da máquina virtual são distintos dos usuários e processos do sistema nativo; por isso, cada aluno pode ser //root// de suas máquinas virtuais, sem prejuízo para a segurança do sistema.
 +
 +===== Usando máquinas UML no servidor Espec =====
 +
 +O servidor [[http://​espec.ppgia.pucpr.br]] oferece a possibilidade de criar máquinas virtuais UML a partir de scripts pré-definidos,​ o que simplifica seu uso. A instalação está baseada na distribuição Linux Fedora 7 (para os mais curiosos, todos os scripts e imagens de disco se encontram no diretório ''/​usr/​local/​uml/''​ desse servidor).
 +
 +==== Inicialização e término ====
 +
 +Para lançar uma máquina virtual (ou VM), basta chamar o script ''​linux'',​ informando um nome para a máquina a ser criada (deve ser um nome novo, que não esteja em uso por outra máquina virtual do mesmo usuário):
 +
 +<​code>​
 +espec:~> linux vm1
 +
 +... [mensagens de boot suprimidas]
 +
 +Fedora release 7 (Moonshine)
 +Kernel 2.6.22.6 on an i686
 +
 +localhost login: root
 +
 +vm1:​~> ​  ​[shell dentro da máquina virtual]
 +</​code>​
 +
 +Ao terminar de usar uma máquina virtual, é importante **desligá-la adequadamente** (assim como desligamos um computador real após usá-lo), para manter a consistência das informações em sua imagem de disco virtual. O desligamento de uma VM deve ser feito através dos comandos ''​halt'',​ ''​shutdown''​ ou ''​poweroff'',​ executados a partir do shell da máquina virtual:
 +
 +<​code>​
 +vm1:~> halt
 +
 +... [mensagens de shutdown suprimidas]
 +
 +Disco desta maquina virtual: rootfs32.vm1
 +
 +espec:​~> ​  ​[retorno ao shell da máquina real]
 +</​code>​
 +
 +Ao ser lançada pela primeira vez, cada máquina virtual usa como disco de inicialização uma imagem de disco presente no diretório "''/​usr/​local/​uml''"​. Todavia, essa imagem inicial pertence ao usuário ''​root''​ e não pode ser modificada. Por isso, todas as modificações que a máquina virtual faz em seu disco virtual são gravadas em um arquivo no diretório do usuário (no caso acima, o arquivo "''​root32.vm1''"​). Na próxima vez em que for lançada, a máquina ''​vm1''​ vai usar o conteúdo do arquivo ''​root32.vm1''​ para sua inicialização,​ pois este contém o último estado do disco da máquina virtual.
 +
 +Os arquivos de imagem ''​root32.*''​ são mantidos como [[http://​en.wikipedia.org/​wiki/​Sparse_file|arquivos esparsos]], ocupando bem menos espaço em disco que o tamanho apresentado na listagem do comando ''​ls''​.
 +
 +==== Pacotes de software ====
 +
 +A imagem de base das máquinas virtuais UML instaladas no servidor Espec é baseada na distribuição Linux [[http://​fedora.redhat.com|Fedora 7]] para 32 bits. Esta distribuição foi escolhida por sua relativa leveza e simplicidade,​ mas outras distribuições poderão vir a ser adotadas no futuro. Em princípio, qualquer parcote de software em formato RPM previsto para o Fedora 7 32 bits pode ser instalado e usado nas máquinas virtuais. Os pacotes mais freqüentemente usados nos experimentos dos alunos estão disponíveis a partir do diretório ''/​usr/​local/​linux/​f7.32/''​ do servidor Espec:
 +
 +<​code>​
 +espec:~> ls -l /​usr/​local/​linux/​f7.32/​
 +total 220
 +drwxr-xr-x 2 root root 102400 Out 17  2007 all/
 +drwxr-xr-x 2 root root   4096 Set 22  2007 dns/
 +drwxr-xr-x 2 root root   4096 Set 22  2007 httpd/
 +drwxr-xr-x 2 root root   4096 Set 22  2007 lynx/
 +drwxr-xr-x 2 root root   4096 Set 22  2007 mutt/
 +drwxr-xr-x 2 root root   4096 Set 22  2007 php/
 +drwxr-xr-x 2 root root   4096 Set 22  2007 pine/
 +drwxr-xr-x 2 root root   4096 Set 22  2007 pop-imap/
 +drwxr-xr-x 2 root root   4096 Set 22  2007 postfix/
 +drwxr-xr-x 2 root root   4096 Set 22  2007 samba/
 +drwxr-xr-x 2 root root   4096 Jul  4 15:29 squid/
 +drwxr-xr-x 2 root root   4096 Set 22  2007 telnet/
 +drwxr-xr-x 2 root root   4096 Set 22  2007 vsftpd/
 +drwxr-xr-x 2 root root   4096 Set 22  2007 wireshark/
 +drwxr-xr-x 2 root root   4096 Set 22  2007 xinetd/
 +</​code>​
 +
 +==== Host FS ====
 +
 +Para facilitar a cópia de arquivos entre as máquinas virtuais e o sistema real subjacente, o diretório raiz ("''/''"​) do servidor Espec é automaticamente montado dentro de cada máquina virtual, a partir do seu diretório "''/​mnt''"​. Assim, para acessar o diretório "''/​usr/​local/​linux''"​ do servidor Espec a partir de uma máquina virtual, basta executar:
 +
 +<​code>​
 +vm1:~> cd /​mnt/​usr/​local/​linux
 +</​code>​
 +
 +==== Interfaces de rede ====
 +
 +Cada máquina virtual disponível no servidor espec tem ao menos quatro interfaces de rede disponíveis:​
 +
 +  * ''​eth0'':​ ligada a um hub virtual onde também estão ligadas as interfaces ''​eth0''​ de todas as outras máquinas virtuais e também a interface ''​tap0''​ do servidor espec (que tem endereço IP ''​20.0.0.1''​). Assim, para que a VM possa se comunicar com o servidor Espec, esta interface deve ser configurada com um endereço IP classe C na forma ''​20.0.0.*''​.
 +  * ''​eth1'':​ ligada a um hub virtual onde estão ligadas as interfaces ''​eth1''​ de todas as outras máquinas virtuais; esse switch não está ligado a nenhuma interface real. 
 +  * ''​eth2'':​ ligada a um hub virtual onde estão ligadas as interfaces ''​eth2''​ de todas as outras máquinas virtuais; esse switch não está ligado a nenhuma interface real. 
 +  * ''​eth3'':​ ligada a um hub virtual onde estão ligadas as interfaces ''​eth3''​ de todas as outras máquinas virtuais; esse switch não está ligado a nenhuma interface real. 
 +
 +A figura a seguir ilustra a disposição das máquinas virtuais:
 +
 +{{ :​espec:​vms-espec.png |}}
 +
 +As interfaces de rede da máquina virtual podem ser configuradas normalmente através dos comandos ''​ifconfig''​ e ''​route''​. Por exemplo, a configuração da interface ''​eth0''​ poderia ser:
 +
 +<​code>​
 +vm1:~> ifconfig eth0 20.0.0.119 up
 +vm1:~> route add default gw 20.0.0.1
 +</​code>​
 +
 +**Importante**:​ antes de atribuir um endereço IP a uma interface de rede de sua máquina virtual, verifique se esse endereço está livre ou está sendo usado por uma VM de outro usuário. Isso pode ser feito facilmente executando o comando ''​ping''​ a partir de um terminal do servidor Espec. Obviamente, se alguma máquina responder aos pacotes do comando ''​ping'',​ aquele endereço IP já está ocupado e não poderá ser usado.
 +
 +==== Console de gerência ====
 +
 +O ambiente de máquinas virtuais UML provê algumas ferramentas para gerênciar máquinas virtuais. Por exemplo, o comando ''​uml_mconsole''​ provê um console de gerência que pode ser usado para controlar uma máquina virtual a partir de um terminal da máquina real (em nosso caso, o servidor Espec). Assim, para gerenciar a máquina virtual ''​vm1'',​ basta executar o seguinte comando em um terminal **fora da máquina virtual**:
 +
 +<​code>​
 +espec:~> uml_mconsole vm1
 +(vm1) help
 +OK Commands: ​
 +    version - Get kernel version ​
 +    help - Print this message ​
 +    halt - Halt UML 
 +    reboot - Reboot UML 
 +    config <​dev>​=<​config>​ - Add a new device to UML;  ​
 + same syntax as command line 
 +    config <dev> - Query the configuration of a device ​
 +    remove <dev> - Remove a device from UML 
 +    sysrq <​letter>​ - Performs the SysRq action controlled by the letter ​
 +    cad - invoke the Ctrl-Alt-Del handler ​
 +    stop - pause the UML; it will do nothing until it receives a '​go' ​
 +    go - continue the UML after a '​stop' ​
 +    log <​string>​ - make UML enter <​string>​ into the kernel log
 +    proc <​file>​ - returns the contents of the UML's /​proc/<​file>​
 +    stack <pid> - returns the stack of the specified pid
 +
 +Additional local mconsole commands:
 +    quit - Quit mconsole
 +    switch <​socket-name>​ - Switch control to the given machine
 +    log -f <​filename>​ - use contents of <​filename>​ as UML log messages
 +    mconsole-version - version of this mconsole program
 +</​code>​
 +
 +Pela informação fornecida pelo "​help"​ do console de gerência, percebemos que é possivel:
 +
 +  * encerrar a VM (comando ''​halt''​)
 +  * reiniciar a VM (comando ''​reboot''​)
 +  * pausar e continuar a execução da VM (comandos ''​stop''​ e ''​go''​)
 +  * alterar configurações e consultar informações internas
 +
 +Uma situação **muito freqüente** é acidentalmente fechar a janela de terminal de uma máquina virtual. Nesse caso, a máquina virtual continua executando, mas não é mais possível interagir com ela nem encerrá-la normalmente (//​shutdown//​). Esse problema pode ser resolvido através do console de gerência: para encerrar a execução de uma máquina virtual ''​vm3'',​ basta abrir outro terminal no servidor Espec e executar:
 +
 +<​code>​
 +espec:~> uml_mconsole vm3
 +(vm3) halt
 +OK
 +(vm3) quit
 +espec:~>
 +</​code>​
 +
 +==== Display gráfico ====
 +
 +FIXME
 +
 +Explicar sobre o desvio de display de aplicações gráficas da máquina virtual para a máquina real (conferir primeiro se ainda está funcionando).
 +
 +===== Mais informações =====
 +
 +  * {{:​so:​so-cap09.pdf|Capítulo de livro sobre máquinas virtuais}}
 +  * [[http://​user-mode-linux.sourceforge.net]]
 +  * [[http://​en.wikipedia.org/​wiki/​User-mode_Linux]]
  
espec/maquinas_virtuais_uml.txt · Última modificação: 2008/12/05 19:28 por maziero