Hur svartlistar jag en korrekt dålig RAM-sektor enligt MemTest86 + felindikering?

MemTest86 + (versionen som ingår i Ubuntu 13.04) säger

Failing address: 002f796c48 - 759.5 MB 

Vad ska jag specificera i memmap kärnparametern för att kringgå detta område?

Jag har försökt köra memtester 770MB och det säger allt är ok så det ser inte ut att MemTest-indikationerna betyder ett fel i 759,5 MB från början.

Hur man tolkar denna MemTest-indikation för att konfigurera memmap?

Jag har inga pengar för att köpa nytt RAM nu och felet verkar vara singel så jag hoppas att jag bara kan åsidosätta det.

Kommentarer

  • FWIW, kärnan markerar vissa sidor som " reserverade " om den upptäcker ett dåligt segment men har möjlighet att återhämta sig. Visar utdata från " gratis -m " befogenheter på två för totalen? Jag nämner detta som en sätt att förklara varför memtester kan ser inte det dåliga RAM-minnet men memtest86 + kan.
  • Ser inte ' t ut som krafter för två aktivt: i.stack.imgur.com/l86L1.png
  • När ett fel upptäcks (om du ens har ecc-ram) är det i allmänhet för sent. Gratis -m rapporterar aldrig en jämn effekt på två eftersom bios och kärnan båda reserverar en ram.
  • Jag drömmer om att köpa en ECC-bärbar dator men kunde aldrig hitta några tillgängliga erbjudanden, ser ut som om de inte ' finns inte.
  • Ser ut som att kärnan också printk ' s när den hittar en dålig sida (rad 264-265).

Svar

memmap

Det finns denna handledning med titeln: Dåligt minne HowTo som diskuterar inaktivera minne via kärnan med memmap argument till kärnan. Enligt hur du har två alternativ när det gäller memmap:

  • Stäng av allt efter det dåliga minnet – (mem=###M option)
  • Stäng bara av minnet runt det dåliga minnet – (memmap=#M$###M option)

Med det första alternativet, om memtest rapporterar att det finns dåligt minne vid 600M kan du inaktivera RAM-minnet från den punkten till slutet av RAM-minnet med detta:

 mem=595M 

Om det finns ” s dåliga RAM-minne vid 802M och 807M kan du inaktivera ett 10M-minne med RAM som börjar vid 800M så här:

memmap=10M$800M 

OBS: Detta kommer att svartlista 10 M efter 800 M-basadressen. Du bör köra memtest86+ efteråt för att bekräfta att detta argument är rätt.

BadRAM

Det finns en patch tillgänglig för Ubuntu som heter BadRam. Det täcks väldigt bra här i det här inlägget med titeln: BadRAM på Ubuntu-communityn webbplats.

Efter att du har applicerat korrigeringen på kärnan med hjälp av detaljerna från den sidan gör du ändringar i din Grub2-installation:

utdrag från den webbplatsen för Grub2

GRUB2-konfigurationsfilen i Natty har en rad för att konfigurera undantag för kärnans dåliga ram. Så jag antar att det är det föredragna sättet att kartlägga en del av minnet som visar fel. Linjen jag ställde in var

GRUB_BADRAM = ”0x7DDF0000,0xffffc000”

Det föreslagna sättet på varje webbplats jag kunde hitta var att ställa in detta var att köra memtest86 och låta det visa dig BadRAM-inställningar. memtest86 gav mig en sida med saker jag skulle ha behövt skriva in. Jag kunde se att alla adresser fanns i ett 16K-block, så jag ville bara kartlägga det 16K-blocket ur spel. Så här genererade jag rätt post.

Den första parametern är enkel. Det är basadressen till det dåliga minnet. I mitt fall kunde jag se att alla dåliga adresser var större än 0x7DDF0000 och mindre än 0x7DDF4000. Så jag tog början på 16K-blocket som min startadress.

Den andra parametern är en mask. Du sätter 1s där adressintervallet du vill dela samma värden och 0s där det kommer att variera. Det betyder att du måste välja ditt adressintervall så att endast bitarna med låg ordning varierar. När jag tittar på min adress är den första delen av masken lätt. Du vill börja med 0xffff. För nästa nibble kommer jag att förklara med bitkartor. Jag vill sträcka sig från 0000 till 0011. Så, masken för badram skulle vara 1100 eller en hex c. De sista 3 nibblarna måste vara alla 0 i masken, eftersom vi vill att hela sortimentet ska kartläggas. Så vi får ett totalt resultat av 0xffffc000.

Efter att ha ställt in denna rad i / etc / default / grub sprang jag sudo update-grub och startade om och mitt dåliga minne användes inte längre. Inga kärnkorrigeringar behövs för att kartlägga dåligt minne med den här metoden.

Uppföljning # 1

Letar igenom wikipedia-sidan för memtest86 + står följande:

utdrag från Memtest86 wikipedia-sida

Från och med Memtest86 2.3 och Memtest86 + 1.60 kan programmet mata ut en lista med dåliga RAM-regioner i det format som förväntas av BadRAM-korrigeringsfilen för Linux-kärnan; med hjälp av denna information kan ett Linux-system pålitligt använda en RAM-modul även om den har några dåliga bitar. Grub2 kan leverera samma information till en kärna som inte har lagts till, vilket förnekar behovet av BadRAM-korrigeringsfilen.

Jag stötte också på den här Gentoo-sida som specificerade memmap=... med hjälp av en hex-adress, så att du kunde specificera den så här:

memmap=5M$0x2f796c48 

5M är bara en gissning, självklart kan du justera den lägre eller högre beroende på hur mycket RAM-minne runt den regionen du vill / behöver utelämna.

Slutligen kan du också ange storleken i hex:

memmap=0x10000$0x2f796c48 

Skulle ignorera 64KB: s från adress 0x2f796c48.

Referenser

Kommentarer

  • " 800M till 804M " ska vara " 800M till 810M " I antar …
  • Det kan vara men det jag skrev är också OK, även om det ' s kasta bort mer minne än 4M mellan 800M till 810M.
  • 1. Jag vet om alternativet memmap men frågan handlar mer om hur man tolkar memtest86 + -utmatningen. Jag har gett ett specifikt exempel på memtest86 + -utmatning och fråga för hjälp med att konfigurera memmap i enlighet med detta i detta specifika fall. 2. Du bör köra memtest86 + efteråt för att bekräfta att detta argument är korrekt. " – memtest86 + kör före en OS-kärna så jag tvivlar allvarligt memmap Linux-kärnalternativet kan påverka det.
  • @Ivan, 1. Jag tyckte att det var uppenbart med tanke på de exempel jag inkluderade, men du ' d måste säga något som: memmap=5M$759M för ditt specifika fall, med tanke på att memtest86 + misslyckas med 759,5 MB. 2. Jag menade att du skulle skicka alternativet memmap=... till memtest86 + också. Det var inte testat / obekräftat av mig men något som du kanske kan göra med memtest86 +.
  • Ok, tack. Jag var inte säker på vad " 002f796c48 – 759,5 MB " betyder (kanske det kan vara 759,5 meg efter 002f796c48-adressen eller något liknande ) och jag har aldrig misstänkt att jag kan skicka Linux-kärnparametrar till MemTest86 + (jag trodde att det i sig inte var något att göra med Linux).

Svar

Memtest86 + (jag använde 4.20) kan skicka ett badram-format direkt.

  1. Tryck på ”c” för att nå konfigurationsdialogen dialogrutan för memtestkonfiguration

  2. Sedan ”4” för ”Felrapportläge”

    memtest-felrapportlägesdialog

  3. Sedan ”3” för ”BadRAM-mönster”

Utdata kommer att ändras från en lista över enskilda testfel till en serie badram = rader, som var och en innehåller ytterligare en dålig sektor. Eftersom raderna fogas samman och sammanfogar intilliggande segment kan du bara köra testet utan huvud över natten och använda den slutliga utskrivna raden (men om du har en riktigt dålig dimning kommer det mindre exakta ”5 megs runt denna punkt” -formatet sannolikt att bli ganska kortare ).

Slutresultat:

Memtest86 + visar badram-utdata

Kommentarer

  • Om jag inte ' inte måste kopiera det för hand och istället överlämna det till GRUB utan att skriva om fel, skulle det vara fantastiskt.
  • Vad jag gjorde är att ta ett foto av det (kameratelefon), ladda upp det i GIMP, = > gråskala = > invert = > contrast / gamma lämna sedan till tesseract ${IMG} stdout .. verifiera sedan och korrigera raden innan du sätter i / etc / default / grub … Förmodligen tog det så lång tid som att manuellt mata in det genast ^^
  • Definitivt roligare än att göra det manuellt tho ugh
  • Svar

    Mycket smutsigt och mycket trevligt arbete: kör en användarutrymmestestare, vänta tills den hittar ett fel. Låt det till exempel vara 0xfce2ea31.

    Kör sedan igen memtester, men på den fysiska adressen, så:

    memtester -p 0xfce20000 64k 128 

    Att vara Visst, det är bättre om du offrar mer än sidan med den problematiska adressen.Här offrade vi 64 kByte runt den felaktiga adressen.

    Om allt gick bra kommer det att hitta den felaktiga minnesplatsen, mycket snabbare, igen.

    Avbryt sedan memtesterprocessen med en ctrl / z.

    Konsekvens: tills memtesterprocessen är avstängd tar den inte bort mer resurs, men ingen annan process kommer att kunna komma åt det felaktiga minnet . Eftersom det kommer att tilldelas av memtestern.

    Särskilt användbart på stora fjärrservrar. Den avstängda processen kan stanna tills det nya RAM-minnet inte sänds. Eller kanske till nästa jul när en stillestånd inte är så stort problem.

    Kommentarer

    • I stället för det här tricket kan du också använda verktyget chmem i util-linux för att be kärnan att ta ett visst minnesområde offline (flytta data någon annanstans och sedan aldrig återanvända sidorna) .
    • @TooTea Jag testade det här verktyget på flera maskiner och det kunde inte d aktivera ett enda minnesblock.

    Lämna ett svar

    Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *