xen

13
O Xen é um Monitor de Máquinas Virtuais livre para as arquiteturas IA-32, x86-64 e PowerPC. Ele é um software que roda em um sistema operacional hospedeiro e sobre o qual diversos sistemas operacionais passam a poder rodar ao mesmo tempo utilizando o mesmo hardware computacional. Versões modificadas de Linux e NetBSD podem ser utilizadas como hospedeiros. Vários sistemas UNIX-like modificados podem ser virtualizados; desde a versão 3.0 do Xen, versões não-modificadas do Windows, além de outros sistemas, também podem ser virtualizados em hardware específico. Xen é originário de um projeto de pesquisa da Universidade de Cambridge, liderado por Ian Pratt, professor sênior em Cambridge e fundador da XenSource, Inc. Essa empresa agora ajuda no desenvolvimento do projeto open source, e também comercializa versões empresariais do software. A primeira versão pública do Xen for disponibilizada em 2003. Este curso foi todo construído a partir do material livre disponibilizado pela equipe do Xen, como o wiki (wiki.xensource.com/) e, principalmente, o manual de instalação do Xen 3.0, assim como a partir de páginas da Wikipedia (www.wikipedia.org). Xen Faça as lições ao longo da semana, na ordem indicada. Em caso de dúvidas, esclareça-as no Fórum de dúvidas gerais do curso. Você pode ainda comunicar-se diretamente com o instrutor no link Fale com o tutor. Anúncios serão dados no Fórum de notícias. Ao terminar as lições faça a Avaliação final de aprendizado, que terá limite de 1:00 (uma hora a partir do momento em que for iniciada) para que você responda as questões. Material Lição 1 - Introdução o Conceitos o Introdução ao Xen o Suporte o Estrutura de um sistema Xen Conceitos Sistema cliente: Um sistema que pode rodar dentro do ambiente Xen. Hypervisor: O monitor de máquinas virtuais (VMM) - roda com um privilégio mais alto que o código supervisor do sistema cliente. Domínio: Uma máquina virtual dentro da qual roda um sistema cliente. Domínio0 (Domain0) ou "dom0": O primeiro domínio, inciado automaticamente com o boot. O dom0 tem permissão para controlar todo o hardware do sistema e é utilizado para gerenciar o hypervisor e os outros domínios. Domínio desprivilegiado ou "domU": Um domínio sem acesso especial ao hardware. Virtualização total (Full virtualization):

Upload: api-3838125

Post on 07-Jun-2015

1.538 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Xen

O Xen é um Monitor de Máquinas Virtuais livre para as arquiteturas IA-32, x86-64 e PowerPC. Ele é um software que roda em um sistema operacional hospedeiro e sobre o qual diversos sistemas operacionais passam a poder rodar ao mesmo tempo utilizando o mesmo hardware computacional. Versões modificadas de Linux e NetBSD podem ser utilizadas como hospedeiros. Vários sistemas UNIX-like modificados podem ser virtualizados; desde a versão 3.0 do Xen, versões não-modificadas do Windows, além de outros sistemas, também podem ser virtualizados em hardware específico.Xen é originário de um projeto de pesquisa da Universidade de Cambridge, liderado por Ian Pratt, professor sênior em Cambridge e fundador da XenSource, Inc. Essa empresa agora ajuda no desenvolvimento do projeto open source, e também comercializa versões empresariais do software. A primeira versão pública do Xen for disponibilizada em 2003.Este curso foi todo construído a partir do material livre disponibilizado pela equipe do Xen, como o wiki (wiki.xensource.com/) e, principalmente, o manual de instalação do Xen 3.0, assim como a partir de páginas da Wikipedia (www.wikipedia.org).

Xen

Faça as lições ao longo da semana, na ordem indicada. Em caso de dúvidas, esclareça-as no Fórum de dúvidas gerais do curso. Você pode ainda comunicar-se diretamente com o instrutor no link Fale com o tutor. Anúncios serão dados no Fórum de notícias.Ao terminar as lições faça a Avaliação final de aprendizado, que terá limite de 1:00 (uma hora a partir do momento em que for iniciada) para que você responda as questões.

Material

Lição 1 - Introdução o Conceitos o Introdução ao Xen o Suporte o Estrutura de um sistema Xen

Conceitos

Sistema cliente:

Um sistema que pode rodar dentro do ambiente Xen.

Hypervisor:

O monitor de máquinas virtuais (VMM) - roda com um privilégio mais alto que o código supervisor do sistema cliente.

Domínio:

Uma máquina virtual dentro da qual roda um sistema cliente.

Domínio0 (Domain0) ou "dom0":

O primeiro domínio, inciado automaticamente com o boot. O dom0 tem permissão para controlar todo o hardware do sistema e é utilizado para gerenciar o hypervisor e os outros domínios.

Domínio desprivilegiado ou "domU":

Um domínio sem acesso especial ao hardware.

Virtualização total (Full virtualization):

Ténica de virtualização que não requer modificação do sistema hospedado, provendo a ilusão completa de um sistema de hardware real. A máquina virtual simula completamente o Hardware, permitindo um SO cliente intacto feito para uma CPU diferente rodar sobre a CPU atual. Este tipo de virtualização permite, por exemplo, que se criem programas para processadores que ainda não estão fisicamente disponíveis. O QEMU (sem aceleração) é um exemplo.

Paravirtualização:

Técnica de virtualização que requer modificação do sistema hospedado. O Xen utiliza paravirtualização. O Xen preserva, no entanto, compatibilidade binária para aplicações dentro do user space, ou seja, os binários de aplicativos rodam igualmente dentro da paravirtualização do Xen. A plataforma de virtualização Xen permite que múltiplos (até 100) SOs rodem em um uma

Page 2: Xen

única máquina hospedeira simultaneamente. As chamadas de sistema (systemcalls) de um SO cliente são feitas na verdade para o hypervisor, e são chamadas portanto de hypercalls.

Virtualização nativa:

A máquina virtual simula hardware suficiente para permitir que um SO feito para a mesma CPU rode intacta em isolamento. Normalmente muitas instâncias podem rodar ao mesmo tempo. Mac-on-Linux e VMware Server são exemplos.

Virtualização no nível de SO:

Permite múltiplos servidores clientes rodar de forma segura em um único servidor físico. O SO cliente compartilha o kernel do sistema hospedeiro. Os programas que rodam sobre o sistema cliente o enxerga como um sistema isolado. Exemplos são Linux-VServerm, OpenVZ e FrreBSD Jails.

Introdução ao Xen

O Xen é um monitor de máquinas virtuais para-virtualizador (VMM) livre, ou "hypervisor", para a arquitetura de processadores x86. O Xen pode executar múltiplas máquinas virtuais com segurança em uma única máquina física, com performance próxima à nativa.

Sua função é virtualizar uma máquina física para um sistema real. Ou seja, os sistemas clientes são reais, mas rodando sobre uma máquina simulada, virtual.

O Xen oferece também funcionalidades de nível empresarial, como: Máquinas virtuais com performance próxima à do hardware nativo; Migração em tempo real de máquinas virtuais, mesmo em funcionamento, entre hosts físicos; Até 32 CPUs virtuais por máquina virtual, com hotplug de VCPUs; Suporte às plataformas x86/32, x86/32 PAE (Physical Address Extension) e x86/64; Suporta às tecnologias de virtualização Intel VT-x e AMD Pacifica para máquinas virtuais sem modificações (incluindo

Microsoft Windows); Excelente suporte de hardware, suportando a maioria dos drivers de dispositivos Linux.

Cenários de uso

Cenários de uso para o Xen incluem: Consolidação de servidores: Mover múltiplos servidores para um único host físico, com performance e isolamento de

falhas garantidos pelas fronteiras de cada máquina virtual; Independência de hardware: Permite executar aplicações e sistemas operacionais fora de linha em hardware

moderno; Múltiplas configurações de SO: Executar múltiplos sistemas operacionais simultaneamente, para propósitos de teste

ou desenvolvimento; Desenvolvimento de Kernel: Testar e efetuar debug de modificações ao kernel em uma máquina virtual isolada, sem

a necessidade de uma máquina de testes adicional; Computação em Cluster: Gerenciamento na granularidade de máquina virtual provê maior flexibilidade do que o

gerenciamente individual de cada host, particularmente pelo uso de migrações em tempo real para balanceamento de carga;

Suporte de Hardware para SOs customizados: Permite o desenvolvimento de novos sistemas operacionais com o benefício do amplo suporte de hardware de sistemas operacionais atuais como o Linux.

Suporte a Sistemas Operacionais

Sistemas Unix-like hospedeiros:

O Xen roda, principalmente, com Linux e NetBSD modificados como hospedeiros. A maioria das distruibuições Linux hoje incluem os pacotes do Xen.

No Linux o Xen atualmente roda em x86, com Pentium II ou em novos provessadores, em sistemas x86-64 assim como em IA-64 e em PowerPC. O Xen também está sendo portado para SPARC.

Além disso o Xen oferece um live CD que roda Debian GNU/Linux assim como outras distribuições Linux gratuitas que permite os usuários experimentarem o Xen em seus sistemas sem o instalar no disco.O Debian incluirá os pacotes do Xen na versão 4.0 instável.

Sistemas Unix-like clientes

Além dos sistemas citados a cima, que podem todos serem virtualizados, os seguintes sistemas hoje podem ser operados como clientes Xen:

Page 3: Xen

Minix Plan 9 from Bell Labs NetBSD OpenBSD FreeBSD OpenSolaris NetWare GNU/Hurd/Mach Mricosoft Windows (utilizando virtualização de hardware com Vanderpool (Intel) ou Pacifica (AMD)

Suporta a Hardware

O Xen atualmente roda na arquitetura x86, requerendo um P6 ou mais novos processadores (Pentium Pro, Celeron, Pentium II, Pentium III, Pentium IV, Xeon, AMD Athlon, AMD Duron). Máquina com multiprocessadores são suportadas, e há suporte para HyperThreading (SMT). Além disso, o Xen está sendo portado para as arquiteturas IA64 e Power.O Xen 32-bit padrão suporta até 4GB de memória. Entretanto, o Xen 3.0 tem suporte à Physical Addressing Extensions (PAE) da Intel, que permite máquinas x86/32 endereçarem até 64GB de memória física. O Xen 3.0 também suporta plataformas x86/64 como a Intel EM64T e AMD Opteron que atualmente endereça até 1TB de memória física.

Um sistema Xen tem múltiplas camadas, das quais a mais baixa e a mais alta são o próprio Xen. O Xen pode hospedar vários SOs clientes, cada um dos quais executado dentro de uma máquina virtual segura - na terminologia do Xen, um domínio. Domínios são programados pelo Xen para fazer uso efetivo das CPUs fisicamente disponíveis. Esse gerenciamento inclui a responsabilidade de programar cada aplicação dentro do tempo reservado à máquina virtual pelo Xen.

O primeiro domínio, o domínio 0, é criado automaticamente quando o sistema se inicia e tem privilégios especiais de controle. O domínio 0 constrói outros domínios e gerencia seus dispositivos virtuais. Também administra tarefas como suspender, retomar e migrar outras máquinas virtuais.Para tanto, a instalação do Xen envolve disponibilizar um kernel especial (XenKernel), que deverá ser escolhido no boot ( com o GRUB ) e inciado para colocar o domínio 0 rodando.Dentro do domínio 0, um processo chamado xend roda para gerenciar o sistema. O xend é responsável por gerenciar máquinas virtuais e prover acesso aos seus consoles. Os comandos são lançados ao xend por uma interface HTTP através de uma ferramenta de linha-de-comando.

Lição 2 - Instalação

o Métodos de instalação do Xen

o Pré-requisitos

o Instalando com tarball

o Preparando o boot

o Configurando o GRUB

Métodos de instalação do Xen

Como de praxe, existem algumas diferentes formas de se instalar o Xen. Podemos instalá-lo tanto a partir de pacotes específicos pré-compilados (RPM) quanto a partir do código fonte ou de tarball. Vamos cobrir, neste curso, a instalação deste último método.A seguir é apresentada uma lista de pré-requisitos completa para a instalação do Xen.

O que segue é uma lista completa de pre-requisitos que cobre todos os métodos de instalação listados na página anterior. Ou seja, nem todos os ítens listados aqui precisam ser satisfeitos por todo mundo. Ítens marcados com ** são requeridos pelas ferramentas de controle do xend, e portanto necessárias se você quer rodar mais que uma máquina virtual. Ítens marcados com * são requeridos somente se você vai compilar a partir do código fonte e, portanto, desnecessários para os métodos que serão apresentados neste curso.

Um sistema Linux funcional que utilize o boot-loader GRUB rodando com um processador do tipo P6 ou mais novo.

** O pacote iproute2 ** O utilitários Linux bridge-utils (e.g., /sbin/brctl) - disponível em http://bridge.sourceforge.net ** O sistema hotplug do Linux (e.g., /sbin/hotplug) - disponível em http://linux-hotplug.sourceforge.net/. Em distribuições

novas ele é incluído junto com o sistema udev

* Build tools (gcc v3.2.x ou v3.3.x, binutils, GNU make) * Instalação de desenvolvimento do zlib (e.g., zlib-dev) * Instalação de desenvolvimento do Python v2.2 ou mais recente (e.g., python-dev) * LATEX e transfig são necessários para montar a documentação

Instalando com tarball

Page 4: Xen

Tarballs pré-compilados estão disponíveis para download em http://www.xensource.com/downloads/ .

Tendo em mãos o tarball, simplismente o descompacte e instale:# tar zxvf xen-(versão)-install.tgz# cd xen-(versão)-install# sh ./install.shPreparando o boot

Criando um modules.dep

Confira a versão do XenKernel no diretório /lib/modules e execute o seguinte comando:

# /sbin/depmod -a 2.6.(versão)-xen

Criando um initrd

Utilizando o mesmo nome do XenKernel, execute o seguinte comando:

# cd /boot && mkinitramfs -o initrd.img-2.6.(versão)-xen 2.6.(versão)-xen

Outras adequações

Usuários do kernel XenLinux 2.6 devem desabilitar o TLS (Thread Local Storage) antes de tentar inciar um kernel XenLinux. Pode-se fazer isso com um comando simples como

# mv /lib/tls /lib/tls.disabilitado

Edite o arquivo /etc/mkinitramfs/modules e inclua uma linha como a seguinte:

loop max_loop=64

(valor alterável se necessário, tendo depois que refazer o initrd)

Edite o arquivo /etc/init.d/xendomains e altere a linha LOCKFILE para:

LOCKFILE=/var/lock/xendomainsPrecisamos configurar o GRUB para que ele possa inciar o Xen. Basicamente precisamos adicionar um bloco ao arquivo de configuração do GRUB, para usuários do Debian, que priorizamos aqui, é o /boot/grub/menu.lst. Em outros casos este arquivo pode ser grub.conf, podendo estar no diretório /boot ou /boot/grub.O bloco, que deve ser inserido antes dos outros gerados automagicamente, deve ser como o seguinte:

title Xen 3.0 / XenLinux 2.6

kernel /boot/xen-3.0.gz dom0_mem=262144

module /boot/vmlinuz-2.6-xen0 root=/dev/sda4 ro console=tty0

A linha do kernel diz ao GRUB onde procurar o Xen e que parâmetros de boot devem ser passados para ele.

A linha do módulo descreve a localização do kernel XenLinux que o Xen deve iniciar e os parâmetros que serão passados a ele. Esses são parâmetros padrões do Linux, identificando o dispositivo root e o especificando para ser montado inicialmente como somente-leitura e solicitando que a saída do console seja enviada para a tela.

Para utilizar um initrd, adicione outra linha module à configuração, como a seguinte:

module /boot/my_initrd.gz

É bom manter o(s) antigo(s) bloco(s) presente(s) no arquivo de configuração que aponta(m) para o(s) kernel(s) antes utilizado(s), tendo em vista que pode ocorrer algum erro de configuração. Lição 3 - Inicializando um sistema Xen

o Inicialização do dom0

o Criação de domínios clientes

o Arquivo de configuração do domínio

Page 5: Xen

o Inicialização do domínio cliente

Inicialização do dom0

Depois que a instalação e a configuração de boot estiver completa, reinicie o sistema e escolhe, na lista de sistemas do GRUB, a opção do Xen recém-criada.

O que se segue deve parecer como um boot convencional de um Linux. A primeira parte do output é do próprio Xen, informando sobre ele mesmo e sobre o hardware de base. A última parte do output vem do XenLinux.

Quando o boot terminar, você deve logar no sistema normalmente. Se você não conseguir logar, você ainda deve ser capaz de reiniciar o seu kernel original o selecionando no prompt do GRUB.

Iniciar o sistema do Xen nos leva ao domínio de gerenciamente privilegiado, o domínio0. Neste ponto estamos prontos para criar domínios clientes e "bootá-los" utilizando o comando xm create.

Criação de domínios clientes

Criação de domínios clientes

Estamos querendo instalar um sistema cliente, afinal. O primeiro passo em criar um novo domínio é preparar um sistema de arquivos raíz, de base (root filesystem). Esse sistema de arquivos pode ser armazenado de várias formas diferentes, inclusive da forma mais evidente, que é instalando o sistema normalmente em uma partição própria. Existem alternativas, então aqui segue uma lista das possibilidades mais usuais:

Em uma partição própria regular; Em uma partição LVM ou de outros gerenciador de volumes; Em um servidor NFS (Network File System); Em um arquivo de disco.

Quem não souber as soluções das instalações alternativas pode simplesmente pegar o CD de instalação de sua distribuição, bootá-lo e instalá-lo em uma partição separada como de praxe.

De volta ao sistema Xen, para inciar o (daemon de controle) xend digite: # xend start

Arquivo de configuração do domínio

Arquivo de configuração do domínio

Antes de podermos inciar um domínio adicional, devemos criar um arquivo de configuração - o myvmconf, no diretório do xen em /etc/xen. São providos, pelo manual do Xen 3.0, dois arquivos de exemplo que se pode usar como ponto de partida:

/etc/xen/xmexample1 é um modelo simpes de configuração que descreve uma única VM (máquina virtual). /etc/xen/xmexample2 é um modelo com uma descrição com o propósito de ser reutilizada para múltiplas VMs. file is a

template description that is intended to be reused for multiple virtual machines (setar o valor da variável vmid no comando xm satisfaz partes deste modelo).

Existem outros exemplos que podem se mostrar úteis. Copie um deles e os edite apropriadamente. Os valores que provavelmente se gostaria de editar são:

kernel Atribua a ele o caminho (path) do kernel compilado a ser utilizado com o Xen (e.g. kernel = ``/boot/vmlinuz-2.6-xenU''), no caso de ter compilado o código do Xen e personalizado o Kernel.

memory

Atribua a ele o tamanho da memória do domínio em megabytes (e.g. memory = 64).disk

Coloque o primeiro valor desta lista para calcular o offset da partição raíz do domínio baseado no ID do domíno. Atribua ao segundo a localização do /usr, caso a esteja compartilhando entre os domínios (e.g. disk = ['phy:your_hard_drive%d,sda1,w' % (base_partition_number + vmid), 'phy:your_usr_partition,sda6,r' ] )

dhcpDescomente a variável dhcp para que o domínio receba seu IP de um servidor DHCP (e.g. dhcp=``dhcp'').

vif

Page 6: Xen

Edite esta variável para determinar o endereço MAC da placa ethernet virtual, se quiser. Caso não sete esta variável, o xend vai automaticamente gerar um endereço MAC aleatório na faixa 00:16:3E:xx:xx:xx, designado pela IEEE ao XenSource como um OUI (Organizationally Unique Identifier)

(e.g. vif = ['mac=00:16:3E:F6:BB:B3'] )

Inicialização do domínio cliente

Inicialização do domínio cliente

A ferramenta xm provê uma variedade de comandos para gerenciar domínios. Utilize o comando create para inicar novos domínios. Assumindo que você já criou o arquivo de configuração myvmconf baseado no o /etc/xen/xmexample2, para iniciar uma máquina virtual com ID 1 você deve digitar:

# xm create -c myvmconf vmid=1

O parâmetro -c faz o xm se tornar o console do domínio após a criação. O vmid=1 seta a variável vmid utilizada no arquivo myvmconf.

Você deve ver as mensagens no console de boot do novo domínio aparecendo no terminal em que digitou o comando, culminando em um prompt de login.

É possível fazer certos domínios inciarem automaticamente na hora do boot e fazer o dom0 esperar todos os domínios ativos desligarem antes de desligar o sistema.

Para fazer um domínio se iniciar na hora do boot, coloque seu arquivo de configuração (ou link para ele) no diretório /etc/xen/auto/.

Eles também podem ser inicializados manualmente, já neste caso, através do comando service:

# service xendomains start

E finalizados manualmente:

# service xendomains stop

Lição 4 - Gerenciamento

o Xend

o xm - parte 1

o xm - parte 2

o Variáveis de configuração

o Configuração de rede

Xend

O daemon do Xen (Xend) realiza as funções de controle relativas às VMs. Ele forma um centro de controle para um máquina e pode ser controlado através de um protocolo baseado em HTTP. O Xend deve estar rodando para que se inicie e monitore VM.O Xend deve ser rodado como root por precisar acessar funções de gerenciamento de sistema privilegiadas. Um pequeno conjunto de comandos pode ser executado na linha de comando do Xend, que se executa com 'xend':

# xend start incia o xend se não estiver rodando

# xend stop pára o xend se estiver rodando

# xend restart reinicia o xend se rodando, senão o inicia

# xend status apresenta o status do xend

Um script de inicialização SysV chamado xend é provido para inciar o xend na hora do boot. make install instala este script em /etc/init.d. Para habilitá-lo, você deve fazer links simbólicos nos diretórios dos runlevels apropriados ou utilizar a ferramenta chkonfig, se disponível. Uma vez rodando o xend, a administração pode ser feita com a ferramenta xm.

Page 7: Xen

Enquanto o xend roda, os eventos são logados em /var/log/xend.log e em /var/log/xend-debug.log. Estes arquivos, juntamente com os arquivos do syslog, são úteis para solucionar possíveis problemas.

xm - parte 1

xm - parte 1

xm é a principal ferramenta de gerenciamento do Xen via console. O formato geral de um comando xm é:

# xm comando [switches] [argumentos] [variáveis]

Os switches e argumentos disponíveis dependerão do comando escolhido. As variáveis podem ser setadas utilizando declarações na forma variável=valor. Declarações de linha de comando sobreescrevem quaisquer valores dos arquivos de configuração utilizado, incluindo as variáveis descritas acima e quaisquer variáveis padrões (por exemplo, o arquivo xmdefconfig utiliza a variável vmid).

Para ajuda sobre os comandos disponíveis, digite:

# xm help

Isto listará os comandos mais utilizados. A lista completa pode ser obtida com o comando a seguir:

# xm help --long

Também podemos digitar

# xm help <command>

para nos infomarmos sobre um comando específico.

xm - parte 2

xm - parte 2

list

Um comando importante é aquele que lista os domínios que estão ativos atualmente:

# xm listSua saída possui o seguinte formato:

name domid memory vcpus state cputime

O significado de cada campo é descrito a seguir:

name O nome descritivo da VM.

domid O número do ID do domínio em que esta VM está rodando.

memory O tamanho da memória em megabytes.

vcpus O número de CPUs virtuais que este domínio tem.

state O estado do domínio. O estado do domínio consiste em 5 campos:

r rodando b bloqueado p pausado s desligado

Page 8: Xen

c quebrado (crashed)

cputime O tempo de CPU (em segundos) que o domínio utilizou até então.

O comando xm list também suporta um formato de output longo (no formato do xend, o SXP), para tanto se utiliza o switch -l.

console

Podemos ter acesso ao console de um domínio específico utilizando o comando console, por exemplo:

# xm console nomeVM

Variáveis de configuração

A não ser que seja declarado, ítens de configuração devem ser fechados em aspas: veja os scripts de configuração em /etc/xen para exemplos concretos.

Os arquivos de configuração do Xen contém as seguintes variáveis padrão, sendo que já conhecemos algumas delas na configuração de nosso primeiro domínio cliente.

kernel Caminho (path) da imagem do kernel.

ramdisk Caminho (path) da swap (opcional).

memory Tamaho da memória em megabytes.

vcpus Número de CPUs virtuais.

console Porta à qual exportar o console do domínio (default 9600 + domain ID).

nics Número de interfaces de rede virtuais.

vif Lista de endereços MAC e de bridges a se utilizar na interfaces de rede do domínio. Por exemplo, vif = [ 'mac=00:16:3E:00:00:11, bridge=xen-br0', 'bridge=xen-br1' ]

disk Lista de dispositivos de bloco a exportar para o domínio. Por exemplo: disk = [ 'phy:hda1,sda1,r' ] exporta o dispositivo físico /dev/hda1 para o domínio como /dev/sda1 com permissão de acesso de somente-leitura. Exportar um disco já montado com permissão de acesso de leitura e escrita é arriscado. Se você tiver certeza de quer fazê-lo, especifique o modo w!.

dhcp Sete `dhcp' se quiser configurar a rede via DHCP.

netmask Máscara de rede setada manualmente.

gateway Gateway setado manualmente.

hostname O Hostname da VM.

root Especifica o parâmetro do dispositivo raíz (root) da linha do kernel.

nfs_server O endereço IP do servidor NFS (caso queira e se houver)

nfs_root Caminho (path) do sistema de arquivos raíz (root) no servidor NFS (se utilizado).

extra String extra a se utilizar na linha de comando do kernel.

É possível utilizar comandos de Python dentro dos arquivos de configuração. Um exemplo disso está no arquivo de exemplo xmexample2, que usa código Pyhon para lidar com a variável vmid.

Page 9: Xen

Configuração de rede

Configuração de rede

Para muitos usuários, a instalação padrão deve funcionar automaticamente. Redes de configurações mais complexas, com múltiplas interfaces Ethernet e/ou com brigdes, por exemplo, exigiram alguma configuração especial.

Topologia de rede virutal Xen

A interface de rede de cada domínio é conectada a uma interface de rede no dom0 por um link point to point (como um "cabo crossover virtual"). Esses dispositivos são nomeados vif<domid>.<vifid> (por exemplo, vif1.0 para a primeira interface no domínio 1, vif3.1 para a segunda interface no domínio 3).

O tráfico nessas interfaces virtuais é manipulado no domínio 0 utilizando os mecanismos padrões do Linux de bridging, routing, limitação de taxa, etc. O Xend executa dois scripts para setar a configuração inicial da rede e das novas interfaces virtuais. Por padrão, estes scripts configuram uma bridge simples para todas as interfaces virtuais. Configurações personalizadas de roteamento e bridging podem ser realizadas editando os scripts, como descrito na seção a seguir.

Scripts de rede Xen

Os dois shell scripts são, por padrão, o network-bridge e o vif-bridge. Estes são chamados automaticamene pelo xend quando certos eventos ocorrem, com argumentos para os scripts provendo informações contextuais adicionais. Esses scripts são encontrados por padrão em /etc/xen/scripts. O nomes e locais dos scripts podem ser configurados em /etc/xen/xend-config.sxp .

network-bridge: Este script é executado sempre que o xend é iniciado ou interrompido para, respectivamente, incializar ou fechar a rede virtual Xen. Na configuração padrão, a inicialização cria a bridge 'xen-br0' e move a insterface eth0 sobre aquela bridge, modificando o roteamento adequadamente. Quando o xend sai, ele remove a bridge do Xen e a eth0, restaurando o IP normal e a configuração de roteamento.

vif-bridge: Este script é executado para cada interface virtual dos domínios e pode configurar regras de firewall e adicionar o vif à bridge apropriada. Por padrão, isso adiciona e remove VIFs na bridge padrão do Xen.

Outros scripts de exemplo estão disponíveis (network-route e vif-route, network-nat e vif-nat). Para configurações de rede mais complexas (por exemplo, uma rede que requeira roteamento ou integração com bridges já existentes) esses scripts podem ser substituídos por outros personalizados.

o Lição 5 - Últimas notas

o Exportando sistema de arquivos - parte 1

o Exportando sistema de arquivos - parte 2

o Segurança

o Parâmetros de boot do Xen

Exportando sistema de arquivos - parte 1

Utilizando um sistema cliente, naturalmente vamos querer acessar arquivos pelo domínio virtual. Existem algumas formas de se fazer isso. Duas delas serão apresentadas aqui: exportando uma partição ou utilizando um arquivo no disco. Outras maneiras são utilizar LVM ou sistemas de arquivos em rede, como o NFS e outros.

Exportando dispositivos físicos como VBDs (Virtual Block Devices)

Uma das configurações mais simples é diretamente exportar partições individuais do domínio0 para outros domínios. Para fazê-lo utilize o phy: especificador do seu arquivo de configuração do seu domínio. Por exemplo uma linha como

disk = ['phy:hda3,sda1,w'] especifica que a partição /dev/hda3 no domínio0 deve ser exportada somente-leitura para o novo domínio como /dev/sda1; alguém poderia, igualmente, o exportar como /dev/hda ou como /dev/sdb5 se fosse o caso.

Além de discos locais e partições, é possível exportar qualquer dispositivo que o Linux considere ser um "disco" da mesma maneira. Por exemplo, se temos volumes iSCSI ou GNBD importados ao domínio0 podemos também exportá-los para outros domínios usando o phy (por exemplo):

Page 10: Xen

disk = ['phy:vg/lvm1,sda2,w']ATENÇÃO:

Os dispositivos devem ser, tipicamente, compartilhados entre domínios em modo somente-leitura. Caso contrário os sistemas de arquivodo kernel do Linux podem estranhar a mudança de estrutura de sistema de arquivo em um nível abaixo (ter uma mesma partição ext3 montada duas vezes como leitura-e-escrita é uma ótima maneira de causar danos irreversíveis!). O Xend tentará nos prevenir de fazê-lo checando se o dispositivo não está montado para leitura-e-escrita no domínio0 e se já foi exportado desta forma para outro domínio. Se quisermos compartilhamento entre os domínios para leitura-e-escrita devemos exportar o diretório com o NFS a partir do domínio0 (ou utilizar algo como GFS ou ocfs2).

Exportando sistema de arquivos - parte 2

Utilizando VBDs (Virtual Block Device) sobre arquivos

Também é possível utilizar um arquivo no domínio0 como o armazenamento primário de uma máquina virtual. Além de ser conveniente, também tem a vantagem de economizar espaço, pois este só será ocupado na medida em que o arquivo for sendo realmente utilizado (diferentemente de uma partição).Por exemplo, para criar um VBD sobre arquivo de 2GB (que só ocupa, por hora, 1KB no disco): # dd if=/dev/zero of=vm1disk bs=1k seek=2048k count=1

Criar um sistema de arquivo dentro do arquivo em disco:

# mkfs -t ext3 vm1disk (responda 'yes')

Armazenar dados propriamente (exemplo):

# mount -o loop vm1disk /mnt

# cp -ax /{root,dev,var,etc,usr,bin,sbin,lib} /mnt

# mkdir /mnt/{proc,sys,home,tmp}

Finalize editando o /etc/fstab, /etc/hostname, etc. Não esqueça de editar os arquivos no sistema de arquivo montando, ao invés do próprio domínio0. Por exemplo, editaríamos /mnt/etc/fstab ao invés de /etc/fstab. No nosso exemplo acima coloque o /dev/sda1 como root no fstab.

Agora desmonte (importante!):# umount /mnt

No arquivo de configuração:

disk = ['file:/full/path/to/vm1disk,sda1,w']

Como a máquina virtual escreve para o seu "disco", o arquivo vaiser preenchido e consumir mais espaço até os 2GB.

Note que VBDs sobre arquivos podem não ser apropriados para suportar domínios de I/O intensos.

Por padrão, o Linux aceita até oito VBDs sobre arquivo para todos os domínios.

Segurança

Quando implementando um sistema Xen, deve-se tornar o domínio de gerência (domínio0) ao máximo. Se este domínio estiver comprometido, todos os outros domínios estão também vulneráveis. As seguintes práticas são uma seleção das melhores práticas de segurança para o domínio0.

1. Rode o menor número possível de serviços necessários. Quanto menos coisas presentes em uma partição de gerência melhor. Lebre-se, um serviço rodando como root no dom0 tem acesso a todos outros domínios no sistema.

2. Utilize um firewall para restringir o tráfego ao dom0. Um firewall com um política padrão de rejeição de pacotes ajudará a prevenir ataques.

3. Não permita que usuários acessem o domínio0. O kernel do Linux, como se tem sabido, pode ser vulnerável a explorações de usuário local. Se permitimos que usuários normais acessam o dom0 (mesmo que como usuários não-privilegiados), corremos o risco de sermos explorados e termos todos os domínios comprometidos.

Parâmetros de boot do Xen

Essas opções abaixo são as utilizadas para configurar o comportamento do Xen na hora do boot. Elas devem ser anexadas à linha de comando do Xen, ou manualmente ou editando o grub.conf. Esta lista serve como ilustração de algumas possibilidades.noreboot

Não reinicia a máquina automaticamente em caso de erros. Isto é útil para capturar a saída do debug.

Page 11: Xen

nosmpDesabilita suporte a SMP. A opção é indicada por `ignorebiostables'.

watchdog Habilita o NMI watchdog que pode reportar algumas falhas.

noirqbalance Desabilita balanceamento e afinidade IRQ de software. Isto pode ser utilizado em sistemas como o Dell 1850/2850 que contornam, em hardware, problemas de IRQ-routing.

badpage=<número da página>,<page da página> ... Especifica uma lista de páginas que não devem ser alocadas para uso porque elas contém bad bytes. Por exemplo, se o testador da sua memória disser que o byte 0x12345678 é mau, você colocaria `badpage=0x12345' na linha de comando do Xen.

mem=xxx Seta o limite de endereçamento de memória RAM física. Qualquer RAM que aparecer além deste limite no mapa da memória será ignorado. Este parâmetro pode ser especificado com os sufixos B, K, M ou G, representando respectivamente bytes, kilobytes, megabytes e gigabytes. A unidade padrão é kilobytes.

dom0_mem=xxx Seta a quantidade de memória a ser alocada para o domínio0. No Xen 3.x o parâmetro pode ser especificado com os sufixos B, K, M ou G, representando respectivamente bytes, kilobytes, megabytes e gigabytes. A unidade padrão é kilobytes.

sched=xxx Seleciona o planejador (scheduler) de CPU que o Xen deve usar. As opções, atualmente, são `sedf' (padrão) e `bvt'.

apic_verbosity=debug,verbose Apresenta mais informação sobre a ACIP local e configuração da IOAPIC.

lapic Força uso da APIC local mesmo quando desabilitada por uma BIOS de uniprocessamento.

nolapic Ignora a APIC local em um sistema de uniprocessamento, mesmo se habilitada pela BIOS.

Existem outras opções apresentadas no manual do Xen 3.0.