201.3 - Gestion del kernel en ejecucion
Introduccion
La gestion del kernel en ejecucion permite a los administradores ajustar el comportamiento del sistema sin necesidad de reiniciar ni recompilar el kernel. Esto incluye la carga y descarga de modulos, el ajuste de parametros del kernel en tiempo real y el diagnostico del sistema a traves del buffer de anillo del kernel.
Este subtema tiene un peso de 4 en el examen, lo que lo convierte en el mas importante del Tema 201.
Sistema de archivos /proc
/proc/sys - Parametros del kernel
El directorio /proc/sys/ contiene archivos virtuales que representan parametros ajustables del kernel en tiempo real. Los cambios realizados aqui son inmediatos pero no persisten tras un reinicio.
$ ls /proc/sys/
abi/ crypto/ debug/ dev/ fs/ kernel/ net/ vm/Categorias principales:
| Directorio | Contenido |
|---|---|
/proc/sys/kernel/ | Parametros generales del kernel |
/proc/sys/net/ | Configuracion de red |
/proc/sys/vm/ | Gestion de memoria virtual |
/proc/sys/fs/ | Parametros del sistema de archivos |
/proc/sys/dev/ | Parametros de dispositivos |
Ejemplos de parametros comunes
# Ver el hostname
$ cat /proc/sys/kernel/hostname
servidor01
# Ver el reenvio de paquetes IPv4
$ cat /proc/sys/net/ipv4/ip_forward
0
# Ver la tendencia del sistema a usar swap (swappiness)
$ cat /proc/sys/vm/swappiness
60
# Numero maximo de archivos abiertos del sistema
$ cat /proc/sys/fs/file-max
9223372036854775807
# Numero maximo de PIDs
$ cat /proc/sys/kernel/pid_max
4194304Modificacion directa de parametros
Se pueden modificar parametros escribiendo directamente en los archivos de /proc/sys/:
# Habilitar el reenvio de paquetes IPv4
$ echo 1 > /proc/sys/net/ipv4/ip_forward
# Reducir la tendencia a usar swap
$ echo 10 > /proc/sys/vm/swappiness
# Habilitar SYN cookies (proteccion contra SYN flood)
$ echo 1 > /proc/sys/net/ipv4/tcp_syncookiesPara el examen: Los cambios realizados directamente en
/proc/sys/son inmediatos pero se pierden al reiniciar. Para hacerlos permanentes, se deben configurar ensysctl.conf.
sysctl - Gestion de parametros del kernel
Consultar parametros
sysctl es la herramienta de linea de comandos para leer y modificar parametros del kernel:
# Ver todos los parametros
$ sysctl -a
# Ver un parametro especifico
$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0
# Ver parametros que coinciden con un patron
$ sysctl -a | grep swappiness
vm.swappiness = 60La notacion de sysctl usa puntos en lugar de barras:
/proc/sys/net/ipv4/ip_forwardequivale anet.ipv4.ip_forward
Modificar parametros en tiempo real
# Habilitar reenvio de paquetes
$ sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
# Cambiar swappiness
$ sysctl -w vm.swappiness=10
vm.swappiness = 10
# Cambiar numero maximo de conexiones en cola
$ sysctl -w net.core.somaxconn=4096
net.core.somaxconn = 4096Persistencia con sysctl.conf
Para que los cambios persistan entre reinicios, se configuran en /etc/sysctl.conf o en archivos dentro de /etc/sysctl.d/:
# /etc/sysctl.conf
net.ipv4.ip_forward = 1
vm.swappiness = 10
net.ipv4.tcp_syncookies = 1
net.core.somaxconn = 4096
fs.file-max = 2097152
kernel.panic = 10# Aplicar los cambios del archivo de configuracion
$ sysctl -p
# o especificar un archivo
$ sysctl -p /etc/sysctl.d/99-custom.conf
# Cargar todos los archivos de configuracion
$ sysctl --systemPara el examen:
sysctl -wmodifica un parametro en tiempo real.sysctl -pcarga la configuracion desde el archivo (por defecto/etc/sysctl.conf). La opcion--systemcarga desde todos los archivos de configuracion del sistema.
Parametros importantes para el examen
| Parametro | Funcion | Valor tipico |
|---|---|---|
net.ipv4.ip_forward | Enrutamiento de paquetes IPv4 | 0 (deshabilitado) |
net.ipv6.conf.all.forwarding | Enrutamiento IPv6 | 0 |
vm.swappiness | Tendencia a usar swap (0-100) | 60 |
kernel.hostname | Nombre del host | Nombre del sistema |
kernel.panic | Segundos antes de reiniciar tras panic | 0 (no reinicia) |
net.ipv4.tcp_syncookies | Proteccion contra SYN flood | 1 |
fs.file-max | Maximo de archivos abiertos | Variable |
net.ipv4.icmp_echo_ignore_all | Ignorar ping | 0 (responde) |
kernel.sysrq | Habilitar teclas SysRq magicas | 1 |
Gestion de modulos del kernel
lsmod - Listar modulos cargados
lsmod muestra los modulos actualmente cargados en el kernel, formateando la informacion de /proc/modules:
$ lsmod
Module Size Used by
nf_tables 258048 0
ext4 819200 1
mbcache 16384 1 ext4
jbd2 135168 1 ext4
vfat 20480 1
fat 86016 1 vfatColumnas:
- Module: nombre del modulo
- Size: tamano en bytes que ocupa en memoria
- Used by: numero de dependencias y nombres de modulos que lo usan
modinfo - Informacion de un modulo
$ modinfo ext4
filename: /lib/modules/5.15.0-56-generic/kernel/fs/ext4/ext4.ko
softdep: pre: crc32c
license: GPL
description: Fourth Extended Filesystem
author: Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger
alias: fs-ext4
alias: ext3
depends: mbcache,jbd2
intree: Y
name: ext4
vermagic: 5.15.0-56-generic SMP mod_unload modversions
parm: mb_max_to_scan:... (uint)Campos importantes:
- filename: ruta del archivo del modulo
- depends: modulos de los que depende
- parm: parametros configurables del modulo
- alias: nombres alternativos
- vermagic: version del kernel para la que fue compilado
modprobe - Cargar y descargar modulos inteligentemente
modprobe es la herramienta recomendada para gestionar modulos. A diferencia de insmod, resuelve dependencias automaticamente.
# Cargar un modulo (con dependencias)
$ modprobe vfat
# Carga automaticamente 'fat' si no esta cargado
# Descargar un modulo (con dependencias no usadas)
$ modprobe -r vfat
# Cargar un modulo con parametros
$ modprobe snd_hda_intel power_save=1
# Simular la carga sin cargar realmente (dry-run)
$ modprobe -n -v vfat
# Mostrar dependencias de un modulo
$ modprobe --show-depends vfatinsmod y rmmod - Carga y descarga basicas
insmod y rmmod son herramientas de bajo nivel que no resuelven dependencias:
# Cargar un modulo (requiere ruta completa, no resuelve dependencias)
$ insmod /lib/modules/$(uname -r)/kernel/fs/vfat/vfat.ko
# Descargar un modulo (falla si hay dependencias activas)
$ rmmod vfat
# Forzar la descarga (peligroso)
$ rmmod -f vfatPara el examen: Siempre usa
modprobeen lugar deinsmod/rmmod.modproberesuelve dependencias automaticamente, mientras queinsmodrequiere la ruta completa del archivo.koy no gestiona dependencias.
depmod - Generar dependencias de modulos
depmod analiza los modulos instalados y genera el archivo modules.dep con las dependencias:
# Generar dependencias para el kernel actual
$ depmod
# Generar dependencias para una version especifica
$ depmod 5.15.60
# Modo verbose
$ depmod -vEl archivo generado esta en:
/lib/modules/<version>/modules.dep
Para el examen:
depmoddebe ejecutarse despues de instalar modulos manualmente.modprobedepende demodules.deppara resolver dependencias. Simodprobeno encuentra un modulo nuevo, ejecutadepmod.
Configuracion de modulos
/etc/modprobe.d/
Los archivos en /etc/modprobe.d/ configuran el comportamiento de modprobe:
$ ls /etc/modprobe.d/
blacklist.conf
alsa-base.conf
dkms.confTipos de directivas
# /etc/modprobe.d/custom.conf
# Crear un alias para un modulo
alias eth0 e1000e
# Definir opciones/parametros por defecto para un modulo
options snd_hda_intel power_save=1 power_save_controller=Y
# Impedir la carga de un modulo (blacklist)
blacklist nouveau
# Ejecutar un comando al cargar un modulo
install pcspkr /bin/true
# Ejecutar un comando al descargar un modulo
remove pcspkr /bin/true
# Cargar un modulo antes que otro (soft dependency)
softdep moduleA pre: moduleBBlacklisting de modulos
Para impedir que un modulo se cargue automaticamente:
# /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0Para el examen: Blacklistar un modulo con
blacklistsolo impide la carga automatica. El modulo aun puede cargarse manualmente conmodprobe. Para bloquear completamente, usainstall nombre_modulo /bin/trueque redirige la carga a un comando inocuo.
Parametros de modulos
Los modulos pueden aceptar parametros que modifican su comportamiento:
# Ver parametros disponibles
$ modinfo -p e1000e
IntMode:Interrupt Mode (int)
InterruptThrottleRate:Interrupt Throttling Rate (int)
SmartPowerDownEnable:Enable PHY smart power down (int)
# Cargar con parametros
$ modprobe e1000e InterruptThrottleRate=3000
# Configurar parametros permanentes
# /etc/modprobe.d/e1000e.conf
options e1000e InterruptThrottleRate=3000Estructura de /lib/modules/
$ ls /lib/modules/$(uname -r)/
build@ modules.alias modules.dep modules.symbols
kernel/ modules.alias.bin modules.dep.bin modules.symbols.bin
source@ modules.builtin modules.devname updates/| Elemento | Descripcion |
|---|---|
kernel/ | Directorio con modulos organizados por categoria |
modules.dep | Dependencias entre modulos (texto) |
modules.dep.bin | Dependencias en formato binario (mas rapido) |
modules.alias | Mapeo de alias a modulos |
modules.builtin | Lista de modulos compilados como built-in |
build | Enlace simbolico al codigo fuente/headers |
updates/ | Modulos actualizados (DKMS, etc.) |
uname - Informacion del kernel
# Version del kernel
$ uname -r
5.15.0-56-generic
# Toda la informacion
$ uname -a
Linux servidor01 5.15.0-56-generic #62-Ubuntu SMP x86_64 GNU/Linux
# Solo el nombre del kernel
$ uname -s
Linux
# Arquitectura
$ uname -m
x86_64dmesg - Buffer de anillo del kernel
Concepto
dmesg muestra el contenido del kernel ring buffer (buffer de anillo del kernel), que contiene los mensajes generados por el kernel desde el arranque. Es fundamental para diagnostico de hardware, drivers y errores del kernel.
# Ver todos los mensajes del kernel
$ dmesg
# Solo mensajes de error y mas graves
$ dmesg --level=err,crit,alert,emerg
# Formato legible con marcas de tiempo
$ dmesg -T
# Seguir los mensajes en tiempo real
$ dmesg -w
# Limpiar el buffer
$ dmesg -c
# Formato con colores y paginacion
$ dmesg -HNiveles de mensajes del kernel
| Nivel | Nombre | Significado |
|---|---|---|
| 0 | emerg | Sistema inutilizable |
| 1 | alert | Accion inmediata necesaria |
| 2 | crit | Condicion critica |
| 3 | err | Error |
| 4 | warning | Advertencia |
| 5 | notice | Normal pero significativo |
| 6 | info | Informativo |
| 7 | debug | Depuracion |
Filtrado de mensajes
# Mensajes relacionados con USB
$ dmesg | grep -i usb
# Mensajes de dispositivos de red
$ dmesg | grep -i eth
# Mensajes del ultimo arranque con journalctl
$ journalctl -k -b 0
# Mensajes del kernel con prioridad de error o superior
$ dmesg --level=errPara el examen:
dmesges la herramienta principal para diagnosticar problemas de hardware y modulos. Los mensajes del kernel tambien se pueden ver conjournalctl -ken sistemas con systemd. La opcion-Tmuestra marcas de tiempo legibles.
Ajuste de parametros en tiempo de ejecucion: ejemplos practicos
Optimizacion de red
# Habilitar enrutamiento
$ sysctl -w net.ipv4.ip_forward=1
# Aumentar el buffer de conexiones TCP
$ sysctl -w net.core.somaxconn=65535
# Aumentar el rango de puertos efimeros
$ sysctl -w net.ipv4.ip_local_port_range="1024 65535"
# Habilitar reutilizacion de sockets TIME_WAIT
$ sysctl -w net.ipv4.tcp_tw_reuse=1Optimizacion de memoria
# Reducir swappiness para servidores de base de datos
$ sysctl -w vm.swappiness=10
# Ajustar proporcion de dirty pages
$ sysctl -w vm.dirty_ratio=15
$ sysctl -w vm.dirty_background_ratio=5
# Habilitar overcommit de memoria
$ sysctl -w vm.overcommit_memory=1Seguridad
# Deshabilitar respuesta a ping
$ sysctl -w net.ipv4.icmp_echo_ignore_all=1
# Proteccion contra IP spoofing
$ sysctl -w net.ipv4.conf.all.rp_filter=1
# Deshabilitar aceptacion de redireccion ICMP
$ sysctl -w net.ipv4.conf.all.accept_redirects=0
# Habilitar proteccion contra SYN flood
$ sysctl -w net.ipv4.tcp_syncookies=1Para el examen: Los ajustes de
sysctlmas preguntados son:ip_forward(enrutamiento),swappiness(memoria),tcp_syncookies(seguridad) yicmp_echo_ignore_all(seguridad). Recuerda que-waplica en tiempo real y/etc/sysctl.confhace los cambios permanentes.
Trampas del examen
Errores comunes y distinciones criticas que LPI suele evaluar en este subtema:
modprobevsinsmod—modproberesuelve dependencias automaticamente y busca por nombre;insmodrequiere la ruta completa del archivo.koy no gestiona dependencias. Siempre se prefieremodprobeen produccionsysctl -wvs escribir en/proc/sys/— ambos son equivalentes para cambios temporales, pero ninguno persiste tras reiniciar. Solo/etc/sysctl.confo/etc/sysctl.d/*.confhacen cambios permanentessysctl -pvssysctl --system—-pcarga solo desde/etc/sysctl.conf(o el archivo especificado);--systemcarga desde todos los archivos de configuracion del sistema (/etc/sysctl.d/,/usr/lib/sysctl.d/, etc.)blacklistno bloquea completamente un modulo —blacklist nouveausolo impide la carga automatica. El modulo puede cargarse manualmente conmodprobe nouveau. Para bloquearlo completamente, usainstall nouveau /bin/truedepmoddebe ejecutarse tras instalar modulos manualmente — si agregas un archivo.koymodprobeno lo encuentra, es porque falta ejecutardepmodpara regenerarmodules.dep- La notacion de
sysctlusa puntos, no barras —net.ipv4.ip_forwardcorresponde a/proc/sys/net/ipv4/ip_forward. Confundir la notacion es una trampa comun dmesg -Tvsdmesgsin opciones — sin-T, las marcas de tiempo son en segundos desde el arranque (ilegibles). Con-Tse muestran en formato humano. El examen puede preguntar que opcion hace legible la salida/proc/modulesvslsmod—lsmodsimplemente formatea la salida de/proc/modules. Ambos muestran lo mismo, pero en preguntas sobre archivos del kernel, la respuesta es/proc/modulesvm.swappiness=0no desactiva el swap — solo minimiza su uso. El kernel seguira usando swap si la memoria esta criticamente baja. Para desactivar swap completamente, se usaswapoff -a