Como diminuir o tamanho de discos virtuais VMDK – parte 3

O que ando aprendendo nesta caminhada sobre a Terra

Como diminuir o tamanho de discos virtuais VMDK – parte 3

Se desejar ler a parte 1 deste tutorial, clique aqui.
Se desejar ler a parte 2 deste tutorial, clique aqui.

No item anterior fizemos uma clonagem de um disco com uma única partição. Nas próximas linhas vou mostrar como clonei um disco com uma única partição primária e uma lógica para duas partições primárias e uma lógica com um ponto de montagem para o swap que originalmente estava em um arquivo.

NOTA: Utilizei como fonte esse site, para resolver problemas com a inicialização do novo disco. Faça como eu, sempre cite suas fontes.

Usando como base as informações da parte 1 deste tutorial, adicionaremos um novo disco à máquina virtual. No meu caso, o disco primário possui 40 GB e vou substituir por um menor, de 20 GB. Isso realmente não é necessário, visto que como usamos alocação dinâmica, não importa muito o tamanho virtual total e sim o tamanho real utilizado.

Novo disco criado

Novo disco criado

Inicie sua máquina normalmente. ;Vire homi”;, como diz o cara do Linux que fica aqui do meu lado (torne-se root, se ainda não o for), e use o comando fdisk -l para verificar sua existência, da mesma forma como descrita na parte 2.

Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cilindros Unidades = cilindros de 16065 * 512 = 8225280 bytes Tamanho do setor (logical/physical): 512 bytes / 512 Tamanho de E/S de bytes (minimum/optimal): 512 bytes / 512 bytes Identificador de disco: 0x0004f229 Dispositivo Boot Start End Blocos Id System
/dev/sda1   *           1          64      512000   83  Partição Linux 1 does not end on cylinder boundary.
/dev/sda2              64        5222    41430016   8e  Linux LVM

Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cilindros Unidades = cilindros de 16065 * 512 = 8225280 bytes Tamanho do setor (logical/physical): 512 bytes / 512 Tamanho de E/S de bytes (minimum/optimal): 512 bytes / 512 bytes Identificador de disco: 0x00000000

(...outras informações dos discos...)

Lembre-se que a ordem em que o disco se encontra no barramento (IDE no exemplo acima) influencia diretamente no caminho de dispositivo a ser utilizado no Linux. Como no meu exemplo eu substitui um disco existente no IDE Secundário Master, e há apenas um disco no IDE Primário, esse disco apareceu como sendo /dev/sdb.

Meu disco Primário possui duas partições (/dev/sda1 e /dev/sda2) sendo uma física e uma lógica (ver itens em ciano).
Decidi criar quatro partições no novo disco. Uma para o /boot de 256 MB, uma para o / com 10 GB, uma para o /var com 6 GB e uma de swap com os aproximadamente 4 GB restante. Não vou entrar em detalhes do porque dessa estrutura, mas vai dar uma ideia das possibilidades que se tem com essa clonagem.
Segue a lista de comandos que utilizei para criar o disco. Os comandos estão em amarelo.

[root@Address21 marcos.regis]# fdisk /dev/sdb

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-2610, default 1): 1
Last cilindro, +cilindros or +size{K,M,G} (1-2610, default 2610): +256M

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): 2
Primeiro cilindro (35-2610, default 35): <;Enter>;
Using default value 35
Last cilindro, +cilindros or +size{K,M,G} (35-2610, default 2610): +4G

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): 3
Primeiro cilindro (1341-2610, default 1341): <;Enter>;
Using default value 1341
Last cilindro, +cilindros or +size{K,M,G} (1341-2610, default 2610): +10G

Comando (m para ajuda): n
Comando - ação e estendida p partição primária (1-4)
p
Selected partition 4
Primeiro cilindro (2125-2610, default 2125): <;Enter>;
Using default value 2125
Last cilindro, +cilindros or +size{K,M,G} (2125-2610, default 2610): <;Enter>;
Using default value 2610

Comando (m para ajuda): a
Número da partição (1-4): 1

Digite w para gravar as alterações e sair. Digite fdisk -l para ver como ficou a estrutura.

[root@Address21 ~]# fdisk -l /dev/sdb Disco /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cilindros Unidades = cilindros de 16065 * 512 = 8225280 bytes Tamanho do setor (logical/physical): 512 bytes / 512 Tamanho de E/S de bytes (minimum/optimal): 512 bytes / 512 bytes Identificador de disco: 0x83da856d Dispositivo Boot Start End Blocks Id Sistema /dev/sdb1   *           1          34      273073+  83  Linux /dev/sdb2              35         557     4200997+  83  Linux /dev/sdb3             558        1863    10490445   83  Linux /dev/sdb4            1864        2610     6000277+  83  Linux

Formatando as partições.

Use o comando mkfs.ext4 para formatar as partições /dev/sdb1, /dev/sdb3 e /dev/sdb4 em ext4.

Depois use o comando mkswap /dev/sdb2 para formatar a partição reservada para o swap.

Clonando os dados.

O primeiro passo é montar como partições. Vou usar o diretório /mnt como raiz e criarei cada um dos 3 diretórios onde serão montados as três partições. Segue a lista de comandos

[root@Address21 ~]# mkdir /mnt/boot
[root@Address21 ~]# mkdir /mnt/var
[root@Address21 ~]# mkdir /mnt/raiz
[root@Address21 ~]# mount /dev/sdb1 /mnt/boot/ 
[root@Address21 ~]# mount /dev/sdb4 /mnt/var/ 
[root@Address21 ~]# mount /dev/sdb3 /mnt/raiz/

Agora é hora de clonar todo o sistema:

[root@Address21 ~]# rsync -avHX --exclude="/mnt" --exclude="/var" --exclude="/boot" / /mnt/raiz/

ATENÇÃO! Tenha cuidado com a recursividade. No exemplo acima, estou pedindo para não sincronizar o próprio /mnt evitando um loop infinito. Dei umount /database para que ele copie o diretório apenas e não seu conteúdo, pois o outro sistema precisará dele. No caso do /database será necessário criar este diretório dentro do /mnt com as mesmas permissões. Então, se houver unidades montadas em diretórios que continuarão nessas unidades, ou você as desmonta antes da sincronização ou adiciona uma exclusão e depois recria o diretório. A primeira opção é a mais indicada.

Clonando os outros itens restantes.

[root@Address21 ~]# rsync -avHX /boot/ /mnt/boot/
[root@Address21 ~]# rsync -avHX /var/ /mnt/var/

Depois de tudo devidamente sincronizado, é hora de configurar o boot loader e o fstab que é usado para montar as partições automaticamente. No meu caso estou usando o grub legacye então vou mostrar o que fazer para ele inicializar corretamente o disco.
Primeiro ajustaremos o fstab. Use o comando blkid para que sejam exibidos os UUIDs de suas novas partições.

[root@Address21 marcos.regis]# blkid /dev/sda1: UUID="6eb6217d-f881-47c9-89b7-6eb9f7507295" TYPE="ext4"
/dev/sda2: UUID="TM0qy8-z9HK-c7B5-xGSk-Q11N-oF7S-ysS2MT" TYPE="LVM2_member"
/dev/mapper/VolGroup-lv_root: UUID="097a9d08-afad-401d-af65-92a4c587a2e5" TYPE="ext4"
/dev/mapper/VolGroup-lv_swap: UUID="b7e866d5-831b-4ee8-b65d-be2589214a35" TYPE="swap"
/dev/sdc1: UUID="ca034463-5421-4e17-ade2-c7fe2c07a461" TYPE="ext4"
/dev/sdb1: UUID="3174f1da-cd36-4bd3-8311-9945a886060c" TYPE="ext4"
/dev/sdb2: UUID="85b39ded-49aa-4109-b238-02e573acebf5" TYPE="swap"
/dev/sdb3: UUID="f63a1b02-a3c3-4409-ad4e-38ee1f8de9f5" TYPE="ext4"
/dev/sdb4: UUID="947eb986-f639-41fe-a5eb-be4b373dc9ef" TYPE="ext4"

De posse das informações, edite o arquivo /mnt/raiz/etc/fstab para que fique aproximadamente como o abaixo.

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="ca034463-5421-4e17-ade2-c7fe2c07a461" /database ext4 defaults 0 0

UUID="3174f1da-cd36-4bd3-8311-9945a886060c" /boot   ext4    defaults  1 2
UUID="f63a1b02-a3c3-4409-ad4e-38ee1f8de9f5" /       ext4    defaults  1 1
UUID="947eb986-f639-41fe-a5eb-be4b373dc9ef" /var    ext4    defaults  1 1
UUID="85b39ded-49aa-4109-b238-02e573acebf5" swap    swap    defaults  0 0

Agora temos que editar as configurações do grub para que ele saiba onde que está a imagem do kernel.
Esta foi a parte mais complexa pois mesmo usando o dd para copiar o bootloader, eu não obtive sucesso. O que funcionou para mim foi desmontar /mnt/boot e o /mnt/var e com chroot mudar o raiz do sistema para o /mnt/raiz/, remontando o /boot na raiz. Segue os comandos utilizados:

[root@Address21 ~]# umount /mnt/boot
[root@Address21 ~]# umount /mnt/var
[root@Address21 ~]# chroot /mnt/raiz
[root@Address21 ~]# umount /boot 

O último comando acima pode dar um erro informando que o /boot não está montado. Apenas ignore e verifique, com o comando mount se não há nenhum /boot montado.

# mkdir /boot

# mount/dev/sdb1 /boot
-- (Coordenação o Grub para instalar o bootloader) --

# larva
Dispositivos de sondagem para adivinhar unidades BIOS. Isto pode levar um longo tempo.

Versão GNU GRUB 0.97 (640K inferior / 3072K de memória superior)

[ Edição de linha de BASH-como mínima é suportado. Para a primeira palavra, GUIA
lista possíveis conclusões de comando. Em qualquer outro lugar TAB lista o possível
conclusão de um nome de dispositivo/arquivo.]
grub> encontrar /grub/grub.conf
encontrar /grub/grub.conf
(hd0,0)
(HD1, 0)
o grub > raiz (HD1, 0)
root (HD1, 0)
É de tipo de sistema de arquivos ext2fs, 0x83 tipo de partição
instalação > grub (HD1)
instalação (HD1)
Verificando se "/boot/grub/stage1" existe.... no
Verificando se "/grub/stage1" existe.... Sim
Verificando se "/grub/stage2" existe.... Sim
Verificando se "/grub/e2fs_stage1_5" existe.... Sim
Em execução "embed /grub/e2fs_stage1_5 (HD1)"... 27 sectors are embedded.
Conseguiu
Em execução "install /grub/stage1 (HD1) (HD1)1+27 p (HD1, 0)/grub/stage2 /grub/grub.conf"... Conseguiu
Terminado.
grub> sair
renunciar

Depois, desmontamos o /boot e saímos do chroot.

# umount /boot

# saída]
saída

Agora é hora de remontar o /boot para editar o grub.conf

Com um editor abra o arquivo /mnt/boot/grub/grub.conf e substitua o valor de root para o UUID de sua partição /.
No meu caso, a parte a ser modificada está assim

title CentOS (2.6.32-431.29.2.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-431.29.2.el6.x86_64 ro raiz = / dev/mapeador/VolGroup-lv_root rd_NO_LUKS LANG=pt_BR. UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-431.29.2.el6.x86_64.img

e ficará assim

title CentOS (2.6.32-431.29.2.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-431.29.2.el6.x86_64 ro root = UUID = f63a1b02-a3c3-4409-ad4e-38ee1f8de9f5 rd_NO_LUKS LANG=pt_BR. UTF-8 rd_NO_MD rd_NO_LVM SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rhgb quiet         initrd /initramfs-2.6.32-431.29.2.el6.x86_64.img

Salve as edições. Desmonte os pontos /mnt/boot e /mnt/var, remova tudo que estiver dentro dos diretórios /mnt/raiz/var e /mnt/raiz/boot, desligue o sistema, modifique o disco Primário de sua Máquina Virtual e inicie novamente para ver se tudo funcionou.

Até a próxima.

 ;

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

Este site utiliza o Akismet para reduzir spam. Fica a saber como são processados os dados dos comentários.