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
cat /proc/
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