segunda-feira, 27 de julho de 2009

Procedimento para criar RAID 1 em uma máquina já instalada

Imaginamos a seguinte situação em que temos uma máquina com Linux instalado em um único HD, e será necessário adicionar mais um HD para que seja feito o RAID1 sem perder os dados.

Essa máquina está instalada da seguinte forma:

Device Montada em tipo Tamanho
/dev/sda1 /boot ext3 256M
/dev/sda2 LVM Full (Resto do disco)

Com Volume Group chamado rn_vg, com os seguintes Logical Volume LV:

Logical Volume Mondado em Tipo Tamanho
CO_i386_root / ext3 3072M
swap0 none swap 2048M

O primeiro passo é adicionar o segundo HD, ficando por exemplo:

/dev/sdb

Após certificar que o HD está devidamente instalado devemos deixar as partições do mesmo tamanho, para isso pode utilizar o seguinte comando:

dd if=/dev/sda of=/dev/sdb bs=512 cont=1

Agora vamos deixar as partições do /dev/sdb, com o tipo Detecção automática de RAID Linux ou (atudodetect RAID), com fdisk.

fdisk /dev/sdb


Após deixar os discos com formato autodetect RAID, vamos criar um RAID1 com device missing o comando abaixo realiza essa tarefa

mdadm -C /dev/md0 -l1 -n2 /dev/sdb1 missing

mdadm -C /dev/md1 -l1 -n2 /dev/sdb2 missing

O device /dev/md0 vai conter o /boot então devemos formatar com formato etx3 como em:

mkfs.ext3 /dev/md0

O device /dev/md1 vai ser do tipo LVM para que seja possível importar o /dev/sda2 que é do tipo LVM, para isso faça:

pvcreate /dev/md1

Agora edite o arquivo /boot/grub/device.map para que o mesmo fique da seguinte forma:

(hd0) /dev/sda
(hd1) /dev/sdb

Esse foi a primeira parte, agora vamos exportar os dados que estão no nosso /dev/sda[1,2] para o nosso RAID /dev/md[0,1].

Primeiramente vamos exportar o /boot para tal precisamos montar o /dev/md0 no /mnt, por exemplo:
mount /dev/md0 /mnt

depois de montado vamos passar toda as informações do /boot para o /mnt, como o exemplo abaixo mostra:

rsync -aHv /boot/* /mnt/

Agora vamos mover os dados que estão Phisical Volume que está no /dev/sda2 para o nosso /dev/md1 para isso siga os passos:

vgextend rn_vg /dev/md1

Agora vamos mover todas as informações para o device /dev/md1 fazendo o seguinte:
desabilitando a memória swap, afinal temo um swap0 como Logical Volume então temos que desativar temporariamente.

swapoff -a

agora vamos mover as informações

pvmove /dev/sda2 /dev/md1

será exibido algo como:

/dev/sda2: Moved: 66.9%

aguarde finalizar o processo....

Remova o /dev/sda2 do rn_vg:

vgreduce rn_vg /dev/sda2

Pronto suas informações estão migradas, agora vamos criar um initrd com suporte a RAID1, como nessa etapa o RAID está ativo e funcionando vamos criar um novo initrd com os seguinte comando:

mkinitrd initrd-2.6.25.11-60.fc8.img 2.6.25.11-60.fc8

Rode novamente o comando rsync -aHv /boot/* /mnt/, para que seja atualizado os arquivos, como por exemplo o initrd que foi criado.

Edite o seu /etc/fstab, para que monte o /dev/md0 em /boot.

/dev/md0 /boot ext3 defaults 1 2

Desmonte o /boot e o /mnt, da seguinte forma:
umount /boot
umount /mnt

Adicione o /dev/sda1 ao /dev/md0 com o seguinte comando:

mdadm /dev/md0 -a /dev/sda1 # Partição onde está o /boot


Reinicie o micro após dar boot logado como root, deixe as partições do seu /dev/sda como Detecção automática de RAID Linux ou (atudodetect RAID).

E adicione no RAID1 com o seguinte comando:

mdadm /dev/md1 -a /dev/sda2 # Partição LVM, onde estão todos Logical Volumes.

Agora basta acompanhar a sincronização dos discos com o seguinte comando:

cat /prom/mdstat

Para saber como funcionada o RAID acesse:
http://pt.wikipedia.org/wiki/RAID

Para saber como funciona o LVM acesse:
http://www.devin.com.br/lvm/