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)
udisks
/ zu überprüfensmartmonctl
? Ein klassisches XY-Problem hier, denkt.ddrescue
damit sie nicht einmal die von SMART gemeldeten Sektoren berühren.)Antworten:
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 :
Die obigen Shows sind
sda
auf 10 Sekunden eingestellt. Aus der Red Hat Knowledgebase:quelle
eh_timeout
aber ich konnte mich änderntimeout
, um die anstehende Aufgabe zu erfüllen.Überwachen Sie
/sys/block/<dev>/stat
die 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.
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.
quelle