Acelerar el arranque en Ubuntu

19/08/2008 21:08 por Álvaro J. Iradier

Tras leer varios artículos al respecto, me he decidido a resumir una serie de consejos para tratar de reducir el tiempo de arranque de un sistema Ubuntu Linux. En concreto, la versión 8.04 (Hardy Heron).

Si bien los desarrolladores de Ubuntu han trabajado duro en hacer el arranque lo más óptimo posible, con mejoras como el readahead, es posible que se estén arrancando servicios y procesos en el inicio que no son necesarios en nuestro sistema.

Si miramos el contenido de la carpeta /etc/init.d encontraremos los scripts de inicio y detención de servicios instalados en nuestro sistema. No todos estos scripts tienen serán ejecutados durante el arranque, aunque la mayoría sí. Para averiguarlo, podemos listar el contenido de las carpetas /etc/rcS.d y /etc/rc2.d, que contendrán accesos directos a los scripts ejecutados durante el arranque del sistema, en el caso del primero, y los ejecutados al entrar en el runlevel 2, que es el nivel de ejecución por defecto en Ubuntu.

Podemos averiguar a qué paquete pertenece un script de inicio mediante el comando:

dpkg -S /etc/init.d/nombrescript

Una vez sepamos el paquete al que pertenece, podremos proceder a examinarlo (por ejemplo con apt-cache show o con dpkg, y borrarlo si es prescindible (y siempre con mucho cuidado) con apt-get remove. En mi caso, eliminé los paquetes relativos al soporte de PCMCIA (pcmcia-utils), y el servicio avahi.

La herramienta bootchart nos permitirá indagar más en profundidad, y ver qué servicios están arrancando, y el tiempo utilizado por cada uno. Podemos instalarlo con apt-get install bootchart. La instalación debería actualizar el initramfs, pero en mi caso no lo hizo correctamente, por lo que manualmente ejecuté update-initramfs -u -k all como superusuario, forzando la regeneración de los initramfs.

Una vez instalado correctamente, y tras reiniciar el sistema, podemos encontrar en /var/log/bootchart un archivo .png con un detallado diagrama del arranque del sistema. Así descubrí cómo un interfaz de red configurado manualmente para DHCP interrumpía el arranque un largo rato cuando no había conexión de red. Dejar el interfaz en manos del network manager solucionó el problema.

No hay que olvidarse de desinstalar el paquete bootchart, y volver a actualizar el initramfs, una vez hayamos terminado nuestra tarea, o la propia recolección de datos ralentizará el arranque.

Otra medida sencilla que puede disminuir el tiempo de arranque es permtir la ejecución en paralelo de los scripts de inicio. Por defecto, Ubuntu lanza secuencialmente los scripts, aunque tengan la misma prioridad. Si editamos el archivo /etc/init.d/rc, y cambiamos la línea:

CONCURRENCY=none

por:

CONCURRENCY=shell

los scripts con la misma prioridad se ejecutarán en paralelo. Si esta opción viene desactivada por defecto, es por algún motivo, ya que podemos encontrar problemas en ciertos sistemas. Conviene asegurarse con varios reinicios que todo sigue funcionando correctamente, antes de hacer este cambio definitivo.

Finalmente, cuando tengamos a punto todos estos pasos, lo más conveniente es volver a afinar la lista de archivos pre-leídos por readahead. La forma más fácil es reiniciar el sistema, y entrar en el menú de arranque de Grub. Ahí editaremos la línea de comandos del kernel, y añadiremos la palabra profile al final. Por ejemplo, de:

 root=UUID=43b7048a-1e73-49ac-8a5d-8663ad950420 ro acpi=force splash quiet

pasaremos a dejar la línea como:
 root=UUID=43b7048a-1e73-49ac-8a5d-8663ad950420 ro acpi=force splash quiet profile

esperaremos paciéntemente a que termine de arrancar el sistema, que se tomará un rato más largo de lo habitual. Durante este arranque, readahead elaborará una lista de todos los archivos leídos durante el arranque, y los ordenará por su posición en el disco duro, de forma que en sucesivos arranques estos archivos sean pre-leídos y cargados en la memoria cache de disco de la forma más rápida posible.
profile (readahead). Cuando el sistema termine de arrancar, lo reiniciaremos, y habremos terminado de ajustar el readahead.



Warning: Todo parecido de lo expuesto en esta página con la realidad es pura coincidencia.
Las historias y personajes aqui reflejados son fruto de la imaginación de una mente perturbada.
Está permitida la distribución y modificación de todos los contenidos de esta web, siempre que se cite la fuente.

Diseño por Wink Hosting.