web-dev-qa-db-fra.com

Comment vérifier les RAID «mdadm» pendant l'exécution?

Je commence à avoir une collection d'ordinateurs à la maison et pour les prendre en charge, j'ai ma boîte Linux "serveur" exécutant une matrice RAID.

C'est actuellement mdadmRAID-1, aller à RAID-5 une fois que j'ai plus de lecteurs (puis RAID-6 J'espère). Cependant, j'ai entendu diverses histoires à propos de la corruption de données sur un lecteur et vous ne vous en rendez jamais compte en raison de l'utilisation de l'autre lecteur, jusqu'au moment où le premier lecteur tombe en panne, et vous trouvez que votre deuxième lecteur est également vissé (et 3ème, 4ème , 5e lecteur).

Évidemment, les sauvegardes sont importantes et je m'en occupe également, mais je sais que j'ai déjà vu des scripts qui prétendent aider contre ce problème et vous permettent de vérifier votre RAID pendant son fonctionnement. Cependant, en cherchant à nouveau ces scripts maintenant, j'ai du mal à trouver quoi que ce soit qui ressemble à ce que j'ai exécuté auparavant et je sens que je suis obsolète et que je ne comprends pas ce qui a changé.

Comment vérifieriez-vous un RAID en cours d'exécution pour vous assurer que tous les disques fonctionnent toujours normalement?

Je surveille SMART sur tous les lecteurs et j'ai également mdadm configuré pour m'envoyer un e-mail en cas de panne, mais j'aimerais que mes lecteurs se "vérifient" eux-mêmes de temps en temps.

43

Le point du RAID avec redondance est qu'il continuera aussi longtemps qu'il le pourra, mais il détectera évidemment les erreurs qui le mettent en mode dégradé, comme un disque défaillant. Vous pouvez afficher l'état actuel d'un tableau avec mdadm -D:

# mdadm -D /dev/md0
<snip>
       0       8        5        0      active sync   /dev/sda5
       1       8       23        1      active sync   /dev/sdb7

En outre, le statut de retour de mdadm -D est différent de zéro en cas de problème tel qu'un composant défaillant (1 indique une erreur que le mode RAID compense et 2 indique une panne complète).

Vous pouvez également obtenir un résumé rapide de tous les états des périphériques RAID en consultant /proc/mdstat. Vous pouvez obtenir des informations sur un périphérique RAID dans /sys/class/block/md*/md/* ainsi que; voir Documentation/md.txt dans la documentation du noyau. Certains /sys les entrées sont également accessibles en écriture; par exemple, vous pouvez déclencher une vérification complète de md0 avec echo check >/sys/class/block/md0/md/sync_action.

En plus de ces vérifications ponctuelles, mdadm peut vous avertir dès qu'un problème survient. Assurez-vous que vous disposez de MAILADDR root dans /etc/mdadm.conf (certaines distributions (par exemple Debian) le configurent automatiquement). Ensuite, vous recevrez une notification par e-mail dès qu'une erreur (un tableau dégradé) se produit .

Assurez-vous de recevoir le courrier envoyé à la racine sur la machine locale (certaines distributions modernes omettent cela, car elles considèrent que tout le courrier électronique passe par des fournisseurs externes - mais la réception du courrier local est nécessaire pour tout administrateur système sérieux). Testez cela en envoyant un e-mail à root: echo hello | mail -s test root@localhost. Habituellement, une configuration de messagerie appropriée nécessite deux choses:

  • Exécutez un MTA sur votre machine locale. Le MTA doit être configuré au moins pour permettre la distribution du courrier local. Toutes les distributions sont livrées avec des MTA appropriés, choisissez n'importe quoi (mais pas nullmailer si vous voulez que l'e-mail soit livré localement).
  • Redirigez le courrier allant vers les comptes système (au moins root) vers une adresse que vous lisez régulièrement. Il peut s'agir de votre compte sur la machine locale ou d'une adresse e-mail externe. Avec la plupart des MTA, l'adresse peut être configurée dans /etc/aliases; vous devriez avoir une ligne comme

    root: djsmiley2k
    

    pour une livraison locale, ou

    root: [email protected]
    

    pour la livraison à distance. Si vous choisissez la livraison à distance, assurez-vous que votre MTA est configuré pour cela. Selon votre MTA, vous devrez peut-être exécuter la commande newaliases après avoir modifié /etc/aliases.

Vous pouvez forcer une vérification de l'ensemble de la baie lorsqu'elle est en ligne. Par exemple, pour vérifier le tableau sur /dev/md0, exécutez en tant que root:

echo check > /sys/block/md0/md/sync_action

J'ai également un travail cron qui exécute la commande suivante une fois par mois:

tar c /dir/of/raid/filesystem > /dev/null

Ce n'est pas une vérification approfondie du lecteur lui-même, mais cela oblige le système à vérifier périodiquement que (presque) chaque fichier peut être lu avec succès sur le disque. Oui, certains fichiers vont être lus dans le cache mémoire au lieu du disque. Mais je pense que si le fichier est dans le cache mémoire, il a été lu avec succès récemment sur le disque, ou est sur le point d'être écrit sur le disque, et l'une de ces opérations découvrira également des erreurs de lecteur. Quoi qu'il en soit, l'exécution de ce travail teste le critère le plus important d'une matrice RAID ("Puis-je lire mes données avec succès?") Et depuis trois ans que j'exécute ma matrice, la seule fois où un disque a mal tourné, c'était cette commande qui l'a découverte.

Un petit avertissement est que si votre système de fichiers est gros, alors cette commande va prendre beaucoup de temps; mon système prend environ 6 heures/TiB. Je l'exécute en utilisant ionice afin que le reste du système ne s'arrête pas lors de la vérification du lecteur:

ionice -c3 tar c /dir/of/raid/filesystem > /dev/null
20
stharward

le paquet Debian et Ubuntu 'mdadm' contient le fichier

/etc/cron.d/mdadm

qui à son tour le premier dimanche de chaque mois exécutera la commande

/usr/share/mdadm/checkarray --cron --all --idle --quiet

qui vérifiera la cohérence de tous vos tableaux (sauf si vous définissez AUTOCHECK sur false dans / etc/default/mdadm). Un rapport sera envoyé à l'utilisateur "root" (assurez-vous de recevoir ces e-mails).

11
am70

J'utilise cette fonction simple pour vérifier /proc/mdstat:

#Health of RAID array
raid() { awk '/^md/ {printf "%s: ", $1}; /blocks/ {print $NF}'  /proc/mdstat; }
8
jasonwryan