Módulo 3 - Arranque y sistemas de archivos

La BIOS

  • BIOS se almacena en la memoria ROM.
  • Ejecuta POST para verificar hardware al encender. Utiliza un proceso llamado POST (Power On Self Test) para identificar, probar y conectar todos los dispositivos de hardware tan pronto como se enciende la computadora.
  • Permite carga del sistema si todo funciona.
  • Emite alerta si detecta errores críticos.
  • Busca el sistema operativo tras autenticación.
  • Funciona solo con particiones tipo MBR.
  • Se instala por defecto en computadoras.

BIOS boot Sequence

  • BIOS ejecuta la secuencia para iniciar sistema.
  • Decide qué dispositivo cargar en la memoria.
  • Requiere conocer ubicación del sistema operativo.
  • Usuario puede modificar este proceso manualmente.
  • Usado al instalar desde medio extraíble.

UEFI

  • Usa "boot sequence" para ubicar el sistema.
  • Permite configuraciones y pruebas más avanzadas.
  • Brinda mayor seguridad comparado con la BIOS.
  • Soporta particiones GPT como opción predeterminada.
  • Compatible con MBR mediante función PMBR (Protective Master Boot Record) especial.

Conceptos básicos de la secuencia de arranque

  • GRUB carga el sistema operativo desde disco. Muestra menú con opciones de arranque disponibles.
    • Programa pequeño almacenado en el sector cero del disco, consultado por la BIOS o UEFI para encontrar un SO disponible y cargar su kernel a la memoria. Muestra una pantalla con opciones manipulables durante el arranque.
  • Kernel conecta hardware con procesos del sistema. Inicia servicios y administra recursos del SO.
    • Elemento principal de los sistemas operativos Linux, interfaz entre el hardware y los procesos, inicia servicios necesarios y administra recursos para los procesos del SO.
  • Filesystem organiza archivos dentro de una partición. Define cómo se almacenan y acceden datos. Soporta distintos tipos según estructura y función.
    • Define cómo se almacenan, crean y acceden los datos en una partición, mapea la jerarquía de archivos y directorios de una partición, hay diferentes tipos que serán analizados posteriormente.

Administradores de servicios

  • SysVinit usa niveles y scripts para iniciar servicios. Tiene 7 niveles de arranque con diferentes funciones.
  • Systemd gestiona servicios con dependencias y orden. Es el sistema más usado desde 2015.
  • Upstart fue reemplazado por estar obsoleto actualmente.

SysVinit

SysVinit es un sistema de inicialización clásico en Linux que controla el arranque y apagado mediante scripts y niveles de ejecución.

Cada nivel (0 al 6) representa un estado del sistema, como apagado, modo monousuario, multiusuario o reinicio. Esto permite ajustar qué servicios se cargan según el contexto del sistema.

Niveles de ejecución: Son configurables y pueden variar según la distribución:

  • 0: Power ➜ El sistema se apaga al entrar en este nivel.
  • 1: Monousuario ➜ Sin interfaz de red, solo para root. Para solucionar problemas o probar el sistema. Usado para tareas de mantenimiento.
  • 2: Multiusuario ➜ Sin soporte de red o GUI. Utilizado para realizar pruebas de configuración propia de cada usuario. Se usa muy poco.
  • 3: Multiusuario ➜ Red. Ejecuta los programas y servicios necesarios. El sistema operativo carga basado en caracteres.
  • 4: Multiusuario ➜ Como el tercer nivel, pero se utiliza para configurar el servidor de una manera más específica, como por ejemplo remover servicios.
  • 5: Multiusuario gráfico ➜ Es el mismo que el nivel 3 pero con interfaz gráfica GUI. Tiene un administrador de pantalla (X11 o Wayland).
  • 6: Reiniciar ➜ El sistema ha sido reiniciado.
    • telinit [# runlevel]: Nos permite cambiarnos de runlevel.

Systemd

Systemd es el sistema de inicio moderno en Linux, que reemplaza los niveles de ejecución de SysVinit por targets. Estos definen el comportamiento del sistema durante el arranque, como multi-user.target o graphical.target.

El target por defecto se configura con default.target, ubicado en /lib/systemd/system/. - poweroff.target: Equivalente al nivel 0 de SysVinit. Apaga el sistema. Sin soporte de red. - rescue.target: Similar al nivel 1 de SysVinit. Entorno de rescate para mantenimiento. Sin soporte de red.
- multi-user.target: Equivalente al nivel 3 de SysVinit. Entorno multiusuario sin interfaz gráfica. Con soporte de red. - graphical.target: Equivalente al nivel 5 de SysVinit. Entorno gráfico de usuario. Con soporte de red. - reboot.target: Equivalente al nivel 6 de SysVinit. Reinicia el sistema. Sin soporte de red.

  • Systemd soporta telinit.
  • El comando runlevel nos muestra el nivel de ejecución.
  • El target por defecto es graphical.target.
  • El archivo del "target" por defecto puede estar en:
    • /etc/systemd/system/default.target
    • /lib/systemd/system/default.target
  • Los demás targets están en /lib/systemd/system/

Systemd units

Systemd units son fundamentales para el control del sistema en Linux.

Entre los más utilizados se encuentran:

  1. Service: El más común. Usado para activar los recursos del sistema que se pueden iniciar, detener y reiniciar. Ejemplo: NetworkManager.service
  2. Socket: Un socket es una interfaz lógica que conecta dos servicios, estas interfaces lógicas se pueden iniciar, detener y recargar con el módulo de socket. Ejemplo: cups.socket
  3. Device: Suelen usarse para iniciar, detener o reiniciar un dispositivo de hardware que ya ha sido identificado por el kernel y en el que se debe realizar una de las tres acciones (iniciar, detener o reiniciar). Ejemplo: enp0s3.device
  4. Mount: Se utiliza para cargar, detener o recargar los puntos de montaje del sistema de archivos de los dispositivos de almacenamiento. Ejemplo: boot-efi.mount
  5. Automount: Se utiliza para montar automáticamente sistemas de archivos solo cuando se accede a ellos.
  6. Target: Es un grupo de units que se agrupan y gestionan como un target. Ejemplo: graphical.target
  7. Snapshot: Almacena una "instantánea" o “Snapshot” del estado actual del sistema operativo en un momento específico. No está disponible en todas las distribuciones.

Su correcta gestión permite que el sistema funcione de manera organizada y flexible durante el arranque y operación.

Systemctl

Systemctl es una herramienta clave en sistemas Linux con systemd, ya que permite gestionar unidades como servicios, dispositivos y más.

Facilita acciones como iniciar, detener, reiniciar, habilitar o deshabilitar procesos, lo que lo hace esencial para la administración del sistema desde la terminal.

Principales comandos

ComandoDescripción
systemctl list-unitsMuestra todas las unidades activas en la sesión actual.
systemctl list-unit-filesMuestra todas las unidades del sistema, tanto activas como inactivas.
systemctl status [systemd-service]Muestra el estado de ejecución de un servicio especificado, como activo o inactivo.
systemctl stop [systemd-service]Detiene la ejecución de un servicio especificado, colocándolo como inactivo.
systemctl start [systemd-service]Inicia la ejecución de un servicio especificado, colocándolo como activo.
systemctl restart [systemd-service]Permite reiniciar la ejecución de un servicio especificado.
systemctl disable [systemd-service]Deshabilita un servicio específico para el próximo arranque del sistema.
systemctl enable [systemd-service]Habilita un servicio específico para el próximo arranque del sistema.
systemctl disable [systemd-service] --nowDeshabilita y detiene inmediatamente un servicio específico.
systemctl enable [systemd-service] --nowHabilita y inicia inmediatamente un servicio específico.
systemctl get-defaultMuestra el "target" de inicio actual del sistema.
systemctl list-units --type=[unit-type]Lista units del tipo especificado (service, socket, device, mount, automount, target o snapshot).
systemctl isolate [boot.target]Cambia al sistema a otro nivel de arranque especificado (target).
systemctl set-default [boot.target]Elige el nivel de arranque predeterminado. No usar poweroff.target o reboot.target
systemctl list-dependenciesLista todos los servicios en el sistema y sus dependencias en forma de árbol.

Comandos para Apagar y reiniciar el sistema

  • Estos comandos son fundamentales para gestionar el apagado o reinicio del sistema de forma segura y controlada.

  • Comandos como shutdown, halt, poweroff y rebootpermiten reinicios seguros, programados y adaptados a cada necesidad, evitando pérdidas y garantizando el cierre correcto del sistema.

    • shutdown: Apaga o reinicia el sistema de forma programada, permitiendo notificaciones a los usuarios.
    • halt: Detiene todos los procesos y apaga el sistema. Dependiendo de la configuración, puede dejar el hardware en un estado inactivo o, en sistemas modernos, enviar una señal ACPI para apagar completamente el sistema.
    • poweroff: Apaga el sistema de forma inmediata, deteniendo todos los procesos enviando una señal ACPI.
    • reboot: Reinicia el sistema de forma inmediata, deteniendo todos los procesos.

Mensajes de inicio: dmesg

  • Durante el arranque pueden surgir errores, por lo que es clave analizar los registros del kernel.

  • Estos se almacenan en el Kernel Ring Buffer, una memoria con capacidad limitada donde los mensajes antiguos se eliminan al llegar nuevos.

  • Estos registros pueden visualizarse utilizando el comando dmesg.

    • dmesg: Muestra los registros del "Kernel Ring Buffer".
    • dmesg -T: Muestra los registros del "Kernel Ring Buffer" y el tiempo en que ocurrieron.
    • dmesg -lerr: Muestra los registros del "Kernel Ring Buffer" categorizados como errores.
    • dmesg -linfo: Muestra los registros del "Kernel Ring Buffer" categorizados como informativos.
    • dmesg: -lwarn: Muestra los registros del "Kernel Ring Buffer" categorizados como advertencias.

Particiones de Unidad

  • Una partición es una subdivisión lógica del disco que permite a los sistemas operativos y archivos tratarla como independiente.
  • Se usa para instalar varios sistemas, manejar diferentes tipos de archivos, proteger datos en caso de fallos y facilitar su gestión.

Tipos de particiones:

  • Partición primaria: Permite instalar sistemas operativos y se limita a cuatro por disco en MBR.
  • Partición extendida: Supera esta limitación al permitir múltiples particiones lógicas dentro de ella.
  • Partición lógica: Creada dentro de una extendida,

Sistema de particiones: MBR y GPT

  • El sistema de particiones define cómo se crean y gestionan las particiones al arrancar.
  • Los dos principales son MBR y GPT, fundamentales para organizar el almacenamiento, iniciar sistemas operativos y proteger la integridad de los datos.

Sistema MBR

  • Este sistema se ubica en el sector cero del disco y contiene el cargador de arranque y la tabla de particiones.
  • El sector cero tiene 512 bytes de tamaño, con 446 bytes para el cargador de arranque (GRUB), 64 bytes para la tabla de particiones y 2 bytes para la firma de arranque, usada para verificar la capacidad de arranque de la unidad.
  • Está limitado a 2.2 TB, admite solo cuatro particiones primarias o una extendida, y es compatible únicamente con BIOS.

Sistema GPT

  • GPT supera las limitaciones de MBR al permitir particiones de hasta 9.4 ZB y hasta 128 particiones primarias.
  • Es compatible con UEFI, incluye PMBR para sistemas MBR y permite respaldar la tabla de particiones, mejorando así seguridad y flexibilidad.

Filesystems

  • Un sistema de archivos define cómo se almacenan, organizan y acceden los datos en un dispositivo.
  • Algunos de los más comunes incluyen: FAT, FAT32, NTFS, exFAT, Ext, Ext2, Ext3, Ext4, XFS y tmpfs, siendo clave para el funcionamiento de cualquier sistema operativo.

Linux filesystems

  • Los sistemas de archivos Ext, Ext2, Ext3 y Ext4 han sido fundamentales en Linux, evolucionando en rendimiento, confiabilidad y recuperación de datos.
  • Ext4, el más moderno, es el predeterminado en muchas distribuciones, aunque sus versiones anteriores aún se usan por su estabilidad y compatibilidad.
  • XFS y tmpfs son sistemas de archivos clave en Linux.
  • XFS es ideal para servidores por su alto rendimiento, y tmpfs se usa para almacenamiento temporal durante el arranque.
  • Su correcta funcionalidad depende del montaje del sistema de archivos, proceso esencial que conecta particiones con el sistema operativo para permitir el acceso y manejo de datos.
  • En Linux, herramientas como fdisk, cfdisk, parted (modo consola) y gparted (interfaz gráfica) son ampliamente utilizadas para crear, modificar o eliminar particiones.
  • Son esenciales para gestionar el almacenamiento y preparar discos antes de instalar sistemas operativos.

Naming convention: Dispositivos de almacenamiento

  • En Linux, los discos se identifican con el prefijo "sd" seguido de una letra (a, b, c…) que indica su orden.
  • El disco principal suele ser /dev/sda y el secundario /dev/sdb, usándose comúnmente para respaldo.
  • Las particiones se enumeran como /dev/sda1, /dev/sda2, etc.
  • Esta convención permite distinguir fácilmente cada unidad y sus particiones.

Gestores de Arranque

Cuando el sistema arranca, el BIOS/UEFI transfiere el control al gestor de arranque, que carga el sistema operativo en memoria. En Linux, han existido tres sistemas de gestión de arranque principales:

  • LILO: uno de los primeros cargadores usados.
    • LILO fue el primer gestor de arranque, hoy obsoleto.
  • GRUB Legacy: versión inicial del GRUB.
    • GRUB Legacy reemplazó a LILO, pero ya está en desuso. Solo es compatible con BIOS y su archivo de configuración está en /boot/grub/menu.lst (o grub.conf).
  • GRUB2: versión actual más flexible y potente.
    • GRUB2 es el gestor actual en GNU/Linux, más completo y configurable.
    • GRUB2 permite personalizar el arranque desde /etc/default/grub.
    • Se configuran opciones como el sistema predeterminado (GRUB_DEFAULT), el tiempo del menú (GRUB_TIMEOUT) y comandos para el kernel (quiet, splash).
    • Esto mejora la experiencia y control del inicio del sistema.

Parámetros de GRUB2:

El archivo /etc/default/grub controla GRUB2 con los siguientes parámetros:

ParámetroDescripción
GRUB_DEFAULTDefine el sistema operativo predeterminado para el arranque. "0" carga el primer sistema, "2" el segundo, etc.
GRUB_SAVEDEFAULTSi es "true" y GRUB_DEFAULT es "saved", recuerda la última selección como predeterminada.
GRUB_TIMEOUTDefine la duración del menú de GRUB en segundos. "0" omite el menú, "-1" muestra hasta la selección.
GRUB_CMDLINE_LINUXPermite comandos de Shell para todas las entradas del Kernel de Linux.
GRUB_CMDLINE_LINUX_DEFAULTAgrega comandos de Shell solo para el arranque predeterminado, basados en GRUB_CMDLINE_LINUX.
Puede contener quiet para reducir mensajes del kernel y splash para una pantalla atractiva de inicio.

Directorio /boot

El directorio /boot contiene archivos esenciales para que el sistema arranque correctamente. Por ejemplo: - config-5.13.0.19-generic: Contiene la configuración del kernel de Linux, generado durante su compilación o instalación, y no debe ser alterado por el usuario. - System.map-5.13.0-19-generic: Se utiliza para depurar errores de "kernel panic", identificando variables o funciones no llamadas durante el error. - El archivo principal del kernel, vmlinux-version-arch (por ejemplo, vmlinux-5.15.0.-43-generic), se encuentra como vmlinuz, donde la "z" indica compilación. - El initramfs, initrd-img-5.13.0-19-generic, es un filesystem temporal cargado en la RAM que contiene utilidades y módulos del kernel necesarios para cargar el filesystem raíz (/).

Incluye la configuración del kernel, el mapa de símbolos para depuración, el kernel compilado (vmlinuz) y el initramfs, necesario para cargar el sistema de archivos raíz al iniciar.


Notas de los videos

BIOS (Basic Input/Output System)

  • La BIOS es un software muy básico (similar a un mini sistema operativo).

  • Está almacenada en una memoria ROM (Read Only Memory) dentro de la tarjeta madre.

  • Se ejecuta inmediatamente al encender la computadora

  • Sin BIOS, la computadora no puede arrancar.

  • Funciones clave:

    • Ejecuta el POST (Power-On Self Test): Verifica que el hardware crítico (CPU, RAM) funcione.

    • La BIOS emite pitidos (pitidos en código tipo Morse) para indicar errores cuando no puede mostrar mensajes en pantalla. Ejemplo: 3 pitidos cortos pueden indicar fallo en la memoria.

    • Gestiona el Boot Sequence (Secuencia de Arranque): Una lista priorizada de dispositivos de almacenamiento (HDD, SSD, USB, CD/DVD) donde buscar un sistema operativo para cargar. El orden se puede modificar (ej: para bootear desde un USB de instalación).

UEFI (Unified Extensible Firmware Interface)

  • Evolución moderna del BIOS con mejoras de seguridad y rendimiento

  • Mismas funciones básicas que BIOS, pero más avanzado

  • Interfaz gráfica moderna (tipo "Gamer")

  • Presente en computadoras más recientes

Diferencias clave BIOS vs UEFI

CaracterísticaBIOSUEFI
InterfazTexto, monocromáticaGráfica, con menús, mouse, temas (tipo “gamer”)
Modo de arranqueSolo modo Legacy (16 bits)Soporta modo Legacy y modo nativo UEFI (32/64 bits)
Compatibilidad con esquemas de particionadoSolo MBRMBR y GPT (recomendado GPT para discos >2TB o más de 4 particiones)
SeguridadBásicaIncluye Secure Boot (evita carga de firmwares/bootloaders no firmados)
Velocidad de arranqueMás lentaMás rápida (gracias a inicialización paralela de hardware)

Componentes del arranque en Linux

GRUB (Grand Unified Bootloader) es el bootloader predeterminado en Linux, aunque el término genérico es "cargador de arranque".

Se encuentra en la partición /boot y es llamado por la BIOS/UEFI después del POST y la secuencia de arranque.

  • Proceso específico:
    • La BIOS (o UEFI) enciende y busca un dispositivo arrancable.

    • La BIOS NO carga el sistema operativo directamente.

    • La BIOS llama al MBR (Master Boot Record) en la partición /boot, y el MBR llama a GRUB.

    • GRUB busca a lo largo de las particiones del disco un kernel de sistema operativo.

    • Cuando encuentra el kernel (generalmente en / o partición raíz), lo carga en la memoria RAM.

El kernel es el corazón o motor del sistema operativo, encargado de la gestión central de recursos. Administra el hardware como CPU, RAM y dispositivos, asignando recursos a los procesos, define qué módulos y drivers se utilizan, y crea colas de prioridad para los procesos que solicitan recursos.

  • Mecanismo de prioridades:
    • Las aplicaciones solicitan recursos al kernel.

    • El kernel asigna prioridades, los procesos críticos del sistema tienen prioridad más alta (ej: systemd tiene prioridad 1 fija).

    • El kernel gestiona colas como una "ventanilla" (ej: proceso de actualización vs. Chrome).

    • Usa DMA (Direct Memory Access) para verificar disponibilidad de RAM y asignarla.

    • Si dos procesos tienen la misma prioridad, se valida quién llamó primero.

    • Otros procesos reciben prioridades dinámicas asignadas por el kernel

    • Ejemplo práctico: Cuando una aplicación tarda en abrirse, es porque el kernel está esperando que recursos estén disponibles o que procesos de mayor prioridad liberen recursos.

File System (Sistema de Archivos), software que organiza cómo se almacenan, estructuran y acceden los datos en dispositivos de almacenamiento (discos duros, SSD, USB, etc.).

El sistema de archivos se encarga principalmente de la organización de datos, definiendo cómo se guardan los archivos en el disco, organizando las carpetas o directorios y estructurando el almacenamiento de manera ordenada. Además, gestiona el control de acceso, determinando cómo los datos son accedidos por aplicaciones o usuarios, y estableciendo reglas específicas para operaciones de lectura y escritura. Esto asegura un manejo eficiente y seguro de la información en el sistema.

initramfs (Initial RAM File System) es un mini sistema de archivos temporal que se carga en la RAM junto con el kernel del sistema operativo, antes de que este se complete. Contiene drivers y módulos esenciales para reconocer discos, acceder a particiones como /home o swap, y montar el sistema real, actuando como un puente inicial.

Systemd es el administrador principal del sistema en Linux, actuando como el primer proceso (PID 1) que inicia y controla todos los demás servicios, como la red, gráficos o actualizaciones. Organiza el arranque en "targets" o grupos de servicios que se activan juntos, como multi-user.target para uso básico o graphical.target para entornos con interfaz gráfica. Una vez que el sistema operativo carga en RAM, systemd ejecuta estos targets paso a paso hasta llegar a systemd-logind, que muestra la pantalla de login; después del inicio de sesión, se carga el escritorio completo.

Proceso Completo de Arranque

Secuencia paso a paso:

  1. Encendido de la computadora
    • Se ejecuta la BIOS
  2. POST (Power-On Self-Test)
    • Valida que los dispositivos conectados funcionen correctamente
  3. BIOS Boot Sequence
    • Determina a qué dispositivo dar prioridad para arrancar
  4. MBR (Master Boot Record)
    • La BIOS llama primero al MBR (dentro de la partición boot)
    • El MBR contiene el GRUB
  5. GRUB se ejecuta
    • Busca el kernel del sistema operativo en las particiones
    • Carga el kernel a la memoria RAM
  6. Kernel se carga en RAM
    • IMPORTANTE: Solo el kernel se carga, no todo el sistema operativo todavía
  7. InitRamFS (Initial RAM File System)
    • Está empaquetado dentro del kernel
    • El kernel lo desempaqueta y lo lanza a la RAM
    • Función: Almacena un backup de drivers/módulos necesarios
    • ¿Por qué es necesario? Porque el kernel por sí solo no puede acceder a otras particiones sin drivers
    • Proporciona los drivers temporales para acceder a la partición raíz y otras particiones
  8. Acceso a particiones adicionales
    • Con los drivers del InitRamFS, el kernel puede acceder a:
      • Partición raíz (donde está el resto del SO)
      • Partición home
      • Partición swap
  9. Carga completa del sistema operativo
    • El kernel trae el resto del sistema operativo a la RAM
  10. Systemd se ejecuta
    • Es el administrador de servicios
    • Tiene prioridad 1 (fija)
    • Inicia todos los demás servicios del sistema
  11. Carga de targets
    • Un target es un grupo de servicios
    • Ejemplos de servicios:
      • Servicio de red
      • Servicio de gráficos
      • Servicio de actualizaciones
  12. Systemd-logind
    • Es el último servicio en cargarse
    • Proporciona la interfaz gráfica de inicio de sesión
    • Permite al usuario ingresar usuario y contraseña
    • Da acceso al escritorio

Servicios en Linux

Un servicio es un programa que controla un componente específico del sistema, se ejecuta en segundo plano de manera silenciosa y asegura que el sistema funcione correctamente en todo momento.

Ejemplos de servicios

  • Red: permite conectarse a la red, obtener IP, configurar interfaces.

  • Gráficos: habilita la interfaz gráfica (ventanas, botones, escritorios).

  • Sonido: gestiona dispositivos de audio y configuraciones.

  • Discos: administra almacenamiento y dispositivos.

  • Tareas programadas: ejecuta procesos automáticos.

Administradores de servicios

Tres sistemas principales a lo largo de la historia:

  1. SysVinit: Sistema tradicional (Runlevels)
  2. Systemd: Estándar desde 2015 (moderno)
  3. Upstart: Mención honorífica (obsoleto)

SysVinit: Sistema Tradicional de Runlevels

Posee siete niveles de ejecución (Runlevels), cada nivel agrupa un conjunto específico de servicios:

NivelNombreDescripciónCaracterísticas
0Power/HaltApagado del sistemaCierra conexiones, archivos y procesos para apagar
1MonousuarioModo mantenimientoSolo usuario root, servicios básicos, sin red
2MultiusuarioConfiguración usuarioMúltiples usuarios simultáneos, sin red, poco usado
3Multiusuario con RedOperación normal CLISoporte de red completo, sin interfaz gráfica (solo terminal)
4Multiusuario EspecíficoServicios específicosSimilar al nivel 3, para configuraciones de servidor
5Multiusuario GráficoModo por defectoInterfaz gráfica completa + todos los servicios (red, sonido, etc.)
6ReinicioRebootCierra todo y reinicia automáticamente

Comandos Clave en SysVinit

# Cambiar de nivel
telinit 3              # Cambiar al nivel 3 (multiusuario sin gráficos)
telinit 5              # Cambiar al nivel 5 (gráfico)

# Ver nivel actual
runlevel               # Muestra: nivel_anterior nivel_actual
                       # Ejemplo: "5 3" (estaba en 5, ahora en 3)

Precaución Crítica

NUNCA establecer como predeterminados:

  • Nivel 0 (Power): El sistema se apagaría inmediatamente tras arrancar
  • Nivel 6 (Reboot): El sistema entraría en bucle de reinicio infinito

Systemd - Sistema Moderno

Systemd reemplaza a SysVinit, pero mantiene compatibilidad con nombres diferentes:

SysVinitSystemd TargetDescripción
Nivel 0poweroff.targetApagar sistema
Nivel 1rescue.targetModo rescate/mantenimiento
Niveles 2,3,4multi-user.targetConsolidados en uno solo - CLI con red
Nivel 5graphical.targetInterfaz gráfica completa
Nivel 6reboot.targetReiniciar sistema

Características Clave de Systemd

  • Nomenclatura más descriptiva (.target en lugar de números)
  • Combina los niveles 2, 3, 4 de SysVinit en multi-user.target
  • Soporta comandos de SysVinit (telinit)
  • Mayor control y funcionalidades avanzadas
  • El target por defecto se configura con default.target, ubicado en /lib/systemd/system/.

Gestión de Targets (Niveles)


ls -lh /etc/systemd/system/default.target
# Salida ejemplo: lrwxrwxrwx 1 root root 40 Dec 29 10:30 /etc/systemd/system/default.target -> /lib/systemd/system/graphical.target

# Archivo acceso directo (enlace simbólico)
/etc/systemd/system/default.target 
# ↓ apunta a ↓
/lib/systemd/system/graphical.target  # Archivo original | Enlace simbólico al target predeterminado

# Ver target por defecto
systemctl get-default
# Salida: graphical.target

# Establecer target por defecto
systemctl set-default multi-user.target # Establecer multi-user.target como predeterminado
systemctl set-default graphical.target # Establecer graphical.target como predeterminado

# Cambiar de target (equivalente a telinit)
systemctl isolate multi-user.target    # = telinit 3
systemctl isolate graphical.target     # = telinit 5
systemctl isolate reboot.target        # = telinit 6
systemctl isolate poweroff.target      # = telinit 0

Ejemplo de cambio de target usando Systemd

# 1. Ver configuración actual
systemctl get-default
# Salida: graphical.target

# 2. Ver el enlace simbólico actual
ls -lh /etc/systemd/system/default.target
# Salida: ... default.target -> /lib/systemd/system/graphical.target

# 3. Cambiar a multi-user.target
sudo systemctl set-default multi-user.target
# Salida: 
# Removed /etc/systemd/system/default.target.
# Created symlink ... → .../multi-user.target.

# 4. Verificar el cambio
systemctl get-default
# Salida: multi-user.target

# 5. Verificar el enlace actualizado
ls -lh /etc/systemd/system/default.target
# Salida: ... default.target -> /lib/systemd/system/multi-user.target
#                                                        ↑↑↑↑↑↑↑↑↑↑↑
#                                                    Ahora apunta aquí

# 6. Reiniciar para aplicar
sudo reboot
# El sistema iniciará en modo texto (sin GUI)

Recuperación de Sistema con Target Incorrecto

Si se estableció reboot.target como predeterminado (bucle infinito):

# 1. Entrar a Recovery Mode durante arranque
# 2. Eliminar enlace simbólico incorrecto
rm /etc/systemd/system/default.target

# 3. Crear nuevo enlace correcto
ln -s /lib/systemd/system/graphical.target /etc/systemd/system/default.target

# 4. Verificar
ls -lh /etc/systemd/system/default.target
# Debe apuntar a graphical.target

# 5. Reiniciar
reboot

Systemd Units: Tipos de Servicios

Los Systemd Units son la unidad básica de configuración y control que Systemd utiliza para gestionar recursos del sistema. Cada unit está representada por un archivo de configuración (normalmente en /usr/lib/systemd/system/ o /etc/systemd/system/) con una extensión que define su tipo.

Son archivos de configuración que representan servicios, dispositivos, puntos de montaje u otros recursos del sistema que pueden ser gestionados (iniciados, detenidos, reiniciados, habilitados o deshabilitados).

Tipos principales de Systemd Units (con ejemplos y uso práctico):

TipoDescripciónEjemploObservaciones
.serviceUnidad más común. Representa un proceso o demonio (daemon)networkmanager.service, sshd.service,Controla inicio/detención de servicios como SSH, redes, etc.
.socketDefine un socket UNIX/INET que activa un servicio bajo demandacups.socket (para impresoras), sshd.socketPermite socket activation: el servicio se inicia solo cuando se recibe una conexión al socket.
.deviceRepresenta un dispositivo del sistema (físico o virtual)dev-sda1.device, sys-devices-pci0000:00-...-net-enp0s3.deviceSe usa para monitorear y gestionar dispositivos (ej. tarjetas de red).
.mountControla el montaje de sistemas de archivoshome.mount, boot.mountAutomatiza el montaje al arranque según /etc/fstab.
.automountMonta sistemas de archivos bajo demanda (a pedido)home.automountÚtil para montajes pesados (ej. red/NFS) que no se usan siempre.
.targetAgrupa múltiples unidades (similar a runlevels de SysVinit)graphical.target, multi-user.target, reboot.targetSe usan para cambios de estado del sistema (modo gráfico, terminal, apagado, etc.).
.snapshotPunto de restauración en tiempo de ejecución (raro en uso cotidiano)sysroot.snapshotNo confundir con snapshots de VMs (VirtualBox); este es interno de Systemd.

Systemctl

Systemctl es la herramienta de línea de comandos principal para controlar y administrar servicios en sistemas Linux que usan Systemd.

Facilita acciones como iniciar, detener, reiniciar, habilitar o deshabilitar procesos, lo que lo hace esencial para la administración del sistema desde la terminal.

Comandos Esenciales de Systemctl

# Listar servicios activos
systemctl list-units

# Listar TODOS los servicios (activos e inactivos)
systemctl list-unit-files
# Ver TODOS los servicios (activos e inactivos)
systemctl list-units --all

# Filtrar por tipo
systemctl list-units --type=service
systemctl list-units --type=target
systemctl list-units --type=socket
systemctl list-units --type=device

# Ver estado de un servicio específico
systemctl status ssh.service

# Control de servicios
systemctl start ssh.service     # Iniciar
systemctl stop ssh.service      # Detener
systemctl restart ssh.service   # Reiniciar (útil tras cambios de configuración)
systemctl reload ssh.service    # Recargar configuración sin detener

# Habilitar/Deshabilitar servicios
systemctl enable ssh.service    # Habilitar al reinicio
systemctl disable ssh.service   # Deshabilitar al reinicio
systemctl enable --now ssh.service  # Habilitar y ejecutar inmediatamente
systemctl disable --now ssh.service # Deshabilitar y detener inmediatamente

Ejemplo Práctico: Servicio SSH

# Instalar SSH
apt install openssh-server

# Ver estado
systemctl status ssh

# Cambiar puerto (editar /etc/ssh/sshd_config)
nano /etc/ssh/sshd_config  # Quitar `#` para habilitar la línea y cambiar "Port 22" a "Port 50022"

# Aplicar cambios
systemctl restart ssh

# Habilitar permanentemente
systemctl enable ssh

Comandos para Apagar y reiniciar el systema

Estos comandos son fundamentales para gestionar el apagado o reinicio del sistema de forma segura y controlada.

Comandos

# Comandos
reboot        # = systemctl isolate reboot.target
poweroff      # = systemctl isolate poweroff.target
shutdown      # Apagado programado (avisa a usuarios)
halt          # Apagado abrupto (NO recomendado)

Proceso de arranque del sistema Linux

Después de que la BIOS termina su función, el sistema operativo Linux continúa con el proceso de arranque, en el cual pueden ocurrir múltiples eventos y errores.

Posibles fallos durante el arranque

  • Módulos o drivers que no cargan correctamente en el kernel.
  • Dispositivos que no funcionan por falta de drivers.
  • Particiones que no se montan por errores.
  • Fallos en inicialización de red, memoria, discos, etc.

Comando dmesg

dmesg es una herramienta de Linux que permite visualizar los mensajes del kernel, especialmente los generados durante el arranque del sistema.

Es una herramienta clave para diagnosticar problemas durante el arranque del sistema (post-BIOS). Muestra los logs del kernel ring buffer, una memoria de tamaño fijo que almacena eventos del arranque.

Kernel Ring Buffer Características

  • Tiene tamaño fijo.

  • Cuando se llena, borra los mensajes más antiguos y conserva los más recientes.

  • No es persistente: los logs se pierden al apagar/reiniciar el sistema → solo están disponibles durante la sesión actual.

  • Para logs históricos se usa journalctl (no visto aún en la clase).

Comandos clave y ejemplos prácticos

ComandoDescripciónEjemplo de uso
dmesgMuestra logs sin formato legibledmesg (salida cruda, difícil de leer)
dmesg -TMuestra los logs con marcas de fecha y hora legibles.dmesg o dmesg -T | head -n 10
dmesg -T | grep sdaFiltra mensajes sobre el disco sdaÚtil para verificar si las particiones se montaron (sda1, sda2, etc.)
dmesg -T | grep ahciVerifica si el controlador SATA (AHCI) se cargó correctamenteSi no hay errores → driver OK
dmesg -l err o dmesg -l err -TMuestra solo errores críticos (err = error)Ej: vulnerabilidades de CPU (Spectre, Meltdown), fallos de hardware
dmesg -l warn o dmesg -l warn -TMuestra advertencias (warn), eventos que podrían escalar a erroresEj: archivos corruptos, particiones no limpias
dmesg -l info o dmesg -l info -TMuestra mensajes informativosEj: dispositivo USB conectado, módulo cargado

Reto: Investigar como se resuelve el problema

[ 4.135417] vmwgfx 0000:00:02.0: [drm] ERROR Please switch to a supported graphics device to avoid problems.

Hasta que el error ya no se muestre

Particiones de Disco

Una partición es una subdivisión lógica de un disco duro, tratada por el sistema operativo como una unidad de almacenamiento independiente.

Usos Comunes:

  • Instalar múltiples sistemas operativos (dual-boot).

  • Separar datos críticos (ej: /boot, /, /home, swap).

  • Utilizar diferentes sistemas de archivos en un mismo disco físico.

Tipos de particiones

  1. Primarias: Máximo 4 por disco (bajo el esquema MBR). En ellas se pueden instalar sistemas operativos.

  2. Extendidas o Secundarias: Nacen para superar la limitación de 4 particiones primarias. Solo puede existir una por disco. Dentro de ella se crean particiones lógicas.

  3. Lógicas: Se crean dentro de una partición extendida. Permiten tener muchas más divisiones (hasta 15 dentro de una extendida).

Esquema de Ejemplo (Disco /dev/sda):

  • /dev/sda1: Partición primaria para /boot.
  • /dev/sda2: Partición primaria para / (sistema raíz).
  • /dev/sda3: Partición primaria para /home.
  • /dev/sda4: Partición primaria para swap.

Sistemas de Particiones: MBR vs. GPT

Un sistema de particiones define cómo se crean, organizan y arrancan las particiones en un disco. Hay dos tipos principales: MBR y GPT.

CaracterísticaMBR (Master Boot Record)GPT (GUID Partition Table)
UbicaciónPrimer sector del disco (Sector 0, 512 bytes).Múltiples copias en el disco, más robusto.
Componentes1. Cargador de arranque (GRUB) - 446 bytes.
2. Tabla de particiones - 64 bytes.
3. Firma de arranque - 2 bytes.
Más complejo, incluye cabecera, entradas de partición y tabla de respaldo.
Límite de Particiones4 primarias (o 3 primarias + 1 extendida con lógicas).Hasta 128 particiones por defecto.
Tamaño Máximo de Partición2.2 TB (Terabytes).9.4 ZB (Zettabytes), prácticamente ilimitado.
Compatibilidad de FirmwareBIOS (Legacy).UEFI (nativo) y BIOS (vía PMBR - Protective MBR).
ResilienciaSi se corrompe el sector 0, el disco puede volverse inarrancable.Almacena múltiples copias, es más tolerante a fallos.

Filesystems

Un sistema de archivos define cómo se guardan y organizan los datos dentro de una partición.

SistemaTipoCaracterísticas
ext (Extended)Linux (obsoleto)Primer sistema, básico y lento, sin journaling
ext2LinuxMás rápido que ext, sin journaling
ext3Linuxext2 + journaling → más seguro ante fallos/cortes
ext4Linux (estándar actual desde 2008)Soporta grandes archivos, fragmentación por extents, más rápido que ext3
xfsLinux (Red Hat)Ideal para servidores de alto rendimiento (videoconferencias, streaming, BD grandes)
tmpfsRAMVolátil; usado para /tmp, caché, etc.
FATWindowsLegado con tabla FAT simple, máxima compatibilidad pero sin journaling ni seguridad
FAT32WindowsCompatibilidad básica con Windows/Linux/Mac; límite 4GB por archivo
exFATWindowsMejora de FAT32; soporta archivos >4GB, ideal para USB/externos
NTFSWindowsJournaling, compresión, encriptación; buena compatibilidad en Linux/Mac moderna

Journaling (en ext3/ext4/xfs)

  • Crea un “diario” de operaciones antes de hacerlas permanentes.
  • Si hay un apagado inesperado, permite recuperar consistencia sin corrupción.

Herramientas de particionado

HerramientaTipoDescripción
fdiskCLIMás usada; soporta MBR y GPT (modo interactivo con n, p, w, etc.)
cfdiskCLI (interfaz TUI)Alternativa con menú visual en terminal
partedCLISoporta particiones > 2 TB (GPT); comandos no interactivos
gpartedGUIInterfaz gráfica de parted (muy amigable)

Recomendación: fdisk es la más utilizada en entornos de servidor sin interfaz gráfica.

Name convention: Dispositivos de almacenamiento

Naming convention define cómo Linux identifica y nombra los discos y sus particiones dentro del sistema, principalmente bajo el directorio /dev.

En Linux, los discos se nombran según su tipo de interfaz y orden de detección: el primero es "A", el segundo "B", etc.

Tipo de discoEjemplo nombreComentarios
Disco SATA/SCSI/dev/sda, /dev/sdb, …sd = SCSI Disk, a = primer disco, b = segundo, etc.
Particiones/dev/sda1, /dev/sda2, …Heredan nombre del disco + número
NVMe (PCIe)/dev/nvme0n1, /dev/nvme0n1p1, /dev/nvme0n1p2n1 = namespace 1, p1 = partición 1
ATA antiguo/dev/hda, /dev/hdbObsoleto

💡 /dev/ = directorio donde se mapean todos los dispositivos.

Gestores de Arranque

Un gestor de arranque en Linux es un programa pequeño que se ejecuta al encender la computadora, después de la BIOS o UEFI, para cargar el kernel del sistema operativo en memoria y permitir elegir entre varios SOs si hay dual-boot.

GRUB (GRand Unified Bootloader) carga el SO desde particiones después de BIOS/UEFI.

Evolución: LILO (primer cargador), GRUB Legacy (1995, inseguro y lento), GRUB2 (2002, el actual, más seguro y eficiente).

Archivos de Configuración Clave:

ArchivoRutaUso
Principal (NO editar)/boot/grub/grub.cfgArchivo de configuración principal y generado automáticamente; usado en el arranque
Personalización (sí editar)/etc/default/grubArchivo de configuración que SÍ se edita. Aquí se definen los parámetros que luego se aplicarán al archivo principal.
Aplicar cambiossudo update-grubRegenera grub.cfg y initramfs

Parámetros comunes en /etc/default/grub:

ParámetroValor típicoEfecto
GRUB_DEFAULT=00, 1, o "Ubuntu"Índice o nombre del SO por defecto (0 = primera entrada)
GRUB_TIMEOUT_STYLE=hiddenhidden, menu, countdownControla visibilidad del menú de GRUB
hidden→ No se muestra (presionar ESC para verlo).
menu→ Se muestra siempre.
GRUB_TIMEOUT=55, 10, 0Tiempo (segundos) que se muestra el menú antes de arrancar por defecto
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash""quiet", "splash", "text"quiet→ Suprime mensajes del kernel al arrancar
splash→ Muestra pantalla gráfica (ej. logo de Ubuntu)
GRUB_BACKGROUND="/boot/grub/ubla.tga"Ruta a imagen .tgaPermite cambiar la imagen de fondo del menú de GRUB por una personalizada

Directorio /boot

El directorio /boot contiene archivos esenciales para el arranque del sistema. Todos los archivos aquí son críticos para que Linux pueda iniciar correctamente.

Archivos esenciales y su función

ArchivoDescripciónEjemploNotas
vmlinuz-*Kernel comprimido (el que realmente carga el sistema).
La z final indica formato comprimido (gzip).
vmlinuz-6.8.0-87-genericCargado a memoria RAM por GRUB.
config-*Archivo de configuración del kernel.
Contiene las opciones con las que fue compilado el kernel (¿qué drivers módulos están activados?).
config-6.8.0-87-genericUsado por el kernel al iniciar para saber su configuración base.
System.map-*Mapa de símbolos del kernel.
Contiene direcciones de memoria y nombres de funciones internas del kernel.
System.map-6.8.0-87-genericEsencial para depurar errores del kernel (kernel panics) y usar herramientas como klogd o crash.
initrd.img-*Initramfs (Initial RAM Filesystem).
Una imagen temporal que se carga en RAM junto con el kernel. Contiene drivers/módulos necesarios para montar el sistema raíz real (ej: drivers de LVM, RAID, cifrado, NVMe, etc.).
initrd.img-6.8.0-87-genericSin esto, el kernel no podría acceder al disco real si requiere drivers especiales.
memtest86+Herramienta de diagnóstico de memoria RAM.
Se ejecuta desde el menú de GRUB.
memtest86+Útil para detectar errores de hardware en la RAM (bit flips, latencia, etc.).

Directorio /boot/grub/

Contiene toda la configuración del GRUB 2 (cargador de arranque):

  • Múltiples archivos utilizados por GRUB.
  • grub.cfg: Configuración principal de la imagen de GRUB utilizada durante el arranque para buscar el sistema operativo.

Comandos para ver el espacio en disco del directorio /boot

df -h # Ver espacio de particiones
df -h /boot # Muestra el espacio total, usado, disponible y porcentaje de uso en la partición /boot

du -sh /boot # Resume el espacio usado por archivos y subdirectorios en /boot
du -h /boot # Ver tamaño del directorio

Gestión de Múltiples Kernels

  • Linux mantiene al menos 2 kernels instalados:

    • Kernel actual en uso.
    • Kernel anterior como respaldo/emergencia.
  • Buena práctica: Mantener solo las 2 últimas versiones, ya que si el kernel actual falla, puedes reiniciar, seleccionar el anterior desde GRUB y arrancar con una versión estable conocida.

  • Tener más de 3 kernels es innecesario y consume espacio.

  • Cuando se desinstala un kernel, se eliminan el archivo vmlinuz, initrd.img, config, System.map de esa versión y todos los módulos en /lib/modules/[versión].

  • Esto puede liberar ~1 GB de espacio en disco, crucial en particiones /boot pequeñas.

  • Nota importante: Nunca elimines el paquete linux-image-generic, ya que es el buscador de actualizaciones del kernel.

Comandos útiles para ver los kernels instalados en el sistema

Verificar Kernel Actual en Uso

uname -r

Ver Kernels Instalados

# Método 1: Ver en el sistema de archivos
ls /lib/modules/

# Método 2: Ver paquetes instalados
dpkg --list | grep linux-image

Desinstalar Kernels Antiguos

# Paso 1: Identificar kernels instalados 
dpkg --list | grep linux-image 

# Paso 2: Desinstalar kernel específico 
apt-get purge linux-image-[versión-completa] 
# Ejemplo: apt-get purge linux-image-6.8.0-40-generic 

# Paso 3: Limpiar archivos residuales 
apt autoremove --purge

Versiones: Sistema Operativo vs Kernel

Ver Versión del Sistema Operativo

lsb_release -a

Diferencia Importante

  • Versión del sistema operativo (ej: Ubuntu 22.04, 24.04, 25.04).
  • Versión del kernel (ej: 6.8.0-40, 6.8.0-87).
  • No hay correlación directa entre números de versión del SO y del kernel.
  • Es como Windows 11 con Office 2019: versiones independientes

Actualización del Kernel

  • Cuando el sistema se actualiza, busca automáticamente nuevas versiones del kernel
  • Puede que diferentes usuarios con la misma versión de Ubuntu tengan diferentes versiones de kernel
  • Las actualizaciones de kernel son independientes de las actualizaciones del sistema operativo
Built with LogoFlowershow