MemTest86+(Ubuntu 13.04와 함께 제공되는 버전)는 다음과 같이 말합니다.
Failing address: 002f796c48 - 759.5 MB
memmap
이 영역을 우회하려면 커널 매개변수에 무엇을 지정해야 합니까 ?
실행해 보았는데 memtester 770MB
모든 것이 괜찮다고 나오므로 MemTest의 지시 사항이 759.5MB에서 처음부터 오류가 있다는 의미는 아닌 것 같습니다.
이 MemTest 지시문 구성을 해석하는 방법은 무엇입니까 memmap
?
지금은 새 메모리를 살 돈이 없고 오류가 단일인 것 같아서 무시할 수 있기를 바라고 있습니다.
답변1
메모리 맵
다음과 같은 제목의 튜토리얼이 있습니다.기억력이 좋지 않으면 어떻게 해야 할까요?커널 매개변수를 사용하여 커널을 통해 메모리를 비활성화하는 방법에 대해 설명합니다 memmap
. Howto에 따르면 두 가지 옵션이 있습니다 memmap
.
- 나쁜 기억 뒤에는 모든 것을 꺼라——
(mem=###M option)
- 나쁜 기억 주변의 기억만 닫으세요 -
(memmap=#M$###M option)
첫 번째 옵션을 사용하면 memtest에서 600M 메모리 문제가 보고되면 해당 지점부터 RAM이 끝날 때까지 RAM을 비활성화할 수 있습니다.
mem=595M
802M과 807M의 RAM에 문제가 있는 경우 다음과 같이 800M부터 RAM의 10M 부분을 비활성화할 수 있습니다.
memmap=10M$800M
노트:그러면 800M 기본 주소 다음에 10M이 블랙리스트에 추가됩니다. memtest86+
이 인수가 올바른지 확인하려면 나중에 실행 해야 합니다 .
나쁜 기억
BadRam이라는 Ubuntu용 패치가 있습니다. 이 기사에는 다음과 같은 좋은 소개가 있습니다.나쁜 기억우분투 커뮤니티 웹사이트에서.
이 페이지의 세부 정보를 사용하여 커널에 패치를 적용한 후 Grub2 설정을 수정할 수 있습니다.
이 웹사이트의 Grub2에서 발췌
Natty의 GRUB2 구성 파일에는 커널 불량 메모리 제외를 구성하는 줄이 있습니다. 그래서 나는 이것이 오류를 표시하는 메모리 부분을 매핑하는 데 선호되는 방법이라고 가정합니다. 내가 설정한 라인은
GRUB_BADRAM="0x7DDF0000,0xffffc000"
내가 찾을 수 있는 모든 웹사이트에서 제안하는 방법은 memtest86을 실행하고 BadRAM 설정을 표시하는 것입니다. memtest86은 내가 입력해야 하는 페이지를 나에게 제공했습니다. 모든 주소가 16K 블록에 있다는 것을 알 수 있으므로 해당 16K 블록을 매핑하여 작동을 중지하고 싶습니다. 이것이 올바른 항목을 생성하는 방법입니다.
첫 번째 매개변수는 간단합니다. 이것이 불량 메모리의 기본 주소입니다. 제 경우에는 모든 오류 주소가 0x7DDF0000보다 크고 0x7DDF4000보다 작은 것을 볼 수 있습니다. 그래서 저는 16K 블록의 시작 부분을 시작 주소로 삼았습니다.
두 번째 매개변수는 마스크입니다. 원하는 주소 범위가 동일한 값을 공유하는 경우 1을 입력하고 서로 다른 경우 0을 입력합니다. 이는 낮은 비트만 변경되도록 주소 범위를 선택해야 함을 의미합니다. 내 주소를 보세요. 마스크의 첫 번째 부분은 간단합니다. 0xffff로 시작하고 싶습니다. 다음 니블에서는 비트맵 측면에서 설명하겠습니다. 내가 원하는 범위는 0000부터 0011까지입니다. 따라서 바드람의 마스크는 1100 또는 16진수 c가 됩니다. 전체 범위를 매핑하려면 마스크의 마지막 3개 니블이 모두 0이어야 합니다. 따라서 우리가 얻는 총 결과는 0xffffc000입니다.
/etc/default/grub에 이 줄을 설정한 후 sudo update-grub을 실행하고 재부팅했는데 불량 메모리가 더 이상 사용되지 않았습니다. 이 방법을 사용하여 불량 메모리를 매핑하는 데에는 커널 패치가 필요하지 않습니다.
후속 조치 #1
memtest86+에 대한 Wikipedia 페이지를 보면 설명은 다음과 같습니다.
에서 발췌Memtest86 위키피디아 페이지
Memtest86 2.3 및 Memtest86+ 1.60부터 프로그램은 이 정보를 사용하여 Linux 커널의 BadRAM 패치에서 예상하는 형식으로 불량 RAM 영역 목록을 출력할 수 있습니다. Linux 시스템은 불량 비트가 있더라도 RAM 모듈을 안정적으로 사용할 수 있습니다. Grub2는 패치되지 않은 커널에 동일한 정보를 제공할 수 있으므로 BadRAM 패치가 필요하지 않습니다.
나도 이런 일을 겪었어젠투 페이지16진수 주소를 사용하도록 지정하므로 memmap=...
다음과 같이 지정할 수 있습니다.
memmap=5M$0x2f796c48
5M은 단지 추측일 뿐이며, 생략하고 싶거나 생략해야 하는 영역 주변의 RAM 양에 따라 더 낮추거나 더 높게 조정할 수 있습니다.
마지막으로 크기를 16진수로 지정할 수도 있습니다.
memmap=0x10000$0x2f796c48
주소 0x2f796c48에서 시작하는 64KB는 무시됩니다.
인용하다
답변2
Memtest86+(4.20 사용)는 badram 형식을 직접 출력할 수 있습니다.
"c"를 눌러 구성 대화 상자로 들어갑니다.
그러면 "4"는 "오류 보고 모드"를 나타냅니다.
그런 다음 "3"은 "BadRAM 모드"를 나타냅니다.
출력은 개별 테스트 실패 목록에서 일련의 badram= 라인으로 변경되며 각 라인에는 새로운 불량 섹터가 포함됩니다. 선이 인접한 세그먼트를 추가하고 병합하기 때문에 밤새 헤드 없이 테스트를 실행하고 최종 인쇄된 선을 사용할 수 있습니다(밝기가 정말 나쁜 경우 정확도가 떨어지는 "이 지점 주변의 5메가" 형식이 더 짧을 수 있음).
최종 결과:
답변3
매우 지저분하지만 매우 좋은 해결 방법: userspace memtester를 실행하고 오류가 발견될 때까지 기다립니다. 예를 들어 0xfce2ea31에 있다고 가정합니다.
그런 다음 memtester를 다시 실행하되 해당 실제 주소에서 다음을 수행하십시오.
memtester -p 0xfce20000 64k 128
확실히, 문제의 주소에 있는 페이지보다 더 많은 것을 희생했다면 더 나을 것입니다. 여기서는 오류 주소 주변의 64kByte를 희생합니다.
모든 것이 잘 진행되면 잘못된 메모리 위치를 더 빨리 다시 찾을 수 있습니다.
그런 다음 ctrl/z를 사용하여 memtester 프로세스를 일시 중지합니다.
결과: memtester 프로세스가 일시 중지되기 전에 더 이상 리소스를 빼앗지 않습니다.하지만 다른 어떤 프로세스도 결함이 있는 메모리에 접근할 수 없습니다.. memtester에 의해 할당되기 때문입니다.
특히 대규모 원격 서버에 유용합니다. 일시 중단된 프로세스는 새 RAM이 배송될 때까지 남아 있을 수 있습니다. 아니면 다음 크리스마스까지 가동 중지 시간이 그다지 문제가 되지 않을 수도 있습니다.
답변4
Linux 2.6부터 CONFIG_MEMTEST=y를 사용하여 커널을 빌드할 수 있습니다.
커널 명령줄에서 "memtest"를 사용하여 부팅한 후 부팅할 때마다 시스템 RAM에 대한 빠른 테스트가 수행되고 명백한 불량 픽셀이 자동으로 제거됩니다.
memtest86이 더 철저하고 여러 패스를 실행하므로 모든 것을 포착할 수는 없지만 대부분의 경우 작동할 것이며 또 다른 몇 개의 섹터가 손실되는 경우 수동 개입이 필요하지 않다는 장점이 있습니다.