Le Redundant Array of Independent Disks est une technique pour répartir les données sur plusieurs disques dans le but d'optimiser les taux de réponses et/ou d'assurer de la redondance.
On part du principe que nous avons deux disques qui ont chacun une partition de taille strictement identique (sdb1 et sdd1) dont-elles seront utilisées pour le RAID de type miroir. Techniquement, les données seront réparties sur les deux partitions. Ce qui a pour effet d'améliorer le temps de lecture au détriment d'une écriture un peu plus lente que la normale.
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdd1
Une fois la “nape” md0 a été créée, il reste plus qu'a la formater avec le système de fichier que l'on veut et la monter dans notre système :
mkfs.ext4 /dev/md0 mount /dev/md0 /mnt
Pour que ce montage soit toujours présent après un reboot :
mdadm --detail --scan >> /etc/mdadm/mdadm.conf echo "/dev/md0 /mnt/ ext4 noatime,rw 0 0" >> /etc/fstab
La mise en place des autres RAID (0,5,6 et 10), le procédé est pratiquement le même.
Admettons que nous souhaitons ajouter encore 1 disque, soit un total de 3 disques dans le raid 1. On devra faire dans ce cas :
mdadm /dev/md0 --add /dev/sdc1
Puis agrandir la grappe :
mdadm --grow /dev/md0 --raid-devices=3
Admettons que nous ayons besoin d'une grande quantité de stockage avec la possibilités d'avoir un disque de rechange en cas de panne d'un des disques. En d'autres termes, nous avons besoin de 4 disques dont 3 qui seront en fonction et 1 en arrêt le temps qu'un des disques actifs tombe en panne.
On devra donc lancer cette commande :
mdadm --create /dev/md5 --level=5 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 --spare-devices=1 /dev/sdf1
Admettons que nous avons le disque /dev/sdb1 qui tombe en panne. On peut le changer de cette manière :
mdadm --manage /dev/md5 --set-faulty /dev/sdb1 mdadm --manage /dev/md5 --remove /dev/sdb1 mdadm --manage /dev/md5 --add /dev/sdb1
Reprenons l'exemple avec le RAID 1 car j'ai eu un cas réel lorsque j'ai exécuté la commande suivante :
mdadm --detail /dev/md0
On obtient ce genre de message :
On peut s'apercevoir que la partition sdd1 est hors fonctionnement vu qu'elle est en état “removed”. Faire les procédures suivantes pour le remplacer par un nouveau :
mdadm /dev/md0 --fail /dev/sdd1 mdadm /dev/md0 --remove /dev/sdd1
Arrêt de la machine pour changer physiquement le disque :
poweroff
Après le redémarrage de la machine on copie les partitions d'un disque déjà présent dans le raid :
sfdisk -d /dev/sdb | sfdisk /dev/sdd
On joint la nouvelle partition au raid :
mdadm /dev/md0 --add /dev/sdd1
Il est possible de voir l'avancement de la synchronisation avec cette commande :
watch "cat /proc/mdstat"
Si rien ne se passe d'ici quelques petites minutes, c'est qu'il faut lancer manuellement la synchronisation :
mdadm --action=repair /dev/md0
Ou au pire :
mdadm --grow --raid-devices=2 /dev/md0
Admettons que l'on est dans la situation d'avoir 3 disque dont un disque est valide avec un qui a lâché depuis plus d'une semaine et le dernier quelques heures avant le remplacement des disques. L'idéal, est de cloner physiquement ces disques pour réduire le taux de corruptions de données.
La commande suivante va permettre de connaitre :
mdadm --eamine /dev/sd*1
On peut ainsi voir quel est le disque qui s'est arrêté en premier et ainsi dessuite.
Grâce au positionnement des disques au boot (sda, sdb, sdc), la commande suivante permet de connaitre les disques défaillants :
hdparm -I /dev/sd*1
Ces infos sont importantes :
Executer cette commande suite au remplacement des disques :
mdadm --assemble --force --freeze-reshape --verbose /dev/md5 /dev/sdb1 /dev/sdc1 /dev/sdd1
Il se peut que mdadm expulse le disque marqué comme défaillant et théoriquement, la grappe est accéssible via un point de montage pour récupérer les données. L'option `–freeze-reshape` permet d'indiquer que l'on veut seulement rassembler les block sans reconstruire ce qui manque.
On pourra ensuite rajouter le disque défaillant ainsi :
mdadm /dev/md5 --add /dev/sdd1
La reconstruction devrait être reprise imédiatement et durer plusieurs heures.
mdadm /dev/md0 -r detached
D'abord nous le démontons :
umount /raid1
Puis nous l'arrêtons :
mdadm --stop /dev/md0
Pour au final supprimer les métas-données présent sur les disques qui été rattacher au raid :
mdadm --zero-superblock /dev/sdb mdadm --zero-superblock /dev/sdd
mdadm --examine --scan
hdparm -tT /dev/mdX
mdadm -A /dev/md1 --update=super-minor -m0 /dev/sdf1 /dev/sdg1
echo "frozen" > /sys/block/mdX/md/sync_action
echo 0 > /proc/sys/dev/raid/speed_limit_max
mdadm --stop /dev/md1 mdadm --remove /dev/md1 mdadm --zero-superblock /dev/sdf1 /dev/sde1