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 mdadm
RAID-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.
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:
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
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).
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; }