OVH Community, votre nouvel espace communautaire.

Superplan 2007+ (RAID) : monitoring des HDD


JaySee
15/06/2007, 16h02
Citation Envoyé par kirin
Bonjour,


Le pb c'est que vu ce qui remonte dans le RTM hardware, OVH n'a certainement pas l'info non plus sur l'état des disques durs : ce qu'ils ont c'est l'état de l'ensemble RAID donc si un seul des disques durs claque, ils voient toujours que tout est ok et rien ne se passera avant que le second disque dur lâche
.... en effet c'est bien possible... j'ai eu des problemes sur des serveurs sans RAID pour le moment...

Sinon je rajouterai, pour ceux qui on du RAID hardware, il faut faire :
smartctl -a -d 3ware,0 /dev/twe0
et
smartctl -a -d 3ware,1 /dev/twe0
pour recuperer les infos de smartctl

Au niveau method je pense que plutot que de parser le resultat de smartctl on peut aussi matter le code retour de smartctl, voici ce qu'en dit le man :
Code:
RETURN VALUES
       The  return values of smartctl are defined by a bitmask.  If all is well with the disk, the return value (exit status) of smartctl is 0 (all bits turned
       off).  If a problem occurs, or an error, potential error, or fault is detected, then a non-zero status is returned.  In this case, the  eight  different
       bits in the return value have the following meanings for ATA disks; some of these values may also be returned for SCSI disks.

       Bit 0: Command line did not parse.

       Bit 1: Device open failed, or device did not return an IDENTIFY DEVICE structure.

       Bit 2: Some SMART command to the disk failed, or there was a checksum error in a SMART data structure (see '-b' option above).

       Bit 3: SMART status check returned "DISK FAILING".

       Bit 4: SMART status check returned "DISK OK" but we found prefail Attributes <= threshold.

       Bit 5: SMART status check returned "DISK OK" but we found that some (usage or prefail) Attributes have been <= threshold at some time in the past.

       Bit 6: The device error log contains records of errors.

       Bit 7: The device self-test log contains records of errors.
Du coup on peut avoir un rapport assez complet sur l'erreur!

Du coup comme ca m'amusait et je viens de faire un script shell (j'ai pas php sur tout les serveurs) :
Script smartctl.sh
Code:
#!/bin/sh

# par JC le 15-06-2007
# MAJ: rajout de l'adresse email en param ca evite d'editer le script
# test un disque dur via smartctl et verifie le code retour

if [ ! "$#" = "3" ]; then
    echo "Usage : "
    echo "	$0 email driver device"
    echo "	email is the email to notify if an error is found"
    echo "	driver can be one of : ata 3ware,0 3ware,1 (for others: check you hardware documentation)"
    echo "	device: example: /dev/sda or /dev/hda or /dev/twe0 ..."
    echo "	full example : $0 toto@test.com \"3ware,1\" /dev/twe0"
    exit 1
fi

if [ ! `which smartctl 2> /dev/null` ]; then
    echo "smartctl not installed or not in PATH, abort"
    exit 1
fi

NOTIFY=$1
DRIVER=$2
DEVICE=$3
DATE=`date "+%Y-%m-%d %Hh%M"`
HOST=`hostname`

# on lange smartctl en mode minimal, juste pour recuperer le code de retour
`smartctl -q silent -d $DRIVER $DEVICE`
RES=$?
if [ ! "$RES" = "0" ]; then
    MSG="Hello\n\nOn $DATE smartcl returns code : $RES for device $DEVICE ($DRIVER)"
    # Bit 0: Command line did not parse.
    # on s'en fiche de celui la!

    # Bit 1: Device open failed, or device did not return an IDENTIFY DEVICE structure.
    if [ ! "$(($RES & 2))" = "0" ]; then
	MSG="$MSG\nError on Bit 1: Device open failed, or device did not return an IDENTIFY DEVICE structure."
    fi
    
    # Bit 2: Some SMART command to the disk failed, or there was a checksum error in a SMART data structure (see '-b' option above).
    if [ ! "$(($RES & 4))" = "0" ]; then
        MSG="$MSG\nError on Bit 2: Some SMART command to the disk failed, or there was a checksum error in a SMART data structure."
    fi
    
    # Bit 3: SMART status check returned "DISK FAILING".
    if [ ! "$(($RES & 8))" = "0" ]; then
	MSG="$MSG\nError on Bit 3: SMART status check returned \"DISK FAILING\"."
    fi
    
    # Bit 4: SMART status check returned "DISK OK" but we found prefail Attributes <= threshold.
    if [ ! "$(($RES & 16))" = "0" ]; then
	MSG="$MSG\nError on Bit 4: SMART status check returned \"DISK OK\" but we found prefail Attributes <= threshold."
    fi
    
    # Bit 5: SMART status check returned "DISK OK" but we found that some (usage or prefail) Attributes have been <= threshold at some time in the past.
    if [ ! "$(($RES & 32))" = "0" ]; then
        MSG="$MSG\nError on Bit 5: SMART status check returned \"DISK OK\" but we found that some (usage or prefail) Attributes have been <= threshold at some time in the past."
    fi
    
    # Bit 6: The device error log contains records of errors.
    if [ ! "$(($RES & 64))" = "0" ]; then
        MSG="$MSG\nError on Bit 6: The device error log contains records of errors."
    fi
    
    # Bit 7: The device self-test log contains records of errors.
    if [ ! "$(($RES & 128))" = "0" ]; then
	MSG="$MSG\nError on Bit 7: The device self-test log contains records of errors."
    fi
    MSG="$MSG\n\nHere comes the full smartctl status for this disk :\n=================================================================\n"
    MSG_END="\n=================================================================\nDate was : $DATE\n"
    echo -e "$MSG`smartctl -a -d $DRIVER $DEVICE 2> /dev/null`\n$MSG_END" | mail -s "[$HOST] - HDD $DEVICE ($DRIVER) probleme" "$NOTIFY"
   exit 2
fi

exit 0
Utilisation :
/path/to/the/script/smartctl.sh email driver device
exemple :
/path/to/the/script/smartctl.sh toto@titi.com "3ware,0" /dev/twe0
pour le disque 0 du raid hard

Qu'en pensez vous ?
comme j'ai pas de disque qui foire... les tests ne sont pas evidents!!! j'ai pu tester en passant un disque inexistant et j'ai bien une erreur sur le bit 1... le reste devrai donc marcher...

J'ai mis en crontab daily le script suivant afin de checker tout les disques :
Code:
#!/bin/sh

SMARTCTL=/root/scripts/smartctl.sh
EMAIL=email@notifier.com

$SMARTCTL "$EMAIL" "3ware,0" /dev/twe0
$SMARTCTL "$EMAIL" "3ware,1" /dev/twe0
EDIT: j'ai mi l'adresse email en param c'est mieux

kirin
15/06/2007, 13h06
Bonjour,

Citation Envoyé par JaySee
Salut,
En fait je pense que c'est une bonne chose de monitorer le RAID (et le pas RAID aussi bien sur!!!) mais il faut savoir qu'OVH monitor aussi tout ca et que si une panne arrive sur vos disques durs ils seront les premiers prevenus et vous contacterons afin de prendre un rdv pour changer le disque defectueux. Ca m'est arrivé 2 fois sur des serveurs sans RAID.
Le pb c'est que vu ce qui remonte dans le RTM hardware, OVH n'a certainement pas l'info non plus sur l'état individuel des disques durs : ce qu'ils ont c'est l'état de l'ensemble RAID donc si un seul des disques durs claque, ils voient toujours que tout est ok puisqu'ils voient la grappe RAID1 et rien ne se passera avant que le second disque dur lâche

Si j'avais eu du RAID ca aurait été plus simple : on change le disque defectueux et on laisse le RAID se reconstruire : temps de l'intervention : 5minutes
Tout à fait Mais encore faut-il pour cela avoir l'état individuel des disques durs...

Donc le plus important reste : pensez à BACKUPER
Oui ! Rien ne dispense de le faire !

nellyinf
15/06/2007, 01h26
Sinon sur les diagnostiques de pannes anticipés, quand le disque est encore lisible, ils proposent parfois de l'installer temporairement sur le serveur en secondaire, le temps pour nous de recup nos données.

Ca ne dispense pas du tout de la sauvegarde, mais ca facilite le solutionement du probleme pour ceux qui n'en n'ont pas et ont de grosses quantitées de données à tranférer.

JaySee
14/06/2007, 23h23
Salut,

En fait je pense que c'est une bonne chose de monitorer le RAID (et le pas RAID aussi bien sur!!!) mais il faut savoir qu'OVH monitor aussi tout ca et que si une panne arrive sur vos disques durs ils seront les premiers prevenus et vous contacterons afin de prendre un rdv pour changer le disque defectueux. Ca m'est arrivé 2 fois sur des serveurs sans RAID.

Pour info les 2 fois ca a fini par : on change le disque et on vous reinstalle la distrib de votre choix (o!! c gentil)... demerdez vous pour le backup (reconfiguration, recupe du backup de 80Go.... blabla plus de 24h de down!!).

Si j'avais eu du RAID ca aurait été plus simple : on change le disque defectueux et on laisse le RAID se reconstruire : temps de l'intervention : 5minutes

Donc le plus important reste : pensez à BACKUPER

kirin
11/06/2007, 13h05
Bonjour Balzane,


Citation Envoyé par balzane
C'est vrai que c'est idiot de bénéficier d'un RAID 1 (disques en mirroir) mais de ne pas savoir quand un disque a ou va lacher, et d'attendre que les 2 lachent pour savoir qu'il y avait un problème !
Ouf J'avais un peu l'impression d'être un martien de penser cela, je suis rassuré de voir que je ne suis pas le seul


Quelle est la périodicité optimale pour ces tests ?
Je dirais quotidiennement, la nuit à une heure creuse afin de savoir de bon matin si les hdd vont bien Ce serait bien le diable que le second lache avant l'intervention Ceci dit, cela n'empêche pas qu'il faut faire des sauvegardes par ailleurs.


Sinon, pour info, j'ai enfin réussi à me faire comprendre du support ovh : ils ont fait remonter l'info au service technique disent-ils et ils me tiennent au courant. Nous verrons, mais pour être honnête je ne suis pas très confiant dans le fait qu'ils réparent jamais ce pb Vu le mal que j'ai eu avec le support à me faire comprendre, j'ai eu l'impression qu'ils connaissaient le pb et que je les ennuyais / dérangeait. J'espère que je me trompe.

Au final cela me laisse vraiment perplexe car finalement ces superplan 2007+ sont des serveur qu'ils ont bien en stock donc ils vendent un paquet je suppose : le mien avait 15 jours (je le sais par le smart des hdd) et ils en ont 15 en stock. Donc depuis le début de l'année ils en auraient vendus + de 200 des 2007 + buggués (en comptant les normaux et L) ? Et personne ne réagit / ne fait remonter l'info ?

Je ne suis pas compétent des masses en admin serveur, je suis vraiment surpris que ce soit moi qui fasse remonter l'info, après qu'ils aient commercialisé plusieurs centaines de ces serveurs.

nellyinf
08/06/2007, 09h37
juste une précision pour ceux qui ont des hdd en ide et pas en sata sur leurs serveurs :

remplacer sda par hda (et sdb par hdb pour ceuxs ayant un systeme en raid)

balzane
07/06/2007, 14h56
C'est vrai que c'est idiot de bénéficier d'un RAID 1 (disques en mirroir) mais de ne pas savoir quand un disque a ou va lacher, et d'attendre que les 2 lachent pour savoir qu'il y avait un problème !

J'ai fait une variante du fichier maildda.php pour vérifier les 2 disques en même temps et surtout n'envoyer un email qu'en cas d'erreur sur le dernier test éxécuté :

Code PHP:
// EMAIL sur TEST DISQUES DURS en ERREUR --------------------------

// paramètres généraux
$email "moi@mondomaine.com";
$headers "From: $email\r\n";

// analyse test disque A
$logfile "dda.txt";
$disque "A";
resultat_test($logfile,$disque);

// analyse test disque B
$logfile "ddb.txt";
$disque "B";
resultat_test($logfile,$disque);


// analyse résultat d'un test de disque et envoi email si erreur
function resultat_test($logfile,$disque){
    global 
$email;
    global 
$headers;
    
$erreuropen 0;   // pas d'erreur d'ouverture du fichier log test

    
$fp= @fopen("$logfile","r");
    if (!
$fp$erreuropen 1;

    if (
$erreuropen == 0) {
        
// lecture fichier log
        
while (!feof ($fp)) 
        {
            
$contents .= fgets($fp,4096);
        }
        
fclose ($fp);
        
        
// recherche erreur et envoi email si erreur
        
$contents1 =  explode("SMART Self-test log structure",$contents);   // identifie titre avant liste résultats des tests
        
$contents2 =  explode("\n",$contents1[1]);    // le symbole \n = retour à la ligne identifie chaque fin de résultat de test
        
$line $contents2[2];   // lit le dernier test exécuté (celui en # 1)
        
$res strpos($line,"Completed without error");   // lit le champs status du test

        
if ($res === false){     // si erreur sur le dernier test exécuté :
            
$corps "Pour connaitre tous les résultats, se connecter en SSH et faire : \r 
                        smartctl -a -d ata /dev/sda  ou sdb suivant le cas.\r\r Status erreur :\r" 
.$line"\r\r
                        (Ce texte est là pour éviter de finir dans la poubelle des courriers !)"
;                
            
$sujet "SERVEUR OVH : ERREUR DISQUE " .$disque;
            
mail($email,$sujet,$corps,$headers);   // envoi de l'email    
        
} else {   //si dernier test ok :
            
$corps "Résultat des tests OK pour ce disque. \r\r
                    (Ce texte est là pour éviter de finir dans la poubelle des courriers !) \r\r
                    Status du test :\r" 
.$line;                 
            
$sujet "SERVEUR OVH : Test OK disque " .$disque;
            
mail($email,$sujet,$corps,$headers);   // mettre en commentaire si ne veut que les erreurs
        
}
        
// suppression du fichier de log 
        
@unlink($logfile);
        
    } else {
        
// envoi message car fichier log absent
            
$corps "Fichier log résultat des tests disque dur " .$disque" absent. \r\r 
                    (Ce texte est là pour éviter de finir dans la poubelle des courriers !)"

            
$sujet "SERVEUR OVH : FICHIER TEST DISQUE " .$disque" ABSENT";
            
mail($email,$sujet,$corps,$headers);   // envoi de l'email        
    
}

}

?>
Il y a une ligne à mettre en commentaire si l'on veut recevoir un email que sur les erreurs.
Nota : Dans lancedda.sh et recupdda.sh je lance les 2 tests en même temps.
C'est vrai que le cron via Webmin sur ces commandes ne marchent pas, alors que j'en ai d'autres qui se charge du backup FTP qui marchent nickel.

Quelle est la périodicité optimale pour ces tests ?

kirin
03/06/2007, 12h36
MAJ du guide : les crons via webmin sont manifestement buggués !

Une vraie cochonnerie car qd on cliques sur "executer maintenant" dans webmin le cron marche ! Alors qu'à l'heure programmée il est défaillant : concrètement et par exemple, le fichier dda.txt était vide, l'appel à smartctl ne se fait pas correctement à l'heure programmée (alors que bien sur en cliquant sur "executer maintenant" dans webmin, le fichier dda.txt était correct).

Après avoir cherché pdt des heures l'erreur dans mes scripts et cherché du coté des droits je n'ai rien modifié aux scripts, j'ai simplement défini les cron dans crontab et là tout marche !

C'est un peu vexant de perdre autant de temps pour un bug dans webmin !

kirin
02/06/2007, 13h46
Bonjour,


Objet : :

Ce document explique comment et pourquoi j'ai mis en place manuellement le test d'état quotidien de chacun des 2 disques durs sur mon serveur Superplan 2007+, avec envoi mail du résultat.


Introduction :

Je ne suis pas du tout un spécialiste de l'admin de dédié, donc désolé si ce que je vais indiquer ici n'est pas élégant.

Par contre cela fonctionne et pourrait servir à d'autres

Sur les Superplan 2007+ on a du RAID1 ce qui est super en terme de sécurité puisque l'on a une redondance des données. Mais encore faut-il être au courant de la panne éventuelle d'un HDD ! Sinon à mon sens, c'est un RAID qui a peu de sens / d'utilité Sachez que la procédure c'est que l'on reçoit un mail indiquant la panne du HDD grâce au RTM et que de là on demande l'intervention du support.

Je dis cela car mon Superplan 2007+ n'avait pas d'origine le RTM de fonctionnel dans le manager. Donc déjà, à date de ce message, sur ce type de serveur et par défaut, absolument *aucune* info ne remonte à priori. Si vous êtes dans ce cas, pour reinstaller RTM, suivre le guide :
http://guide.ovh.com/realtimemonitoring

Ceci fait, dans mon cas, le RTM fonctionne (process, charge cpu -modèle E6320 pour moi-, identification de la carte mère -P5VD2-MX dans mon cas-, etc...) mais il n'y a toujours aucune info de remontée sur les HDD Pas de T°, pas d'état, rien ! Donc cela ne suffit toujours pas car, sauf erreur de ma part, on ne risque pas d'être averti par mail de la panne d'un HDD.

Comble du comble , sur mon serveur, les HDD n'avaient pas le smart d'activé par défaut donc pour le coup il n'y a *aucune* chance de récupérer des infos sur leur état via RTM ou autre. Nous allons voir comment l'activer.


Entrons dans le sujet : smartctl

J'ai donc mis en place manuellement le test d'état quotidien de chacun des 2 disques durs, avec envoi mail du résultat.

Pour cela j'utilise smartctl :
http://smartmontools.sourceforge.net/
http://guides.ovh.com/SmartMonTool
http://valaurea.free.fr/documents/sig11_smart.html

et les crons :
http://guides.ovh.com/DedieCron


La première chose à savoir c'est que pour accéder au disque sur ce serveur, l'option à ajouter dans la ligne de commande de smartctl c'est
-d -ata
ce qui à mon avis n'a guère de sens d'ailleurs vu ce que dit la doc relativement au rôle de cette option. J'ai trouvé par hasard, en testant.

La seconde chose à savoir c'est que les disques sont en "sda" et "sdb". Au final, pour avoir les infos sur chacun de vos disque cela donne (connectez vous en SSH, si besoin cf http://guides.ovh.com/SshSurServeurDedie) :

smartctl -i -d ata /dev/sda
et
smartctl -i -d ata /dev/sdb

Si comme pour moi le smart est désactivé sur chaque disque, afin de l'activer faites :
smartctl -s on -d ata /dev/sda
et
smartctl -s on -d ata /dev/sdb

NB : Vous pouvez de là refaire un -i cad redemander l'info des disques pour vérifier que le SMART est désormais bien activé.


Pour ma part, je me contente d'un test court vérifiant jusque l'état du disque cad s'il est "ok", ce qui donne comme commande :
smartctl -t short -d ata /dev/sda

Après le lancement de ce test il vous dit d'attendre une minute. Patientez puis pour lire le résultat du test faites :
smartctl -l selftest -d ata /dev/sda

NB : pour faire la même chose avec le second disque recommencer le test puis l'attente puis la lecture avec "sdb" en fin de ligne au lieu de sda.

NB2 : vous pouvez faire un test long et avoir bien plus de données d'état du disque si vous le souhaitez. Consultez la doc de smartd liée précédemment.

Reste à scripter tout cela.


Entrons dans le sujet : les crons et scripts

Tout au long de ce qui suit, je vais désigner par "monsite" le répertoire qu'a créé OVHM quand vous avez installé votre domaine sur votre serveur. Vous remplacerez donc "monsite" par le nom du repertoire sur votre serveur.


Pour définir les crons, passez par l'édition de /etc/crontab :
http://guides.ovh.com/DedieCron
et pour cela utilisez la commande pico en vous connectant en SSH. Plus bas je vous livre une explications plus détaillée.

J'insiste, faites-le à la main et n'utilisez *pas* la définition des crons via webmin, ils sont manifestement buggués !

Les heures de lancement des crons ne sont bien sur que des suggestions. Par contre l'intervalle entre les lancements est le minimum à respecter.

Le contenu du fichier sera donné : vous devez placer le fichier en question sur la racine de votre site web.


1er cron : lancement du test d'état du disque dur, une fois par jour.
Heure : 03h30
Commande : sh /home/monsite/www/lancedda.sh
Contenu du fichier lancedda.sh :
Code:
smartctl -t short -d ata /dev/sda
2eme cron : lecture du résultat et écriture dans un fichier
Heure : 03h31
Commande : sh /home/monsite/www/recupdda.sh
Contenu du fichier recupdda.sh, tout est sur une seule ligne :
Code:
rm -f /home/monsite/www/dda.txt; smartctl -l selftest -d ata /dev/sda > /home/monsite/www/dda.txt
3eme cron : mail du résultat
Heure : 03h32
Commande : sh /home/monsite/www/maildda.sh
Contenu du fichier maildda.sh, tout est sur une seule ligne :
Code:
cd /home/monsite/www/; ./maildda.php
Contenu du fichier maildda.php :
Code:
#!/usr/local/bin/php
Sur ce dernier fichier php, après l'avoir envoyer en FTP sur la racine de votre site vous devez absolument de plus faire un "chmod 700" : vous pouvez le faire avec votre logiciel FTP en général, sinon connectez vous en SSH (cf
http://guides.ovh.com/SshSurServeurDedie) et faites :
chmod 700 /home/monsite/www/maildda.php


Voilà, c'est fini Bien sur il faut refaire le tout une seconde fois pour le second disque dur : pour cela il vous suffira de tout recommencer en remplacant *partout*, dans les noms de fichiers *et* les commandes (attention, n'en oubliez pas !) :
dda par ddb
sda par sdb
et de changer les heure bien sur en ajoutant par exemple 10 minutes à chaque heure suggérée.



PS : edition du fichier crontab, pas à pas.
1) Connectez vous en SSH (http://guides.ovh.com/SshSurServeurDedie) avec login root et mot de passe correspondant
2) à l'invite, tapez
pico /etc/crontab
Pico se lance et ses commandes sont rappelées en bas de l'écran : le symbôle ^ représente la touche CRTL. Par exemple, pour quitter pico, faites CRTL-X (cad appuyez sur la touche CRTL et simultanément sur X) et pour sauver vos modifications vous ferez CTRL-0 puis validerez avec la touche return de votre clavier.
3) ok, refaites si besoin pico /etc/crontab et descendez à la fin du fichier puis tapez :
Code:
# test des hdd et envoi mail des infos :
30 3 * * * root sh /home/monsite/www/lancedda.sh
31 3 * * * root sh /home/monsite/www/recupdda.sh
32 3 * * * root sh /home/monsite/www/maildda.sh
et pour le second disque, avec 10 min de décalage, ajoutez
Code:
40 3 * * * root sh /home/monsite/www/lanceddb.sh
41 3 * * * root sh /home/monsite/www/recupddb.sh
42 3 * * * root sh /home/monsite/www/mailddb.sh
4) Faites CTRL-O, validez avec return puis faites CTRL-X pour quitter pico, c'est fini.





PPS : le smart étant activé sur les hdd, j'ai essayé de définir les DEVICE, dans /etc/smartd.conf en utilisant donc -d -ata et sda / sdb. Concrètement, j'ai donc mis en commentaire la ligne DEVICESCAN et j'ai ajouté les lignes :
/dev/sda -d ata -a
/dev/sdb -d ata -a

J'espérais qu'ensuite les infos remonteraient dans le manager et que l'état des hdd y apparaitrait, mais non

Si qqun a une idée à ce propos, je suis intéressé. Ceci dit, je n'ai pas trouvé de smart dans les tâches cron, contrairement à ce que dit cette doc ovh :
http://guides.ovh.com/SmartMonTool

?

Seb, alias kirin
Webmestre www.choixpc.com