0
1
1
0
1
1
0
1
0
1
1
1
1
0
1
0
0
0
Logo de Maxi Zamorano

Proceso de Arranque en Linux: Systemd vs SysV init

  Linux
21:27 hrs   960
Proceso de Arranque en Linux: Systemd vs SysV init

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/
  • 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

Systemd es un sistema de inicialización moderno que reemplaza al clásico SysV init, está diseñado para superar las limitaciones de los sistemas basados en scripts mediante un enfoque paralelo y modular.

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/
  • 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.

Etiquetas
terminal - init - systemd

COMENTARIOS

Mis Perfiles en:

 Maximiliano Zamorano
Ingeniero en Conectividad y Redes
 [email protected]