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.
- Consultar el hardware que el kernel ha detectado a través de
/procy/sys, y con herramientas comolspci,lsusbylsmod. - Cargar, descargar y consultar módulos del kernel.
- Explicar cada fase del arranque: firmware, gestor de arranque, kernel, initramfs e init.
- Leer y modificar la configuración de GRUB2 con seguridad.
- Diferenciar runlevels de SysV init y targets de systemd, y moverte entre ellos.
- Apagar y reiniciar el sistema de forma controlada, avisando a otros usuarios conectados.
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.
| # | Fase | Quién la ejecuta | Qué hace |
|---|---|---|---|
| 1 | Firmware | BIOS o UEFI, en la placa base | POST (autotest de hardware) y localizar un dispositivo de arranque |
| 2 | Gestor de arranque | GRUB2 | Mostrar el menú, cargar el kernel elegido y el initramfs en memoria |
| 3 | Kernel + initramfs | Linux | Inicializar hardware, montar un sistema de ficheros temporal con los drivers imprescindibles |
| 4 | Raíz real | Kernel | Desmontar el initramfs y montar el / definitivo del disco |
| 5 | init | systemd (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:
| Fichero | Contenido |
|---|---|
/proc/cpuinfo | Modelo, núcleos, flags e instrucciones del/de los procesador/es |
/proc/meminfo | Memoria RAM total, libre, en caché y swap |
/proc/interrupts | Interrupciones (IRQ) atendidas por cada dispositivo |
/proc/ioports | Rangos de puertos de E/S reservados por cada dispositivo |
/proc/dma | Canales DMA en uso |
/proc/modules | Mó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/partitions | Particiones que el kernel ha detectado en los discos |
/proc/version | Versión exacta del kernel en ejecución |
$ 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$ cat /proc/meminfo | head -5
MemTotal: 2027456 kB
MemFree: 412300 kB
MemAvailable: 1587220 kB
Buffers: 89100 kB
Cached: 712540 kBls -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.
$ ls /sys/class/net
eth0 lo$ cat /sys/class/net/eth0/address
08:00:27:4a:3c:912.3 Herramientas de detección de hardware
| Comando | Para qué sirve |
|---|---|
lspci | Lista dispositivos conectados al bus PCI/PCIe (tarjeta de red, gráfica, controladores de disco...) |
lspci -v / -vv | Igual, con detalle creciente (driver en uso, IRQ, memoria asignada) |
lspci -k | Muestra qué módulo del kernel controla cada dispositivo |
lsusb | Lista dispositivos conectados por USB |
lsusb -v | Detalle completo de cada dispositivo USB (descriptores) |
lsblk | Árbol de dispositivos de bloque (discos y particiones) — ya lo usaste en el módulo 00 |
lscpu | Resumen legible de la CPU: arquitectura, núcleos, hilos, caché |
dmesg | Mensajes del kernel desde el arranque, incluida la detección de hardware |
lsmod | Módulos del kernel cargados (equivalente legible de /proc/modules) |
$ 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$ 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$ 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$ 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 ready2.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.
| Comando | Qué hace |
|---|---|
lsmod | Lista 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 |
depmod | Regenera el mapa de dependencias entre módulos (modules.dep) |
modinfo <módulo> | Muestra información del módulo: autor, descripción, parámetros aceptados |
$ lsmod | head -5
Module Size Used by
vboxguest 421888 3 vboxsf,vboxvideo
e1000 143360 0
psmouse link 167936 0$ modprobe -r pcspkr$ modprobe pcspkrmodprobe 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).
$ cat /etc/modprobe.d/blacklist-floppy.conf
blacklist floppy2.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/.
$ 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"
/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 exige | MBR (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 arranque | Primeros 512 bytes del disco (sector de arranque, MBR) | Partición ESP (EFI System Partition), FAT32, con ficheros .efi |
| Seguridad de arranque | No existe | Secure Boot — verifica firma criptográfica del cargador antes de ejecutarlo |
| Interfaz | Texto, muy limitada | Grá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/grub | Sí | Opciones de alto nivel: tema, tiempo de espera del menú, parámetros de kernel por defecto |
/etc/grub.d/* | Rara vez | Scripts que generan las entradas del menú (detectan kernels instalados, otros sistemas operativos...) |
/boot/grub/grub.cfg | Nunca | Fichero final que lee GRUB al arrancar — se regenera automáticamente, cualquier cambio manual se pierde |
$ 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:
$ nano /etc/default/grub
# cambia GRUB_TIMEOUT=5 por GRUB_TIMEOUT=10, guarda con Ctrl+O, sal con Ctrl+X$ 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
doneupdate-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:
$ 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.
$ update-initramfs -u
update-initramfs: Generating /boot/initrd.img-6.1.0-18-amd64Se 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:
$ 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.$ 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.
/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:
| Runlevel | Nombre | Equivalente en systemd |
|---|---|---|
| 0 | Apagado (halt) | poweroff.target |
| 1 / S | Modo monousuario (rescate) | rescue.target |
| 2 | Multiusuario sin red (histórico en algunas distros) | — |
| 3 | Multiusuario con red, sin entorno gráfico | multi-user.target |
| 5 | Multiusuario con red y entorno gráfico | graphical.target |
| 6 | Reinicio | reboot.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.
$ systemctl get-default
graphical.target$ 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 InitializationPara cambiar el target por defecto de forma permanente (sobrevive a reinicios):
$ 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):
$ systemctl isolate multi-user.targetmulti-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
| Comando | Efecto |
|---|---|
shutdown -h now | Apaga inmediatamente |
shutdown -r now | Reinicia inmediatamente |
shutdown -h +10 "Mantenimiento en 10 min" | Apaga en 10 minutos, avisando el mensaje a todas las sesiones conectadas |
shutdown -c | Cancela un apagado/reinicio programado que todavía no se ha ejecutado |
reboot | Reinicia (atajo directo, sin programar nada) |
poweroff | Apaga (atajo directo) |
halt | Detiene el sistema — en hardware antiguo no cortaba la alimentación, solo paraba la CPU; hoy es prácticamente igual a poweroff |
systemctl reboot / poweroff / halt | Las 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 |
$ shutdown -h +5 "Reinicio programado por mantenimiento"
Shutdown scheduled for Tue 2026-09-30 18:35:00 CEST, use 'shutdown -c' to cancel.$ 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$ shutdown -c
Shutdown cancelled.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).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.
- Explora hardware:
lscpu,cat /proc/meminfo | head,lspci,lsusb. - Comprueba qué módulo controla tu tarjeta de red:
lspci -k | grep -A2 -i ethernet. - Descarga y vuelve a cargar un módulo inofensivo:
modprobe -r pcspkrseguido delsmod | grep pcspkr(no debería aparecer), luegomodprobe pcspkry compruébalo de nuevo. - Abre
/etc/default/grub, subeGRUB_TIMEOUTa 10, guarda y ejecutaupdate-grub. Reinicia la VM y comprueba que el menú de GRUB ahora espera más tiempo. - Revisa el arranque que acabas de hacer:
journalctl -b | tail -30. - 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). - Programa un apagado a 5 minutos con
shutdown -h +5 "prueba", comprueba el aviso conwall, y cancélalo conshutdown -cantes de que se cumpla.
Resumen de comandos del módulo
| Comando | Para qué |
|---|---|
lspci / lsusb / lsmod | Ver hardware y módulos detectados |
modprobe / modprobe -r | Cargar/descargar un módulo con sus dependencias |
update-grub / grub-install | Regenerar la configuración de GRUB / reinstalar el gestor de arranque |
update-initramfs -u | Regenerar la imagen initramfs |
dmesg / journalctl -b | Revisar los mensajes del arranque actual |
systemctl get-default / set-default / isolate | Consultar, fijar o cambiar de target |
shutdown / reboot / poweroff / wall | Apagar, reiniciar y avisar a otros usuarios |
Autoevaluación
- ¿Qué diferencia hay entre consultar hardware por
/procy por/sys? - ¿Por qué
modprobees casi siempre mejor opción queinsmod? - ¿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.cfgdirectamente? - ¿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? - Tienes una sesión SSH abierta a un servidor en
multi-user.target. ¿Por qué NO deberías ejecutarsystemctl isolate rescue.targetahí? - ¿Qué comando cancela un
shutdownprogramado que todavía no se ha ejecutado?