El arranque del sistema operativo en Linux es fundamental ya que pone en marcha toda la estructura del sistema. En Linux, los sistemas de inicialización más comunes son systemd y System V init (SysV init) y a continuación te explicaré cómo funcionan, sus diferencias y por qué systemd ha llegado a dominar en la mayoría de distribuciones de Linux modernas.
Tabla de contenidos
¿Qué es el proceso de arranque en Linux?
El proceso de arranque de nuestro sistema comienza cuando encendemos la computadora y pasa por varias etapas hasta que el sistema operativo está listo para el usuario. Estas etapas son las siguientes:
1. BIOS/UEFI: Realiza una verificación inicial del hardware y carga el gestor de arranque (como GRUB).
2. Gestor de arranque: Selecciona el kernel de Linux y lo carga en la memoria.
3. Kernel: Configura los controladores de hardware y monta el sistema de archivos raíz.
4. Sistema de inicialización: Aquí entra en juego systemd o SysV init, que inicializa todos los servicios y procesos de fondo necesarios.
Init System V (SysV init)
Init System V es uno de los primeros sistemas de inicialización utilizados en Linux. Se basa en un diseño secuencial, donde los servicios se inician uno por uno en un orden predefinido utilizando scripts.
- Script: SysV init utiliza scripts almacenados en directorios específicos:
- Sistemas basados en Red Hat:
/etc/rc.d/init.d/ - Sistemas basados en Debian:
/etc/init.d/
- Sistemas basados en Red Hat:
- Runlevels: Organiza los servicios en niveles de ejecución (runlevels) numerados del 0 al 6. Cada nivel tiene un propósito específico:
0: Apagar el sistema.1: Modo monousuario (útil para tareas de recuperación o mantenimiento).2: Modo multiusuario (sin servicios de red completos en sistemas basados en Dedian, en RedHat practicamente no tenía uso, era igual al runlevel 3).3: Modo multiusuario sin interfaz gráfica.4: Modo multiusuario (sin uso, generalmente usado para personalización).5: Modo multiusuario con interfaz gráfica.6: Reiniciar el sistema.
- Secuencial: Los servicios se inician uno tras otro, lo que puede hacer que el arranque sea más lento.
Systemd
Recomiendo que uses este sistema, ya que todas las versiones modernas basadas en RedHat y Debian utilizan systemd, mientras que versiones antiguas anteriores a Redhat 7 y Debian 8 usan SysV init.
- Unidades (Units): Systemd utiliza archivos de configuración llamados "units", que pueden definir servicios, puntos de montaje, sockets, etc. Estos se encuentran en:
- Sistemas basados en Red Hat y Debian:
/etc/systemd/system/
- Sistemas basados en Red Hat y Debian:
- Arranque paralelo: Puede iniciar múltiples servicios simultáneamente, reduciendo significativamente el tiempo de arranque.
- Gestión dinámica: Permite habilitar, deshabilitar, iniciar y detener servicios fácilmente con comandos como
systemctl. - Runlevels: los runlevels pasan a ser target y algunos como el runlevel 2 y 4 pasan a cumplir la misma función que el 3 por el poco uso que tenian, por eso el target es el mismo.
Tabla comparativa
| Runlevel (SysV Init) | Target equivalente (systemd) |
|---|---|
| 0 | poweroff.target |
| 1 | rescue.target |
| 2 | multi-user.target |
| 3 | multi-user.target |
| 4 | multi-user.target |
| 5 | graphical.target |
| 6 | reboot.target |
Comandos
Ahora te mostraré como puedes ejecutar directamente desde la terminal los comandos equivalentes para cambiar el runlevel en SysV init y systemd el clasico runlevel 2,3 y 4 de SysV init cumple la misma función.
Cambiar el runlevel por defecto en SysV init: debes editar con nano, vi o vim el archivo /etc/inittab y establecer el número de runlevel que requieras id:3:initdefault:
sudo vim /etc/inittab
Cambiar el runlevel temporalmente en SysV init: para cambiar temporalmente ejecuta sudo init [runlevel] con el numero que requieras.
sudo init 3
Cambiar el target por defecto en Systemd: a diferencia de SysV init con Systemd no debes modificar un archivo, debes ejecutar el comando sudo systemctl set-default [target]
sudo systemctl set-default multi-user.target
Cambiar el target temporalmente en Systemd: para cambiar temporalmente ejecuta sudo systemctl isolate [target]
sudo systemctl isolate multi-user.target
Advertencia
Ten cuidado de establecer el runlevel 0 o el target de poweroff por defecto, ya que el sistema entrará automáticamente en modo de apagado cada vez que se inicie porque el runlevel 0 y el target poweroff.target están diseñados específicamente para apagar el sistema, si eso ocurre tendrás que interrumpir el proceso de arranque desde el GRUB.

