Un ajout d’un disque dur durant un grow mdadm

Un grow mdadm est nécessaire qu’à deux moment. Le premier, vous faite un grow pour remplacer les disques durs existant par ceux de plus grande capacité. Le deuxième, lorsque vous ajouter un nouveau disque dur pour passer de 8To à 10To par exemple et que vous disposer d’un slot libre, chanceux 😉

Mais, l’opération sur le RAID à du être arrêtée par une coupure de courant… Si vous n’êtes pas équipé d’un UPS… Faite le! Mais pour cette fois, voici l’opération :

Voici donc l’état du RAID après redémarrage de la machine :

root@omv:~# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active (auto-read-only) raid5 sdb[0] sdg[5] sdf[4] sde[3] sdd[2] sdc[1]
41908224 blocks super 1.2 level 5, 512k chunk, algorithm 2 [6/6] [UUUUUU]

unused devices: <none>

Pour reprendre le RAID à son état d’augmentation (reshape), voici la commande utilisée :

root@omv:~# mdadm --readwrite /dev/md0
root@omv:~# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb[0] sdg[5] sdf[4] sde[3] sdd[2] sdc[1]
41908224 blocks super 1.2 level 5, 512k chunk, algorithm 2 [6/6] [UUUUUU]
[========>............]  reshape = 40.1% (4207616/10477056) finish=2.2min speed=45568K/sec

Voilà vous êtes sauvé, mais pensez à 3 choses à l’avenir :

  • l’utilisation d’un fichier de sauvegarde de l’état du grow mdadm en lisant la suite de l’article
  • Équipez vous d’un UPS!
  • Mais surtout pensez à sauvegarder vos données essentielles ailleurs! Un RAID n’est en rien une garantie de protection des données! Il permet une tolérance au panne disque, un gain de bande passante, rien de plus.

Source : unix.stackexchange.com

Éviter la perte de données lors d’un grow mdadm

Le reshape lors d’un crash prend du temps et peu ne pas aboutir!

Tout d’abord il faut vérifier l’état de votre RAID mdadm avant de faire un grow! S’il y a un secteur défectueux cela va foirer à tous les coups…

Voici comment vérifier et lancer un check manuel du RAID :

root@omv:~# cat /sys/block/md0/md/sync_action
idle
root@omv:~# echo check > /sys/block/md0/md/sync_action 
root@omv:~# cat /sys/block/md0/md/sync_action
check

Vous pouvez voir l’état d’avancement du check via mdstat :

root@omv:~# cat /proc/mdstat 
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdb[6] sdg[5] sdf[4] sde[3] sdd[2] sdc[1]
      52385280 blocks super 1.2 level 5, 512k chunk, algorithm 2 [6/6] [UUUUUU]
      [>....................]  check =  1.0% (108552/10477056) finish=7.9min speed=21710K/sec
      
unused devices: <none>

Une fois que c’est vérifié, pour éviter des problèmes lors d’un grow mdadm, le mieux est d’utiliser l’option de fichier de backup :

mdadm --grow --raid-devices=4 --backup-file=/root/grow_md1.bak /dev/md1

Cette option permet de reprendre un grow raid plus surement en cas d’arrêt de la machine.

Source : raid.wiki.kernel.org

Réduire le temps de synchronisation d’un RAID mdadm

Pour réduire le temps de synchronisation d’un RAID5 ou RAID6 mdadm lors d’un resync ou d’un grow, vous pouvez aller vérifier et modifier certains paramètres :

Vitesse min et max de la synchronisation mdadm

# sysctl dev.raid.speed_limit_min
# sysctl dev.raid.speed_limit_max

C’est une valeur en Kio :

  • le minimum peut être 50000 pour 50Mo/s
  • Le maximum peut être mise à 500000 pour 500Mo/s si votre raid n’est pas utilisé actuellement

Vous gagnez un peu en performance avec ces options :

Façon old school :

echo 50000 > /proc/sys/dev/raid/speed_limit_min
echo 500000 > /proc/sys/dev/raid/speed_limit_max

En utilisant sysctl :

sysctl -w dev.raid.speed_limit_min=50000
sysctl -w dev.raid.speed_limit_max=500000

Vous n’avez qu’à ajouter ces paramètres via le fichier /etc/sysctl.conf pour fixer au redémarrage de la machine.

Augmenter la taille de bloc

Cet option se fait pour chaque périphérique RAID mdadm, donc pour chaque mdX. Il s’agit du paramètre « readahead » qui est défini en bloc de 512 octets :

Pour un bloc de 32Mio :

blockdev --setra 65536 /dev/md0

Augmenter le cache

Pour moi, c’est option qui donne le meilleur résultat : l’optimisation de la taille du cache des tripes mdadm. L’option n’est donc valable que pour les RAID5 et RAID6.

La formule pour la taille est de la forme suivante :

memory_consumed = system_page_size * nr_disks * stripe_cache_size

Un nombre intéressant est 16Mio, si vous ne voulez pas aller plus loin. Voici pour md0 :

# echo 16384 > /sys/block/md0/md/stripe_cache_size

Vous réduirez déjà par 2 le temps de synchronisation comme dans mon cas :

root@omv:~# cat /proc/mdstat 
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdb[6] sdg[5] sdf[4] sde[3] sdd[2] sdc[1]
      52385280 blocks super 1.2 level 5, 512k chunk, algorithm 2 [6/5] [_UUUUU]
      [======>..............]  recovery = 32.7% (3427852/10477056) finish=9.9min speed=11788K/sec
      
unused devices: <none>
root@omv:~# echo 16384 > /sys/block/md0/md/stripe_cache_size
root@omv:~# cat /proc/mdstat 
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdb[6] sdg[5] sdf[4] sde[3] sdd[2] sdc[1]
      52385280 blocks super 1.2 level 5, 512k chunk, algorithm 2 [6/5] [_UUUUU]
      [========>............]  recovery = 40.5% (4244444/10477056) finish=4.0min speed=25918K/sec

Source : cyberciti.biz

Avec tout ça, vous êtes sur la bonne voie!