Módulo 3 - Arranque y sistemas de archivos
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:
- Service: El más común. Usado para activar los recursos del sistema que se pueden iniciar, detener y reiniciar. Ejemplo: NetworkManager.service
- 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
- 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
- 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
- Automount: Se utiliza para montar automáticamente sistemas de archivos solo cuando se accede a ellos.
- Target: Es un grupo de units que se agrupan y gestionan como un target. Ejemplo: graphical.target
- 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
| Comando | Descripción |
|---|---|
systemctl list-units | Muestra todas las unidades activas en la sesión actual. |
systemctl list-unit-files | Muestra 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] --now | Deshabilita y detiene inmediatamente un servicio específico. |
systemctl enable [systemd-service] --now | Habilita y inicia inmediatamente un servicio específico. |
systemctl get-default | Muestra 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-dependencies | Lista 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,poweroffyrebootpermiten 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) ygparted(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/sday 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ámetro | Descripción |
|---|---|
GRUB_DEFAULT | Define el sistema operativo predeterminado para el arranque. "0" carga el primer sistema, "2" el segundo, etc. |
GRUB_SAVEDEFAULT | Si es "true" y GRUB_DEFAULT es "saved", recuerda la última selección como predeterminada. |
GRUB_TIMEOUT | Define la duración del menú de GRUB en segundos. "0" omite el menú, "-1" muestra hasta la selección. |
GRUB_CMDLINE_LINUX | Permite comandos de Shell para todas las entradas del Kernel de Linux. |
GRUB_CMDLINE_LINUX_DEFAULT | Agrega 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ística | BIOS | UEFI |
|---|---|---|
| Interfaz | Texto, monocromática | Gráfica, con menús, mouse, temas (tipo “gamer”) |
| Modo de arranque | Solo modo Legacy (16 bits) | Soporta modo Legacy y modo nativo UEFI (32/64 bits) |
| Compatibilidad con esquemas de particionado | Solo MBR | MBR y GPT (recomendado GPT para discos >2TB o más de 4 particiones) |
| Seguridad | Básica | Incluye Secure Boot (evita carga de firmwares/bootloaders no firmados) |
| Velocidad de arranque | Más lenta | Má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:
systemdtiene 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:
- Encendido de la computadora
- Se ejecuta la BIOS
- POST (Power-On Self-Test)
- Valida que los dispositivos conectados funcionen correctamente
- BIOS Boot Sequence
- Determina a qué dispositivo dar prioridad para arrancar
- MBR (Master Boot Record)
- La BIOS llama primero al MBR (dentro de la partición boot)
- El MBR contiene el GRUB
- GRUB se ejecuta
- Busca el kernel del sistema operativo en las particiones
- Carga el kernel a la memoria RAM
- Kernel se carga en RAM
- IMPORTANTE: Solo el kernel se carga, no todo el sistema operativo todavía
- 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
- 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
- Con los drivers del InitRamFS, el kernel puede acceder a:
- Carga completa del sistema operativo
- El kernel trae el resto del sistema operativo a la RAM
- Systemd se ejecuta
- Es el administrador de servicios
- Tiene prioridad 1 (fija)
- Inicia todos los demás servicios del sistema
- Carga de targets
- Un target es un grupo de servicios
- Ejemplos de servicios:
- Servicio de red
- Servicio de gráficos
- Servicio de actualizaciones
- 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:
- SysVinit: Sistema tradicional (Runlevels)
- Systemd: Estándar desde 2015 (moderno)
- 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:
| Nivel | Nombre | Descripción | Características |
|---|---|---|---|
| 0 | Power/Halt | Apagado del sistema | Cierra conexiones, archivos y procesos para apagar |
| 1 | Monousuario | Modo mantenimiento | Solo usuario root, servicios básicos, sin red |
| 2 | Multiusuario | Configuración usuario | Múltiples usuarios simultáneos, sin red, poco usado |
| 3 | Multiusuario con Red | Operación normal CLI | Soporte de red completo, sin interfaz gráfica (solo terminal) |
| 4 | Multiusuario Específico | Servicios específicos | Similar al nivel 3, para configuraciones de servidor |
| 5 | Multiusuario Gráfico | Modo por defecto | Interfaz gráfica completa + todos los servicios (red, sonido, etc.) |
| 6 | Reinicio | Reboot | Cierra 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:
| SysVinit | Systemd Target | Descripción |
|---|---|---|
| Nivel 0 | poweroff.target | Apagar sistema |
| Nivel 1 | rescue.target | Modo rescate/mantenimiento |
| Niveles 2,3,4 | multi-user.target | Consolidados en uno solo - CLI con red |
| Nivel 5 | graphical.target | Interfaz gráfica completa |
| Nivel 6 | reboot.target | Reiniciar sistema |
Características Clave de Systemd
- Nomenclatura más descriptiva (
.targeten 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):
| Tipo | Descripción | Ejemplo | Observaciones |
|---|---|---|---|
.service | Unidad más común. Representa un proceso o demonio (daemon) | networkmanager.service, sshd.service, | Controla inicio/detención de servicios como SSH, redes, etc. |
.socket | Define un socket UNIX/INET que activa un servicio bajo demanda | cups.socket (para impresoras), sshd.socket | Permite socket activation: el servicio se inicia solo cuando se recibe una conexión al socket. |
.device | Representa un dispositivo del sistema (físico o virtual) | dev-sda1.device, sys-devices-pci0000:00-...-net-enp0s3.device | Se usa para monitorear y gestionar dispositivos (ej. tarjetas de red). |
.mount | Controla el montaje de sistemas de archivos | home.mount, boot.mount | Automatiza el montaje al arranque según /etc/fstab. |
.automount | Monta sistemas de archivos bajo demanda (a pedido) | home.automount | Útil para montajes pesados (ej. red/NFS) que no se usan siempre. |
.target | Agrupa múltiples unidades (similar a runlevels de SysVinit) | graphical.target, multi-user.target, reboot.target | Se usan para cambios de estado del sistema (modo gráfico, terminal, apagado, etc.). |
.snapshot | Punto de restauración en tiempo de ejecución (raro en uso cotidiano) | sysroot.snapshot | No 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
| Comando | Descripción | Ejemplo de uso |
|---|---|---|
dmesg | Muestra logs sin formato legible | dmesg (salida cruda, difícil de leer) |
dmesg -T | Muestra los logs con marcas de fecha y hora legibles. | dmesg o dmesg -T | head -n 10 |
dmesg -T | grep sda | Filtra mensajes sobre el disco sda | Útil para verificar si las particiones se montaron (sda1, sda2, etc.) |
dmesg -T | grep ahci | Verifica si el controlador SATA (AHCI) se cargó correctamente | Si no hay errores → driver OK |
dmesg -l err o dmesg -l err -T | Muestra solo errores críticos (err = error) | Ej: vulnerabilidades de CPU (Spectre, Meltdown), fallos de hardware |
dmesg -l warn o dmesg -l warn -T | Muestra advertencias (warn), eventos que podrían escalar a errores | Ej: archivos corruptos, particiones no limpias |
dmesg -l info o dmesg -l info -T | Muestra mensajes informativos | Ej: 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
-
Primarias: Máximo 4 por disco (bajo el esquema MBR). En ellas se pueden instalar sistemas operativos.
-
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.
-
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 paraswap.
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ística | MBR (Master Boot Record) | GPT (GUID Partition Table) |
|---|---|---|
| Ubicación | Primer sector del disco (Sector 0, 512 bytes). | Múltiples copias en el disco, más robusto. |
| Componentes | 1. 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 Particiones | 4 primarias (o 3 primarias + 1 extendida con lógicas). | Hasta 128 particiones por defecto. |
| Tamaño Máximo de Partición | 2.2 TB (Terabytes). | 9.4 ZB (Zettabytes), prácticamente ilimitado. |
| Compatibilidad de Firmware | BIOS (Legacy). | UEFI (nativo) y BIOS (vía PMBR - Protective MBR). |
| Resiliencia | Si 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.
| Sistema | Tipo | Características |
|---|---|---|
| ext (Extended) | Linux (obsoleto) | Primer sistema, básico y lento, sin journaling |
| ext2 | Linux | Más rápido que ext, sin journaling |
| ext3 | Linux | ext2 + journaling → más seguro ante fallos/cortes |
| ext4 | Linux (estándar actual desde 2008) | Soporta grandes archivos, fragmentación por extents, más rápido que ext3 |
| xfs | Linux (Red Hat) | Ideal para servidores de alto rendimiento (videoconferencias, streaming, BD grandes) |
| tmpfs | RAM | Volátil; usado para /tmp, caché, etc. |
| FAT | Windows | Legado con tabla FAT simple, máxima compatibilidad pero sin journaling ni seguridad |
| FAT32 | Windows | Compatibilidad básica con Windows/Linux/Mac; límite 4GB por archivo |
| exFAT | Windows | Mejora de FAT32; soporta archivos >4GB, ideal para USB/externos |
| NTFS | Windows | Journaling, 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
| Herramienta | Tipo | Descripción |
|---|---|---|
fdisk | CLI | Más usada; soporta MBR y GPT (modo interactivo con n, p, w, etc.) |
cfdisk | CLI (interfaz TUI) | Alternativa con menú visual en terminal |
parted | CLI | Soporta particiones > 2 TB (GPT); comandos no interactivos |
gparted | GUI | Interfaz 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 disco | Ejemplo nombre | Comentarios |
|---|---|---|
| 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/nvme0n1p2 | n1 = namespace 1, p1 = partición 1 |
| ATA antiguo | /dev/hda, /dev/hdb | Obsoleto |
💡 /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:
| Archivo | Ruta | Uso |
|---|---|---|
| Principal (NO editar) | /boot/grub/grub.cfg | Archivo de configuración principal y generado automáticamente; usado en el arranque |
| Personalización (sí editar) | /etc/default/grub | Archivo de configuración que SÍ se edita. Aquí se definen los parámetros que luego se aplicarán al archivo principal. |
| Aplicar cambios | sudo update-grub | Regenera grub.cfg y initramfs |
Parámetros comunes en /etc/default/grub:
| Parámetro | Valor típico | Efecto |
|---|---|---|
GRUB_DEFAULT=0 | 0, 1, o "Ubuntu" | Índice o nombre del SO por defecto (0 = primera entrada) |
GRUB_TIMEOUT_STYLE=hidden | hidden, menu, countdown | Controla visibilidad del menú de GRUB hidden→ No se muestra (presionar ESC para verlo). menu→ Se muestra siempre. |
GRUB_TIMEOUT=5 | 5, 10, 0 | Tiempo (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 .tga | Permite 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
| Archivo | Descripción | Ejemplo | Notas |
|---|---|---|---|
vmlinuz-* | Kernel comprimido (el que realmente carga el sistema). La z final indica formato comprimido (gzip). | vmlinuz-6.8.0-87-generic | Cargado 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-generic | Usado 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-generic | Esencial 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-generic | Sin 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.mapde 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
/bootpequeñ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