martes, 13 de diciembre de 2011

Utilizar más de 4 GB de ram en Debian squeeze 32 bits

Si necesitamos utilizar una máquina que tiene más de 3 GB de RAM, un procesador de 64 bits y por la compatibilidad del software que tengamos o necesitemos, requerimos de un sistema de 32 bits. Tenemos la posibilidad en debian de utilizar un Kernel Bigmem, de lo contrario como los sistemas de 32 bits solo son capaces de direccionar hasta 3 GB de memoria, el resto quedarían sin uso. Un ejemplo de esto sería que si tengo una máquina con 8 GB y tengo el kernel 2.6.32-5-686 ( es un kernel 686, por lo tanto de 32 bits) solo utilizaría 3 GB y los otros 5 GB el sistema ni los reconoce. Cabe decir que un kernel de 64 bits o de 32 bits-Bigmem es capaz de direccionar hasta 64 GB de memoria en linux. 

Los cálculos matemáticos de donde salen cuantos GB como máximo direccionan los sistemas son:
  • En los sistemas de 32 bits lo máximo son 2^32 = 4294967296 = 4GiB.
  • En los sistemas de 64 bits lo máximo son 2^64 bits de RAM = 18446744073709551616 = 16 Zetta bytes.
Pero en la practica, un kernel 2.6.32-5-686 solo gestiona unos 3 GB y uno de 64 bits hasta 64 GB de ram.



Instalación del kernel Bigmem en Debian squeeze


Tras instalar los módulos de memoria en nuestra maquina y ver que los reconoce la BIOS, encendemos el equipo.
Entonces verificamos la versión del kernel que estamos usando con el comando:

uname -a

Nos mostrará algo de este estilo:

rencinar@OPT360:~$ uname -a

Linux OPT360 2.6.32-5-686 #1 SMP Mon Oct 3 04:15:24 UTC 2011 i686 GNU/Linux


Como podemos ver, nos muestra el kernel 2.6.32-5-686 y un sistema de tipo i686. Todos los sistemas de 32 bits vienen representados de la manera iX86, de manera que concuerden con los siguientes nomenclaturas:

  • i386 para Intel 386
  • i486 para Intel 486
  • i586 para Intel Pentium y AMD K5
  • i686 para Pentium PRO, Pentium II, K6, K6-2 y superiores

Como he dicho antes, solo podremos utilizar más de 3 GB si tenemos un kernel de 64 bits o de 32 bits-Bigmem e ineludiblemente un procesador que funcione a 64 bits, si no, el procesador no podrá gestionar mas de 3 GB y por tanto todo lo siguiente será inútil. Por esto deberíamos tener un kernel de tipo i686.
 

El segundo paso es comprobar que solo nos reconoce 3 GB de la ram que le hemos puesto. Para ello podemos ejecutar el comando free (que nos muestra la memoria total y la usada) o cat /proc/meminfo que nos hace un desglose más exhaustivo, yo utilizaré el primero.

rencinar@OPT360:~$ free 

total used free shared buffers cached
Mem: 3104008 2994096 109912 0 1364 122500

-/+ buffers/cache: 2870232 233776

Swap: 3905528 1925652 1979876



Como podemos comprobar mi memoria total reconocida por el sistema es 3104008 kB, cuando en realidad tengo disponibles 4000000 kB.

Ahora vamos a ver todos los kernels Bigmem que tenemos disponibles para nuestra distro. La manera de verlos es mediante la sentencia apt-cache search linux-image |grep bigmem o aptitude search bigmem. Este nos mostrará una salida similar a esta :

rencinar@OPT360:~$ apt-cache search linux-image |grep bigmem
linux-headers-2.6.32-5-686-bigmem - Header files for Linux 2.6.32-5-686-bigmem
linux-headers-2.6.32-5-vserver-686-bigmem - Header files for Linux 2.6.32-5-vserver-686-bigmem

linux-image-2.6.32-5-686-bigmem-dbg - Debugging infos for Linux 2.6.32-5-686-bigmem

linux-image-2.6.32-5-686-bigmem - Linux 2.6.32 for PCs with 4GB+ RAM

linux-image-2.6.32-5-vserver-686-bigmem-dbg - Debugging infos for Linux 2.6.32-5-vserver-686-bigmem

linux-image-2.6.32-5-vserver-686-bigmem - Linux 2.6.32 for PCs with 4GB+ RAM, Linux-VServer support

linux-image-2.6-686-bigmem - Linux 2.6 for PCs with 4GB+ RAM (meta-package)

linux-image-2.6-vserver-686-bigmem - Linux 2.6 for PCs with 4GB+ RAM (meta-package), Linux-VServer support

linux-image-686-bigmem - Linux for PCs with 4GB+ RAM (meta-package)

linux-image-vserver-686-bigmem - Linux for PCs with 4GB+ RAM (meta-package), Linux-VServer support

nvidia-kernel-2.6.32-5-686-bigmem - NVIDIA binary kernel module for Linux 2.6.32-5-686-bigmem

nvidia-kernel-2.6.32-5-vserver-686-bigmem - NVIDIA binary kernel module for Linux 2.6.32-5-vserver-686-bigmem


Como podemos comprobar hay muchas versiones y cada una con sus características especificas. Yo voy a usar el genérico en este ejemplo por ser el que mejor se acopla en todos los casos, pero podemos buscar los detalles técnicos de cada uno de ellos por si hay alguno que se acople mejor aquí.


Para proceder a la instalación utilizaremos el comando aptitude install linux-image-2.6-686-bigmem o apt-get install linux-image-2.6-686-bigmem (ambos realizan lo mismo). Para ejecutar este comando necesitaremos entrar como en una consola como root y lanzarlo desde ahí, así que ejecutamos lo siguiente:
 

su - (nos solicitará la pasword) y nos aparecerá el promt del root

rencinar@OPT360:~$ su -
Contraseña:



Realizamos la instalación del ansiado kernel con el comando apt-get install linux-image-2.6-686-bigmem

root@OPT360:~# apt-get install linux-image-2.6-686-bigmem
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias

Leyendo la información de estado... Hecho

Se instalarán los siguientes paquetes extras:

firmware-linux-free linux-image-2.6.32-5-686-bigmem

Paquetes sugeridos:

linux-doc-2.6.32 grub lilo

Se instalarán los siguientes paquetes NUEVOS:

firmware-linux-free linux-image-2.6-686-bigmem linux-image-2.6.32-5-686-bigmem

0 actualizados, 3 se instalarán, 0 para eliminar y 17 no actualizados.

Necesito descargar 28,0 MB de archivos.

Se utilizarán 80,5 MB de espacio de disco adicional después de esta operación.

¿Desea continuar [S/n]?

 
respondemos S y comenzara la descarga/instalación del kernel.



Posicionar arranque del kernel Bigmem en Debian squeeze

Lo más cómodo es situar el nuevo kernel para que arranque por defecto, y así no tener que andar seleccionándolo en el Grub, para esto vemos que lugar ocupa de la siguiente manera:

-Entramos en el directorio /boot/grub/ con el comando

cd /boot/grub/

-Buscamos todas las entradas que contengan mediante el comando

grep "Debian GNU/Linux" grub.cfg

Nos mostrará algo como esto, dependiendo de los que tengamos instalados (hay que tener
en cuenta que la primera linea que nos salga corresponderá a la linea 0 y así sucesivamente.

rencinar@OPT360:/boot/grub$ grep "Debian GNU/Linux" grub.cfg

menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-686-bigmem' --class debian --class gnu-linux --class gnu --class os {
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-686-bigmem (recovery mode)' --class debian --class gnu-linux --class gnu --class os {
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-686' --class debian --class gnu-linux --class gnu --class os {
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-686 (recovery mode)' --class debian --class gnu-linux --class gnu --class os {

Y por numeración, la posición que ocupan es:

posición 0->menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-686-bigmem' --class debian --class gnu-linux --class gnu --class os {
posición 1->menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-686-bigmem (recovery mode)' --class debian --class gnu-linux --class gnu --class os {
posición 2->menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-686' --class debian --class gnu-linux --class gnu --class os {
posición 3->menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-686 (recovery mode)' --class debian --class gnu-linux --class gnu --class os {

Según lo anterior, el kernel que tiene que lanzar es el de la posición 0. Con esto miramos cual
se está lanzando por defecto ejecutando:

grep -i default grub.cfg
 

El resultado es el siguiente : 

# from /etc/grub.d and settings from /etc/default/grub set default="0" function savedefault {

Con esto vemos que el que se esta ejecutando es el 0 que corresponde a Debian GNU/Linux, with Linux 2.6.32-5-686-bigmem que es el que acabamos de instalar. Si correspondiese a otro distinto, basta con editar el archivo con el vi y sustituir, en el set default="0", el número 0 por el de la posición del kernel deseado.



Tras esto reiniciamos el equipo y comprobamos que nuestro nuevo kernel reconoce toda la memoria instalada.

root@OPT360:~# free
             total       used       free     shared    buffers     cached
Mem:       4070840    3811876     258964          0     298780    1963380
-/+ buffers/cache:    1549716    2521124
Swap:      3905528          0    3905528


No hay comentarios:

Publicar un comentario