Jak umieścić na czarnej liście prawidłowy uszkodzony sektor pamięci RAM zgodnie ze wskazaniem błędu MemTest86 +?

MemTest86 + (wersja dołączona do Ubuntu 13.04) mówi

Failing address: 002f796c48 - 759.5 MB 

Co mam zrobić określić w parametrze jądra memmap, aby ominąć ten obszar?

Próbowałem uruchomić memtester 770MB i mówi wszystko jest w porządku, więc nie wygląda na to, że wskazania MemTestu oznaczają błąd w 759,5 MB od początku.

Jak interpretować to wskazanie MemTest, aby skonfigurować memmap?

Nie mam teraz pieniędzy na zakup nowej pamięci RAM, a błąd wydaje się być pojedynczy, więc mam nadzieję, że mogę go po prostu zmienić.

Komentarze

  • FWIW, jądro oznaczy określone strony jako ” zarezerwowane „, jeśli wykryje zły segment ale jest w stanie odzyskać. Czy wynik ” free -m ” pokazuje potęgi dwóch dla sum? Wspominam o tym jako sposób wyjaśnienia, dlaczego memtester może nie widzę złej pamięci RAM, ale memtest86 + nie widzi.
  • Nie ' nie wygląda jak potęgi dwojga: i.stack.imgur.com/l86L1.png
  • Do czasu wykrycia błędu (jeśli masz nawet pamięć ecc), jest generalnie za późno. Również free -m nigdy nie zgłasza równej potęgi dwóch, ponieważ bios i kernel rezerwują trochę pamięci RAM.
  • Marzę o zakupie laptopa ECC, ale nigdy nie mogłem znaleźć żadnych dostępnych ofert, wygląda na to, że nie ' t istnieje.
  • Wygląda również na jądro printk ' s gdy znajdzie złą stronę (wiersz 264-265).

Odpowiedz

memmap

Jest ten samouczek zatytułowany: Bad Memory HowTo , który omawia wyłączanie pamięci przez jądro za pomocą memmap argument do jądra. Zgodnie z instrukcją masz 2 opcje, jeśli chodzi o memmap:

  • Wyłącz wszystko po złej pamięci – (mem=###M option)
  • Wyłącz tylko pamięć wokół złej pamięci – (memmap=#M$###M option)

W przypadku pierwszej opcji jeśli memtest zgłosi, że jest zła pamięć przy 600 MB, możesz wyłączyć pamięć RAM od tego momentu aż do końca pamięci RAM w ten sposób:

 mem=595M 

Jeśli tak ” Jeśli masz złą pamięć RAM przy 802 MB i 807 MB, możesz wyłączyć sekcję 10 MB pamięci RAM, zaczynając od 800 MB, w ten sposób:

memmap=10M$800M 

UWAGA: Spowoduje to umieszczenie na czarnej liście 10 mln po adresie podstawowym 800 mln. Następnie uruchom memtest86+, aby potwierdzić, że ten argument jest dobrze.

BadRAM

Dostępna jest łatka dla Ubuntu o nazwie BadRam. Jest ona bardzo dobrze opisana w tym poście zatytułowanym: BadRAM w społeczności Ubuntu .

Po zastosowaniu łatki do jądra przy użyciu szczegółów z tej strony, dokonujesz modyfikacji w konfiguracji Grub2:

fragment tej strony dla Grub2

Plik konfiguracyjny GRUB2 w Natty zawiera wiersz służący do konfigurowania wykluczeń uszkodzonej pamięci RAM w jądrze. Zakładam więc, że jest to preferowany sposób mapowania sekcji pamięci, która wyświetla błędy. Linia, którą ustawiłem, to

GRUB_BADRAM = „0x7DDF0000,0xffffc000”

Sugerowanym sposobem na każdej stronie internetowej, którą mogłem znaleźć, było uruchomienie memtest86 i pokazanie ci Ustawienia BadRAM. memtest86 dał mi stronę z materiałami, które musiałbym wprowadzić. Widziałem, że wszystkie adresy znajdowały się w jednym bloku 16K, więc chciałem tylko zmapować ten blok 16K bez działania. Oto jak wygenerowałem poprawny wpis.

Pierwszy parametr jest łatwy. To jest adres bazowy złej pamięci. W moim przypadku widziałem, że wszystkie złe adresy były większe niż 0x7DDF0000 i mniejsze niż 0x7DDF4000. Wziąłem więc początek bloku 16K jako mój adres początkowy.

Drugim parametrem jest maska. Umieszczasz jedynki, gdzie żądany zakres adresów ma te same wartości, a 0, gdzie będzie się różnić. Oznacza to, że musisz wybrać taki zakres adresów, aby różniły się tylko bity o najniższym zamówieniu. Patrząc na mój adres, pierwsza część maski jest łatwa. Chcesz zacząć od 0xffff. Przy następnym skubaniu wyjaśnię za pomocą map bitowych. Chcę mieć zakres od 0000 do 0011. Tak więc maska dla badram byłaby 1100 lub sześciokątnym c. Ostatnie 3 nibble muszą mieć wszystkie 0 w masce, ponieważ chcemy odwzorować cały zakres. Otrzymujemy więc całkowity wynik 0xffffc000.

Po ustawieniu tej linii w / etc / default / grub, uruchomiłem sudo update-grub i zrestartowałem komputer i moja zła pamięć nie była już używana. Żadne poprawki jądra nie są potrzebne do mapowania złej pamięci za pomocą tej metody.

Kontynuacja nr 1

Przeglądając stronę wikipedii pod kątem memtest86 + stwierdza się następująco:

fragment z strony Memtest86 wikipedii

Począwszy od Memtest86 2.3 i Memtest86 + 1.60, program może wypisać listę uszkodzonych regionów RAM w formacie oczekiwanym przez poprawkę BadRAM dla jądra Linuksa; Korzystając z tych informacji, system Linux może niezawodnie używać modułu pamięci RAM, nawet jeśli ma kilka złych bitów. Grub2 jest w stanie dostarczyć te same informacje do niezałatanego jądra, negując potrzebę łatki BadRAM.

Również natknąłem się na Strona Gentoo , która określa memmap=... przy użyciu adresu szesnastkowego, więc możesz określić go w ten sposób:

memmap=5M$0x2f796c48 

5M to tylko przypuszczenie, oczywiście możesz dostosować go niżej lub wyżej w zależności od tego, ile pamięci RAM w tym regionie chcesz / musisz pominąć.

Na koniec możesz również określić rozmiar w szesnastkowym formacie:

memmap=0x10000$0x2f796c48 

Zignoruje 64 KB zaczynające się od adresu 0x2f796c48.

Referencje

Komentarze

  • ” 800 mln do 804 mln ” ma wynosić ” 800 mln do 810 mln ” I załóżmy …
  • Może tak być, ale to, co napisałem, też jest w porządku, mimo że ' wyrzuca więcej pamięci niż 4 MB między 800 a 810 MB.
  • 1. Wiem o opcji memmap, ale pytanie dotyczy bardziej interpretacji wyniku memtest86 +. Podałem konkretny przykład wyjścia memtest86 + i zapytaj aby uzyskać pomoc w konfiguracji memmap odpowiednio w tym konkretnym przypadku. 2. Powinieneś później uruchomić memtest86 +, aby potwierdzić, że ten argument jest poprawny. ” – memtest86 + działa przed jądrem systemu operacyjnego, więc poważnie wątpię opcja memmap jądra Linuksa może mieć na to wpływ.
  • @Ivan, 1. Sądziłem, że to oczywiste biorąc pod uwagę przykłady, które zamieściłem, ale ' d trzeba powiedzieć coś takiego: memmap=5M$759M dla twojego konkretnego przypadku, podany memtest86 + nie działa przy 759,5 MB. 2. Chodziło mi o to, że powinieneś przekazać opcję memmap=... również memtest86 +. To nie było przeze mnie przetestowane / niepotwierdzone, ale coś, co możesz zrobić z memtest86 +.
  • Ok, dzięki. Nie byłem pewien, co oznacza ” 002f796c48 – 759,5 MB ” (być może może to być 759,5 MB po adresie 002f796c48 lub coś w tym rodzaju ) i nigdy nie podejrzewałem, że mogę przekazać parametry jądra Linuksa do MemTest86 + (myślałem, że to nie ma nic wspólnego z Linuksem).

Odpowiedź

Memtest86 + (użyłem 4.20) może bezpośrednio wyprowadzić format badram.

  1. Naciśnij „c”, aby przejść do okna dialogowego konfiguracji dialogu konfiguracyjnego memtest

  2. Następnie „4” dla „Tryb raportu o błędach”

    Okno dialogowe trybu raportu o błędach memtest

  3. Następnie „3” dla „BadRAM Patterns”

Wynik zmieni się z listy pojedynczych niepowodzeń testów na serię linii badram =, z których każda zawiera jeszcze jeden nowy uszkodzony sektor. Ponieważ linie dołączają i łączą sąsiednie segmenty, możesz po prostu uruchomić test bezgłowy na noc i użyć końcowej wydrukowanej linii (chociaż jeśli masz naprawdę zły dimm, mniej dokładny format „5 megawokoła tego punktu” będzie prawdopodobnie nieco krótszy ).

Wynik końcowy:

Memtest86 + pokazujący wyjście badram

Komentarze

  • Gdybym teraz ' nie musiał kopiować tego ręcznie, a zamiast tego przekazać GRUB-owi bez ponownego wpisywania błędów, byłoby fantastycznie.
  • Zrobiłem mu zdjęcie (telefon z aparatem), załadowałem go do GIMP, = > grayscale = > invert = > kontrast / gamma, a następnie przekazanie go do tesseract ${IMG} stdout .. następnie zweryfikowano i poprawiono wiersz przed wstawieniem do / etc / default / grub … Prawdopodobnie zajęło to tyle samo czasu, ile ręczne wprowadzenie go od razu ^^
  • Zdecydowanie przyjemniejsze niż robienie tego ręcznie ugh

Odpowiedź

Bardzo brudne i bardzo fajne obejście: uruchom memtester przestrzeni użytkownika, poczekaj, aż znajduje błąd. Niech na przykład 0xfce2ea31.

Następnie uruchom ponownie memtester, ale z tym adresem fizycznym, więc:

memtester -p 0xfce20000 64k 128 

Aby być oczywiście, lepiej, jeśli poświęcisz więcej niż stronę z problematycznym adresem.Tutaj poświęciliśmy 64kByte na błędny adres.

Jeśli wszystko poszło dobrze, ponownie znajdzie wadliwą lokalizację w pamięci, znacznie szybciej.

Następnie zawieś proces memtestera za pomocą ctrl / z.

Konsekwencja: dopóki proces memtestera nie zostanie zawieszony, nie zabierze więcej zasób, ale żaden inny proces nie będzie mógł uzyskać dostępu do uszkodzonej pamięci . Ponieważ zostanie ona przydzielona przez memtester.

Szczególnie przydatne na dużych, zdalnych serwerach. Zawieszony proces może poczekaj, aż nowa pamięć RAM nie zostanie wysłana. A może do następnych świąt, kiedy przestój nie będzie tak dużym problemem.

Komentarze

  • Zamiast tej sztuczki możesz również użyć narzędzia chmem w util-linux, aby poinstruować jądro, aby przełączyło określony zakres pamięci do trybu offline (przenosząc dane w inne miejsce i nigdy nie wykorzystując ponownie stron) .
  • @TooTea Wypróbowałem to narzędzie na wielu komputerach i nie dało się eaktywuj pojedynczy blok pamięci.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *