Onde trabalho temos alguns servidores de bancos de dados PostgreSQL em diversas máquinas virtuais rodando em um servidor VMWare. Até aí tudo bem, não fosse um detalhe que estava me incomodando. Todos eles usando versões antigas como 8.1 e 8.2, enquanto a versão atual é a 9.3.
Procurei saber e descobri que há versão 9.3 para o Centos 6.5 que é o que estamos usando para os novos servidores e resolvi então unificar os três servidores em um só.
Se você que leu até aqui e pensou “;Unificar servidores?? Que buro! dá zero pra ele!”; saiba que isso foi pensado e para nossa realidade é uma solução adequada.
Dito isso e com o dilema resolvido, parti para criar uma VM usando o Vagrant.
O Vagrant é uma excelente ferramenta de auxilio a nós DevOps. Com o uso dele podemos criar máquinas que podem ser facilmente compartilhadas entre os membros de uma equipe. Não vou entrar em detalhes de seu uso, apenas informar que utilizei uma Box de Centos 6.5 básica.
Até aqui estava tudo indo muito bem. Configurei a VM toda e instalei os softwares que iria utilizar, incluindo o PostgreSQL 9.3.
Quando fui migrar a base de produção é que começaram alguns problemas. O diretório do PGDATA, que é onde o PostgreSQL armazena os dados das tabelas, estava com mais de 40 GB. Fazer um dumpall e um restore on-the-fly não era uma opção e resolvi extrair o banco inteiro para posteriormente restaurar na VM.
Essa parte deu tudo certo. A restauração foi bem-sucedida (após alguns perrengues, claro) e o servidor já estava funcionando.
Para minha surpresa, havia neste servidor muitas tabelas que eram backup de outras da mesma base ou que foram criadas para testes e o tamanho real da base seria bem menor se eu as excluísse. Foi o que fiz. Removi diversas tabelas, eliminei algumas outras coisas e o tamanho da base caiu para cerca de 20% do tamanho anterior. Além do mais, com o arquivo de dump comprimido, mais esse mesmo arquivo descompactado, o uso de espaço cresceu muito. Após apagar esses arquivos, não havia mais do que 8 GB dos 200 GB reservados do disco dedicado para o PostgreSQL. Como sabemos, o virtualizador é capaz de gerenciar o disco de forma que ele só cresça caso o espaço reservado seja efetivamente ocupado e como isso aconteceu, o disco Virtual já havia crescido para 70 GB.

Seria um problema transferir esse tamanho todo com segurança para alguma mídia ou via Rede e além de que precisávamos manter os espaços em disco o mais reduzido possível até migrar outros servidores, devido a limitações da máquina física. Como a maior parte desse VMDK era espaço em branco, tinha de haver uma forma de reduzir seu tamanho.
Se o tipo do disco fosse VDI, o aplicativo VBoxManage daria conta do recado, fazendo a compactação do espaço em branco ao final da partição, mas esse disco é do tipo VMDK por ser o mais compatível entre Virtualizadores diferentes.
O único jeito que sabia ser possível era clonando o disco. Como o cara do Linux aqui na empresa havia questionado sobre a estrutura de partições eu resolvi também que alteraria a estrutura (e o tamanho) do disco para o formato desejado e então resolvi clonar a instalação também.

Segue a receita que utilizei.
Primeiro eu iria reduzir o tamanho do disco usado pelo banco de dados. The first step is to create the disk that will be the clone.
NOTE: In the case of the machine I was using, there was only one IDE controller. So it is necessary to add another controller if you want to add both disks at once. I will proceed by including only one disk at a time connected to Secondary IDE Slave because I believe it fits most cases.
The figure below shows the Add Hard Disk button.

After clicking it, you will be asked to choose whether you want to create a new one or load an existing one. In our case, we should choose Create new disk.
O próximo passo é definir qual tipo de alocação desejado. Escolha Alocação Dinâmica. Mais adiante explicarei as vantagens dessa escolha.

Depois, será perguntado sobre o tipo de arquivo do disco rígido a ser criado. No nosso caso, estamos sempre falando de VMDK, portanto, escolha esta opção.
NOTE: Usar o tipo VDI cria arquivos menores e mais compatíveis com o VirtualBox, porém não é legível pelo VMWare, por exemplo. Como no meu caso o destino será um servidor VMWare, é importante escolher o formato mais compatível com ele, que na lista abaixo é o VMDK.

Defina o nome e o tamanho do disco. Como estamos falando de clonagem e redução de tamanho físico, tenha em mente de que o tamanho deve ser no mínimo maior que a quantidade de dados reais no disco a ser clonado. Não se preocupe em criar um disco muito grande e não haver espaço real no seu computador. Como escolhemos alocação dinâmica no item anterior, o espaço será alocado dinamicamente, ou seja, o disco só cresce quando há dados efetivamente ocupando espaço.

Pronto! O Nosso disco alvo está criado e será exibido como na imagem abaixo. Repare nos tamanhos informados. Um disco VMDK recém criado e vazio terá cerca de 25 MB (um VDI apenas 2 MB).


Deixe um comentário