Reduzieren Sie fehlerhafte Blockwiederholungs- / Wartezeiten in Ubuntu

10

Wie kann ich die Wartezeit für E / A und die Wiederholungszeiten reduzieren, damit das Betriebssystem nicht ständig versucht, auf ein fehlerhaftes Laufwerk zu schreiben?

Ich habe ein System, mit dem ich Kopien von Demo-Inhalten erstelle, die an Kunden auf normale SATA-Desktop-Festplatten ausgeliehen werden. Wir verbinden viele Laufwerke gleichzeitig über SAS und kopieren Inhalte mithilfe eines Skripts auf sie.

Da die Laufwerke ausgeliehen sind, kommen gelegentlich einige beschädigt zurück, aber ich weiß nicht, dass sie beschädigt sind. Wenn das Laufwerk das nächste Mal in einem Kopiervorgang wiederverwendet wird, werden andere Laufwerke verlangsamt, wenn das System E / A auf diesem Laufwerk erneut versucht. Manchmal kann es Stunden dauern, bis ich das fehlerhafte Laufwerk bemerke und es entferne. Nachdem das Laufwerk entfernt wurde, beginnen die restlichen Laufwerke mit normaler Geschwindigkeit zu schreiben.

Es ist mir egal, ob die fehlerhaften Laufwerke wiederhergestellt werden. Ich muss sie nur aussortieren, damit sie nicht alles andere verlangsamen.

Ich recherchiere auch nach Badblocks und Smartmontools und denke darüber nach, eine Vorabprüfung der Laufwerke durchzuführen, bevor ich mit dem Schreiben beginne.

Betriebssystem: Ubuntu Linux (12.04 lts)

Ryan Sorensen
quelle
Was ist falsch daran, SMART-Daten durch udisks/ zu überprüfen smartmonctl? Ein klassisches XY-Problem hier, denkt.
Deer Hunter
2
Danke, ich werde smartmonctl mehr erforschen. Wenn die fehlerhaften Sektoren während der letzten Lieferung aufgetreten sind, zeigt der SMART-Status meiner Erfahrung nach, dass das Laufwerk immer noch in Ordnung ist, und es funktioniert einwandfrei, bis ein zufälliger Teil während des Kopiervorgangs ausgeführt wird, und verlangsamt sich dann zu einem Crawl, der sich auch auf andere Laufwerke auswirkt, bis es wird entfernt.
Ryan Sorensen
Die Frage hat keine direkte Antwort erhalten, daher wissen wir nicht, ob dies unter Linux möglich ist: Wie kann ich die Wartezeit für E / A und die Wiederholungszeiten reduzieren?
imz - Ivan Zakharyaschev
@ imz - IvanZakharyaschev unix.stackexchange.com/a/147304/25985 Der Kernel protokolliert diese Fehler jedoch. Wenn Sie also nur eine fehlerhafte Festplatte abfangen möchten, bevor es zu größeren Problemen kommt, können Sie die Systemprotokolle unter scannen regelmäßige Abstände.
Goldlöckchen
@gol Was ist, wenn ich es schneller fangen möchte? Ohne zu warten weiß Gott, wie lange es dauert, bis die E / A-Operation die Meldung eines Fehlers freigibt? (Eigentlich versuche ich, die Daten fehlerhaft von einer Festplatte zu speichern, aber mein Problem ist ähnlich: Das Einlaufen in diese "fehlerhaften" Sektoren führt zu großen Verzögerungen. ... Vielleicht könnte ich auch den Ratschlägen folgen und einen Weg finden, dies zu tun Geben Sie die Informationen aus dem SMART-Test an, ddrescuedamit sie nicht einmal die von SMART gemeldeten Sektoren berühren.)
imz - Ivan Zakharyaschev

Antworten:

7

Ich habe dieses Tunable noch nicht verwendet, aber Sie möchten wahrscheinlich das eh_timeout (Timeout für die Fehlerbehandlung) für das betreffende Laufwerk anpassen :

[root@localhost device]# cat /sys/block/sda/device/eh_timeout
10
[root@localhost device]# 

Die obigen Shows sind sdaauf 10 Sekunden eingestellt. Aus der Red Hat Knowledgebase:

In bestimmten Speicherkonfigurationen (z. B. Konfigurationen mit vielen LUNs) kann der SCSI-Fehlerbehandlungscode viel Zeit damit verbringen, Befehle wie TEST UNIT READY an nicht reagierende Speichergeräte auszugeben. Dem SCSI-Geräteobjekt wurde ein neuer sysfs-Parameter, eh_timeout, hinzugefügt, mit dem der Timeout-Wert für die vom SCSI-Fehlerbehandlungscode verwendeten Befehle TEST UNIT READY und REQUEST SENSE konfiguriert werden kann. Dies verringert den Zeitaufwand für die Überprüfung dieser nicht reagierenden Geräte. Der Standardwert von eh_timeout ist 10 Sekunden. Dies war der Zeitlimitwert, der vor dem Hinzufügen dieser Funktionalität verwendet wurde.

Bratchley
quelle
Ich überprüfe das jetzt. Ubuntu hat kein eh_timeout, aber eine Timeout-Datei, die möglicherweise dasselbe ist. Der Standardwert für Ubuntu scheint 30 Sekunden zu sein. Reduziert es auf 5 Sekunden und meldet sich zurück.
Ryan Sorensen
1
Was war Ihr Ergebnis aus Neugier?
Bratchley
Das Setzen des Timeout-Flags am 12.04 schien nichts zu bewirken. Ich plane, dieses Wochenende ein Testsystem auf 14.04 zu aktualisieren, da es eh_timeout (und auch timeout) hat.
Ryan Sorensen
@ RyanSorensen, haben Sie also die Chance bekommen zu sehen, ob dieser Parameter jemals funktioniert?
Nat
Ich konnte mich nicht ändern, eh_timeoutaber ich konnte mich ändern timeout, um die anstehende Aufgabe zu erfüllen.
GuitarPicker
2

Überwachen Sie /sys/block/<dev>/statdie Geräte, an denen Sie interessiert sind, und vergleichen Sie den 10. Parameter (io_ticks).

z.B, ticks = io_ticks - prev_ticks / seconds_deltatime / 10

Dies ist der Prozentsatz der verfügbaren Zeit, die die Festplatte auf die Festplatte io gewartet hat.

Nahezu 100% wären natürlich eine Überprüfung wert, oder Sie werden wirklich schlau und vergleichen sie mit dem Durchschnitt aller Ihrer Festplatten und wählen Sie eine oder mehrere Festplatten aus, die über dem Mittelwert liegen.

Siehe die Dokumentation zur Blockschichtstatistik .

Verwenden Sie andernfalls etwas wie Munin und zeichnen Sie es grafisch auf. Sie können Munin alarmieren lassen, wenn er einen Schwellenwert überschreitet, z. B. 90%, oder was auch immer Ihre Grafik zeigt, ist eine gute Alarmzahl.

Sehen Sie sich beispielsweise diese beiden Munin-Diagramme an, die zeigen, dass / dev / sdi betrachtet werden muss. Wenn in diesem Beispiel / dev / sdi Teil eines Arrays ist, würde das gesamte Array darunter leiden.

Festplattenauslastung pro Gerät - pro Tag

Festplattenauslastung pro Gerät - pro Woche

Wenn Sie sich das Wochendiagramm ansehen, werden Sie feststellen, dass / dev / sdc möglicherweise auch langsam ist.

Ich sollte hinzufügen, dass / dev / sdi oben nicht kaputt ist, sondern nur eine langsame Festplatte (eigentlich eine grüne Festplatte, die jemand einem Array von Sata-Festplatten für Unternehmen hinzugefügt hat), die das Array verlangsamt hat. Eine tatsächlich ausgefallene Festplatte würde wie ein schmerzender Daumen herausragen.

Zusammenfassend würde ich wahrscheinlich mit einem Skript arbeiten, wenn ich Zeit hätte, aber Munin, wenn ich nur eine schnelle Lösung wollte und die Verbindung zum Server einfach war.

Ian Macintosh
quelle
Vielen Dank! Die Informationen zu Io-Statistiken unter Linux sind wirklich neu und scheinen (für mich) in solchen Situationen nützlich zu sein.
imz - Ivan Zakharyaschev