meta données pour cette page
Créer un RAID logiciel
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.
RAID 1
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.
Cas spéciaux
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
RAID 5
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
Changer un disque défectueux
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
Changer deux disques défectueux
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.
Reconnaitre les disques défectueux
La commande suivante va permettre de connaitre :
- l'“Array UUID” qui est l'identifiant reliant le dique à la grappe raide
- l'“Events” qui permet de savoir combien de retard il a par rapport aux autres
- l'“Update Time” qui indique le dernier moment où le disque a été actif
- l'“Layout” qui indique comment sont positionné les bits de parités
- l'“Raid Devices” qui correspond à sa position dans la grappe
- l'“Raid Level” qui info le type de RAID
- l'“Array State” qui permet de connaitre la position du disque avant l'incident
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 :
- Serial Number pour le numéro de série qui doit etre affiché physiquement sur le disque
- Model Number qui permet de commander un disque aux caractéristiques similères sur les internets
Rassembler la grappe
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.
D'autres commandes
- Supprimer un disque physiquement absent
mdadm /dev/md0 -r detached
- Éradiquer un raid
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
- Scanner / réactiver le RAID
mdadm --examine --scan
- benchmark
hdparm -tT /dev/mdX
- Migrer des données d'un RAID à un autre :
mdadm -A /dev/md1 --update=super-minor -m0 /dev/sdf1 /dev/sdg1
- Stopper la syncrhonisation directement dans l'environnement kernel :
echo "frozen" > /sys/block/mdX/md/sync_action
- Définir la vitesse de synchronisation des disques (200 000 par défaut) :
echo 0 > /proc/sys/dev/raid/speed_limit_max
- Détruire un raid
mdadm --stop /dev/md1 mdadm --remove /dev/md1 mdadm --zero-superblock /dev/sdf1 /dev/sde1