MemTest86 + (die in Ubuntu 13.04 enthaltene Version) sagt
Failing address: 002f796c48 - 759.5 MB
Was soll ich tun? Geben Sie im Kernelparameter memmap
an, dass dieser Bereich umgangen werden soll.
Ich habe versucht, memtester 770MB
auszuführen, und er sagt alles ist in Ordnung, daher sieht es nicht so aus, als würden die Anzeigen des MemTest von Anfang an einen Fehler in den 759,5 MB bedeuten.
Wie interpretiert man diese MemTest-Anzeige, um memmap
?
Ich habe jetzt kein Geld, um neuen RAM zu kaufen, und der Fehler scheint einfach zu sein. Ich hoffe, ich kann ihn einfach überschreiben.
Kommentare
- FWIW, der Kernel markiert bestimmte Seiten als “ reserviert „, wenn er ein fehlerhaftes Segment erkennt kann aber wiederhergestellt werden. Zeigt die Ausgabe von “ free -m “ Zweierpotenzen für die Summen? Ich erwähne dies als Erklärung, warum memtester sieht den fehlerhaften RAM nicht, aber memtest86 + kann.
- Sieht ‚ nicht wie Zweierpotenzen aus: i.stack.imgur.com/l86L1.png
- Wenn ein Fehler erkannt wird (wenn Sie sogar einen ecc-RAM haben), ist es im Allgemeinen zu spät. Außerdem meldet free -m niemals eine gleichmäßige Zweierpotenz, da sowohl das BIOS als auch der Kernel RAM reservieren.
- Ich träume davon, einen ECC-Laptop zu kaufen, konnte aber keine verfügbaren Angebote finden = „3a2c73cbe2“>
existiert nicht.
Antwort
memmap
Es gibt dieses Tutorial mit dem Titel: Bad Memory HowTo , in dem das Deaktivieren des Speichers über den Kernel mithilfe von memmap
Argument an den Kernel. Je nach Howto haben Sie zwei Möglichkeiten, wenn es um memmap
geht:
- Schalten Sie alles nach dem schlechten Speicher aus –
(mem=###M option)
- Schalten Sie nur den Speicher um den fehlerhaften Speicher aus –
(memmap=#M$###M option)
Mit der ersten Option Wenn memtest meldet, dass bei 600 MB fehlerhafter Speicher vorhanden ist, können Sie den Arbeitsspeicher von diesem Punkt bis zum Ende des Arbeitsspeichers folgendermaßen deaktivieren:
mem=595M
Wenn vorhanden “ Bei schlechtem RAM bei 802M und 807M können Sie einen 10M-RAM-Abschnitt ab 800M wie folgt deaktivieren:
memmap=10M$800M
HINWEIS: Dadurch werden die 10M nach der 800M-Basisadresse auf die schwarze Liste gesetzt. Sie sollten anschließend memtest86+
ausführen, um zu bestätigen, dass dieses Argument vorliegt richtig.
BadRAM
Für Ubuntu ist ein Patch namens BadRam verfügbar. Dieser wird hier in diesem Beitrag mit dem Titel BadRAM in der Ubuntu Community Site.
Nachdem Sie den Patch mithilfe der Details auf dieser Seite auf den Kernel angewendet haben, nehmen Sie Änderungen an Ihrem Grub2-Setup vor:
Auszug aus dieser Site für Grub2
Die GRUB2-Konfigurationsdatei in Natty enthält eine Zeile zum Konfigurieren von Ausschlüssen für fehlerhafte Kernel-RAMs. Ich gehe also davon aus, dass dies die bevorzugte Methode ist, um einen Speicherabschnitt zuzuordnen, der Fehler anzeigt. Die Zeile, die ich festgelegt habe, war
GRUB_BADRAM = „0x7DDF0000,0xffffc000“
Auf jeder Website, die ich finden konnte, wurde vorgeschlagen, dies festzulegen, indem Sie memtest86 ausführen und sich das anzeigen lassen BadRAM-Einstellungen. memtest86 gab mir eine Seite mit Dingen, die ich hätte eingeben müssen. Ich konnte sehen, dass sich alle Adressen in einem 16K-Block befanden, daher wollte ich diesen 16K-Block nur außer Betrieb zuordnen. So habe ich den richtigen Eintrag generiert.
Der erste Parameter ist einfach. Das ist die Basisadresse des fehlerhaften Speichers. In meinem Fall konnte ich sehen, dass alle fehlerhaften Adressen größer als 0x7DDF0000 und kleiner als 0x7DDF4000 waren. Also habe ich den Anfang des 16K-Blocks als meine Startadresse genommen.
Der zweite Parameter ist eine Maske. Sie setzen 1s, wo der gewünschte Adressbereich dieselben Werte hat, und 0s, wo er variieren wird. Dies bedeutet, dass Sie Ihren Adressbereich so auswählen müssen, dass nur die Bits niedriger Ordnung variieren. Wenn ich meine Adresse betrachte, ist der erste Teil der Maske einfach. Sie möchten mit 0xffff beginnen. Für das nächste Knabbern werde ich mit Bitmaps erklären. Ich möchte von 0000 bis 0011 reichen. Die Maske für Badram wäre also 1100 oder ein Hex c. Die letzten 3 Knabbereien müssen alle Nullen in der Maske sein, da der gesamte Bereich zugeordnet werden soll. Wir erhalten also ein Gesamtergebnis von 0xffffc000.
Nachdem ich diese Zeile in / etc / default / grub gesetzt hatte, führte ich sudo update-grub aus und startete neu und mein fehlerhafter Speicher wurde nicht mehr verwendet. Mit dieser Methode sind keine Kernel-Patches erforderlich, um fehlerhaften Speicher zuzuordnen.
Follow-up Nr. 1
Durchsuchen Sie die Wikipedia-Seite nach memtest86 + und geben Sie Folgendes an:
Auszug aus Memtest86-Wikipedia-Seite
Ab Memtest86 2.3 und Memtest86 + 1.60 kann das Programm eine Liste fehlerhafter RAM-Regionen in dem Format ausgeben, das vom BadRAM-Patch für den Linux-Kernel erwartet wird. Mit diesen Informationen kann ein Linux-System ein RAM-Modul zuverlässig verwenden, selbst wenn es einige fehlerhafte Bits aufweist. Grub2 kann die gleichen Informationen an einen nicht gepatchten Kernel liefern, wodurch die Notwendigkeit des BadRAM-Patches entfällt.
Auch ich bin auf diesen Gentoo-Seite , auf der die memmap=...
unter Verwendung einer Hex-Adresse angegeben wurde, sodass Sie sie folgendermaßen angeben können:
memmap=5M$0x2f796c48
Das 5M ist nur eine Vermutung. Natürlich können Sie es niedriger oder höher einstellen, je nachdem, wie viel RAM in dieser Region Sie weglassen möchten / müssen.
Schließlich können Sie die Größe auch in hexadezimaler Form angeben:
memmap=0x10000$0x2f796c48
Würde 64 KB ab Adresse 0x2f796c48 ignorieren.
Referenzen
Kommentare
- “ 800M bis 804M “ soll “ 800M bis 810M “ I sein Nehmen wir an …
- Es kann sein, aber was ich geschrieben habe, ist auch in Ordnung, obwohl es ‚ mehr Speicher als die 4M zwischen 800M und 810M wegwirft.
- 1. Ich kenne die Option
memmap
, aber die Frage betrifft eher die Interpretation der Ausgabe von memtest86 +. Ich habe ein spezielles Beispiel für die Ausgabe von memtest86 + angegeben und gefragt Hilfe bei der Konfiguration vonmemmap
entsprechend in diesem speziellen Fall. 2. Sie sollten anschließend memtest86 + ausführen, um zu bestätigen, dass dieses Argument korrekt ist. “ – memtest86 + wird vor einem Betriebssystemkern ausgeführt, daher bezweifle ich dies ernsthaft Diememmap
Linux-Kerneloption kann sich darauf auswirken. - @Ivan, 1. Ich dachte, es sei angesichts der Beispiele, die ich aufgenommen habe, offensichtlich, aber Sie ‚ Ich muss etwas sagen wie:
memmap=5M$759M
für Ihren speziellen Fall, wenn memtest86 + bei 759,5 MB fehlschlägt. 2. Ich meinte, dass Sie die Optionmemmap=...
auch an memtest86 + übergeben sollten. Das war von mir nicht getestet / unbestätigt, aber etwas, das Sie möglicherweise mit memtest86 + tun können. - Ok, danke. Ich war mir nicht sicher, was “ 002f796c48 – 759,5 MB “ bedeutet (möglicherweise könnten es 759,5 Megabyte nach der Adresse 002f796c48 oder so sein ) und ich habe nie vermutet, dass ich Linux-Kernel-Parameter an MemTest86 + übergeben kann (ich dachte, es selbst hätte nichts mit Linux zu tun).
Antwort
Memtest86 + (ich habe 4.20 verwendet) kann ein Badram-Format direkt ausgeben.
-
Drücken Sie „c“, um zum Konfigurationsdialog zu gelangen.
-
Dann „4“ für „Fehlerberichtsmodus“
-
Dann „3“ für „BadRAM-Muster“
Die Ausgabe ändert sich von einer Liste einzelner Testfehler zu einer Reihe von badram = -Zeilen, die jeweils einen weiteren neuen fehlerhaften Sektor enthalten. Da die Linien benachbarte Segmente anhängen und zusammenführen, können Sie den Test einfach über Nacht ohne Kopf ausführen und die endgültige gedruckte Linie verwenden (wenn Sie jedoch ein wirklich schlechtes Dimm haben, ist das weniger genaue Format „5 Megabyte um diesen Punkt“ wahrscheinlich etwas kürzer ).
Endergebnis:
Kommentare
- Wenn ich nicht ‚ das nicht von Hand kopieren und stattdessen ohne erneute Tippfehler an GRUB übergeben müsste, wäre das fantastisch.
- Ich habe ein Foto davon gemacht (Kamerahandy), es in GIMP geladen, = > grayscale = > invert = > Kontrast / Gamma übergeben Sie es dann an
tesseract ${IMG} stdout
. Überprüfen und korrigieren Sie dann die Zeile, bevor Sie sie in / etc / default einfügen / grub … Wahrscheinlich hat es genauso lange gedauert, es sofort manuell einzugeben ^^ - Auf jeden Fall mehr Spaß als manuell ugh
Antwort
Sehr schmutzige und sehr nette Umgehung: Führen Sie einen User Space Memtester aus und warten Sie, bis er angezeigt wird findet einen Fehler. Lassen Sie es zum Beispiel bei 0xfce2ea31 sein.
Führen Sie dann erneut memtester aus, aber auf dieser physischen Adresse, also:
memtester -p 0xfce20000 64k 128
Zu sein Sicher, es ist besser, wenn Sie mehr als die Seite der problematischen Adresse opfern.Hier haben wir 64 KByte um die fehlerhafte Adresse geopfert.
Wenn alles gut gegangen ist, wird der fehlerhafte Speicherort wieder viel schneller gefunden.
Unterbrechen Sie dann den Memtester-Prozess mit einer Strg / z.
Folge: Bis der Memtester-Prozess angehalten wird, wird nicht mehr weggenommen Ressource, aber kein anderer Prozess kann auf den fehlerhaften Speicher zugreifen . Da er vom Memtester zugewiesen wird.
Besonders nützlich auf großen Remote-Servern. Der angehaltene Prozess kann Bleiben Sie, bis der neue RAM nicht ausgeliefert wird. Oder vielleicht bis zum nächsten Weihnachten, wenn eine Ausfallzeit kein so großes Problem darstellt.
Kommentare
- Anstelle dieses Tricks können Sie auch das Tool
chmem
in util-linux verwenden, um den Kernel anzuweisen, einen bestimmten Speicherbereich offline zu schalten (die Daten an einen anderen Ort zu verschieben und die Seiten dann nie wiederzuverwenden). . - @TooTea Ich habe dieses Tool auf mehreren Computern ausprobiert und es konnte nicht d Aktivieren Sie einen einzelnen Speicherblock.