Converter o disco de sistema em RAID 1

Numa das máquinas, talvez a mais antiga, o disco de sistema (boot) não está em RAID. É a única onde isso acontece, e vou tentar convertê-lo hoje para RAID 1.

Li vários artigos na net@ – principalmente este – para ver se havia uma forma expedita de fazer isto, mas parece que tem mesmo que ser feito “à unha”. A solução que vou descrever abaixo é muito próxima da que imaginei a priori.

Arranjar um disco de tamanho igual ao do disco de boot.
Criar partições iguais.

No meu caso, o disco de boot tinha as partições seguintes:

Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 4196351 4194304 2G 82 Linux swap
/dev/sda2 4196352 8390655 4194304 2G 82 Linux swap
/dev/sda3 8390656 488397167 480006512 228.9G 83 Linux

Com o fdisk, criei também duas partições de SWAP com 2GB cada e uma de Linux RAID, no disco novo:

Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 4196351 4194304 2G 82 Linux swap
/dev/sdb2 4196352 8390655 4194304 2G 82 Linux swap
/dev/sdb3 8390656 488397167 480006512 228.9G fd Linux raid autodetect

Adicionei as partições de SWAP ao fstab:

/dev/sdb1 swap swap defaults 0 0
/dev/sdb2 swap swap defaults 0 0

Para copiar a partição sda3 para a sdb3, desliguei a máquina, e arranquei com o DVD de instalação de uma versão recente do Slackware.

Depois, criei o array do RAID. De notar o atributo missing que indica que há um disco em falta, que irá ser adicionado mais tarde:

mdadm --create --metadata=0.90 /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb3

O parâmetro --metadata=0.90 é necessário porque este volume vai ser um volume de arranque e o lilo precisa disso.

Para confirmar se o RAID foi bem criado, corri o comando cat /proc/mdstat

Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath]
md0 : active raid1 sdb3[1]
239871104 blocks super 1.2 [2/1] [_U]
bitmap: 0/2 pages [0KB], 65536KB chunk

Depois formatei o RAID:

mkfs.ext4 /dev/md0

E copiei os ficheiros

mount /dev/sda3 /mnt/d1
mount /dev/md0 /mnt/d2
cp -rp /mnt/d1/* /mnt/d2

Nota: experimentei várias outras formas de copiar os ficheiros, mas esta foi a única que funcionou. Tentei copiar a partição inteira (com dd), tentei também usar o rsync, mas não estava instalado no sistema base de instalação do Slackware.

Como a cópia pode demorar muito tempo, pode verificar-se o andamento da cópia, noutra janela de consola (CTRL+ALT+F2), onde é o process ID do comando cp:

cat /proc//io

No meu caso, para 176GB, demorou 1h26m.

Depois da cópia feita, é necessário preparar o RAID para o arranque.

cp /mnt/d2/etc/mdadm.conf /mnt/d2/etc/mdadm.conf.ori
echo 'DEVICES /dev/sd[abcdefgh]3' > /mnt/d2/etc/mdadm.conf
mdadm --detail --scan >> /mnt/d2/etc/mdadm.conf

No lilo.conf, tenho que colocar, no início:

boot = /dev/md0
raid-extra-boot="/dev/sda,/dev/sdb"

e, mais abaixo:

root = /dev/md0

Para isso:

vi /mnt/d2/etc/lilo.conf

Como o ficheiro /proc/partitions não existe no disco do RAID, porque só existe no disco do sistema ativo, mas como preciso dele para correr o lilo, faço o seguinte:

cp /proc/partitions /mnt/d2/proc

Depois, corri o lilo, com a opção -H, porque um dos discos do RAID não está ainda ativo.

chroot /mnt/d2
lilo -H
exit

No ficheiro /mnt/d2/etc/fstab corrigi o caminho para o boot:

/dev/md0 / ext4 defaults 1 1

Desliguei a máquina. Retirei o DVD. No arranque, pedi para arrancar com o disco novo, aquele onde está o RAID.

Confirmei que o sistema tinha arrancado com o disco novo, com o comando cat /proc/mdstat.

Com o comando fdisk /dev/sda transformei a partição /dev/sda3 em Linux RAID.
Depois, adicionei o disco /dev/sda3 ao RAID.

mdadm --manage /dev/md0 --add /dev/sda3

E depois executei o comnando cat /proc/mdstat para verificar o estado do RAID.

Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath]
md0 : active raid1 sda3[2] sdb3[1]
240003136 blocks [2/1] [_U]
[>....................] recovery = 0.3% (810240/240003136) finish=68.8min speed=57874K/sec

Deixe uma resposta

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