Proceso de arranque del sistema. Grub. Kernel. Init.
En este artículo vamos a ver el proceso de arranque del sistema operativo, el gestor de arranque y como solucionar problemas de este, el arranque del kernel, proceso init, los runlevels y la parada del sistema.
Sumario
- Proceso de arranque del sistema
- Gestor de arranque GRUB2
- Problemas con GRUB
- Arranque del kernel
- Proceso init y runlevels
- Parada del sistema
Proceso de arranque del sistema
El proceso de arranque del sistema se realiza por fases tras realizar una verificación de que están conectados los periféricos necesarios para poder continuar, normalmente teclado y ratón. Estas fases son:
1.- Selección del dispositivo de arranque (BIOS)
El BIOS busca un dispositivo de inicio, el disco duro, USB o CD, y de ahí pasa el control al primer sector físico del dispositivo conocido como MBR «master boot record», son los primeros 512 bytes, el primer sector del disco duro y que forman la fase 1 de GRUB.
2.– Ejecución del gestor de arranque desde el primer bloque del dispositivo de arranque
La fase 1 de GRUB carga la siguiente fase de GRUB, ubicada físicamente en cualquier parte del disco duro.
3.– Carga y ejecución de la segunda fase del gestor de arranque
La fase 2 de GRUB, cargada por la fase 1, recibe el control, y presenta al usuario el menú de inicio.
4.– Carga y ejecución del kernel del S.O.
GRUB carga el kernel seleccionado por el usuario en la memoria y le pasa el control.
5.– Ejecución del proceso init
Una vez cargado el kernel se ejecuta el programa init que se encarga del resto del arranque.

Gestor de arranque GRUB2
GNU GRUB «GNU GRand Unified Bootloader» es un cargador de arranque múltiple, desarrollado por el proyecto GNU, que nos permite iniciar diversos sistemas operativos desde un menú de arranque, eligiendo qué Sistema Operativo arrancar de los que tengamos instalados.
Se usa principalmente en sistemas operativos GNU/Linux desde 2007, fecha en que algunos de ellos comenzaron a utilizar GRUB 2. A finales de 2009, prácticamente todas las distribuciones GNU/Linux lo tenían instalado por defecto. El sistema operativo Solaris ha usado GRUB como cargador de arranque en sistemas x86 desde la revisión 10 (Enero de 2006).
Se configura e instala durante el proceso de instalación del S.O., detectando otros Sistemas Operativos. La configuración se gestiona automáticamente, aunque tenemos ficheros de configuración en:
- /boot/grub/grub.cfg : generado automáticamente por «grub2-mkconfig». ¡No modificar! El propio fichero nos dice «DO NOT EDIT THIS FILE»
- /etc/default/grub : aquí encontramos muchas opciones generales. Se puede editar.
- /etc/grub.d/ : directorio con ficheros de configuración. En el fichero nos dice «This file does nothing and will be removed in a later release».

Tras hacer cualquier modificación en estos ficheros de configuración, para aplicar los cambios, tendremos que actualizar GRUB ejecutando
update-grub
Problemas con GRUB
Podemos encontrarnos problemas con GRUB, que se resumen en dos tipos.
Tipo 1 : Consiste en que en la fase 1 no se encuentra en el MBR, por dos razones
1.– Se ha instalado otro sistema operativo. Cuando hacemos una instalación dual, si se trata de Windows la segunda instalación, se carga el MBR, impidiendo el arranque de Linux.
2.– La instalación no se ha finalizado correctamente.
La solución será reinstalar grub en el disco con el comando «grub-install»
Tipo 2 : Carga la fase 1 pero no encuentra una configuración correcta. Puede tratarse de los siguientes problemas:
1.– Se ha trasladado el disco a otro sistema
2.– La actualización de la configuración no funcionó correctamente
3.– Se ha intentado, sin éxito, cambiar manualmente la configuración.
Solución
La solución será, en este caso, actualizar (regenerar) la configuración de Grub con el comando «update-grub»
Veamos una solución genérica para estos problemas y reparar el gestor de arranque.
Tenemos que arrancar el equipo con el usb o CD con la ISO «Live CD» con la que instalamos el SO. Valdría cualquier otra distribución Linux, pero con la misma arquitectura. Y elegir la opción de ver el S.O. sin instalarlo. Esto es lo que se llama un LiveCD.
Abrimos la terminal y ejecutamos el comando «lsblk». Veremos algo como lo siguiente

Fíjate en los puntos de montaje. Yo tengo «/» en sdc4 y «/boot» en sdc3. Tu lo tendrás en sdaX. Acuérdate de cambiar la X por la que corresponda en tu caso.
Ahora hay que montar estas particiones en un punto de montaje temporal. Es muy importante el orden de ejecución de los comandos.
mount /dev/sdc4 /mnt mount /dev/sdc3 /mnt/boot mount --bind /dev /mnt/dev mount --bind /proc /mnt/proc mount --bind /sys /mnt/sys
Cambiamos al sistema y ejecutamos la instalación y configuración de Grub. Aquí sin el número de la partición.
chroot /mnt (chroot)# grub-install /dev/sdc (chroot)# update-grub
Salimos de «chroot», desmontamos las particiones.
(chroot)# exit umount /mnt/dev umount /mnt/proc umount /mnt/sys umount /mnt/boot umount /mnt
Y reiniciar. Acuérdate de quitar el usb o CD.
reboot
Ya debería estar solucionado. Hemos instalado GRUB con «grub-install» y actualizado con «update-grub».
Lo vemos en la siguiente imagen.

Arranque del kernel
Ahora viene la fase de arranque del Kernel Linux, el nucleo del S.O. Al margen de la distribución que usemos, todas usarán una versión más o menos personalizada del Kernel original de este sistema operativo. El Kernel se guarda comprimido en el disco, por lo que lo primero será descomprimirse en la memoria para poder continuar.
Grub busca el fichero con el kernel y lo carga en la memoria (initrd). Establece los parámetros de arranque del kernel, como el sistema de ficheros raiz «/» y «/boot» y otros programas de inicio. Después pasa el control al kernel.
El kernel (dmesg), comienza el arranque inicial haciendo el POST «Power-On Self Test», donde hace una detección de aspectos básicos del hardware (microprocesador, etc…). E inicia la ejecución de procesos en initrd: detección del hardware, carga de drivers esenciales, etc… Seguidamente monta el sistema de archivos raíz.
En este momento el S.O. ya ha tomado el control.
Proceso init y runlevels (systemd)
El siguiente paso será la inicialización de todos los componentes. Para ello, la mayoría de las distros utilizan systemd que es un conjunto de demonios o «daemons» de administración de sistema, bibliotecas y herramientas diseñados como una plataforma de administración y configuración central para interactuar con el núcleo del Sistema operativo GNU/Linux.
Systemd lanza el proceso con PID 1, que se ejecuta en segundo plano y que será el proceso padre de todos los procesos y servicios que se irán lanzando después, que forman parte del sistema y son esenciales para su correcto funcionamiento.
Una vez que el sistema arranca con éxito, estos servicios seguirán funcionando después del proceso del boot, y se cerrarán en el momento del apagado del sistema. Es decir, el proceso ID 1 seguirá en ejecución hasta que se ejecute un comando como «shutdown», «reboot», «systemctl halt», «systemctl poweroff» o «systemctl reboot», que iniciarán un apagado ordenado del equipo.
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, FTP, Http, etc…
Si no hemos hecho modificaciones en el sistema, lo normal es que todo funcione correctamente sin errores, ya que se trata de un proceso totalmente automatizado que no requiere de nuestra intervención.
Systemd nos ofrece una serie de herramientas para administrar el sistema. Vemos unas cuantas

Existen alternativas a systemd como System V y Upstart, pero se ha impuesto systemd y se utiliza en casi todos los sistemas modernos, a pesar de las críticas de parte de la comunidad Linux.
Para comprobar si utilizamos systemd, init o upstart, ejecuta
ps -p1 | grep "init\|upstart\|systemd" o ps aux | head -n 2

Y para ver si tenemos activo el servicio ufw ejecutamos
systemctl status ufw

Runlevel
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.
Runlevel define diferentes configuraciones del arranque/parada del sistema mediante un conjunto de scripts que se ejecutan para cada runlevel, también llamados «target». Lo podemos ver con el comando
systemctl list-units --type=target

Y para ver el nivel de ejecución
who -r

Runlevels definidos
0 – Halt. Error crítico del sistema.
1 – Modo para un solo usuario. Sólo el root tiene acceso, se desactivan todos los procesos, red, etc.
2 – Modo multiusuario sin acceso a la red. Definido por el usuario.
3 – Modo multiusuario en terminal.
4 – Modo definido por el usuario.
5 – Modo multiusuario con entorno gráfico. Es el modo en el que se intentará arrancar por defecto siempre.
6 – Modo reinicio del equipo. (reboot)
En cualquier momento el administrador del sistema puede cambiar de runlevel, ejecutando el comando
telinit <numero_runlevel>
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.
Podemos ver el tiempo que ha tardado nuestra distro en cargar con el comando
systemd-analyze

El tiempo variará en función de los servicios que se inicialicen en el arranque y del hardware instalado. En un sistema de escritorio con los servicios básicos, lo normal será sobre los 20 segundos.
Parada del sistema
Para parar el sistema es necesario realizar varias tareas de forma ordenada. Esto se controla mediante los runlevels 0 «parar» y 6 «reiniciar» y algunos comandos como
- – # shutdown -r now
- – # shutdown -h +5 «paramos en 5 minutos»
- – # telinit 0
- – # systemctl halt
- – # systemctl poweroff
- – # systemctl reboot
- – En el escritorio: Sistema -> Salir
Lo que estamos haciendo es matar o reiniciar el proceso con PID 1 y apagar o reiniciar nuestro equipo de forma ordenada.
Si tienes algún comentario que hacer sobre este artículo, al pie del post tienes un formulario para hacerlo.
Si quieres contactar conmigo por cualquier otro asunto relacionado con el sitio, en la página de contacto, tienes un formulario más adecuado.
Y para suscribirte y recibir las novedades publicadas, tienes un enlace en el pie de la página o desde aquí mismo.
gracias amigo muy bueno tu aporte, exitos buen fin de año y un comienzo mejor.
Gracias jerson, feliz año
Gracias, buen trabajo Javier
Gracias Barto