Comment vérifier les RAID 'mdadm' en cours d'exécution?

41

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

Son actuellement mdadm RAID-1, aller à RAID-5une fois que j'ai plus de disques (et puis RAID-6j'espère). Cependant, j'ai entendu diverses histoires sur des données corrompues sur un disque et vous ne le remarquerez jamais car l'autre disque est utilisé, jusqu'à ce que le premier disque tombe en panne, et vous trouvez que votre deuxième disque est également vissé (et les troisième et quatrième , 5ème lecteur).

De toute évidence, les sauvegardes sont importantes et je m'occupe de cela aussi, cependant, je sais que j'ai déjà vu des scripts qui prétendent aider à résoudre ce problème et vous permettent de vérifier votre RAID pendant son exécution. Cependant, à la recherche de ces scripts maintenant, j'ai du mal à trouver quelque chose qui semble similaire à ce que j'avais auparavant et je me sens démodé et je ne comprends pas ce qui a changé.

Comment vérifier un RAID en cours d’exécution pour s’assurer que tous les disques continuent à se préparer normalement?

Je surveille SMART sur tous les lecteurs et je suis également mdadmconfiguré pour m'envoyer un e-mail en cas de panne, mais j'aimerais connaître mes lecteurs de temps en temps.

djsmiley2k - CoW
la source
On dirait que vous êtes déjà sur le bon chemin, il vous suffit de configurer un cron pour vous envoyer les résultats de smartctl pour vos lecteurs.
laebshade

Réponses:

56

L’intérêt du RAID avec la redondance est qu’il va continuer aussi longtemps que possible, mais il détectera évidemment les erreurs qui le placeraient en mode dégradé, tel qu’un disque défaillant. Vous pouvez afficher le statut 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

De plus, l'état de retour mdadm -Dest 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 un échec complet).

Vous pouvez également obtenir un résumé rapide de l'état de tous les périphériques RAID en consultant /proc/mdstat. Vous pouvez également obtenir des informations sur un périphérique RAID /sys/class/block/md*/md/*; voirDocumentation/md.txt dans la documentation du noyau. Certaines /sysentrées sont également inscriptibles; par exemple, vous pouvez déclencher une vérification complète de md0avec echo check >/sys/class/block/md0/md/sync_action.

En plus de ces vérifications ponctuelles, mdadm peut vous avertir dès que quelque chose de grave se produit. Assurez-vous que vous avezMAILADDR root dans /etc/mdadm.conf(certaines distributions (Debian par exemple) à passer automatiquement). Ensuite, vous recevrez une notification par e-mail dès qu'une erreur (un tableau dégradé) se produira .

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

  • Exécuter un MTA sur votre ordinateur local. Le MTA doit être configuré au minimum 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 le courrier soit livré localement).
  • Redirige le courrier destiné aux comptes système (au moins root) vers une adresse que vous lisez régulièrement. Cela peut être votre compte sur la machine locale ou une adresse électronique externe. Avec la plupart des MTA, l'adresse peut être configurée dans /etc/aliases; vous devriez avoir une ligne comme

    root: djsmiley2k
    

    pour livraison locale, ou

    root: [email protected]
    

    pour la livraison à distance. Si vous choisissez la remise à distance, assurez-vous que votre MTA est configuré pour cela. Selon votre MTA, vous devrez peut-être exécuter la newaliasescommande après l’édition /etc/aliases.

Gilles, arrête de faire le mal
la source
Pouvez-vous expliquer pourquoi nullmailer ne devrait pas être utilisé? Est-ce à cause des raisons mentionnées dans unix.stackexchange.com/questions/1449/… ? Quel MTA recommanderiez-vous?
Cameron Martin
@CameronMartin Nullmailer transfère uniquement le courrier vers un ordinateur distant, il ne fait pas la distribution locale. Vous pouvez l'utiliser si vous avez un serveur SMTP quelque part qui accepte le courrier de votre ordinateur, mais pas si vous le distribuez localement. J'ai modifié ma réponse pour clarifier.
Gilles, arrête de faire le mal
19

Vous pouvez forcer une vérification de l'ensemble du tableau lorsqu'il est en ligne. Par exemple, pour vérifier le tableau /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) tous les fichiers peuvent être lus avec succès sur le disque. Oui, certains fichiers vont être lus dans la mémoire cache à la place du disque. Mais je suppose que si le fichier est dans la mémoire cache, alors il a été lu avec succès sur le disque récemment ou est sur le point de l’être sur le disque, et l’une de ces opérations va également révéler des erreurs de lecteur. Quoi qu’il en soit, l’exécution de cette tâche teste le critère le plus important d’une matrice RAID («Puis-je lire mes données avec succès?») Et au cours des trois années d’exploitation de ma matrice, la cette commande qui l'a découvert.

Un petit avertissement est que si votre système de fichiers est gros, cette commande prendra beaucoup de temps; mon système prend environ 6 heures / TiB. Je l'exécute en utilisant ionicepour que le reste du système ne reste pas immobile pendant la vérification du lecteur:

ionice -c3 tar c /dir/of/raid/filesystem > /dev/null
stharward
la source
Notez que ionicecela ne fonctionnera que si vous utilisez le planificateur d'E / S CFQ (par défaut).
Totor
Cela peut donc sembler évident à la plupart des gens, mais ce n’est pas à moi - comment exécuter un script dont la sortie est redirigée vers devnull vous informe-t-il réellement de quelque chose? Est-il vrai que si "tar" rencontre des erreurs, celles-ci seront propagées jusqu'au démon mdadm qui (probablement) vous enverra un email?
ljwobker
Ma question est la suivante: comment relever les erreurs de tar si elles sont exécutées à partir d’une tâche cron? D'où vient cette sortie? J'aurais pensé que vous ajouteriez une redirection pour stderr à un fichier pouvant être surveillé périodiquement ou que sa queue soit imprimée sur la console pour ouvrir une fenêtre de terminal :)
Madivad
1
@ ljwobker Désolé de faire revivre un ancien fil. Je pense que le but de la commande tar est de tenter de lire tout le contenu du volume. Cela vérifierait que le volume entier est toujours lisible et donnerait à md une chance de détecter un disque défectueux.
mikepj
1
S'il provient d'un travail cron, ce dernier enverra normalement toute sa sortie directement à l'emplacement mailto =, le cas échéant, sinon à la racine. Cependant ... Je me demande si dd serait mieux que tar, pour des frais généraux moins élevés?
djsmiley2k - CoW
11

le paquet 'mdadm' de Debian et Ubuntu 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

cela 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 de tels emails).

am70
la source
8

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; }
jasonwryan
la source
soigné! J'aime le style :) .. c'est exactement ce que je cherchais à mettre dans MOTD :) merci!
jirislav