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:28] mazieroespec:maquinas_virtuais_uml [2020/08/18 19:12] (atual) – edição externa 127.0.0.1
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>
 +(host)$ 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
 +
 +(host)$   [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>
 +(host)$ 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>
 +(host)$ 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>
 +(host)$ uml_mconsole vm3
 +(vm3) halt
 +OK
 +(vm3) quit
 +(host)$
 +</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: 2020/08/18 19:12
  • por 127.0.0.1