Como Reduzir o Tamanho de uma Imagem Baseada em Xen DomU

Por Fábio Gil - Criado em 06/04/2011

Introdução
Aumentar o espa&amp;ccedil;o de um arquivo de imagem Xen (loopback) &amp;eacute; f&amp;aacute;cil, basta seguir as instru&amp;ccedil;&amp;otilde;es contidas no Tutorial (em ingl&amp;ecirc;s) Resize/Increase the Size of a File Based DomU Xen Filesystem. Agora, e para diminuir? Este &amp;eacute; o prop&amp;oacute;sito deste Tutorial. Os procedimentos para diminuir o tamanho da imagem s&amp;atilde;o semelhantes aos baseados no Tutorial Migrando um servidor físico Linux para virtual (p2v), por&amp;eacute;m, voltado para redu&amp;ccedil;&amp;atilde;o do tamanho de imagem.

Supondo que queira reduzir o tamanho de uma imagem de uma VM DomU do Xen, que tenha um tamanho maior que 80Gb. Ent&amp;atilde;o uma nova imagem dever&amp;aacute; ser criada com o novo tamanho (neste caso usei 80Gb mesmo), e depois sincronizar (rsync) os arquivos da antiga imagem para a nova.

Para isso, fazer os seguintes passos:

Preparar Rync na VM (a qual o disco ser&amp;aacute; reduzido)
No DomU (VM), instalar o pacote do rsync no Debian:

apt-get install rsync

Logo em seguida, editar o arquivo /etc/rsyncd.conf:

vi /etc/rsyncd.conf max connections = 1 syslog facility = local3 read only = yes list = yes uid = root gid = root [vm] comment = diretorio raiz path = /

... e rodar o daemon do rsync:

rsync --daemon

ATEN&amp;Ccedil;&amp;Atilde;O: ANTES DE PROCEGUIR PARA A PR&amp;Oacute;XIMA ETAPA, PARAR TODOS OS SERVI&amp;Ccedil;OS DA VM, DEIXANDO APENAS O RSYNC E SSH !!!

Preparar o novo disco virtual no Dom0 (no mesmo local onde se encontra a imagem antiga)
No Dom0, executar os seguintes comandos:

dd if=/dev/zero of=disknewsize.img bs=1M count=1 seek=80000 mkfs.ext3 disknewsize.img

Copiar os arquivos da antiga imagem para a nova via Rsync
Ainda no Dom0, monte a nova imagem:

losetup /dev/loop1 disknewsize.img mount /dev/loop1 /mnt

Sincronize os arquivos no ponto de montagem:

rsync -vaH --numeric-ids --stats --progress --exclude &quot;/mnt/*&quot; --exclude &quot;/proc/*&quot; --exclude &quot;/sys/*&quot; --exclude &quot;/tmp/*&quot; --exclude &quot;/var/tmp/*&quot; \ --exclude &quot;/var/run/*.pid&quot; --exclude &quot;/var/run/dbus/system_bus_socket&quot; rsync:///vm/ /mnt/ ; sync

Note que no comando acima, voc&amp;ecirc; ter&amp;aacute; que substituir &quot;&quot; pelo n&amp;uacute;mero IP da VM onde est&amp;aacute; rodando o rsync.

Desmonte a imagem:

umount /dev/loop1 losetup -d /dev/loop1

Pronto, agora a nova imagem com o novo tamanho poder&amp;aacute; ser utilizada no lugar da antiga imagem.