Si assume che il disco da sostituituire sia /dev/sda mentre il disco buono sia /dev/sdb.
Innanzi tutto, se non ancora stato fatto, è necessario marcare come fallito e poi rimuovere il disco /dev/sda/ dall'array RAID.
# mdadm --manage /dev/md0 --fail /dev/sda1
# mdadm --manage /dev/md1 --fail /dev/sda2
# mdadm --manage /dev/md2 --fail /dev/sda3
# mdadm --manage /dev/md0 --remove /dev/sda1
# mdadm --manage /dev/md1 --remove /dev/sda2
# mdadm --manage /dev/md2 --remove /dev/sda3
A questo punto è possibile procedere con la sostituzione del disco.
Ora, occorre copiare la tabella delle partizioni da /dev/sdb su /dev/sda. Se il disco è in MBR è possibile usare il comando sfdisk
:
# sfdisk -d /dev/sdb | sfdisk /dev/sda
Mentre se il disco è in GPT occorrerà utilizzare il comando sgdisk
(attenzione: notare che il primo disco da specificare è quello del parametro -R
ovvero quello di destinazione):
# sgdisk -R /dev/sda /dev/sdb
# sgdisk -G /dev/sda
Successivamente occorre aggiungere all'array le partizioni di /dev/sda:
# mdadm /dev/md0 -a /dev/sda1
# mdadm /dev/md1 -a /dev/sda2
# mdadm /dev/md2 -a /dev/sda3
Verificare che le partizioni siano stati montate con successo:
# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sdb3[1] sda3[0]
1028096 blocks [2/2] [UU]
[==========>..........] resync = 50.0% (514048/1028096) finish=97.3min speed=65787K/sec
md1 : active raid1 sdb2[1] sda2[0]
2104448 blocks [2/2] [UU]
md0 : active raid1 sdb1[1] sda1[0]
208768 blocks [2/2] [UU]
unused devices: <none>
A volte il sistema con il nuovo disco sostituito non parte per mancanza del boot loader. In questo caso le operazioni saranno fatte da una versione live di Linux avviata per emergenza. Per installare il boot loader sul nuovo disco e far ripartire la macchina, occorre montare da qualche parte (ad esempio in /mnt) tutto il filesystem /
(che solitamente è /dev/md2). Inoltre, occorre montare /dev/md1 in /boot del filesystem montato ed infine lanciare il grub-install su /dev/sda dopo il chroot. Quindi:
# mount /dev/md2 /mnt
# mount /dev/md1 /mnt/boot
# mount --bind /dev/ /mnt/dev/
# mount -t proc none /mnt/proc
# chroot /mnt /bin/bash
# grub-install /dev/sda
Infine CTRL+D per uscire da chroot e poi reboot.
A volte capita che la devicemap su cui si basa il grub-install non sia valida o aggiornata. In questo caso il grub-install fallisce dicendo che non è presente un filesystem valido su /dev/md1. Per risolvere basta ricostruire la devicemap.
mv /boot/grub/device.map /boot/grub/device.map.old
grub-mkdevicemap
In questo modo il grub-install dovrebbe riuscire.