MemTest86 + 오류 표시에 따라 올바른 불량 RAM 섹터를 블랙리스트하는 방법은 무엇입니까?

MemTest86 + (Ubuntu 13.04에 포함 된 버전)는

Failing address: 002f796c48 - 759.5 MB 

무엇을해야합니까? 이 영역을 우회하려면 memmap 커널 매개 변수에 지정 하시겠습니까?

memtester 770MB 실행을 시도했는데 모든 내용이 표시됩니다. MemTest의 표시가 처음부터 759.5 번째 MB의 오류를 의미하는 것 같지 않습니다.

memmap?

지금 새 RAM을 구입할 돈이없고 오류가 단일 오류 인 것 같아서 무시할 수 있기를 바랍니다.

댓글

  • FWIW, 커널은 불량 세그먼트를 감지하면 특정 페이지를 " 예약 됨 "으로 표시합니다. 하지만 복구 할 수 있습니다. " free -m "의 출력이 합계에 대해 2의 거듭 제곱을 보여줍니까? memtester가 할 수있는 이유를 설명하는 방법 불량 RAM은 볼 수 없지만 memtest86 +는 볼 수 있습니다.
  • 실제로 두 제곱의 거듭 제곱처럼 보이지 않습니다. i.stack.imgur.com/l86L1.png
  • 오류가 감지 될 때 (ecc ram이있는 경우) 일반적으로 너무 늦습니다. 또한 free -m은 BIOS와 커널이 모두 일부 램을 예약하므로 2의 짝수 제곱을보고하지 않습니다.
  • ECC 노트북을 구입하는 것을 꿈꾸지 만 사용할 수있는 제안을 찾을 수 없었습니다. ' 존재하지 않습니다.
  • 커널도 printk '처럼 보입니다. 불량 페이지를 발견 한 경우 (264-265 행)

답변

memmap

이 자습서는 Bad Memory HowTo 이며 memmap 인수를 커널에 추가합니다. 하우투에 따르면 memmap에 관해서는 두 가지 옵션이 있습니다.

  • 불량 메모리 이후 모든 것을 끄십시오-(mem=###M option)
  • 불량 메모리 주변의 메모리 만 해제-(memmap=#M$###M option)

첫 번째 옵션을 사용하면 memtest가 600M에 불량 메모리가 있다고보고하면 다음과 같이 RAM이 끝날 때까지 해당 시점부터 RAM을 비활성화 할 수 있습니다.

 mem=595M 

있는 경우 ” 802M 및 807M의 불량 RAM 인 경우 다음과 같이 800M부터 시작하는 10M RAM 섹션을 비활성화 할 수 있습니다.

memmap=10M$800M 

참고 : 이렇게하면 800M 기본 주소 뒤에 10M이 블랙리스트에 추가됩니다. 나중에 memtest86+를 실행하여이 인수가 맞습니다.

BadRAM

BadRam이라는 Ubuntu 용 패치가 있습니다. BadRAM Ubuntu 커뮤니티 사이트.

해당 페이지의 세부 정보를 사용하여 커널에 패치를 적용한 후 Grub2 설정을 수정합니다.

Grub2 사이트에서 발췌

Natty의 GRUB2 구성 파일에는 커널 불량 램 제외를 구성하는 줄이 있습니다. 따라서 오류를 표시하는 메모리 섹션을 매핑하는 데 선호되는 방법이라고 가정합니다. 내가 설정 한 줄은 다음과 같습니다.

GRUB_BADRAM = “0x7DDF0000,0xffffc000”

찾을 수있는 모든 웹 사이트에서 권장하는 방법은 memtest86을 실행하고 BadRAM 설정. memtest86은 내가 입력해야했던 페이지를 내게 주었다. 모든 주소가 하나의 16K 블록에있는 것을 볼 수 있었으므로 해당 16K 블록을 작동하지 않는 것으로 매핑하고 싶었습니다. 올바른 항목을 생성 한 방법은 다음과 같습니다.

첫 번째 매개 변수는 쉽습니다. 이것이 불량 메모리의 기본 주소입니다. 제 경우에는 모든 잘못된 주소가 0x7DDF0000보다 크고 0x7DDF4000보다 작다는 것을 알 수있었습니다. 그래서 저는 16K 블록의 시작을 시작 주소로 사용했습니다.

두 번째 매개 변수는 마스크입니다. 원하는 주소 범위가 동일한 값을 공유하는 곳에 1을, 변경되는 곳에 0을 입력합니다. 즉, 하위 비트 만 달라 지도록 주소 범위를 선택해야합니다. 제 주소를 보면 마스크의 첫 부분이 쉽습니다. 0xffff로 시작하고 싶습니다. 다음 니블에서는 비트 맵으로 설명하겠습니다. 0000에서 0011까지의 범위를 원합니다. 따라서 badram의 마스크는 1100 또는 16 진수 c입니다. 전체 범위를 매핑하기를 원하기 때문에 마지막 3 개의 니블은 마스크에서 모두 0이어야합니다. 따라서 총 결과는 0xffffc000입니다.

/ etc / default / grub에이 줄을 설정 한 후 sudo update-grub을 실행하고 재부팅하고 불량 메모리가 더 이상 사용되지 않습니다. 이 방법을 사용하여 불량 메모리를 매핑하는 데 커널 패치가 필요하지 않습니다.

후속 조치 # 1

memtest86 +에 대한 위키 백과 페이지를 살펴보면 다음과 같이 설명됩니다.

Memtest86 위키 백과 페이지에서 발췌

Memtest86 2.3에서 시작 Memtest86 + 1.60, 프로그램은 Linux 커널 용 BadRAM 패치에서 예상하는 형식으로 불량 RAM 영역 목록을 출력 할 수 있습니다. 이 정보를 사용하면 Linux 시스템은 불량 비트가 몇 개 있어도 RAM 모듈을 안정적으로 사용할 수 있습니다. Grub2는 패치되지 않은 커널에 이와 동일한 정보를 제공 할 수 있으므로 BadRAM 패치가 필요하지 않습니다.

또한이 Gentoo 페이지 는 16 진수 주소를 사용하여 memmap=...를 지정하므로 다음과 같이 지정할 수 있습니다.

memmap=5M$0x2f796c48 

5M은 추측 일뿐입니다. 당연히 해당 영역 주변의 RAM 양에 따라 더 낮거나 높게 조정할 수 있습니다.

마지막으로 16 진수로 크기를 지정할 수도 있습니다.

memmap=0x10000$0x2f796c48 

주소 0x2f796c48에서 시작하는 64KB를 무시합니다.

참조

댓글

  • " 8 억 ~ 8,400 만 "는 " 8 억 ~ 8,100 만 " I 가정합니다 …
  • 그럴 수는 있지만 제가 쓴 내용도 괜찮습니다. 비록 800M에서 810M 사이의 4M보다 더 많은 메모리를 낭비하고 있지만 '.
  • 1. memmap 옵션에 대해 알고 있지만 질문은 memtest86 + 출력을 해석하는 방법에 관한 것입니다. memtest86 + 출력의 구체적인 예를 제공하고 이 특정 경우에 memmap 그에 따라 구성하는 데 도움이 필요합니다. 2. 이 인수가 올바른지 확인하려면 나중에 memtest86 +를 실행해야합니다. "-memtest86 +는 OS 커널 전에 실행되므로 심각하게 의심됩니다. memmap Linux 커널 옵션이 영향을 줄 수 있습니다.
  • @Ivan, 1. 내가 포함 된 예제를 보면 당연하다고 생각했지만 ' d는 특정 사례에 대해 memmap=5M$759M와 같이 말해야합니다. memtest86 +가 759.5MB에서 실패한 경우. 2. memtest86 +에도 memmap=... 옵션을 전달해야한다는 뜻입니다. 내가 테스트하지 않았거나 확인하지 않은 것이지만 memtest86 +로 할 수있는 작업입니다.
  • 좋습니다. 감사합니다. " 002f796c48-759.5MB "가 무엇을 의미하는지 잘 모르겠습니다 (아마도 002f796c48 주소 뒤에 759.5 메가가 될 수 있습니다. ) 그리고 Linux 커널 매개 변수를 MemTest86 +에 전달할 수 있다고 생각한 적이 없습니다 (그 자체로는 Linux와 관련이 없다고 생각했습니다).

Answer

Memtest86 + (4.20 사용)는 배드 램 형식을 직접 출력 할 수 있습니다.

  1. “c”를 눌러 구성 대화 상자 memtest 구성 대화 상자

  2. “오류보고 모드”의 경우 “4”

    memtest 오류보고 모드 대화 상자

  3. 그런 다음 “BadRAM 패턴”의 경우 “3”

출력은 개별 테스트 실패 목록에서 일련의 badram = 행으로 변경되며 각각 하나 이상의 새로운 불량 섹터가 포함됩니다. 선이 인접한 세그먼트를 추가하고 합치기 때문에 밤새 테스트 헤드리스를 실행하고 최종 인쇄 된 선을 사용할 수 있습니다 (하지만 정말 어둡게 표시되는 경우 정확도가 떨어지는 “이 지점 주변의 5 메가”형식은 상당히 짧을 수 있습니다.) ).

최종 결과 :

배드 램 출력을 보여주는 Memtest86 +

댓글

  • 이제 '이를 직접 복사하지 않고 다시 입력 오류없이 GRUB에 넘길 필요가 없다면 환상적 일 것입니다.

li>

  • 내가 한 것은 사진을 찍고 (카메라 폰) 김프에로드합니다. = > 회색조 = > invert = > 대비 / 감마 다음 tesseract ${IMG} stdout ..에 전달한 다음 / etc / default에 삽입하기 전에 줄을 확인하고 수정했습니다. / grub … 수동으로 바로 입력하는 것만큼이나 걸렸을 것입니다 ^^
  • 수동으로하는 것보다 확실히 더 재미 있습니다 tho ugh
  • 답변

    매우 더럽고 아주 좋은 해결 방법 : 사용자 공간 메모를 실행하고 그 때까지 기다리십시오. 오류를 찾습니다. 예를 들어 0xfce2ea31에서 실행합니다.

    그런 다음 memtester를 다시 실행하지만 해당 물리적 주소에서 실행합니다.

    memtester -p 0xfce20000 64k 128 

    물론 문제가있는 주소의 페이지보다 더 많이 희생하는 것이 좋습니다.여기서 우리는 잘못된 주소 주위에 64kByte를 희생했습니다.

    모든 것이 잘되면 결함이있는 메모리 위치를 훨씬 더 빠르게 찾을 수 있습니다.

    그런 다음 ctrl / z를 사용하여 memtester 프로세스를 일시 중지하십시오.

    결과 : memtester 프로세스가 일시 중지 될 때까지 더 이상 제거되지 않습니다. 리소스, 하지만 다른 프로세스는 결함이있는 메모리에 액세스 할 수 없습니다 . 메모리가 메모리에 의해 할당되기 때문입니다.

    특히 대규모 원격 서버에서 유용합니다. 일시 중지 된 프로세스는 새 RAM이 배송되지 않을 때까지 기다리십시오. 또는 다음 크리스마스까지 다운 타임이 큰 문제가되지 않을 수도 있습니다.

    댓글

    • 이 트릭 대신 util-linux의 chmem 도구를 사용하여 커널에 특정 메모리 범위를 오프라인으로 전환하도록 지시 할 수도 있습니다 (데이터를 다른 곳으로 이동 한 다음 페이지를 재사용하지 않음). .
    • @TooTea 여러 컴퓨터에서이 도구를 사용해 보았지만 실패했습니다. 단일 메모리 블록을 활성화합니다.

    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다