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

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
  • Dernière modification: 2017/09/20 21:41