Schlechte I/O Performance untersuchen

Seit nun über 2 Jahren nutze ich einen HTPC, anfangs mit Ubuntu und Gnome Oberfläche, inzwischen mit Arch Linux und lediglich dem X Server und XBMC. Seit einigen Monaten stehe ich vor einem großen Problem, welches für mich anscheinend ziemliches Neuland ist. Bei dringenden Problemen frage ich normalerweise in Foren nach, aber dieses Mal möchte ich es selbst lösen und dazu lernen.

In meinem Beitrag über meinen HTPC habe ich bereits grob einiges zur Konfiguration gesagt, wichtig jedenfalls ist nur, dass ich zwei 500 GB Western Digital “Caviar Black” Festplatten in einem Software RAID1 mittels mdadm laufen habe. Eigentlich sind diese Festplatten ja für ihre relativ gute Performance bekannt, aber inzwischen stehe ich vor einem gewaltigen Problem. Aufgefallen ist es mir, als das Fernsehen extrem geruckelt hat und teilweise gar nicht mehr funktioniert hat. XBMC sagte etwas von “Zwischenpuffern” und Tvheadend spuckte haufenweise Meldungen wie MPEG2VIDEO #512: Continuity counter error, 2 duplicate log lines suppressed aus.

Anfangs habe ich die TV-Karte verdächtigt, aber auch die anderen beiden haben keine besseren Ergebnisse erzielt. Das seltsamste an der Sache ist allerdings, dass das Problem rein zufällig aufzutreten scheint. Irgendwann ist mir aufgefallen, dass die Lese- und Schreibgeschwindigkeiten der Festplatten sich nur noch im Bereich von 2-4 MB/s bewegt haben. Zuerst dachte ich an zwei unabhängige Probleme, aber schnell hat sich herausgestellt, dass beides zusammenhängt.

Eine Zeit lang war ich auf dem Irrweg, da das Problem zufälligerweise nur auftrat, wenn ich im BIOS den SATA Modus nicht auf IDE, sondern auf AHCI gestellt habe. Inzwischen tritt das Problem aber bei beiden Einstellungen auf.

In einigen Foren habe ich gelesen, dass defekte Blöcke auf RAID Festplatten zu solchen Problemen führen können. Die S.M.A.R.T Werte der beiden Festplatten sehen aber sehr gut aus, gelegentlich werde ich es sicherheitshalber mit badblocks überprüfen. Die anderen 3 Festplatten, die nicht im RAID Verbund sind, habe ich, um Fehlerquellen auszuschließen, ausgebaut. Diese überprüfe ich gerade und formatiere sie bei der gelegenheit in ext4 um.

iotop

Das Problem besteht jedenfalls weiterhin, zwar nicht ständig, aber manchmal. Wenn das Problem auftaucht, merke ich das sogar an der SSH Verbindung, die sehr träge und verzöhert zu sein scheint. Sehr nützlich ist dabei das Tool iotop, welches, wie der Name vermuten lässt, I/O Aktivitäten und die dazugehörigen Prozesse anzeigt. Besonders interessant ist dort die Spalte IO, welches die Schreib- und Leseaktivitäten eines Prozesses anzeigt. Dank iotop konnte ich das Problem gut eingrenzen, denn manchmal belegt der Prozess [jbd2/md3-8] die Festplatte zu 99%. Das Journaling Block Device, wenn ich es recht verstehe, kümmert sich um das Journal, also quasi das Inhaltverzeichnis des Dateisystems. Nach kurzer Suche im Internet scheinen einige Leute damit Probleme zu haben, aber das Journal zu deaktivieren, wie teilweise empfohlen, halte ich für zu riskant, da bei einem Absturz die Gefahr des Datenverlustet groß ist.

Hopple, gerade eben ist das Problem wieder aufgetreten:

1
109 be/3 root        0.00 B/s    0.00 B/s  0.00 % 99.99 % [jbd2/md2-8]

top

Ebenfalls interessant ist das Tool top, welches laufende Prozesse inklusive CPU Auslastung, Arbeitsspeicherverbrauch und vieles mehr anzeigt. Meistens benutze ich htop, weshalb ich wahrscheinlich erst jetzt über das Problem gestolpert bin. Interessant ist vor allem die 3. Zeile von top:

1
Cpu(s):  2.1%us,  6.6%sy,  0.0%ni, 87.4%id,  0.7%wa,  0.0%hi,  3.3%si,  0.0%st

Dort wird angezeigt, mit welchen “Aufgaben” der Prozessor beschäftigt ist (User Prozesse, System Prozesse, “genicete” Prozesse, Leerlauf und IO Wait. Dieser Wert sagt aus, wie oft der Prozessor auf die Festplatte warten muss. Bei einem nicht stark genutzem Rechner wie meinem Heimserver / HTPC sollte der Wert normalerweise zwischen 0% und 2% liegen. Wenn die Probleme auftreten liegt der Wert aber im Schnitt bei 50%.

Noch ein Hoppla, beim schreiben des Artikel ist das Problem wieder aufgetreten, deshalb hier die gleiche Zeile noch einmal zum Vergleich:

1
Cpu(s):  2.9%us,  8.4%sy,  7.2%ni, 45.0%id, 36.5%wa,  0.0%hi,  0.0%si,  0.0%st

Wie gesagt, der IO Wait Wert schwankt sehr stark.

dd

Ebenfalls sehr nützlich ist das kleine Tool dd, welches ich normalerweise nutze, um Images von Datenträgern zu erstellen. Generell kann man damit alle möglichen Daten hin und her schieben, auch einen Haufen Nullen in einen Datei auf die Festplatte:

1
2
$ dd if=/dev/zero of=/home/finn/test.img
1073741824 Bytes (1,1 GB) kopiert, 67,933 s, 15,8 MB/s

Das Problem ist, dass dd sehr unterschiedliche Werte liefert. Wenn das Problem nicht auftritt, kann ich mit 80 – 100 MB/s auf die Platte schreiben. Vor ein paar Minuten ist das Problem wieder aufgetreten und ich kann mit ca. 16 MB/s schreiben, manchmal aber auch nur mit 2 – 4 MB/s.

Möchte man die Datei lesen, schickt man sie am besten ins Nirvana, aber vorsicht ist geboten. Der Linux Kernel beherrscht ein wunderbares disk caching, weshalb bei kleinen Dateien ein deutlich zu hoher Wert heraus kommt. Möchte man genauere Werte haben, sollte man eine Datei erstellen, dessen Größe ein deutliches Vielfaches vom Arbeitsspeicher ist.

1
2
$ sudo dd if=/home/finn/test.img of=/dev/null
1073741824 Bytes (1,1 GB) kopiert, 2,8983 s, 370 MB/s

Und nun?

Es gibt noch viel mehr Programme, mit denen sich das System genauer untersuchen lässt, z.B. iostat, isag, mpstat, pidstat, sadf, sar. Diese sind bei Arch Linux alle im Paket sysstat enthalten. Ich kenne diese Programme aber noch nicht und muss ich erst noch durch ein paar Manpages kämpfen, bevor ich irgendwelche Aussagen treffen kann. Ich halte es auch für unwahrscheinlich, dass es an meinem RAID liegt, da es im Moment nicht synchronisiert, das Problem aber trotzdem besteht. Außerdem lief es eine ganze Zeit lang sehr gut. Theoretisch kommt eine defekte Festplatte in Frage, aber noch weiß ich es nicht. Generell ist es ja sehr seltsam, dass das Problem kommt und geht. Es scheint reiner Zufall zu sein, ich weiß nicht, wie ich das Problem auslösen kann.

Ich hoffe, dass ich bald neues berichten kann…

UPDATE 28.03.2012

Scheinbar habe ich die Ursache des Problems so halbwegs gefunden. Dass jbd2 als Ursache in Verdacht gekommen ist, hat mich etwas in die irre geführt. Da ich festgestellt habe, dass dieses Problem mit deaktiviertem tvheadend nicht aufgetreten ist, habe ich den Fehler dort vermutet. Tatsächlich aber war es die Option “Deaktiviere EPG Aktualisierungen während der TV Wiedergabe” in XBMC, welche nicht aktiviert war.

Ich hoffe, dass nun weiterhin alles flüssig läuft, aber ich bin guter Dinge. Endlich laufen nun auch 2 TV Karten parallel problemlos, so dass ich endlich Bob Ross aufnehmen kann, ohne dass sich die Karten in die Quere kommen.

So “repariere” ich einen Rechner

Ich gebe zu, der Titel ist schlecht gewählt. Neben meinem Informatikstudium arbeite ich ein wenig selbstständig und “repariere” Computer für diejenigen, die mit den Rechenmaschinen weniger am Hut haben. Natürlich habe ich hierfür ein Gewerbe angemeldet.

Für viele ist dieser Artikel vielleicht uninteressant oder nichts Neues, aber vielleicht hilft es dem einen oder anderen weiter oder vielleicht hat jemand noch ein paar Tipps für mich. Die meisten Leser hier kennen das folgende wahrscheinlich schon, aber wenn ich nur einer Person damit helfen kann, hat sich dieser Artikel gelohnt. Ich gebe hier lediglich grob meine eigene Vorgehensweise wieder, für Sinnhaftigkeit und Richtigkeit übernehme ich keine Verantwortung.

Nehmen wir also einfach mal an, wir haben einen Rechner, der irgendwelche Probleme macht.

1. Hardware-Check

Lässt sich der Rechner überhaupt einschalten? Wenn nicht, dann liegt die erste Vermutung beim Netzteil, welches bei einem Desktop PC schnell ausgetauscht ist oder bei einem Notebook mit einem Universal-Netzteil getestet werden kann. Wenn der Rechner sich trotz neuem Netzteil nicht einschalten lässt, sollte man den Ein/Aus Schalter überprüfen, indem man das Mainboard an den entsprechenden 2 Pins kurzschließt. (Ja, ich hatte selbst schon defekte Schalter als Ursache!)

Rührt sich immer noch nichts beim Einschalten, ist wahrscheinlich das Mainboard defekt, möglicherweise auch mehr. Wenn der Prozessor defekt ist, lässt sich der Rechner meistens noch einschalten, die Lüfter laufen, aber sonst tut sich nichts. Sehr hilfreich ist der PC-Speaker, deshalb sollte man kontrollieren, ob das Mainboard über einen solchen verfügt. Ich habe in meinem Reparatur-Koffer immer einen Speaker zum Aufstecken dabei. So lange das Mainboard noch halbwegs in Takt ist, gibt dieses verschiedene Tonfolgen aus. Im Handbuch des Mainboards kann man dann nachsehen, was diese Töne bedeuten und somit kann man das Problem meist gut eingrenzen.

Nun gut, nehmen wir an, der Rechner fährt also mehr oder weniger hoch. Im Normalfall, wenn nicht sehr dringend und expliziert anders gewünscht, führe ich anschließend ein vollständiges Backup der Festplatte(n) durch.

2. Arbeitsspeicher überprüfen

Eine Linux Live CD griffbereit zu haben ist sinnvoll, u.a. enthalten diese auch meistens memtest86, womit sich recht zuverlässig der Arbeitsspeicher überprüfen lässt. Findet dieses Programm Fehler und man möchte auf Nummer sicher gehen, muss man nach dem Einbauen des neuen Arbeitsspeichers memtest86 noch einmal ausführen. Es ist möglich, dass der Speichercontroller des Mainboard defekt ist, somit würde jeder Arbeitsspeicher als defekt erkannt werden.

3. Datensicherung

Da ich auch oft Rechner mit sehr wichtigen Daten darauf in der Hand habe, führe ich zur Sicherheit ein Backup durch, dass ich Notfalls auch wieder einspielen kann. Ich klone die Festplatte vollständig, was zwar Zeit und Platz in Anspruch nimmt, meiner Meinung nach aber das einzig Sinnvolle ist. Vorher blicke ich aber kurz in die S.M.A.R.T Werte der Festplatte, um zu sehen, ob Defekte vorliegen.

Das Backup führe ich mit dd oder ddrescue aus, eine Linux Live CD ist für diesen Zweck und auch zum Auslesen der S.M.A.R.T Werte sehr angebracht. Als Datenspeicher verwende ich entweder eine externe Festplatte oder ich sichere per Netzwerk auf meinen kleinen Heimserver, der über ein RAID1 verfügt.

Auch wenn die Festplatte laut S.M.A.R.T in Ordnung ist, kann es trotzdem sinnvoll sein, sie mit badblocks auf defekte Blöcke zu überprüfen.

ddrescue eignet sich übrigens prima, um Daten von teilweise defekten Festplatten (defekte Blöcke) zu retten, ich habe dazu schon einmal etwas geschrieben.

3. Optionaler Stress-Test

Vermutet man immer noch einen Hardware-Defekt, sollte man einen Stress-Test oder Burn-In-Test durchführen. D.h. man belastet die komplette Hardware so stark wie möglich und schaut, ob der Rechner abstürzt. Alternativ gibt es noch Tools wie Prime95 oder besser mprime. Letztere werden oft von Overclockern genutzt, um zu sehen, ob der Prozessor nach dem Übertakten noch vernünftig arbeitet.

4. Hardware in Ordnung, aber…

Das Betriebssystem, sprich Windows, verweigert seinen Dienst. Tja, es gibt leider unzählige Ursachen dafür, die sich selbst nicht alle verstehe (wie denn auch, ist ja closed source). Gängige Probleme sind ein defekter Master Boot Record oder defekter Boot Sektor, kurz danach googlen und man findet, dass diese sich mit fixmbr bzw fixboot (Windows XP) oder mit bootsect (Windows Vista / 7) reparieren lassen. Windows ist echt nicht mein Lieblingsthema, u.a. kann eine Reparaturinstallation oder Systemwiederherstellung hilfreich sein.

Das häufigste Problem aber, dem ich begegne, ist Virenbefall, wer hätte das gedacht. Erst in dieser Woche hatte ich ein Notebook mit einem “BKA Trojaner” und eins mit einem “GEMA Trojaner”.

5. Viren entfernen

Ich habe Leute gesehen, die aus Unwissenheit gar keinen Virenscanner hatten. Schlimmer ist es aber, wenn jemand bewusst alle Updates ignoriert. Mit einem alten Flash Player fängt man sich schnell etwas ein, Adobe ist ja für ihre grandiose Bugvielfalt bekannt. Mir glaubt eh kaum jemand, dass Updates so wichtig sind, stattdessen kommen Fragen wie “soll ich nicht lieber einen kostenpflichtigen Virenscanner benutzen?”.

Wenn das Windows noch startet und nicht zu viele Systemdateien befallen sind, hat man gute Chancen, den Virus mit gängigen Mitteln zu entfernen, für genauere Informationen kann ich Trojaner-Board.de empfehlen.

Außerdem ist zu erwähnen, dass einige Virenscanner-Hersteller auch Versionen für Linux anbieten oder auch Live-CDs mit ihren Scannern vorinstalliert, spontan fallen mir Avira AntiVir Rescue System und Kaspersky Rescue Disk ein.

Von diesen Methoden halte ich aber nicht viel, daher verschwende ich damit nie viel Zeit. Oft werden die infizierten Rechner eh nur für das Internet genutzt und umfangreiche Programme sind gar keine installiert, so dass eine Neuinstallation von Windows die schnellste und sicherste Lösung ist. Zum Glück haben wir noch das Backup der Festplatte, man kann das Image also mit Linux mounten und nach der Installation die Daten in Ruhe zurückkopieren. Vorher sollten diese natürlich mit mindestens einem Virenscanner überprüft werden.

Der Vorteil der vollständigen Datensicherung, also das Klonen der Festplatte, ist, dass ich das Image auf Wunsch für ein oder zwei Wochen aufhebe. Sollte ich irgendwelche Daten vergessen haben, kann ich sie in dieser Zeit nachliefern.

6. Fazit

Natürlich ist eine Neuinstallation von Windows kein Meisterstück, mit einem Handbuch und Wiederherstellungs-CDs kann das eigentlich jeder. Ich bin aber der Meinung, dass es, wenn es die Zeit zulässt, sinnvoll ist, auch die Hardware ein wenig zu überprüfen. Sicherlich gibt es auch Leute, die so etwas besser können als ich oder, weil sie es Hauptberuflich machen, immer neue Reserve-Hardware liegen haben, aber dafür behaupte ich, dass ich das beste Preis-Leistungs-Verhältnis habe ;-)

Wenn die Fertigstellung des Rechners nicht eilig ist oder einfach nur gründlich erfolgen soll, dann vergehen manchmal 1-2 Tage. Manchmal vergeht ein Tag, bevor ich überhaupt mit der Neuinstallation anfangen kann. Für eilige Fälle oder vor Ort ist das natürlich etwas anderes, aber ich biete jedes mal an, den Rechner genauer unter die Lupe zu nehmen. memtest86, badblocks, ddrescue, mprime usw nehmen sehr viel Zeit in Anspruch, allerdings brauche ich diese Programme nur zu starten und zu warten, der eigentlich Arbeitsaufwand beträgt also nur ein paar Minuten.

Gleichzeitig versuche ich meine Kunden etwas aufzuklären, lege ihnen die Vorteile von Firefox und Thunderbird gegenüber den Microsoft Produkten nahe und erkläre bereitwillig Kleinigkeiten wie z.B. wie die Lesezeichen funktionieren. Anstatt also jedes Mal “facebook” oder gar “facebook.com” (aaargh!!!) bei Google einzutippen, erkläre ich was eine URL oder Internetadresse ist und wofür man so etwas braucht. Nein, die Leute sind nicht dumm, es hat ihnen vorher nur keiner gesagt.

Inzwischen sind Computer und das Internet so selbstverständlich, dass man sich mit Kleinigkeiten nicht mehr beschäftigt.

Datenrettung

In letzter Zeit haben sich einige Leute  an mich gewandt, die ein Problem mit ihrem Laptop, PC oder ihrer externen Festplatte haben. In den meisten Fällen musste ihnen leider mitteilen, dass die Festplatte defekt ist. Jedenfalls hat es sich meistens um defekte Sektoren gehandelt, komplett defekt ist die Festplatte also nicht, aber ein (meistens) kleiner Teil.

Kleine Fehler können aber riesige Auswirkungen haben, der Rechner kann sich “merkwürdig” verhalten, das Betriebssystem kann Startprobleme haben oder im schlimmsten Fall gehen wichtige Dateien für immer verloren. Wenn auf dem Rechner wichtige Daten liegen, bin ich kein großer Freund des Remappings, also dem Neuzuweisen von Sektoren, so dass defekte Sektoren nicht mehr benutzt werden. Nach meiner Erfahrung vermehren sich die defekte Sektoren irgendwann, was ohne Backup katastrophal sein kann.

Wenn der Rechner aber nur zum gelegentlichen Surfen genutzt wird, ist alles halb so wild, ich hoffe ich komme demnächst dazu etwas über Remapping bei ext und NTFS Partitionen zu schreiben.

Lange Rede, kurzer Sinn, oft habe ich es aber mit wichtigen Daten zu tun, von denen meine Kunden keine oder nur veraltete Backups haben. Dann geht es darum, die Festplatte durch eine neue zu ersetzen und von der alten möglichst viele Daten zu retten.

Wie so oft ist Linux (egal ob installiert oder nur eine Live-CD) dein Freund und Helfer. Um es einfach zu machen, hat Daniel bereits einen sehr guten Beitrag zum Thema ddrescue geschrieben. Dieser Beitrag ist vor allem für Anfänger lesenswert, aber auch ich habe einiges neues erfahren.

Gewöhnlicherweise starte ich den betroffenen Rechner von einer Live-CD, installiere anschließend das Paket gddrescue

1
sudo apt-get install gddrescue

und weil so die Festplatte nicht gemountet ist, kann ich auch gleich mit der Datenrettung beginnen. Der erste Durchlauf wird gestartet

1
sudo ddrescue -n /dev/sda rettungsimage.iso logdatei.log

und kopiert die lesbaren Daten in die Datei rettungsimage.iso. Defekte Blöcke werden in der logdatei.log notiert und im zweiten Durchgang erneut getestet:

1
sudo ddrescue -RT /dev/sda rettungsimage.iso logdatei.log

Wie gesagt, vielen Dank an Daniel, von dem ich das hier habe.

Entweder kann man das erstellte Image anschließend auf die neue Festplatte zurück kopieren

1
sudo dd if=rettungsimage.iso of=/dev/sda

oder man mountet das Image, am besten im Ubuntuusers Wiki nachzulesen.

Das wollte ich schon lange mal bloggen, aber weil es eigentlich kein eigener Content ist, bin ich bisher nicht dazu gekommen. Aber gibt ja eh schon alles im Internet ;-)

mfg
Finn