MemTest86 + (versiunea inclusă în Ubuntu 13.04) spune
Failing address: 002f796c48 - 759.5 MB
Ce ar trebui să specifică în parametrul kernel memmap
pentru a ocoli această zonă?
Am încercat să rulez memtester 770MB
și scrie totul este ok, deci nu pare că indicațiile MemTest înseamnă o eroare în 759,5 MB de la început.
Cum se interpretează această indicație MemTest pentru a configura memmap
?
Nu am bani pentru a cumpăra RAM nouă acum și eroarea pare a fi simplă, așa că sper să o pot anula.
Comentarii
- FWIW, nucleul va marca anumite pagini ca fiind ” rezervat ” dacă detectează un segment rău dar este capabil să se recupereze. Rezultatul ” free -m ” prezintă puteri de două pentru totaluri? Menționez acest lucru ca mod de a explica de ce memtester poate nu vezi memoria RAM proastă, dar memtest86 + poate.
- Nu arata ‘ nu arata ca puterile a doi actial: i.stack.imgur.com/l86L1.png
- Până la detectarea unei erori (dacă aveți chiar ecc ram), în general este prea târziu. De asemenea, free -m nu raportează niciodată o putere egală de două, deoarece bios și kernel ambele rezervă niște ram.
- Visez să cumpăr un laptop ECC, dar nu aș putea găsi niciodată oferte disponibile, se pare că nu au ‘ nu există.
- Se pare că nucleul este și printk ‘ când găsește o pagină greșită (linia 264-265).
Răspuns
memmap
Există acest tutorial intitulat: Bad Memory HowTo care discută despre dezactivarea memoriei prin kernel folosind memmap
argument la nucleu. Conform modului în care aveți 2 opțiuni când vine vorba de memmap
:
- Opriți totul după memoria defectă –
(mem=###M option)
- Opriți doar memoria din jurul memoriei defecte –
(memmap=#M$###M option)
Cu prima opțiune, dacă memtest raportează că există o memorie proastă la 600M, atunci puteți dezactiva memoria RAM din acel moment până la sfârșitul memoriei RAM cu acest lucru:
mem=595M
Dacă există ” RAM rău la 802M și 807M, puteți dezactiva o secțiune de 10M de RAM începând de la 800M astfel:
memmap=10M$800M
NOTĂ: Aceasta va afișa pe lista neagră 10M după adresa de bază de 800M. Ar trebui să rulați memtest86+
ulterior pentru a confirma că acest argument este corect.
BadRAM
Există un patch disponibil pentru Ubuntu numit BadRam. Acesta este acoperit foarte bine aici în acest post intitulat: BadRAM pe comunitatea Ubuntu site.
După aplicarea patch-ului pe kernel folosind detaliile din acea pagină, faceți modificări la configurarea Grub2:
extras din acel site pentru Grub2
Fișierul de configurare GRUB2 din Natty are o linie pentru configurarea excluderilor ramului rău din kernel. Deci, voi presupune că acesta este modul preferat de mapare a unei secțiuni de memorie care prezintă erori. Linia pe care am setat-o a fost
GRUB_BADRAM = „0x7DDF0000,0xffffc000”
Modul sugerat de pe fiecare site web pe care l-am găsit a fost să setez acest lucru, a fost să rulez memtest86 și să-l las Setări BadRAM. memtest86 mi-a dat o pagină cu lucruri în care ar fi trebuit să intru. Am putut vedea că toate adresele erau într-un bloc de 16K, așa că am vrut doar să mapez acel bloc de 16K în afara acțiunii. Iată cum am generat intrarea corectă.
Primul parametru este ușor. Aceasta este adresa de bază a memoriei proaste. În cazul meu, am putut vedea că toate adresele defecte erau mai mari de 0x7DDF0000 și mai mici de 0x7DDF4000. Deci, am luat începutul blocului 16K ca adresă de pornire.
Al doilea parametru este o mască. Puneți 1s în care intervalul de adrese pe care îl doriți are aceleași valori și 0s în care va varia. Acest lucru înseamnă că trebuie să alegeți intervalul de adrese astfel încât să varieze numai biții de comandă mică. Privind adresa mea, prima parte a măștii este ușoară. Vrei să începi cu 0xffff. Pentru următoarea ciugulire, vă voi explica cu hărți de biți. Vreau să variați de la 0000 la 0011. Deci, masca pentru badram ar fi 1100 sau hexagonală c. Ultimele 3 ciugulituri trebuie să fie toate 0 în mască, deoarece vrem ca toată gama să fie trasată. Deci, obținem un rezultat total de 0xffffc000.
După ce am setat această linie în / etc / default / grub, am rulat sudo update-grub și am repornit și memoria mea proastă nu mai era folosită. Nu sunt necesare patch-uri de kernel pentru a mapa memoria defectă folosind această metodă.
Urmăriți numărul 1
Căutând în pagina Wikipedia memtest86 +, se afirmă după cum urmează:
extras din pagina Wikipedia Memtest86
Începând din Memtest86 2.3 și Memtest86 + 1.60, programul poate afișa o listă de regiuni RAM proaste în formatul așteptat de patch-ul BadRAM pentru kernel-ul Linux; folosind aceste informații, un sistem Linux poate utiliza în mod fiabil un modul RAM chiar dacă are câțiva biți răi. Grub2 este capabil să furnizeze aceleași informații unui nucleu nepatched, negând necesitatea patch-ului BadRAM.
De asemenea, am dat peste acest Pagina Gentoo care a specificat memmap=...
folosind o adresă hexagonală, astfel încât să o puteți specifica astfel:
memmap=5M$0x2f796c48
5M este doar o presupunere, evident că l-ați putea regla mai mic sau mai mare, în funcție de cât de mult RAM doriți / trebuie să omiteți.
În sfârșit, puteți specifica dimensiunea și în hexagonal:
memmap=0x10000$0x2f796c48
Ar ignora 64KB începând de la adresa 0x2f796c48.
Referințe
Comentarii
- ” 800M până la 804M ” se presupune că este ” 800M până la 810M ” I presupuneți …
- Poate fi, dar și ceea ce am scris este OK, chiar dacă ‘ aruncă mai multă memorie decât 4M între 800M și 810M.
- 1. Știu despre opțiunea
memmap
, dar întrebarea este mai mult despre cum să interpretez rezultatul memtest86 +. Am dat un exemplu specific de ieșire memtest86 + și întreb pentru ajutor în configurareamemmap
în consecință în acest caz particular. 2. Ar trebui să rulați memtest86 + după aceea pentru a confirma că acest argument este corect. ” – memtest86 + rulează înainte de un kernel OS, așa că mă îndoiesc seriosmemmap
opțiunea kernel-ului Linux o poate afecta. - @Ivan, 1. Am crezut că este evident având în vedere exemplele pe care le-am inclus, dar tu ‘ ar trebui să spui ceva de genul:
memmap=5M$759M
pentru cazul tău, dat fiind că memtest86 + eșuează la 759,5 MB. 2. Am vrut să spun că ar trebui să treceți opțiuneamemmap=...
și la memtest86 +. Acest lucru a fost netestat / neconfirmat de mine, dar ceva ce ați putea face cu memtest86 +. - Bine, mulțumesc. Nu eram sigur ce înseamnă ” 002f796c48 – 759,5 MB ” (poate ar putea fi 759,5 mega după adresa 002f796c48 sau ceva de genul acesta ) și nu am bănuit niciodată că pot trece parametrii kernel-ului Linux către MemTest86 + (am crezut că nu are nimic de-a face cu Linux).
Răspuns
Memtest86 + (am folosit 4.20) poate scoate direct un format badram.
-
Apăsați „c” pentru a accesa dialogul de configurare
-
Apoi „4” pentru „Modul de raportare a erorilor”
-
Apoi „3” pentru „Modele BadRAM”
Rezultatul se va schimba dintr-o listă de eșecuri individuale de testare într-o serie de linii badram =, fiecare conținând încă un nou sector rău. Deoarece liniile se atașează și se unesc segmentele adiacente, puteți rula testul fără cap peste noapte și utilizați linia finală tipărită (deși, dacă aveți o intensitate redusă, formatul mai puțin precis „5 megi în jurul acestui punct” va fi probabil puțin mai scurt ).
Rezultatul final:
Comentarii
- Acum, dacă nu ar fi ‘ nu ar trebui să copiez acest lucru de mână și să îl predez în GRUB fără erori de retipare, ar fi fantastic.
- Ceea ce am făcut este să îi fac o fotografie (telefon cu cameră foto), să o încarc în GIMP, = > grayscale = > invert = > contrast / gamma apoi dați-l către
tesseract ${IMG} stdout
.. apoi verificați și corectați linia înainte de a o insera în / etc / default / grub … Probabil a durat atâta timp cât ați introdus-o manual imediat ^^ - Cu siguranță mai distractiv decât să o faceți manual ugh
Răspuns
Rezolvare foarte murdară și foarte frumoasă: rulați un tester de spațiu utilizator, așteptați până găsește o eroare. Lăsați-l, de exemplu, la 0xfce2ea31.
Apoi rulați din nou memtester, dar pe acea adresă fizică, deci:
memtester -p 0xfce20000 64k 128
To be sigur, este mai bine dacă sacrificați mai mult decât pagina adresei problematice.Aici am sacrificat 64kByte în jurul adresei defecte.
Dacă totul a mers bine, va găsi din nou locația defectă a memoriei, mult mai repede, din nou.
Apoi, suspendați procesul de testare cu un ctrl / z.
Consecință: până când procesul de testare este suspendat, nu va lua mai mult resursă, dar niciun alt proces nu va putea accesa memoria defectă . Deoarece va fi alocat de memtester.
Deosebit de util pe servere mari, la distanță. Procesul suspendat poate rămâneți până când noua memorie RAM nu este livrată. Sau poate până la Crăciunul următor, când un timp de nefuncționare nu va fi o problemă atât de mare.
Comentarii
- În loc de acest truc, puteți utiliza, de asemenea, instrumentul
chmem
din util-linux pentru a spune nucleului să scoată un anumit interval de memorie offline (mutând datele în altă parte și apoi să nu reutilizați niciodată paginile) . - @TooTea Am încercat acest instrument pe mai multe mașini și nu a putut d activați un singur bloc de memorie.