Escolar Documentos
Profissional Documentos
Cultura Documentos
Sumrio
1 Compreendendo o ambiente de para-virtualizao Do ambiente real ao para-virtualizado Congurando o Xen 3.1 Conceitos . . . . . . . . . . . . . . . . . . 3.2 Xen0 . . . . . . . . . . . . . . . . . . . . . 3.2.1 Desabilitando servios . . . . . . . 3.2.2 Instalao dos pacotes necessrios. . 3.2.3 Criando a LVM . . . . . . . . . . . 3.2.4 Congurao da bridge . . . . . . . 3.2.5 Script inicializador da DomU . . . 3.2.6 Ajustes importantes . . . . . . . . . 3.3 XenU . . . . . . . . . . . . . . . . . . . .
2 3 4 4 4 4 5 5 7 8 9 9 11 11 11 13 13 15 19
2 3
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
Controle das domUs 4.1 Iniciando um rewall . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Comandos do Xen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Backups 5.1 Backup das domUs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Backup das Dom0s . . . . . . . . . . . . . . . . . . . . . . . . . . . . Consideraes nais
1 BIN,CUE, 2 Linux
iso8859 - formato binrio para ser gravado em algum tipo de mdia como CD ou DVD. Volume Manager
1 www.uranet.com.br
centralizador de acesso s mquinas, para que cada uma no precise de teclado e monitor independente e evitando passeios com mesa, teclado e mouse. 3 computadores com mais recursos, onde a placa-me colocada em um slot ISA/PCI, em uma placa chamada backplane. 4 ethernets de quatro portas
2 Monitor
Existem alguns conceitos a seguir que evitaro confuses posteriores. Inicialmente tratando-se dos sistemas operacionais. Um sistema para-virtualizador conhecido como Dominio0, Domain0, Dom0, Xen0. Um sistema para-virtualizado chamado de DominioU, DomainU, DomU, XenU. O U signica Unprivilegied ou, sem previlgios - pois esse sistema no ter acesso direto ao hardware. A congurao necessria a preparao da dom0 e da domU. A comunicao entre elas acontecer atravs de bridges, que isolaro as interfaces de cada rewall. Nos domUs s sero vistas as interfaces que lhe forem atribuidas, ou seja,s poderia ser farejado atravs da dom0, onde sero enxergadas. As dom0s por sua vez estaro em uma rede separada por um outro rewall, que s ser conectado ao mundo no momento em que houver a necessidade de uma manuteno remota. Assim seria algo como: Internet > Firewall > Rede Xen0. O acesso feito por ssh, sendo derrubado o daemon assim que a conexo estabelecida. Conclundo-se a manuteno, o rewall desconectado sicamente da rede. Feita a parte paranica.
3.2
Xen0
A congurao da Xen0 consiste em uma instalao padro de um SuSE em modo texto, tendo o hd particionado em 3, onde uma partio menor ser swap, uma ser a raiz e a terceira, uma partio LVM, que abrigar os domUs.
3.2.1
Desabilitando servios
Aps a instalao do sistema, os seguintes daemons foram mantidos: auditd cron dbus fbset haldaemon kbd microcode network
nscd policykitd powersaved resmgr sshd syslog xend xendomain Para desabilitar os daemons desnecessrios, basta rodar o Yast e, em sistema, selecionar Servios do Nvel de Execuo.
3.2.2
Os pacotes Xen a serem instalados so: kernel-xen xen xen-libs xen-tools Automaticamente ser adicionado o pacote bridge-utils, para a congurao da bridge.
3.2.3
Criando a LVM
O script abaixo ajuda a criar o LVM. Basicamente, criado com pvcreate, posteriormente o grupo com vgcreate e por m, os volumes. No necessrio conhecimento prvio em LVM para a utilizao do script. A funo do script a seguir criar as parties raiz, swap e uma pequena partio para backup, como descrito no captulo 5. #!/bin/sh escolhe_particao(){ PARTICAO=dialog stdout inputbox "Digite a particao a criar LVM" 0 0 [ $? = 1 ] && exit dialog stdout yesno "Voce escolheu $PARTICAO ?" 0 0 if [ $? = 1 ];then escolhe_particao echo $PARTICAO >particao } criar_grupo(){ NOME_DO_GRUPO=dialog stdout inputbox "Nome para o grupo:" 0 0 vm dialog stdout yesno "Correto ($NOME_DO_GRUPO)?" 0 0 if [ $? = 1 ];then criar_grupo dialog stdout yesno "Grupo: $NOME_DO_GRUPO \n Particao: $PARTICAO \n Correto?" 0 0 if [ $? = 1 ];then exit 0 pvcreate $(cat particao) ||{
dialog stdout infobox "Houve algum erro. \n Verique se a particao existe e se o pacote para LVM esta instalado." 0 0 exit 1 } vgcreate $NOME_DO_GRUPO $PARTICAO ||{ dialog stdout infobox "Houve algum erro. \n Verique se a particao existe e se o pacote para LVM esta instalado." 0 0 exit 1 } } criar_volume(){ if [ "$1" != "" ];then NOME_DO_GRUPO="$1" NOME_DO_VOLUME=dialog stdout inputbox "Nome para o volume:" 0 0 vm1 dialog stdout yesno "Correto ($NOME_DO_VOLUME)?" 0 0 if [ $? = 1 ];then criar_volume tamanho(){ TAMANHO_RAIZ=dialog stdout inputbox "Tamanho (512M, 5G...)" 0 0 5G dialog stdout yesno "Correto ($TAMANHO_RAIZ)?" 0 0 if [ $? = 1 ];then tamanho TAMANHO_SWAP=dialog stdout inputbox "Tamanho swap (512M, 5G...)" 0 0 512M dialog stdout yesno "Correto ($TAMANHO_SWAP)?" 0 0 if [ $? = 1 ];then tamanho } tamanho lvcreate -L$TAMANHO_RAIZ -n $NOME_DO_VOLUME.raiz $NOME_DO_GRUPO echo "y"|mkreiserfs /dev/$NOME_DO_GRUPO/$NOME_DO_VOLUME.raiz lvcreate -L$TAMANHO_SWAP -n $NOME_DO_VOLUME.swap $NOME_DO_GRUPO mkswap /dev/$NOME_DO_GRUPO/$NOME_DO_VOLUME.swap } auto_volume(){ NUM=dialog stdout inputbox "Quantas maquinas deseja?" 0 0 if [ $? = 1 ];then exit NOME_DO_VOLUME=dialog stdout inputbox "Nome para o volume:" 0 0 vm TAMANHO_RAIZ=dialog stdout inputbox "tamanho da Raiz" 0 0 5G TAMANHO_SWAP=dialog stdout inputbox "Tamanho da Swap" 0 0 512M for i in seq 1 $NUM;do lvcreate -L$TAMANHO_RAIZ -n $NOME_DO_VOLUME$i.raiz $NOME_DO_GRUPO echo "y"| mkreiserfs /dev/$NOME_DO_GRUPO/$NOME_DO_VOLUME$i.raiz lvcreate -L$TAMANHO_SWAP -n $NOME_DO_VOLUME$i.swap $NOME_DO_GRUPO
mkswap /dev/$NOME_DO_GRUPO/$NOME_DO_VOLUME$i.swap done dialog stdout infobox "Verique abaixo se foram criadas" 0 0 ls /dev/vm/* } dialog stdout yesno "Deseja colocar maquinas a um grupo existente?" 0 0 if [ $? = 0 ];then NOME_DO_GRUPO=dialog stdout inputbox "Nome do grupo existente" 0 0 criar_volume $NOME_DO_GRUPO exit 0 escolhe_particao criar_grupo dialog stdout yesno "Gostaria de criar varios volumes \n passando apenas nome, tamanho raiz e swap?" 0 0 if [ $? = 1 ];then criar_volume else auto_volume for i in seq 1 4;do ls -l /dev/$NOME_DO_GRUPO/vm$i\.bkp ||{ lvcreate -L64M -n vm$i\.bkp $NOME_DO_GRUPO echo "y"| mkreiserfs /dev/$NOME_DO_GRUPO/vm$i\.bkp } done
3.2.4
Congurao da bridge
A bridge normalmente congurada em /etc/xen/scripts/network-bridge. Para esse modelo de congurao, o script foi criado com o seguinte contedo: #!/bin/sh #Djames Suhanko #source /etc/xen/scripts/bridges.so if [ "$1" = "" ];then echo "Usage: Stop or Start" echo " " exit 0 if [ "$1" = "start" ];then for i in seq 0 7;do #Cria bridge e adiciona interface /sbin/brctl addbr br$i 2>/dev/null /sbin/brctl addif br$i eth$i 2>/dev/null #Congura interface /sbin/ifcong eth$i 0 0.0.0.0 2>/dev/null #IP na ponte /sbin/ifcong br$i 192.168.10.$i netmask 255.255.0.0 2>/dev/null done
CAPTULO 3. CONFIGURANDO O XEN elif [ "$1" = "stop" ];then for i in seq 0 7;do /sbin/brctl delbr br$i 2>/dev/null /sbin/brctl delif br$i eth$i 2>/dev/null /sbin/ifcong br$i down 2>/dev/null /sbin/ifcong eth$i down done
Desse modo, cada bridge recebe uma interface ethernet, fazendo (a grosso modo) a conexo entre a mquina virtual e a interface ethernet real. A interface 8, correspondente placa de rede onboard dever ser congurada normalmente na dom0, am de permitir a rede local dom0. Recomenda-se que a congurao dessa interface seja feita em /etc/init.d/after.local (esse arquivo dever ser criado e ajustado como executvel). Algo como: /sbin/ifcong eth8 10.0.0.1 netmask 255.255.0.0 up.
3.2.5
Para iniciar uma mquina virtual, pode-se passar com o comando xm todos os parmetros necessrios ou atravs de um script, como descrito a seguir: kernel="/boot/vmlinuz-2.6.18.2-34-xen" ramdisk="/boot/initrd-2.6.18.2.34.xen" memory=256 root="/dev/hda1 ro" disk=[phy:/dev/vm/vm1.raiz,hda1,w,phy:/dev/vm/vm1.swap,hda2,w,phy:/dev/vm/vm1.bkp,hda3,w vif=[mac=ac:de:48:00:00:01,bridge=br0,mac=ac:de:48:00:00:02,bridge=br1,] A primeira linha se refere ao kernel, contido no diretrio boot da dom0. Da mesma forma para o initrd, na segunda linha. Seguidamente, a quantidade de memria reservada para essa mquina. A est mais uma grande vantagem da para-virtualizao sobre uma vlan, por exemplo, pois a domU pode ser atacada ou por algum outro motivo, ter seu desempenho prejudicado. A domU est limitada sua poro de recursos; sua quantidade de CPU e, como especicado aqui, a memria. Com isso, mantm-se isolado qualquer problema. A linha seguinte memria indica a partio raiz da domU. Deve-se notar que, mesmo que o HD da dom0 seja SATA, na domU aparecer como IDE e nesse primeiro momento, como read-only. A linha disk informar a raiz, swap e uma partio para o backup, descrito no captulo 5. O parmetro phy indica que as parties so fsicas. Somente o que for especicado nesse arquivo ser visvel para a domU. A linha vif indica as bridges que cada interface ethernet atuar. Especicar o mac de cada interface opcional, porm para validar o sistema de restaurao, necessrio faz-lo. O spoong do MAC deve obedecer a ordem da reserva ac:de:48, podendo modicar todos os demais campos. Tambm deve-se tomar cuidado para no repetir um MAC ou IP na mesma rede. Caso no seja especicado um MAC, ser gerado um aleatoriamente, dentro da reserva do Xen (00:16:3e:...). Esse arquivo pode receber qualquer nome, porm para validar o backup necessrio que se chame vmX.nome, onde X representa o nmero da mquina virtual (que dever
ter relao com a partio LVM vmX.raiz, como mostra o script na seo 3.2.3 e deve ser armazenado preferencialmente em /etc/xen/.
3.2.6
Ajustes importantes
Uma alterao de extrema importncia deve ser feita em /boot/grub/menu.lst. Na linha module, adicione o parmetro dom0_mem=196. Isso evitar travamentos aleatrios nas interfaces de rede.
3.3
XenU
Para preparar uma XenU, basta uma instalao limpa de um rewall antes de receber rotas e regra. Instalar o sistema nomeando-o como generico ajudar a no se confundir posteriormente; uma imagem chamada generico que esteja rodando, certamente no possuir nenhuma congurao. Aps o sistema devidamente instalado, deve ser feita uma cpia com os parmetros -av para um diretrio chamado genrico: mkdir /generico cd / ls -l /|egrep -v proc|generico|<outro> |awk {print $NF}|while read line; do cp -av $line generico/;done tar cjvf generico.tbz2 generico Esse arquivo deve ser transportado para a Xen0 e descomprimido em /, posteriormente criando os diretrios que foram excludos na gerao do pacote genrico: tar xvjf generico.tbz2 A raiz do sistema agora deve ser a imagem genrica. Para isso, usa-se o comando: chroot /generico Monta-se /proc: mount /proc A senha deve ser convertida para shadow: pwconv O arquivo /etc/udev/rules.d/30-net_persistent_names.rules deve ser editado e a linha contendo os MACs das placas reais do rewall modelo devem ser removidas. As linhas possuiro informaes do tipo: SUBSYSTEM=="net", ACTION=="add", SYSFS{address}=="00:15:c5:35:df:c8", IMPORT="/lib/udev/rename_netiface %k eth0" importante remover essa linha, caso contrrio, ao iniciar o sistema novas entradas sero criadas para as interfaces virtuais e conseqentemente as interfaces iniciaro a partir de eth2. Os servios desnecessrios devem ser removidos, incluindo dessa vez splash e kdb1 . Basta rodar o Yast, uma vez que a raiz do sistema passou a ser /generico. Deve-se remover tambm os arquivos relacionados congurao da interface no boot. Algo como ifcfg-eth-00:0F.... Estes arquivos estaro em /etc/syscong/network/. O nome de host pode ser mudado atravs do Yast, na opo Servios de Rede > DNS e Nome de Host, ou editando os arquivos /etc/HOSTNAME e /etc/hosts.
1 No
haver danos ao sistema, apesar da informao do Yast de que esse servio no deve ser desabi-
litado.
10
Na mquina real, para se acessar consoles usa-se Alt+[F1-F6]. As domUs tambm sero acessadas pelo console e esse suporte a mltiplas ttys conitante. Deve-se ento desabilitar os consoles de 2 a 6, em /etc/inittab (do sistema genrico somente), comentado as linhas: 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 A tabela de sistemas de arquivos deve ser modicada, deixando apenas as entradas correspondentes a raiz, swap, proc e partio de backup , que ser citado mais adiante. Essa partio existir apenas na mquina virtualizada, no sendo necessrio cri-la na mquina de gerao do sistema genrico. Modelo do fstab: /dev/hda1 / reiserfs acl,user_xattr 11 /dev/hda2 swap swap defaults 00 /dev/hda3 /bkp reiserfs user,exec,auto,rw 1 1 proc /proc proc defaults 00 O diretrio /bkp deve ser criado no sistema genrico. Concludas as conguraes, desmonta-se /proc e naliza-se a jaula: umount /proc exit Para concluir, as libs do Xen devem ser copiadas para o sistema genrico: cp -av /lib/modules/*xen /generico/lib/modules/ Terminada a congurao, a genrica pode ser copiada para a partio do rewall que ser virtualizado, montando o LVM em /mnt, exemplicando o primeiro rewall, chamado frwexemplo: mount /dev/vm/vm1.raiz /mnt cp -av /generico/* /mnt/ As conguraes poderiam ser feitas nesse momento usando-se da jaula, ou aps o primeiro boot, como no exemplo deste documento.
4.1
Iniciando um rewall
De dentro de /etc/xen: xm create -c vm1.frwexemplo A ag -c diz para iniciar o sistema em primeiro plano. O prexo vm1 til nesse momento, pois indica em que local do LVM se localiza o sistema. A inicializao deve ocorrer normalmente, apresentando falha apenas no clock do hardware, que em nada inuenciar nesse modelo. Aps efetuar o login no sistema, congura-se as interfaces de rede, que apresentaro uma mensagem de modulo no encontrado, bastando ignorar a mensagem.
4.2
Comandos do Xen
Para retornar ao console da mquina real, basta usar Ctrl+]. Para retornar a um console, usa-se xm console vmX.nome, exemplicando com o modelo criado: xm console vm1.frwexemplo Seguido de Enter. Para saber quais rewalls esto rodando, usa-se xm list. A lista apresentar o estado das mquinas, ou estado nenhum. -r: indica processamento -c: indica crash. A mquina virtual certamente no est rodando. -b: Se a mquina virtual no estiver processando, entrar em estado de bloqueio at que seja requisitado processamento. -p: Indica que dado domU foi pausado. Quando uma domU sofre um crash (por uma congurao que no permitiu o boot correto, por exemplo), ser necessrio destru-la. Para tal, usa-se o comando: xm destroy vm1.frwexemplo
11
12
Tm-se a possibilidade de pausar um domU em execuo. Isso interromper o processamento, mas no livrar recursos em uso. Para pausar: xm pause vm1.frwexemplo E para retomar: xm unpause vm1.frwexemplo Pode-se desligar uma domU com: xm shutdown vmX.nome Mais detalhes podem ser observados no manual do xm.
Captulo 5 Backups
Todos os script esto no pacote bkp.tbz2 em www.phantomsystem.com.br, no link superior esquerda.
5.1
Um rewall normalmente roda um pequeno conjunto de servios; regras de iptables, rotas e dhcp. As informaes necessrias esto contidas em um conjunto de arquivos como nome de mquina, interfaces de rede, script ps-boot etc. Se estas informaes forem acrescidas a um sistema genrico, tais conguraes sero assumidas em um boot posterior, portanto, o script de backup a seguir reunir os dados necessrias para reconstruir as domUs, caso a mquina real sofra algum dano irrecupervel. #!/bin/bash [ -d /bkp ] || mkdir /bkp if [ -f /bkp/$(date +%Y-%m-%d) ];then exit rm -rf /bkp/* 2>/dev/null DIR=/bkp/hostname -s rm -rfv $DIR mkdir -p $DIR cp -rfv parents /etc/HOSTNAME $DIR cp -rfv parents /etc/dhcpd.conf $DIR cp -rfv parents /root/* $DIR cp -rfv parents /etc/host* $DIR cp -rfv parents /etc/resolv.conf $DIR cp -rfv parents /etc/rc.d/after.local $DIR cp -rfv parents /etc/rc.d/frw* $DIR cp -rfv parents /etc/syscong/network $DIR cp -rfv parents /var/spool/cron/tabs/* $DIR echo "1" >/bkp/$(echo date +%Y-%m-%d) O script inicia vericando se h o diretrio de backup e a data do backup. Se a data do backup for inferior ao ltimo, ele no ser executado. Se for necessrio rodar o backup manualmente, basta remover o contedo de /bkp. Nesse script, a regra de rewall receber o mesmo nome do rewall (ambos no devem conter o prexo vmX). Desse modo, o backup se tornar genrico, dispensando
13
CAPTULO 5. BACKUPS
14
a criao de um script para cada rewall. Se necessrio for, basta adicionar ao script outros niveis de arquivos e diretrios. O script naliza adicionando a data do ltimo backup. Dessa forma, mesmo que agendado no cron com intervalos curtos, a execuo ser breve. O script after.local apenas um arquivo executvel (chmod 755) que, se existir, ser executado aps o rc - o ltimo a rodar antes do login. Quando o script roda e os arquivos so copiados, o domU compreende que est armazenando os dados em /dev/hda3, de poucos megas, apenas para armazenar os arquivos de congurao do sistema virtual em execuo. Para o Dom0, essa partio compreendida como um volume do LVM, contido em /dev/vm/vm1.bkp. Todo esse bkp seria intil se no pudesse ser armazenado remotamente, porm a mquina virtual no tem acesso mquina real de forma alguma. A soluo recolher o backup a partir da Dom0, por ser ela a controladora de todo o conjunto. A partio que corresponde ao bkp estar constantemente montada na domU em execuo, sendo inapropriado acessar uma partio montada mesmo que a partir da dom0. Para que seja possvel copiar os dados seguramente, o script que recolhe os backups tomar providncias - sincronizar o contedo do backup na mquina virtual, enviando um sinal para sincronsmo dos dados, descarregando o buffer do dispositivo e posteriormente espelhando o contedo do volume LVM para um arquivo. Finalizar copiando o contedo desse arquivo espelhado para o respectivo diretrio de backup, que ser /rewalls/vmX.nome, replicando o backup na rede dom0 atravs de uma leitura no arquivo defaults.rfs, contido no diretrio /root/bkp. Concludo, o arquivo de imagem removido do sistema. D-se a esse fato a importncia de criar um volume vmX.bkp de 16 ou 32 megabytes apenas, pois a imagem gerada bit a bit com um dump do dispositivo e poderia acarretar em consumo de recursos excessivos. No h como evitar o primeiro passo, que o espelhamento, mas a data do backup vericada da mesma forma que feito na domU. A replicao na rede feita por ssh usando-se de troca de chaves, que dispensar a senha. O script da dom0 que recolhe esse backup: #!/bin/sh #Djames Suhanko #Esse script monta a particao de bkp e copia para /rewalls e rede source /root/bkp/defaults.rfs [ ! -f /root/bkp/bkp.lock ] || exit 1 echo "1" >/root/bkp/bkp.lock roda_bkp(){ [ -d /mnt/bkp ] || mkdir /mnt/bkp /usr/sbin/ushb /dev/vm/$1\.bkp dd if=/dev/vm/$1\.bkp of=/mnt/$1\.bkp mount -o loop /mnt/$1\.bkp /mnt/bkp MAQUINA_LOCAL="/mnt/bkp" ARQUIVO=date +%Y-%m-%d [ -f /mnt/bkp/$ARQUIVO ] && { DIR=basename $(ls -d /mnt/bkp/*/|sed -e s/\///) cp -r /mnt/bkp/$DIR /mnt/$1\.$DIR DOMU_BKP=$1\.$DIR cp -rf /mnt/$DOMU_BKP /rewalls/ cp -f /etc/xen/vm[1-4].* /rewalls/les/ echo $GRUPO|sed -e s/,/\n/g; s/ //g|while read line;do if [ ! "$GRUPO" = "" ];then
CAPTULO 5. BACKUPS ping -c1 $line >/dev/null || ESTADO="no" if [ ! "$ESTADO" = "no" ];then scp -r /mnt/$DOMU_BKP root@$line\:/rewalls/ scp /rewalls/les/* root@$line:/rewalls/les/ ESTADO="ok" if [ ! "$ESTADO" = "ok" ] ;then echo "$1 $line" > >/root/bkp/nao_copiado_para_rede.err done rm -rf /mnt/$DOMU_BKP umount /mnt/bkp || echo "no umount $1" > >/root/bkp/umount_bkp.err rm -f /mnt/$1\.bkp } || umount /mnt/bkp } /usr/sbin/xm list|egrep vm|cut -f1 -d.|while read line; do roda_bkp $line done rm -f /root/bkp/bkp.lock
15
Dessa forma, todas as mquinas da rede dom0 tero em /rewalls uma cpia dos arquivos dos rewalls virtualizados em s e nas outras dom0s. Para restaurar um conjunto de domUs, necessrio saber quais domUs rodavam em que dom0. Essa informao est no arquivo defaultfs.rfs em /root/bkp. Por exemplo, as dom0s chamadas de mfXX (mf01, mf02,...), estariam no defaults.rfs como: MF01=vm1.frwexemplo,vm2.frwxxx,vm3.frwxxxxx,vm4.xxxxxxx MF02=...
5.2
Supe-se que a restaurao de um conjunto ser necessrio no momento em que um dom0 tiver um problema fsico, logo, o hardware dever ser substituido. Para tal, o modelo de backup descrito neste documento sugere que haja uma dom0 de backup em rede, recebendo a replicao dos arquivos de backup. Assim, se houver a morte de uma dom0, a substituio poder ser feita em alguns poucos minutos, rodando o script restaura_mf.sh na dom0 de backup: #!/bin/sh #Djames Suhanko - djames.suhanko@gmail.com #Restaurador de grupos source /root/bkp/defaults.rfs TODAS="" if [ "$1" = "remover" ];then LISTA=cat /root/bkp/defaults.rfs|egrep MFG|awk -F"=" {print $1" "$1} REMOVA=dialog stdout title "Remover grupo" menu "Selecione o grupo" 0 0 0 $LISTA if [ $? = 1 ];then exit
CAPTULO 5. BACKUPS
16
egrep -v "$REMOVA" /root/bkp/defaults.rfs > >/root/bkp/defaults.bkp mv -f /root/bkp/defaults.bkp /root/bkp/defaults.rfs exit if [ "$1" = "adicionar" ];then NUMERO_DE_MAQUINAS=dialog stdout title "Adicionar Grupo" inputbox "Entre com o numero de maquinas desejadas" 0 0 if [ $? = 1 ];then exit for i in seq 1 $NUMERO_DE_MAQUINAS;do NOME_DA_MAQUINA=dialog stdout title "Nomes" inputbox "Entre com o nome da maquina:" 0 0 if [ $? = 1 ];then exit TODAS_VIRGULA=$TODAS_VIRGULA$NOME_DA_MAQUINA"," done TODAS=echo $TODAS_VIRGULA|sed -e s/,$// for i in seq 1 100;do A=egrep "MFG$i" /root/bkp/defaults.rfs ||{ echo "MFG$i=\"$TODAS\"" break } done exit dialog stdout title "Maquina Despreparada" yesno "Deseja selecionar um grupo?" 00 if [ $? = 1 ];then exit egrep MFG /root/bkp/defaults.rfs >/tmp/grupos dialog stdout textbox /tmp/grupos 0 0 rm -f /tmp/grupos OPC=$(dialog stdout title "Selecione o MF" menu "Restaurar Grupo" 0 0 0 \ MF01 "MF01" \ MF02 "MF02" \ MF03 "MF03") [ $? = 1 ] && exit VMRUNNING=xm list|egrep vm|wc -l if [ $VMRUNNING -gt 0 ];then dialog stdout title "Ops" msgbox "Maquina virtual rodando. Pare-a primeiro" 0 0 exit case "$OPC" in MF01) [ -d /root/logs ] || mkdir -p /root/logs
CAPTULO 5. BACKUPS GRUPO_SELECIONADO=$MFG1 cp -rf /rewalls/dom0/mf01/* / 2> >/root/logs/copia_dom0 ;; MF02) [ -d /root/logs ] || mkdir -p /root/logs GRUPO_SELECIONADO=$MFG2 cp -rf /rewalls/dom0/mf02/* / 2> >/root/logs/copia_dom0 ;; MF03) exit #cp -rf /rewalls/dom0/mf03/* / 2> >/root/logs/copia_dom0 #GRUPO_SELECIONADO=$MFG3 ;; esac echo $GRUPO_SELECIONADO|sed -e s/,/\n/g; s/\"//g |while read line; do mount /dev/vm/$(echo $line|cut -f1 -d.).raiz /mnt [ -d /mnt/root ] ||{ cp -av /generico/* /mnt #dialog stdout msgbox "Generico copiado para o diretorio" 0 0 } cp -rv /rewalls/$line/* /mnt/ #servicos chroot /mnt/ chkcong add $(echo $line|cut -f2 -d.) if [ -f /mnt/etc/dhcpd.conf ];then chroot /mnt chkcong add dhcpd umount /mnt ln -sf /etc/xen/$line /etc/xen/auto/$line done dialog stdout title "Finalizado" msgbox "Reiniciarei o computador" 0 0 /sbin/reboot
17
Tambm permitido incluir ou remover um grupo no arquivo defaults.rfs, mas novos grupos no menu devem ser includos reeditando esse script. O defaults.rfs deve ser replicado a cada modicao. Como esse um arquivo comum em todas as dom0s, a replicao feita manualmente, para evitar desatualizaes ou sobrescries inoportunas. O script que replicar o defaults.rfs contm: #!/bin/sh source /root/bkp/defaults.rfs echo $GRUPO|sed -e s/^$//g; s/ //g; s/,/\n/g|while read line;do scp /root/bkp/defaults.rfs root@$line:/root/bkp/ done No apenas os backups das domUs so replicados, mas os da dom0 tambm, pois a mquina real possui algumas caractersticas especicas como seu nome, congurao de rede, etc. O script que faz o backup da dom0: #!/bin/bash [ -d /rewalls/dom0 ] || mkdir -p /rewalls/dom0
CAPTULO 5. BACKUPS rm -rf /rewalls/dom0/$(hostname -s) 2>/dev/null DIR=/rewalls/dom0/hostname -s rm -rfv $DIR mkdir -p $DIR cp -rfv parents /etc/HOSTNAME $DIR cp -rfv parents /root/* $DIR cp -rfv parents /etc/host* $DIR cp -rfv parents /etc/resolv.conf $DIR cp -rfv parents /etc/rc.d/after.local $DIR cp -rfv parents /etc/syscong/network $DIR cp -rfv parents /var/spool/cron/tabs/* $DIR cp -rfv parents /etc/xen/{vm[1-4]*,scripts/network-bridge} $DIR source /root/bkp/defaults.rfs echo $GRUPO|sed -e s/^$//g; s/ //g; s/,/\n/g|while read line;do scp -r /rewalls/dom0/$(hostname -s) root@$line:/rewalls/dom0/ done
18
Acontecendo o crash, a dom0 de backup substituir facilmente qualquer dom0 problemtica, porm ser necessrio preparar uma substituta, que far o papel de backup da rede novamente. Am de evitar o processo de congurao manual, gerar uma imagem da dom0 genrica sem a construo do LVM a soluo. Para tal, sugere-se o uso do Phantom, disponibilizado livremente em www.phantomsystem.com.br. Tendo uma imagem armazenada em qualquer ponto dessa rede, basta agora restaur-la para um novo hardware (que desempenhar o papel de dom0 genrica) e reconstruir o LVM.
19