Memorias RAM rotas…. pero útiles!!!

Si, así es, seguro alguna vez te toco encontrarte con una memoria rota. Bueno, si usas GNU/Linux considerate afortunado, porque las memorias que contienen sectores defectuosos pueden utilizarse sin ningún tipo de problemas. ¿Cómo?, simple, al kernel le podemos decir que no utilice los sectores defectuosos de la misma, por lo que el resto de la memoria puede utilizarse sin problemas.

Lo primero que tenemos que hacer es detectar los sectores defectuosos, para esto utilizamos el memtest86+, cuya instalación en Debian simplemente se reduce a hacer un

apt-get install memtest86+

Luego editamos el /boot/grub/menu.lst y descomentamos la siguiente línea

# memtest86=true

Guardamos y corremos lo siguiente

update-grub

Eso actualizará nuestro grub, y agregará la opción de memtest a éste.

El paso siguiente es reiniciar la máquina y elegir memtest86+ en el grub, con lo que empezamos a correr el testeo de memoria. Entre las opciones que debemos configurar en el memtest, esta el como informa los errores que encuentra, necesitamos que muestre los errores en el formato BadRam, el que luego veremos porque. Para esto simplemente nos vamos a la parte de opciones (presionamos la “c”), de ahí nos vamos “Error Report Mode ” (presionamos 5 ), y por últimos seleccionamos la opción “BadRam Patterns”. Listo, dejamos correr el test, en cuanto al tiempo que este debe correr, digamos que mientras más mejor, pero bueno, para tener un número les digo que sería bueno dejarlo corriendo unas 10 hs, por ejemplo toda una noche.

Pasadas estas 10hs de test, anotamos le reporte de errores, el que luego utilizaremos para decirle al kernel, que direcciones no utilice. En mi caso solo apareció un solo sector defectuoso, y el reporte solo tenía lo siguiente:

badram = 0x01c751f4,0xfffffffc

Tomamos nota de esto y presionamos escape para reiniciar (el test nunca termina, nosotros decidimos cuando es suficiente).

Ahora que ya tenemos el reporte, lo que tenemos que hacer es aplicarle un patch al kernel, y si señores, lamentablemente tendremos que compilar el kernel 😦 , pero no se desanimen, que es una tarea emocionante 🙂 .

Antes de continuar, les digo que no es recomendable compilar el kernel en la misma máquina que tiene las memorias defectuosas, por lo que sería bueno que los pasos siguientes se realizaran en otra máquina, y luego de que generemos el .deb con la imagen customizada del kernel y con el patch en cuestión, copiemos este .deb a la maquina con problemas, y lo ejecutemos allí.

El patch en cuestión se llama badram, y en Debian el paquete que lo contiene se llama kernel-patch-badram, por lo que hacemos

apt-get install kernel-patch-badram

Luego de instalar este paquete, debemos instalar los fuentes del kernel al cual le aplicaremos el patch, en mi caso uso el último disponible, el linux-sources-2.6.22, así que hacemos

apt-get install linux-source-2.6.22

Configuramos el kernel, para que trabaje en base a nuestro hardware, por lo que ya saben,

cd /usr/src
tar -xvfj linux-source-2.6.22.tar.bz2
cd linux-source-2.6.22
make xconfig

Elegimos las opciones que más se adecuen a nuestro hardware, entre las que estan el tipo de arquitectura y el procesador. No voy a entrar en detalle sobre esto, porque sería demasiado extenso, el tío google sabe un montón de esto, así que cualquier consulta sobre como elegir las opciones de configuración del kernel, estarán más que contestadas 😉 .

Después de que seleccionamos las opciones de nuestro kernel, pasamos a compilarlo, para lo que vamos a utilizar la herramienta make-kpkg, la que compilará y empaquetará el kernel nuevo (generará un .deb con el kernel que compilamos).

apt-get install kernel-package

luego ejecutamos

cd /usr/src/linux-source-2.6.22
make-kpkg –append-to-version=custom`date +%d%m%y` –initrd –added-patches badram kernel_image

NOTA: el `date +%d%m%y` es para que ponga la fecha de hoy, es a libre elección esto, yo prefiero ponerle fecha para después acordarme cuando lo compile.

Bueno, esperamos a que termine de compilar y empaquetar y listo, ya tenemos en /usr/src el paquete con nuestro kernel compilado, emparchado y empaquetado, en mi caso el .deb se llama linux-image-2.6.22.151007_2.6.22.151007-1.0.Custom_i386.deb.

Copiamos este .deb a la maquina con problemas, y lo instalamos simplemente haciendo

dpkg -i linux-image-2.6.22.151007_2.6.22.151007-10.00.Custom_i386.deb

Después editamos el archivo /boot/grub/menu.lst y a la línea del kernel nuevo le agreamos lo que nos genero el memtest86+, o sea, badram=0x01c751f4,0xfffffffc. En definitiva, la sección del kernel nuevo nos queda de la siguiente manera:

title Debian GNU/Linux, kernel 2.6.22.151007
root (hd0,4)
kernel /boot/vmlinuz-2.6.22.151007 root=/dev/hda5
ro badram=0x01c751f4,0xfffffffc
initrd /boot/initrd.img-2.6.22.151007
savedefaultListo, reiniciamos y elegimos el nuevo kernel, y ya estaremos usando solo la memoria sana 🙂 , para chequear que realmente haya tomado el parámetro de badram, hacemos un dmesg |less y nos debería aparecer algo como
Kernel command line: root=/dev/hda5 ro
badram=0x01c751f4,0xfffffffc
PAGE_OFFSET=0xc0000000
BadRAM option is =0x01c751f4,0xfffffffc
–> marking 0x01c751f4, 0xfffffffc [2]
0000000000001c75 =0000000000001c7

Si es así, felicitaciones!!!, reciclaste una memoria 🙂 .
Bueno espero que les sirva, y como siempre, se aceptan críticas, comentarios y mejoras.

Anuncios

8 comentarios sobre “Memorias RAM rotas…. pero útiles!!!

  1. yo tengo 2 gigas de ram y si se me rompen pongo 4 gigas i.e 2 de 2 gigas. Si no tenes ingenio tenes que tener plata. ese es mi caso

  2. “el loco”, es verdad lo que decís, pero pensa en el caso donde tengas una pc que tiene un solo slot de 1Gbyte, y que el mismo se le rompió “una” sola dirección de memoria. No se justifica tirarla…

    A parte… lo anterior sirve para aprender un montón de cosas… yo lo aplique para investigar un poco por esos lados, siempre es bueno aprender probando.

    Al tío “bill gamer”; le respondo que no se a donde va su comentario…. y que si prefiere windows q lo use, a mí no me molesta. Respecto de morirme esperando que salga la versión gratis de un juego para linux, no creo que yo sea de ese tipo de personas… en todo caso preferiría morirme esperando la versión free…

    Saludos y gracias por sus comentarios

  3. Hola Maxi, o debo decirte killer…, muy bueno el blog.
    Te comento de mi problema, tengo una PIII con 512 de ram que hace poco empezó con problemas, lo noté porque los daba en linux, si fuera en winchot, ni me preocupo. Le corri el memtest y me largo 38 errores luego de casi 10 hs. ¿Qué me conviene hacer:
    1º compilar el kernel con el badram?, o
    2º comprarme ram nueva?

    Respecto al primer punto, te comento que solo pude ver 10 de los 38 errores que me largo, no tengo idea de como ver o guardar los otros… 😦
    Con el segundo, el problema es que puede ser dificil conseguir ram, ya que es un poco vieja, pero no imposible.

    Un abrazo y nos vemos en el UrT, así te hago comer algunos tiros… 😆

  4. Se-Bash como va! . Mira la decisión es tuya … yo utilizaría BADRAM, dado que solo tenés que seguir los pasos que deje posteado acá, no hay mas vuelta que esa, y seguis usando la mem como si estaría nueva 😀 .
    Respecto de que solo podes ver 10 de los 38 errores, no te preocupes, no necesitas ver los 38 errores, si seguís los pasos que puse en el post, el memtest te va a dar la línea que tenés que poner en el archivo menu.lst del grub, para que el kernel no use las direcciones de memoria rotas. No es mucha ciencia, solo seguí los pasos al pie de la letra, y cualquier cosa me consultas. Saludos y suerte.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s