User Tools

Site Tools


tutoriais:badram

Linux com Memória Ram com problemas (BadRam)

Eventualmente você pode encontrar uma máquina com problemas de memória e que não é possível trocar a RAM (soldada ou velha ou qq coisa assim). Alguns utilitários podem testar a RAM e dizer onde há erro. Isso pode ser passado como parâmetro do kernel para evitar essa área problemática. Abaixo o passo a passo de um caso real: Notebook com 4GB de RAM soldada na placa.

Usei um pendrive com memtest86+ (de memtest.org) , configurei ele pra dar a saída no formato BadRam

Após 1 passe completo, resultou em:

badram=	0x000000008b902200,0xffffffffff903fc0,
	0x000000008c002220,0xffffffffff003fe0,
	0x000000008d002220,0xffffffffff003fe0,
	0x000000008e002220,0xfffffffffe003ff0,
	0x000000008e002230,0xfffffffffe003ff0,
	0x0000000094002200,0xfffffffffe003ff8,
	0x0000000094002200,0xfffffffffe003fe0,
	0x0000000094042200,0xfffffffffe043fe0,
	0x000000009429e218,0xfffffffffffffff8,
	0x0000000096002200,0xfffffffffe003fe0

Esses valores podem ser passados ao kernel para ignorar esses pontos defeituosos, mas fiz de outra maneira:

Cada linha da saída do badram é um hexadecimal com o começo da área com problema, seguida de uma máscara que indica quanto pra frente daquilo ainda tem problema. Se traduzir o primeiro número de hexadecimal pra decimal, dá no endereço onde começa o problem, que é 2341478912 bytes (decimal de 0x000000008b902200) e pela última linham podemos ver que termina o problema em 2516591104 bytes (decimal de 0x0000000096002200). Fazendo a diferença, dá um total de mais ou menos 175112192 bytes (um pouco a mais pq ignorei a última máscara).

Arredondando, começa em 2341,478912MB termina perto de 2516,591104MB (175,112192MB)

Ou seja, são pouco mais de 175MB começando da memória HEX 0x8b902200

Para resolver: Foi inserido no arquivo /etc/default/grub (na linha do quiet-splash) o conteúdo “memmap=180M\\\$0x8b902200”, para que após rodar o comando update-grub como root, ele possa adicionar sempre “memmap=200M\$0x8b902200” na linha do grub.

E o que significa memmap=180M\$0x8b902200? Significa que ele vai ignorar 200MB de memória começando da posição 0x8b902200

Pode começar antes? Poderia, mas seria besteira pois o primeiro valor já é exato onde começa. Poderia terminar antes de 200MB? talvez, mas aí seria bom calcular com melhor precisão a máscara da última linha e ver o último endereço pra não acabar muito antes da área com problema. Através do comando “cat /proc/iomem | grep -i 8b902200” podemos ver que a área reservada foi “8b902200-981021ff : Reserved”. Olhando por cima na máscara da última linha, para 96002200 é fe003fe0, o que indica que a região poderia atingir até alguma coisa em 97… (se a máscara for como máscara de rede). Assim, garanti que a área danificada está separada. e o sistema parou de dar problema

Outro método seria usar só os badram pra “perder menos memória” mas seria muita coisa pra escrever por causa de uma faixa de 200MB (preguiça)

Como o problema estava depois dos 2GB de RAM, o sistema pode ser instalado bootando o instalador com parâmetro mem=2300MB (já que problemas começavam após 2341MB). Isso limitou o uso de memória aos 2300MB iniciais.

tutoriais/badram.txt · Last modified: 2024-03-19 13:22 by gnann

Except where otherwise noted, content on this wiki is licensed under the following license: Public Domain
Public Domain Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki