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.
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.