Ghost AcademyGhostLinux · Ghost Academy
GhostLinuxMódulo 101Examen 101-500

Arquitectura del sistema

LPI 101.1 HardwareLPI 101.2 ArranqueLPI 101.3 Runlevels y apagado

Este es el primer tema de verdad del temario LPIC-1. Antes de poder administrar nada, hay que entender qué ocurre entre que pulsas el botón de encendido y tienes un prompt delante: qué detecta el hardware, quién carga el kernel, y cómo pasas el sistema de "arrancando" a "listo para trabajar" — o lo apagas sin dejarlo a medias.

Objetivos de la unidad

1. El proceso de arranque, de un vistazo

Antes de entrar en detalle, esta es la secuencia completa. Cada fase se explica despacio más abajo — vuelve a esta tabla cuantas veces la necesites, es el mapa de toda la unidad.

#FaseQuién la ejecutaQué hace
1FirmwareBIOS o UEFI, en la placa basePOST (autotest de hardware) y localizar un dispositivo de arranque
2Gestor de arranqueGRUB2Mostrar el menú, cargar el kernel elegido y el initramfs en memoria
3Kernel + initramfsLinuxInicializar hardware, montar un sistema de ficheros temporal con los drivers imprescindibles
4Raíz realKernelDesmontar el initramfs y montar el / definitivo del disco
5initsystemd (PID 1)Arrancar servicios y llegar al target por defecto (p.ej. multi-user.target)

2. LPI 101.1 — Determinar y configurar ajustes de hardware

El kernel detecta el hardware al arrancar y lo publica en dos sitios: /proc (información en crudo) y /sys (la misma información organizada por dispositivo). Todo administrador de sistemas necesita saber consultar ambos sin reiniciar nada.

2.1 /proc: una ventana al kernel en tiempo real

/proc es un sistema de ficheros virtual — no ocupa espacio en disco, se genera al vuelo cada vez que lo lees. Estos son los ficheros que el examen espera que conozcas:

FicheroContenido
/proc/cpuinfoModelo, núcleos, flags e instrucciones del/de los procesador/es
/proc/meminfoMemoria RAM total, libre, en caché y swap
/proc/interruptsInterrupciones (IRQ) atendidas por cada dispositivo
/proc/ioportsRangos de puertos de E/S reservados por cada dispositivo
/proc/dmaCanales DMA en uso
/proc/modulesMódulos del kernel cargados actualmente (lo mismo que devuelve lsmod)
/proc/bus/usb/Dispositivos USB (en kernels modernos, más información equivalente en /sys)
/proc/partitionsParticiones que el kernel ha detectado en los discos
/proc/versionVersión exacta del kernel en ejecución
root@lpic1:~#
$ cat /proc/cpuinfo | grep -E 'model name|processor' 
processor	: 0
model name	: Intel(R) Core(TM) i7-9700K CPU @ 3.60GHz
processor	: 1
model name	: Intel(R) Core(TM) i7-9700K CPU @ 3.60GHz
root@lpic1:~#
$ cat /proc/meminfo | head -5
MemTotal:        2027456 kB
MemFree:          412300 kB
MemAvailable:    1587220 kB
Buffers:           89100 kB
Cached:           712540 kB
Todos estos ficheros pesan "0 bytes" según ls -l porque no existen en disco: el kernel los construye en el instante en que los abres. Por eso cat nunca falla por falta de permisos de lectura normales, y por eso no puedes editarlos como un fichero de configuración cualquiera.

2.2 /sys: la misma información, organizada por dispositivo

sysfs (montado en /sys) expone el árbol de dispositivos del kernel de forma jerárquica, y es la fuente que usa udev para crear los nodos en /dev. Mientras que /proc es más "plano" y orientado a procesos, /sys está pensado para hardware.

root@lpic1:~#
$ ls /sys/class/net
eth0  lo
root@lpic1:~#
$ cat /sys/class/net/eth0/address
08:00:27:4a:3c:91

2.3 Herramientas de detección de hardware

ComandoPara qué sirve
lspciLista dispositivos conectados al bus PCI/PCIe (tarjeta de red, gráfica, controladores de disco...)
lspci -v / -vvIgual, con detalle creciente (driver en uso, IRQ, memoria asignada)
lspci -kMuestra qué módulo del kernel controla cada dispositivo
lsusbLista dispositivos conectados por USB
lsusb -vDetalle completo de cada dispositivo USB (descriptores)
lsblkÁrbol de dispositivos de bloque (discos y particiones) — ya lo usaste en el módulo 00
lscpuResumen legible de la CPU: arquitectura, núcleos, hilos, caché
dmesgMensajes del kernel desde el arranque, incluida la detección de hardware
lsmodMódulos del kernel cargados (equivalente legible de /proc/modules)
root@lpic1:~#
$ lspci
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma]
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller
00:04.0 VGA compatible controller: VirtualBox Graphics Adapter
00:05.0 Multimedia audio controller: Intel Corporation 82801AA AC'97 Audio Controller
root@lpic1:~#
$ lspci -k | grep -A2 Ethernet
00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller
	Subsystem: Oracle Corporation Device 0020
	Kernel driver in use: e1000
root@lpic1:~#
$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
root@lpic1:~#
$ dmesg | grep -i eth
[    2.114512] e1000 0000:00:03.0 eth0: (PCI:33MHz:32-bit) 08:00:27:4a:3c:91
[    2.114520] e1000 0000:00:03.0 eth0: Intel(R) PRO/1000 Network Connection
[    2.331904] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready

2.4 Módulos del kernel

El kernel de Linux es modular: los drivers se pueden cargar y descargar en caliente sin reiniciar, como piezas independientes.

ComandoQué hace
lsmodLista los módulos cargados actualmente
modprobe <módulo>Carga un módulo junto con sus dependencias — es el comando que se usa en la práctica
modprobe -r <módulo>Descarga un módulo (y sus dependencias, si ya no las usa nadie)
insmod <ruta.ko>Carga un módulo indicando la ruta exacta del fichero, sin resolver dependencias
rmmod <módulo>Descarga un módulo, sin tocar dependencias
depmodRegenera el mapa de dependencias entre módulos (modules.dep)
modinfo <módulo>Muestra información del módulo: autor, descripción, parámetros aceptados
root@lpic1:~#
$ lsmod | head -5
Module                  Size  Used by
vboxguest             421888  3 vboxsf,vboxvideo
e1000                 143360  0
psmouse               link   167936  0
root@lpic1:~#
$ modprobe -r pcspkr
root@lpic1:~#
$ modprobe pcspkr
modprobe vs insmod, la pregunta clásica del examen: modprobe consulta /lib/modules/$(uname -r)/modules.dep y carga automáticamente cualquier módulo del que dependa el que has pedido. insmod exige la ruta completa al fichero .ko y falla si faltan dependencias. En la práctica real casi nadie usa insmod directamente por eso.

La configuración persistente de módulos vive en /etc/modprobe.d/*.conf (opciones y blacklist de módulos que no quieres que se carguen nunca) y en /etc/modules-load.d/*.conf (módulos que se cargan siempre al arrancar).

root@lpic1:~#
$ cat /etc/modprobe.d/blacklist-floppy.conf
blacklist floppy

2.5 udev y la gestión de hotplug

udev es el gestor de dispositivos del espacio de usuario: escucha los eventos que genera el kernel (un USB que se conecta, un disco que aparece) y crea/borra los nodos correspondientes en /dev según reglas en /etc/udev/rules.d/.

root@lpic1:~#
$ udevadm info -a -n /dev/sda | head -8
Udevadm info starts with the device the node belongs to and then walks up the
device chain...

  looking at device '/devices/pci0000:00/0000:00:0d.0/host0/target0:0:0/0:0:0:0/block/sda':
    KERNEL=="sda"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{queue/rotational}=="1"
    ATTR{size}=="41943040"
Términos y utilidades de 101.1 que aparecen literalmente en el temario oficial: /proc, /sys, /dev, lsmod, lspci, lsusb, modprobe, insmod, rmmod, depmod, lsdev (obsoleto pero mencionado como legado), udevadm.

3. LPI 101.2 — Arrancar el sistema

3.1 Firmware: BIOS heredada vs UEFI

BIOS (heredada)UEFI
Tabla de particiones que exigeMBR (máximo 4 particiones primarias, discos hasta 2 TB)GPT (hasta 128 particiones, discos mucho mayores de 2 TB)
Dónde busca el gestor de arranquePrimeros 512 bytes del disco (sector de arranque, MBR)Partición ESP (EFI System Partition), FAT32, con ficheros .efi
Seguridad de arranqueNo existeSecure Boot — verifica firma criptográfica del cargador antes de ejecutarlo
InterfazTexto, muy limitadaGráfica, soporta ratón, red y scripting

Da igual el firmware: su única misión es hacer el POST (Power-On Self Test, verificación básica de hardware) y entregar el control a un gestor de arranque instalado en el dispositivo configurado como arrancable.

3.2 El gestor de arranque: GRUB2

GRUB2 (GRand Unified Bootloader, versión 2) es el gestor de arranque por defecto en Debian y Ubuntu. Tres ficheros para no confundir nunca:

Fichero¿Se edita a mano?Para qué es
/etc/default/grubSíOpciones de alto nivel: tema, tiempo de espera del menú, parámetros de kernel por defecto
/etc/grub.d/*Rara vezScripts que generan las entradas del menú (detectan kernels instalados, otros sistemas operativos...)
/boot/grub/grub.cfgNuncaFichero final que lee GRUB al arrancar — se regenera automáticamente, cualquier cambio manual se pierde
root@lpic1:~#
$ cat /etc/default/grub | grep -v '^#'
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=\"\"

Para cambiar algo (por ejemplo, subir el tiempo de espera del menú a 10 segundos): editas /etc/default/grub y luego regeneras grub.cfg:

root@lpic1:~#
$ nano /etc/default/grub
# cambia GRUB_TIMEOUT=5 por GRUB_TIMEOUT=10, guarda con Ctrl+O, sal con Ctrl+X
root@lpic1:~#
$ update-grub
Sourcing file `/etc/default/grub'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.1.0-18-amd64
Found initrd image: /boot/initrd.img-6.1.0-18-amd64
done
update-grub es un script propio de Debian/Ubuntu que por debajo ejecuta grub-mkconfig -o /boot/grub/grub.cfg. En el examen pueden preguntarte por cualquiera de los dos nombres — son equivalentes en Debian/Ubuntu.

Si el propio gestor de arranque desaparece del disco (por ejemplo, tras instalar Windows encima, que sobrescribe el sector de arranque), se reinstala con:

root@lpic1:~#
$ grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.

Nota el /dev/sda sin número de partición: grub-install escribe en el disco completo (MBR) o en la partición ESP en sistemas UEFI, nunca en una partición de datos normal.

En el propio menú de GRUB, pulsando e sobre una entrada puedes editar los parámetros de arranque de esa sesión sin modificar ningún fichero — se pierde al reiniciar. Es la forma estándar de entrar en modo rescate si algo se rompe: añadir single o systemd.unit=rescue.target a la línea del kernel.

3.3 El kernel y el initramfs

GRUB carga en memoria dos cosas: el kernel (/boot/vmlinuz-*) y una imagen de arranque temprano llamada initramfs (/boot/initrd.img-*). El initramfs es un mini sistema de ficheros en RAM que contiene justo los módulos y herramientas necesarias para montar el / real — por ejemplo, los drivers de LVM o RAID, si tu raíz vive ahí (como la VM del módulo 00).

Sin initramfs, un sistema con / en LVM no podría arrancar: el kernel no sabría activar el volumen lógico antes de tener las herramientas de LVM disponibles. Una vez montada la raíz real, el kernel descarta el initramfs y continúa desde el disco.

root@lpic1:~#
$ update-initramfs -u
update-initramfs: Generating /boot/initrd.img-6.1.0-18-amd64

Se regenera con update-initramfs -u (actualizar el existente) tras instalar un módulo nuevo que haga falta muy pronto en el arranque, o automáticamente al instalar un kernel nuevo por el gestor de paquetes.

3.4 Revisar el arranque después de que haya pasado

Dos herramientas para diagnosticar qué ocurrió durante el arranque:

root@lpic1:~#
$ dmesg | tail -6
[    8.291022] systemd[1]: Started Network Manager.
[    8.512004] systemd[1]: Reached target Network is Online.
[    9.021873] systemd[1]: Started Daily apt download activities.
[    9.203561] systemd[1]: Startup finished in 2.1s (kernel) + 6.8s (userspace) = 8.9s.
root@lpic1:~#
$ journalctl -b -p err
-- No entries --

journalctl -b muestra los mensajes del arranque actual; journalctl -b -1, los del arranque anterior — imprescindible cuando el sistema se ha reiniciado solo y quieres saber por qué. -p err filtra solo mensajes de nivel error o superior.

Términos y utilidades de 101.2: GRUB, GRUB2, MBR, sector de arranque, /boot/grub/grub.cfg, /etc/default/grub, grub-install, update-grub/grub-mkconfig, initrd/initramfs, dmesg.

4. LPI 101.3 — Cambiar runlevels/targets y apagar o reiniciar el sistema

4.1 SysV init: los runlevels clásicos

Antes de systemd, el proceso init (PID 1) organizaba el sistema en runlevels numerados. Debian y Ubuntu ya no usan SysV init por defecto, pero el examen lo pregunta como base histórica y porque systemd mantiene los mismos números por compatibilidad:

RunlevelNombreEquivalente en systemd
0Apagado (halt)poweroff.target
1 / SModo monousuario (rescate)rescue.target
2Multiusuario sin red (histórico en algunas distros)—
3Multiusuario con red, sin entorno gráficomulti-user.target
5Multiusuario con red y entorno gráficographical.target
6Reinicioreboot.target

En Debian/Ubuntu concretamente, el runlevel 2 ha sido tradicionalmente el "normal" con red y sin gráfico obligatorio — a diferencia de otras distros donde 3 y 5 marcan esa diferencia. El examen espera que conozcas la tabla genérica de arriba, que es la que documenta LPI.

4.2 systemd: targets

systemd sustituye los runlevels por targets — unidades que agrupan otras unidades (servicios, sockets, otros targets) y son mucho más flexibles: un target puede depender de otro, y varios pueden estar "activos" a la vez.

root@lpic1:~#
$ systemctl get-default
graphical.target
root@lpic1:~#
$ systemctl list-units --type=target
UNIT                   LOAD   ACTIVE SUB    DESCRIPTION
basic.target           loaded active active Basic System
cryptsetup.target      loaded active active Local Encrypted Volumes
graphical.target       loaded active active Graphical Interface
multi-user.target      loaded active active Multi-User System
network.target         loaded active active Network
sysinit.target         loaded active active System Initialization

Para cambiar el target por defecto de forma permanente (sobrevive a reinicios):

root@lpic1:~#
$ systemctl set-default multi-user.target
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/multi-user.target.

Para cambiar de target ahora mismo, sin tocar la configuración permanente (equivalente moderno de telinit):

root@lpic1:~#
$ systemctl isolate multi-user.target
Si estás conectado por SSH a un servidor en multi-user.target, nunca hagas systemctl isolate rescue.target ni emergency.target en real — esos targets paran la red y te desconectan. Practícalo solo desde la consola de VirtualBox, no por SSH, y ten claro cómo volver: systemctl isolate multi-user.target.

El comando init/telinit <runlevel> sigue funcionando en sistemas con systemd por compatibilidad: internamente se traduce al target equivalente de la tabla del punto 4.1.

4.3 Apagar y reiniciar el sistema

ComandoEfecto
shutdown -h nowApaga inmediatamente
shutdown -r nowReinicia inmediatamente
shutdown -h +10 "Mantenimiento en 10 min"Apaga en 10 minutos, avisando el mensaje a todas las sesiones conectadas
shutdown -cCancela un apagado/reinicio programado que todavía no se ha ejecutado
rebootReinicia (atajo directo, sin programar nada)
poweroffApaga (atajo directo)
haltDetiene el sistema — en hardware antiguo no cortaba la alimentación, solo paraba la CPU; hoy es prácticamente igual a poweroff
systemctl reboot / poweroff / haltLas mismas acciones, invocadas a través de systemd
wall "mensaje"Envía un mensaje a todos los terminales de todos los usuarios conectados — shutdown lo usa automáticamente para avisar
root@lpic1:~#
$ shutdown -h +5 "Reinicio programado por mantenimiento"
Shutdown scheduled for Tue 2026-09-30 18:35:00 CEST, use 'shutdown -c' to cancel.
root@lpic1:~#
$ wall "El sistema se apaga en 5 minutos"
Broadcast message from root@lpic1-lab (pts/0) (Tue 2026-09-30 18:30:03 CEST):

El sistema se apaga en 5 minutos
root@lpic1:~#
$ shutdown -c
Shutdown cancelled.
Términos y utilidades de 101.3: init, telinit, systemctl (get-default/set-default/isolate), shutdown, reboot, halt, poweroff, wall, runlevels 0/1/3/5/6, /etc/inittab (legado, ya no se usa con systemd pero se menciona como referencia histórica).
🧰 Recursos relacionados (Ghost Academy)

Practica más — labs ya publicados en Ghost Academy sobre este tema: ⚙️ Systemd (guía) · ⚙️ Systemd: servicio personalizado (lab)

Valida lo aprendido — tests temáticos de Recursos: ⚙️ Test: Gestión del Sistema

5. Práctica guiada

Hazlo directamente en la VM que preparaste en el módulo 00 — mejor desde la consola de VirtualBox que por SSH, por el aviso del punto 4.2.

  1. Explora hardware: lscpu, cat /proc/meminfo | head, lspci, lsusb.
  2. Comprueba qué módulo controla tu tarjeta de red: lspci -k | grep -A2 -i ethernet.
  3. Descarga y vuelve a cargar un módulo inofensivo: modprobe -r pcspkr seguido de lsmod | grep pcspkr (no debería aparecer), luego modprobe pcspkr y compruébalo de nuevo.
  4. Abre /etc/default/grub, sube GRUB_TIMEOUT a 10, guarda y ejecuta update-grub. Reinicia la VM y comprueba que el menú de GRUB ahora espera más tiempo.
  5. Revisa el arranque que acabas de hacer: journalctl -b | tail -30.
  6. Consulta tu target por defecto con systemctl get-default, y compara con la lista de unidades activas de tipo target (systemctl list-units --type=target).
  7. Programa un apagado a 5 minutos con shutdown -h +5 "prueba", comprueba el aviso con wall, y cancélalo con shutdown -c antes de que se cumpla.

Resumen de comandos del módulo

ComandoPara qué
lspci / lsusb / lsmodVer hardware y módulos detectados
modprobe / modprobe -rCargar/descargar un módulo con sus dependencias
update-grub / grub-installRegenerar la configuración de GRUB / reinstalar el gestor de arranque
update-initramfs -uRegenerar la imagen initramfs
dmesg / journalctl -bRevisar los mensajes del arranque actual
systemctl get-default / set-default / isolateConsultar, fijar o cambiar de target
shutdown / reboot / poweroff / wallApagar, reiniciar y avisar a otros usuarios

Autoevaluación

  1. ¿Qué diferencia hay entre consultar hardware por /proc y por /sys?
  2. ¿Por qué modprobe es casi siempre mejor opción que insmod?
  3. ¿Qué fichero editas para cambiar el tiempo de espera del menú de GRUB, y qué comando ejecutas después para que el cambio surta efecto? ¿Por qué no basta con editar grub.cfg directamente?
  4. ¿Para qué sirve el initramfs, y qué pasaría en una instalación con / en LVM (como la del módulo 00) si no existiera?
  5. Tienes una sesión SSH abierta a un servidor en multi-user.target. ¿Por qué NO deberías ejecutar systemctl isolate rescue.target ahí?
  6. ¿Qué comando cancela un shutdown programado que todavía no se ha ejecutado?
← 00 · Preparación del entornoÍndice del curso102 · Instalación y paquetes →