Comment puis-je réduire le temps d'attente IO et les temps de nouvelle tentative afin que le système d'exploitation n'essaie pas continuellement d'écrire sur un lecteur défaillant?
J'ai un système que j'utilise pour faire des copies du contenu de démonstration qui est prêté aux clients sur des disques durs de bureau SATA ordinaires. Nous connectons plusieurs disques à la fois via SAS et copions leur contenu à l'aide d'un script.
Parce que les disques sont prêtés, certains reviennent parfois endommagés, mais je ne sais pas s'ils sont endommagés, donc la prochaine fois que ce disque sera réutilisé dans une opération de copie, il ralentit les autres disques lorsque le système réessaye les E / S sur ce disque. Parfois, cela peut prendre des heures avant de remarquer le mauvais disque et de le retirer. Une fois le lecteur retiré, les autres lecteurs commencent à écrire à vitesse normale.
Je me fiche de récupérer les mauvais disques. J'ai juste besoin de les éliminer pour qu'ils ne ralentissent pas tout le reste.
Je fais également des recherches sur les badblocks et les smartmontools et j'envisage d'écrire une pré-vérification sur les disques avant de commencer à écrire.
Système d'exploitation: Ubuntu Linux (12.04 lts)
udisks
/smartmonctl
? Un problème XY classique ici, il me semble.ddrescue
qu'il ne touche même pas les secteurs signalés par SMART.)Réponses:
Je n'ai jamais utilisé ce paramètre auparavant, mais vous souhaitez probablement ajuster le eh_timeout (délai de traitement des erreurs) pour le lecteur en question:
L'illustration ci-dessus est
sda
réglée sur 10 secondes. Depuis la base de connaissances de Red Hat:la source
eh_timeout
mais j'ai pu changertimeout
pour accomplir la tâche à accomplir.Surveillez
/sys/block/<dev>/stat
les appareils qui vous intéressent et comparez le 10e paramètre (io_ticks).par exemple,
ticks = io_ticks - prev_ticks / seconds_deltatime / 10
Il s'agit du pourcentage de temps disponible que le disque a passé à attendre le disque io.
Bien sûr, près de 100% mériteraient d'être vérifiés, sinon soyez vraiment intelligent et comparez-le à la moyenne de tous vos disques et choisissez n'importe quel disque au-dessus de la moyenne.
Voir la documentation des statistiques de la couche de blocs .
Sinon, utilisez quelque chose comme Munin et représentez-le graphiquement. Vous pouvez demander à Munin d'alerter s'il dépasse un seuil, par exemple 90% ou tout ce que votre graphique montre est un bon chiffre d'alerte.
par exemple, voir ces deux graphiques Munin montrant que / dev / sdi doit être regardé. Dans cet exemple, si / dev / sdi fait partie d'un tableau, le tableau entier en souffrirait.
Si vous regardez le graphique de la semaine, vous verrez que / dev / sdc pourrait également être lent.
Je dois ajouter que / dev / sdi ci-dessus n'est pas cassé, c'est juste un disque lent (en fait un disque vert que quelqu'un a ajouté à un tableau de disques sata de qualité entreprise) qui a ralenti le tableau. Un véritable disque défaillant ressortirait comme un pouce endolori.
En résumé, j'irais probablement avec un script si j'avais le temps, mais Munin si je voulais juste une solution rapide et la connexion au serveur était facile.
la source