Una vez que tenemos instalado un sistema operativo Linux (Ubuntu, Debian, Mint, etc), para usarlo no tenemos más que pulsar el botón de encendido del PC y esperar a que cargue el sistema operativo. Igual que ocurre con cualquier otro sistema operativo, como Windows. Sin embargo, el proceso de arranque es un proceso bastante complejo, y además está dividido en varias etapas, cada una esencial para que nuestra distro pueda arrancar con éxito. Por ello, si conocemos este proceso de arranque, será bastante sencillo poder identificar y solucionar cualquier posible problema al que nos podamos enfrentar.
Hay algunas distros Linux que están configuradas para que el proceso de arranque, boot, sea en modo verbose, es decir, mostrando en la pantalla todos los comandos que se ven ejecutando. Aunque es cierto que la mayoría, especialmente las distros «fáciles», tienen un splash en la pantalla que nos impide verlo (aunque siempre podemos mostrarlo pulsando Esc para tener controlado el proceso).
Sin embargo, tanto en modo texto como con la imagen estática en la pantalla, el proceso de arranque es el mismo. Y desde que pulsamos el botón de encendido hasta que podemos ver el escritorio pasamos por varias fases que vamos a detallar a continuación.
Fase BIOS/UEFI
Esta fase es igual para todos los sistemas operativos. Este pequeño sistema, o firmware, se almacena en un chip de la placa base y es el encargado de comprobar que todos los componentes del PC están conectados y funcionan correctamente. Para ello, realiza un POST (Power-On Self Test), verifica que están conectados los periféricos necesarios para poder continuar (especialmente teclado), y localiza la unidad que tenemos configurada como «boot», donde estará el gestor de arranque para continuar con la carga del sistema operativo.
Algunos de los errores que podemos encontrarnos en este punto son los siguientes, y la mayoría de las veces están relacionados con el hardware directamente (especialmente con los discos duros), por lo que se solucionan comprobando que los periféricos están bien conectados, o restableciendo la BIOS a los valores de fábrica:
- Corrupción de MBR.
- Tabla de particiones corrupta.
- Corrupción de PBR.
- Corrupción del bootsector.
- Disco corrupto.
- Corrupción de bootmgr.
Fase Boot Loader
En esta fase, el ordenador intentará acceder al Master Boot Record (MBR) o a la Guided Partition Table (GPT) del disco duro, según la configuración de la BIOS o UEFI. Si no se encuentra esta partición, directamente veremos un mensaje en el ordenador que nos indicará que no se encuentra el sistema operativo. En ese caso, tendríamos que revisar la configuración de arranque de la BIOS o UEFI, y si fuera necesario incluso reinstalar el SO para que se volviera a generar el arranque.
Si se encuentra esta partición, entonces lo siguiente que veremos será el menú de arranque de Linux, también conocido como «GRUB» (aunque puede haber otros gestores de arranque, como LILO). Aquí nos aparecerán todos los sistemas operativos que hay instalados en el PC, así como otras entradas del gestor de arranque (distintos kernel, opciones de recuperación, analizador de memoria RAM, etc).
Elegiremos la entrada que queremos arrancar (Ubuntu, por ejemplo, para continuar con el boot de Linux) y en la siguiente etapa empezará la carga del propio Kernel.
Los errores que nos podemos encontrar en este punto son entradas corruptas dentro de GRUB. Y la forma de solucionarlo es utilizando un disco de recuperación (o una distro Linux Live que podamos cargar desde la RAM) para reparar el GRUB y hacer que las entradas apunten a los discos duros o particiones correspondientes.
Fase de arranque del Kernel Linux
Ahora viene la fase de arranque más importante: la del Kernel Linux. Independientemente de la distro que usemos, todas ellas usarán una versión más o menos personalizada del Kernel original de este sistema operativo. Por motivos de espacio y optimización, el Kernel se guarda comprimido en el disco, por lo que lo primero será descomprimirse en la memoria para poder continuar.
El siguiente paso será la inicialización de todos los componentes. Para ello, la mayoría de las distros utilizan un controlador de demonios (daemons) llamado systemd (aunque algunas utilizan alternativas como, por ejemplo, init.d). Lo que se hace en este paso es lanzar todos los procesos y servicios que forman parte del sistema y son esenciales para su correcto funcionamiento. Todos estos procesos permiten que el hardware funcione y que todos los componentes del sistema operativo estén sincronizados, especialmente la memoria y los discos. Estos servicios seguirán funcionando después del proceso del boot, y se cerrarán en el momento del apagado del sistema.
Además de los procesos y servicios esenciales de Linux, también se pueden cargar otros servicios personalizados (por ejemplo, un servidor que tengamos montado y configurado, como un SSH o un FTP).
Salvo que hayamos hecho modificaciones nosotros mismos en el sistema, es raro encontrarnos con problemas en este punto. El arranque del sistema con Systemd suele ser un proceso totalmente automático y no requiere intervención por nuestra parte. Además, si algún daemon no se puede cargar, simplemente lo marcará como error y pasará al siguiente. Lo que sí puede ocurrir es que algunos daemons tarden muchos segundos en cargar. Y entonces lo que debemos hacer es comprobar en qué punto se queda colgado Systemd e intentar solucionar el problema deshabilitando el servicio, configurándolo correctamente o actualizando el sistema.
Fase final del arranque de Linux
Llegados a este punto, nuestra distro ya estará lista. Entonces es cuando entra la fase «runlevel» en la que se indicará con un número el tipo de funcionamiento del sistema operativo según los servicios que se hayan cargado correctamente:
- 0 – Halt. Error crítico del sistema.
- 1 – Modo para un solo usuario.
- 2 – Modo multiusuario sin acceso a la red.
- 3 – Modo multiusuario en terminal.
- 4 – Modo definido por el usuario.
- 5 – Modo multiusuario con entorno gráfico. Es el modo deseado y en el que se intentará arrancar por defecto siempre
- 6 – Requiere reiniciar el equipo.
Suponiendo que hayamos obtenido un «5» en el runlevel, entonces ya podremos ver la pantalla de login de nuestra distro Linux, y podremos iniciar sesión. Una vez iniciada sesión ya tendremos el escritorio a nuestra mano, y podemos empezar a trabajar con el ordenador con total libertad.
Podemos cambiar el valor de runlevel ejecutando en un terminal «telinit» seguido del valor que queramos. Por ejemplo, un valor «0» forzaría un apagado del PC, mientras que un valor «1» solo nos permitiría usar Linux en modo monousuario.
También podemos ver el tiempo que ha tardado nuestra distro en cargar con el comando «systemd-analyze»: