Votre serveur fonctionne très bien, votre Raid1 synchronise correctement vos disques, impeccable.
Puis un matin ... c'est la cata la cata ... vous recevez un mail :
"""""
A Fail event had been detected on md device /dev/md3.
It could be related to component device /dev/sda3.
Faithfully yours, etc.
"""""
Un ptit
# cat /proc/mdstat :
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath] [faulty]
md1 : active raid1 sda1[0] sdb1[1]
20480896 blocks [2/2] [UU]
md3 : active raid1 sda3[2](F) sdb3[1]
709993792 blocks [2/1] [_U]
hum hum sda3 failed !!! pas cool sachant que mon partitionnement est comme ceci :
/dev/md1 /
/dev/md3 /var
c'est un serveur hébergeant un site web donc toutes les données sont dans /var/lib/mysql et /var/www.
Danger !!! Deux méthodes :
- la fuite dans un pays qui ne pratique pas l'extradition des admins
- changer le disque défectueux
Attaquons la solution 2 alors ...
Préparer le démontage du disque défectueux
Enlever toutes les partitions du Raid
La partition /dev/sda3 à déjà été enlevé par mdadm du raid. Il faut en faire de même pour la partition /dev/sda1 :
On la marque comme était en erreur :
# mdadm --manage /dev/md0 --fail /dev/sda1
mdadm: set /dev/sda1 faulty in /dev/md0
On la supprime du raid :
# mdadm --manage /dev/md1 --remove /dev/sda3
mdadm: hot removed /dev/sda1 from /dev/md0
On vérifie :
# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb3[1]
5453952 blocks [2/1] [_U]
md0 : active raid1 sdb1[1]
1951744 blocks [2/1] [_U]
unused devices: <none>
Le disque est donc maintenant complètement exclu du Raid.
Installer grub sur le disque
Grub est installé sur le premier disque, il faut donc réinstaller et reconfigurer grub sur ce nouveau disque.
# grub-install /dev/sdb
Installation finished. No error reported.
# export LANG=C
# update-grub2 /dev/sdb
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.32-5-amd64
Found initrd image: /boot/initrd.img-2.6.32-5-amd64
done
On peut maintenant en toute sérénité (vous avez vérifié vos backups ?) arrêter la machine, débrancher le disque défectueux, en installer un nouveau et dire au BIOS de démarrer sur le second disque.
Si tout se passe bien on doit se retrouver sur le prompt et les services ont redémarré. Merci le Raid.
Reconstruction du Raid
Le nouveau disque doit être tout vierge et de préférence de taille équivalente au premier.
Reconstruction de la table de partition
On va utiliser sfdisk pour dumper la partition du disque actuel vers le nouveau :
Dumper la table de partitions (dans le cas ici j'ai placé l'ancien disque à la place du premier c'est pour cela qu'il est renommé /dev/sda) :
# sfdisk -d /dev/sda > sda_file
La restaurer sur le nouveau disque :
# sfdisk /dev/sdb < sda_file
Checking that no-one is using this disk right now ...
OK
Disk /dev/sdb: 1044 cylinders, 255 heads, 63 sectors/track
sfdisk: ERROR: sector 0 does not have an msdos signature
/dev/sdb: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = sectors of 512 bytes, counting from 0
Device Boot Start End #sectors Id System
/dev/sdb1 63 3903794 3903732 fd Linux raid autodetect
/dev/sdb2 3903795 5863724 1959930 82 Linux swap / Solaris
/dev/sdb3 5863725 16771859 10908135 fd Linux raid autodetect
/dev/sdb4 0 - 0 0 Empty
Warning: no primary partition is marked bootable (active)
This does not matter for LILO, but the DOS MBR will not boot this disk.
Successfully wrote the new partition table
Re-reading the partition table ...
If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
Relire la table de partitions :
# apt-get install parted
# partprobe
Recréer le Raid
Dernière étape remettre en place notre Raid 1 :
# mdadm --manage /dev/md0 --add /dev/sdb1
mdadm: added /dev/sdb1
# mdadm --manage /dev/md1 --add /dev/sdb3
mdadm: added /dev/sdb3
On vérifie la reconstruction :
# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb3[2] sda3[1]
5453952 blocks [2/1] [_U]
resync=DELAYED
md0 : active raid1 sdb1[2] sda1[1]
1951744 blocks [2/1] [_U]
[=======>.............] recovery = 37.5% (733888/1951744) finish=0.8min speed=24462K/sec
unused devices: <none>
Sauvé ! Si tout se passe bien le temps d'interruption est minime, le serveur sera peut-être un peu plus lent le temps de la synchronisation des disques.