Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails) *** mise à jour 12/10/2014 ***

#1 Le 21/01/2013, à 23:17

nonoone

Awk + mdstat

Bonjour
Je souhaite inclure dans conky une ligne AWK qui surveillerai MDSTAT et qui me renverrai en plus d'un message texte dans conky un bip ou/et une fenêtre zenity.
Comme base de travail, je suis parti de : #${texeci 3600 awk ' $2 == "blocks" && $4 != "[UU]" {print "DANGER ! Erreur RAID détectée !!!"}' /proc/mdstat}
Cette base est reprise dans de nombreux forum ou tuto mais ne s'applique pas à ma configuration raid :

$ cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md2 : active raid0 sde2[1] sdd2[0]
      871424 blocks super 1.2 512k chunks
      
md0 : active raid1 sdb1[0] sdc1[1]
      976758648 blocks super 1.2 [2/2] [UU]
      
md1 : active raid5 sde1[2] sdd1[1] sda2[0]
      72260608 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
      
unused devices: <none>

awk me récupère la variable $2, c'est à dire le 2è mot (ou caractère) de chaque ligne mais ça ne correspond pas au résultat voulut !

$ awk  '{print $2}' /proc/mdstat

Je cherche donc à personnaliser cette commande pour que le message soit "DANGER ! Erreur RAIDx détectée !!!" où x correspond au type de raid ou au md.
Merci par avance de votre aide.
Version 12.04 (precise) 64 bits -Noyau Linux 3.2.0-36-generic - GNOME 3.4.2

Hors ligne

#2 Le 22/01/2013, à 02:28

nesthib

Re : Awk + mdstat

Ta question n'est pas très explicite, j'ai donc improvisé en partie ma réponse :

awk '/^md/{dev=$1; getline; if($2~"blocks"&&$NF!~"\\[UU+\\]"){print substr(dev,3)} }' /proc/mdstat

Pour chaque ligne commençant par « md », on sauvegarde « mdx » puis on regarde sur la ligne suivante si le second champ est « blocks » ET si le dernier champ est différent de « [UU…] » avec « UU… » un nombre de « U » supérieur ou égal à deux. Si la condition est validée on affiche le « x » du « mdx » sauvegardé.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#3 Le 22/01/2013, à 19:58

nonoone

Re : Awk + mdstat

Merci de ce premier jet !
J'ai donc 3 raid à surveiller. 1 raid0 avec 2 disques, 1 raid1 avec 2 disques et 1 raid5 avec 3 disques. En cas de défaillance d'un sd[xy], je voudrais une alerte qui m'affiche (immédiatement=conky, bip, zenity) la panne en précisant raid[x], sd[xy] ou md[x] défaillant.
J'espère avoir éclaircie ma pensée. En attendant je regarde ta formule.

Hors ligne

#4 Le 22/01/2013, à 21:14

nesthib

Re : Awk + mdstat

Tu as le principal, pour le reste il te suffit d'une boucle ou d'un cron pour vérifier régulièrement les informations et d'afficher ta sortie. Je te recommande zenity avec une boîte de dialogue sinon tu risques de louper ta notification si tu n'es pas devant ton ordi. Une autre solution est d'envoyer un mail. Bien entendu il ne faut envoyer ton alerte qu'une seule fois et non pas à chaque intervalle de test.

Je ne vais pas faire ça pour toi, c'est très simple à faire. Lance toi et demande si tu butes quelque part.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#5 Le 22/01/2013, à 22:14

nonoone

Re : Awk + mdstat

Je ne me repose pas sur tes lauriers... Pour la vérif j'opte pour conky plutôt de cron avec une notification zenity + bip jusqu'à l'acquittement. Je reviendrai plus tard car je débute et je ne suis pas tombé dedans quand j'étais petit wink et je demanderai confirmation avant d'éventuellement faire un lien sur la page conky.

Hors ligne

#6 Le 22/01/2013, à 23:53

nesthib

Re : Awk + mdstat

Poste ici dès que tu as commencé à écrire quelque chose. Je te recommande de séparer en deux ton problème. 1- crée une fonction bash qui affiche ou non s'il y a un disque déficient (idéalement tu peux coupler l'affichage à la production d'un code de retour comme ça tu peux même intégrer ta fonction dans un test). 2- utilise cette fonction dans ton conky.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#7 Le 18/02/2013, à 22:05

nonoone

Re : Awk + mdstat

De retour après une panne raid (hélas) donc récup de disques, puis réinstall... bref le lot habituel !
J'ai un peu changé la recherche. Sachant qu'un disque en défaut est affublé d'un " (F) ", je fais une recherche dessus :
awk '/(F\)/ {print $0}' /proc/mdstat
Ca me renvoie toute la ligne md correspondante je n'arrive pas à isoler le dev en faute (ceci dit l'info est juste et permet de réagir)
Reste à  piper ? zenity  et beep (après un sudo modprobe pcspkr après chq redémarrage sad ) ou peut -être avec un $0 !=

Hors ligne

#8 Le 19/02/2013, à 02:15

nesthib

Re : Awk + mdstat

J'ai un peu perdu le fil, tu peux donner un exemple du texte de départ et de l'info que tu veux extraire ? (Notamment pour cette histoire de (F)).
Explique aussi où tu veux en venir plus clairement (« Reste à  piper ? zenity  et beep… ») si tu veux de l'aide là dessus.

Pour ton module pcspkr tu peux l'enlever de /etc/modprobe.d/blacklist.conf (commente la ligne adéquate) pour qu'il soit chargé automatiquement.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#9 Le 20/02/2013, à 23:43

nonoone

Re : Awk + mdstat

Salut, merci pour le blacklist !
Lorsqu'un /dev/sdx est défectueux il est indexé d'un "(F)". J'ai pu le vérifier sur mon mdstat et j'ai trouvé une source qui confirme :
https://raid.wiki.kernel.org/index.php/Mdstat :
example 6:
Personalities : [raid1]
md1 : active raid1 sde1[6](F) sdg1[1] sdb1[4] sdd1[3] sdc1[2]
      488383936 blocks [6/4] [_UUUU_]

unused devices: <none>

Donc, j'arrive à extraire la ligne md en défaut mais pas seulement le /dev/sdx concerné.
Je retourne le résultat dans conky mais comment passer dans le même temps la commande de zenity et de beep ?
Merci de me suivre...

Hors ligne

#10 Le 22/02/2013, à 00:08

nonoone

Re : Awk + mdstat

Bon, j'avance :

awk '/\[2\]/ {cmd="zenity --error --text \"<span color="red"> <b> Panne RAID </b> </span>\" | beep" ; print $0 ; print | cmd}' /proc/mdstat

pour info sur cette ligne je teste sur [2] au lieu de (F) c'est moins contraignant wink
Mais Zenity n'est pas d'accord :

(zenity:7965): Gtk-WARNING **: Failed to set text from markup due to error parsing markup: Erreur à la ligne 1, caractère 21 : Caractère anormal « > », un guillemet d'ouverture après le signe égal est requis quand on affecte une valeur à l'attribut « color » de l'élément « span »

Après, sur texte zenity "panne RAID", je précise sur /dev/sd[xn] et je passe le tout dans conky pour l'avoir en mémo.

Hors ligne

#11 Le 22/02/2013, à 00:59

nesthib

Re : Awk + mdstat

Je ne sais pas trop ce que tu cherches à faire, mais tu as des erreurs d'échappement avec tes guillemets (il te faut « \\\"red\\\" »).


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#12 Le 23/02/2013, à 18:30

nonoone

Re : Awk + mdstat

OK pour l'échappement !
Pour le reste j'ai mis en faute un dev :

root@conky:/home/conky# mdadm /dev/md2 -f /dev/sdc2
mdadm: set /dev/sdc2 faulty in /dev/md2
root@conky:/home/conky# cat  /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md1 : active raid1 sdb3[0] sdc3[3](S) sdd3[2]
      10740664 blocks super 1.2 [2/2] [UU]
      
md0 : active raid0 sdd4[2] sdb4[0] sdc4[1]
      2850816 blocks super 1.2 512k chunks
      
md2 : active raid5 sdd2[2] sdb2[0] sdc2[1](F)
      17574912 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]
      
unused devices: <none>

Concky m'affiche bien l'alerte et Zenity ouvre bien une boite de dialogue. Je veux préciser quel dev est en défaut.
Dans mon exemple c'est sdc2 mais cela peut-être n'importe lequel des 9 dev. Comment récupérer la valeur du défectueux ? Sûrement grâce au (F), n'est-ce pas ?

Hors ligne

#13 Le 23/02/2013, à 19:19

nesthib

Re : Awk + mdstat

grep -Po 's...\[.\](?=\(F\))'

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#14 Le 23/02/2013, à 19:51

nonoone

Re : Awk + mdstat

Je crois comprendre la commande mais je ne sais pas quoi en faire dans ma ligne

${texeci 3600 awk '/\(F\)/ {cmd=" beep | zenity --error --text \"<span color=\\\"red\\\"> <b> Panne RAID sur sdX </b> </span>\" " ; print $0 ; print | cmd}' /proc/mdstat

???

Hors ligne

#15 Le 23/02/2013, à 20:17

nesthib

Re : Awk + mdstat

Elle est à lancer directement sur /proc/mdstat et retourne le nom des partitions fautives s'il y en a.
Essaie :

grep -Po 's...\[.\](?=\(F\))' /proc/mdstat

NB. Si tu dois faire beaucoup d'actions, il faudrait peut être mieux faire un script propre et appeler ce script dans conky plutôt que d'essayer de tout faire tenir en une ligne.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#16 Le 24/02/2013, à 16:55

nonoone

Re : Awk + mdstat

C'est bien ça qu'il faut !
Je l'ai intégrée de différente manière dans mon conky mais ... Je tourne en rond et lorsqu'il ne m'insulte pas (pardon sh je suis novice) je n'obtient pas le bon résultat.
Voilà où je suis arrêté :

${texeci 3 awk '/\(F\)/ {dev=(grep -Po "s...\[.\]\(?=\(F\)\)" /proc/mdstat);cmd="beep | zenity --error --text \"<span color=\\\"red\\\"> <b> Panne RAID sur '$dev' </b> </span>\" " ; print $dev; print | cmd}' /proc/mdstat

Je vais essayé de tourner ça en un script plus propre mais j'aimerais bien finir ce script conky.
Si tu peux encore m'aider ...

Hors ligne

#17 Le 24/02/2013, à 19:00

nesthib

Re : Awk + mdstat

Fais un script shell que tu places dans un dossier du PATH.
Appelle ton script shell depuis conky.

${texeci 3 ton_script_shell}

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#18 Le 24/02/2013, à 23:27

nonoone

Re : Awk + mdstat

Avant d'attaquer ce script je vais continuer à chercher pour conky. J'espère bien trouver !
Encore merci pour l'aide

Hors ligne

#19 Le 25/02/2013, à 06:16

nesthib

Re : Awk + mdstat

Je ne comprends vraiment pas pourquoi tu fais une différence script/conky… c'est la même chose. C'est juste que ça serait plus simple de tout mettre dans un fichier séparé plutôt que d'essayer de faire tout en une ligne…


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne