Jede Hardware geht irgendwann einmal kaputt. Besonders wenn Programme aus unerfindlichen und nicht reproduzierbaren Gründen abstürzen, der Kernel Segfaults protokolliert oder gar der Server nicht mehr startet, ist guter Rat teuer. Eine Ursache kann defekter RAM sein.
Für den Rechner zu Hause ist ein Speichertest kein Problem. Viele Distributionen integrieren memtest+ in das GRUB-Startmenü, mit dem sich ein umfangreicher Speichertest ausführen läßt. Sollte der Rechner aber als sogenannter Root-Server bei einem Hoster stehen, so hat man meistens keinen Zugriff auf die Konsole und kann so auch nicht Memtest starten.
Mit einem kleinen Trick läßt sich dennoch eine erste Aussage treffen, ob evtl. der Speicher des Servers ausgetauscht werden muss. Das Vorgehen ist ziemlich einfach:
- anlegen einer Datei, die ungefähr der Größe des Arbeisspeichers entspricht
- mehrfaches Lesen der Datei und Bilden einer Checksumme über die gelesenen Daten
Da dadurch die Datei in den Speicher des Systems geladen wird, kann so die Funktion des RAMs getestet werden, der durch den Cache verwendet werden kann. Nicht testen läßt sich mit dieser Methode jedoch Speicher, der bereits für andere Prozesse reserviert ist. Um möglichst viel Speicher für den Cache verwenden zu können empfiehlt es sich deshalb, in ein evtl. durch den Hoster bereitgestelltes Rescue-System zu booten und den Test dann auszuführen.
Eine Datei mit einer Größe von 32 GB läßt sich z.B. mit folgendem Kommando sehr schnell erstellen:
fallocate -l 32G largefile
Von fallocate unterstützte Dateisysteme sind btrfs, ext4, ocfs2 und xfs. Sollte fallocate nicht verfügbar sein oder das Dateisystem einen anderen Typ haben kann auf das Kommando dd zurückgegriffen werden:
dd if=/dev/zero of=largefile bs=32G count=1
dd muss unter Umständen die 32 GB echt lesen und schreiben, was auf langsamen Controllern und Platten eine gewisse Zeit dauern kann.
Anschließend ließt man die Datei mehrfach ein und erstellt eine Prüfsumme über die gelesenen Daten:
md5sum largefile; md5sum largefile; md5sum largefile
Sollte die Ausgabe von md5sum unterschiedlich sein, so liegt ein Hardwaredefekt vor.
Genau mit dieser Vorgehensweise habe ich meinen Root-Server heute beim Hoster in die Reparatur geschickt, welche inkl. Diagnose erfreulicherweise weniger als eine halbe Stunde gedauert hat.
Titelbild: Laserlicht, RAM-Chip
Die Alternative wäre memtest64+ - das hat bei mir auch schon so einige Probleme am RAM identifiziert. Oder eben eine Memtester CD booten, sofern man die Möglichkeiten dazu hat.
Lokal ist das natürlich alles kein Problem. Remote stand jedoch kein Image mit Memtest+ zur Verfügung, deswegen der Umweg im Rescue-System mit einer Cache-Datei.