Como diminuir o tamanho de discos virtuais VMDK – parte 2

O que ando aprendendo nesta caminhada sobre a Terra

Como diminuir o tamanho de discos virtuais VMDK – parte 2

Se ainda não leu a parte 1, pode acessar ela por aqui.

Continuando o tutorial, iremos agora iniciar a clonagem dos discos. A primeira parte da clonagem é de um disco que não contem o sistema operacional. Se quiser ir direto para a clonagem com o sistema inicializável, pode pular esta parte e ir direto para a parte 3.

Hora de iniciar a clonagem. Iniciamos a máquina virtual no modo terminal (para caso tenha ambiente gráfico) e logamos como root ou nos tornamos root com o comando su – para que seja possível executar as instruções de particionamento, formatação e clonagem, respectivamente sem necessidade de sudo a todo comando.

No terminal digite fdisk -l para que sejam listados os discos e as partições:

[root@Address21 ~]# fdisk -l

Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cilindros of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0004f229

...(detalhes das partições do dispositivo /dev/sda)...

Disk /dev/sdb: 221.8 GB, 221807247360 bytes
255 heads, 63 sectors/track, 26966 cylinders
Units = cilindros of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdc: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cilindros of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Repare que nossos discos aparecem como sendo /dev/sda, /dev/sdb, /dev/sdc (marquei em vermelho para ficar mais visível) e ao lado o seu tamanho. Essa ordem a, b, c é a ordem de conexão na porta IDE. Como nosso disco foi incluído em Secundário Slave e o Primário Slave está o CDROM (vide imagem na parte 1) ele é o terceiro disco do sistema, ou seja, o /dev/sdc.
Iremos a partir de agora particionar e formatar a unidade. Digite o comando fdisk /dev/sdc.

[root@Address21 ~]# fdisk /dev/sdc
O dispositivo não contém nem uma tabela de partições DOS válida nem um rótulo de disco Sun, OSF ou SGI
Building a new DOS disklabel with disk identifier 0x80a19bff.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Aviso: a opção inválida 0x0000 da tabela de partições 4 será corrigida por gravação (w)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').

Comando (m para ajuda): n
Comando - ação
e estendida
p partição primária (1-4)
p
Número da partição (1-4): 1
Primeiro cilindro (1-26108, default 1): 1
Last cilindro, +cilindros or +size{K,M,G} (1-26108, default 26108): 26108

Dentro do fdisk, digite n, escolha partição primária com p, escolha 1 como número da partição, inicie no cilindo 1 e termine no último cilindro (basta teclar ENTER).

Depois digite p para que seja exibida a tabela criada que deve ficar mais ou menos assim

Comando (m para ajuda): p

Disk /dev/sdc: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cilindros of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x80a19bff

Dispositivo Boot      Start         End      Blocks   Id  System
/dev/sdc1               1       26108   209712478+  83  Linux

Podemos ver que foi criada a partição /dev/sdc1.
Agora digite w para gravar as alterações e sair.

Comando (m para ajuda): w
A tabela de partições foi alterada!

Chamando ioctl() para reler tabela de partições.
Sincronizando discos.
[root@Address21 ~]#

O próximo passo é formatar a partição criada no passo anterior com um sistema de arquivos. No caso utilizarei o ext4 que é o mais rápido para trabalhar com o Banco de Dados em Linux. Para isso use o comando mkfs.ext4 /dev/sdc1 ou mke2fs -T ext4 /dev/sdc1

[root@Address21 ~]# mkfs.ext4 /dev/sdc1
mke2fs 1.41.12 (17-May-2010)
...(diversas informações da partição e do sistema de arquivos)...

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 21 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

Pronto, a partição está formatada. Agora é hora de montá-la e iniciar a clonagem.
para montar uma unidade, devemos apontá-la para um diretório vazio para facilitar a cópia dos arquivos. Use o comando mkdir para criar um diretório qualquer e em seguida utilize o comando mount para montá-lo nesse diretório.

[root@Address21 ~]# mkdir /z
[root@Address21 ~]# mount /dev/sdc1 /z

O comando mount sem argumentos mostra os pontos de montagem e deverá exibir a montagem recém criada.

[root@Address21 ~]# mount
/dev/mapper/VolGroup-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
...(outros pontos de montagem)...
/dev/sdb on /database type ext4 (rw)
/dev/sdc1 on /z type ext4 (rw)
[root@Address21 ~]#

Nosso ponto está exibido acima em vermelho.
Hora de clonar o disco. Vou usar o utilitário rsync para clonar dados de um local para outro. No meu caso, os dados estão no diretório /database (visível nos pontos de montagem exibidos no comando mount acima) e ele será o source enquanto o novo disco foi montado em /z que será o dest

[root@Address21 ~]# rsync -avHX /database/ /z/

Repare que ambos os caminhos terminam em /. Isso é importante para evitar problemas com o caminho.
Se quiser detalhes sobre cada argumento utilizado basta dar um rsync –help.
O processo é relativamente rápido como uma cópia. Quanto maior a quantidade e o tamanho dos dados, mais tempo vai levar, mas será exibido o progresso.
Ao final já teremos o disco completamente clonado. Falta agora modificar o fstab para que ele monte o novo disco no lugar do antigo.
Primeiro precisamos saber qual o UUID deste disco e para isso utilizamos o blkid

[root@Address21 ~]# blkid
(...)
/dev/mapper/VolGroup-lv_swap: UUID="b7e866d5-831b-4ee8-b65d-be2589214a35" TYPE="swap"
/dev/sdc1: UUID="ca034463-5421-4e17-ade2-c7fe2c07a461" TYPE="ext4"

Agora copie o UUID da partição (/dev/sdc1) e usando um editor abra o arquivo /etc/fstab e substitua o UUID do ponto de montagem que clonou.
Usando o meu como exemplo:

tmpfs               /dev/shm                tmpfs   defaults        0 0
devpts              /dev/pts                devpts  gid=5,mode=620  0 0
sysfs               /sys                    sysfs   defaults        0 0
proc                /proc                   proc    defaults        0 0

#UUID="d1744a2b-8495-44cd-8196-5d905e3b1926" /database ext4 defaults 0 0
UUID="ca034463-5421-4e17-ade2-c7fe2c07a461" /database ext4 defaults 0 0

Desligue o sistema e veja como ficaram os tamanhos dos discos.
Usando as informações da primeira parte deste tutorial, podemos comparar e perceber que o disco criado ficou com o tamanho real bem menor mesmo possuindo a mesma quantidade de informações.

Tamanho do disco após clonar dados do disco maior

Disco Secundário da Máquina Virtual com as bases de dados do SGBD PostgreSQL

Quando a VM inicializar já estará utilizando o novo disco montado no antigo diretório. Após fazer testes e se certificar que está tudo OK. podemos excluir o disco de tamanho grande dela sem se preocupar em configurar nada no S.O. pois a montagem foi feito a partir do UUID e não de seu caminho como dispositivo.

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.