Como sucede a menudo, una situación inesperada me hizo toparme con algo nuevo para aprender, que creo bueno compartir. Hace algún tiempo vendimos un servidor dedicado con un CPU Xeon X3210 (quad-core), para el cual solicitamos una instalación estándar de CentOS 5 con Directadmin. Ayer necesitamos agregarle un poco más de RAM (llegando a 4GB) y nos enteramos que el sistema operativo instalado era de 32 bits.
Personalmente creo que a esta altura ya no se justifica instalar un SO de 32 bits sobre un servidor con arquitectura de 64 bits porque implica un desperdicio de los recursos del sistema y porque la mayoría de las aplicaciones que uno puede llegar a utilizar en máquinas con esta función, trabajan correctamente sobre 64 bits. Es más discutible para una máquina de escritorio, pero últimamente incluso en este caso ya no es tan relevante (sobre todo desde los lanzamientos de Wine o el plugin de Flash para 64 bits en Linux). De hecho yo hace unos dos años que utilizo Linux de 64 bits en mi máquina de escritorio y siempre pude sobrellevar los problemas que ello implicó. Al respecto es interesante este artículo de AMD.
Por si no llegaron a la conclusión, el problema en este caso de tener un sistema operativo de 32 bits es que no permite la asignación de más de 4 GB de memoria física. De hecho, en la práctica el límite suele ser inferior (alrededor de 3.5 GB) por la memoria que de por sí necesita el sistema operativo para algunos dispositivos (acá hay un interesante artículo de Coding Horror sobre este tema en Windows).
Pero existe una solución que se llama PAE: Physical Address Extension (Extensión de dirección física). Se trata de una funcionalidad incluida en los procesadores x86 y x86-64 que permite asignar más de 4 GB de memoria física (hasta 64 GB). El tema es que para hacer uso de esta funcionalidad es necesario que el kernel de nuestro sistema operativo sepa cómo hacerlo. En Windows esto se llama AWE y por supuesto Linux tiene el correspondiente soporte si se lo compila con el flag adecuado.
En el caso de mi problema, como no podía reinstalar el servidor porque hubiera sido riesgoso (está en Estados Unidos y ni sé quién lo hubiera hecho) y perdería bastante tiempo de uptime, esta funcionalidad me resultó indispensable para poder hacer uso de los recursos del servidor. La opción más linda para los que nos gusta experimentar hubiera sido recompilar el kernel por mi mismo, pero las circunstancias para ello no eran las mejores, así que siendo CentOS tuve que recurrir a la basura de yum. Y el procedimiento es tan sencillo como:
# yum install kernel-PAE
Importante: La instrucción la vi en este post, pero no mencionaba un detalle. Lógicamente este procedimiento descarga e instala un nuevo kernel (con el flag activado). Pero, al menos en mi caso, no hizo el cambio adecuado en el GRUB. Por lo cual edité el archivo /etc/grub.conf:
# grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00 # initrd /initrd-version.img #boot=/dev/sda default=1 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.18-92.1.22.el5PAE) root (hd0,0) kernel /vmlinuz-2.6.18-92.1.22.el5PAE ro root=/dev/VolGroup00/LogVol00 rhgb quiet initrd /initrd-2.6.18-92.1.22.el5PAE.img title CentOS (2.6.18-92.1.13.el5) root (hd0,0) kernel /vmlinuz-2.6.18-92.1.13.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet initrd /initrd-2.6.18-92.1.13.el5.img title CentOS (2.6.18-92.el5) root (hd0,0) kernel /vmlinuz-2.6.18-92.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet initrd /initrd-2.6.18-92.el5.img
Donde tuve que cambiar la línea que dice “default=1″ por “default=0″, para que inicie con el kernel que tiene el soporte para PAE activado. Luego corremos “grub” de nuevo y reiniciamos.
# grub # reboot

Hola te hago una consulta tenes idea si existe el paquete Kernel-pae para ubuntu server 8.04?
Saludos Nikitux
Ahhhhh, seria como cargar el EMM386 en el config.sys??
Jaja, siempre vuelven las mismas antiguas nuevas soluciones
@nikitux según entiendo el kernel de Ubuntu Server para 32-bits ya viene con PAE activado:
http://www.serverwatch.com/tutorials/article.php/3715071
@Adrian mucha idea no tengo porque los SOs de Microsoft no son lo mío, pero por lo que me pareció entender googleando un poco creo que EMM386 es algo para DOS y que aplica a procesadores bastante más viejos. Pero podría estar equivocado. En fin, esto de PAE es la implementación del lado del kernel (sea de *nix o Windows) de un feature implementado en los procesadores x86 relativamente nuevos.