Tabla de Contenidos
201.3: Kernel runtime management and troubleshooting
Perteneciente a LPI Topic 201: Linux Kernel.
- Weight: 4
- Description: Candidates should be able to manage and/or query a 2.6.x, 3.x or 4.x kernel and its loadable modules. Candidates should be able to identify and correct common boot and run time issues. Candidates should understand device detection and management using udev. This objective includes troubleshooting udev rules.
- Key Knowledge Areas:
- Use command-line utilities to get information about the currently running kernel and kernel modules
- Manually load and unload kernel modules
- Determine when modules can be unloaded
- Determine what parameters a module accepts
- Configure the system to load modules by names other than their file name.
/procfilesystem- Content of
/,/boot/, and/lib/modules/ - Tools and utilities to analyze information about the available hardware
udevrules
- Terms and Utilities:
/lib/modules/kernel-version/modules.dep- module configuration files in
/etc/ /proc/sys/kernel//sbin/depmod/sbin/rmmod/sbin/modinfo/bin/dmesg/sbin/lspci/usr/bin/lsdev/sbin/lsmod/sbin/modprobe/sbin/insmod/bin/uname/usr/bin/lsusb/etc/sysctl.conf,/etc/sysctl.d//sbin/sysctludevmonitorudevadm monitor/etc/udev/
Gestión de módulos
lsmod
Lista módulos instalados en el kernel y qué procesos los están usando. Muestra la misma información que el contenido de /proc/modules
Module Size Used by video 49152 0 x_tables 45056 1 ip_tables mbcache 16384 1 ext4 (...)
insmod
Insertar (cargar) módulos en el kernel.
insmod /lib/modules/4.16.7/kernel/drivers/net/sb1000.ko
Luego podemos verificar que está instalado con lsmod
rmmod
Eliminar módulos del kernel.
rmmod <NOMBRE_MODULO>
Si el módulo está en ejecución o depende de otro módulo, no nos dejará.
modprobe
Realiza la gestión dinámica de módulos. Realiza las mismas operaciones que lsmod, insmod y rmmod, pero da más opciones:
l: lista todos los módulos disponiblesa: inserta todos los módulosr: elimina un módulo y sus dependencias
Ejemplo:
modprobe sym53c8xx.ko
Insertaría un módulo, resolviendo las dependencias.
modinfo
Muestra información sobre módulos
modinfo /lib/modules/4.16.7/kernel/drivers/net/sb1000.ko
Ejemplo de salida:
filename: /usr/lib/modules/4.19.0-14-amd64/kernel/drivers/net/sb1000.ko license: GPL description: General Instruments SB1000 driver author: Franco Venturi <fventuri@mediaone.net> alias: acpi*:GIC1000:* alias: pnp:dGIC1000* depends: retpoline: Y intree: Y name: sb1000 (...)
Configuración de módulos
La configuración de los módulos están en los siguientes ficheros:
/etc/modules.conf/etc/modprobe.conf/etc/modprobe.d/*.conf
El primero está obsoleto en muchas distribuciones y modprobe.conf no suele estar por defecto en el sistema.
Dependencias de módulos
El archivo que define las dependencias de unos módulos con respecto a otros es modules.dep que se encuentra en /lib/modules/<VERSION_KERNEL>
Aspecto del fichero modules.dep:
kernel/arch/x86/crypto/glue_helper.ko: kernel/arch/x86/crypto/twofish-x86_64-3way.ko: kernel/arch/x86/crypto/twofish-x86_64.ko kernel/crypto/twofish_common.ko kernel/arch/x86/crypto/glue_helper.ko (...)
Primero aparece el nombre del módulo y a continuación los módulos de los que depende.
Carga de módulos
kmod y kerneld se encargan de la carga dinámica de módulos del kernel. El módulo se carga cuando el kernel lo necesita.
kmod: hilo propio del kernel y opera directamente con él.kerneld: es una daemon y se comunica con el kernel a través de SysV.
Ambos usan modprobe para manejar dependencias y cargas dinámicas de módulos.
Kmod reemplaza Kerneld a partir del kernel 2.2
Para habilitar el uso de kmod, el kernel debe ser compilado con la opción CONFIG_KMOD habilitada (es la opción por defecto). Esto es porque kmod se implementa como un módulo del kernel y dicho módulo debe ser habilitado también.
Hardware e información del kernel
lsdev
Proporciona información del hardware instalado. Qué dispositivo está usando qué dirección I/O y canales IRQ/DMA. Para ello, utiliza la información de los siguientes ficheros:
/proc/interrupts/proc/ioports/proc/dma
Para tener disponible este comando, hay que instalar el paquete procinfo (en Debian)
lscpi
Muestra información sobre todos los buses PCI del sistema y todos los dispositivos que están conectados a ellos.
lsusb
Muestra información de los buses USB de sistema y los dispositivos que están conectados a ellos.
dmesg
Comando que permite ver los mensajes de la salida estándar del kernel (también llamado kernel buffer ring).
Muy útil para tratar de solucionar problemas con el sistema o si necesitamos obtener información del hardware del sistema.
La salida de dmesg normalmente se puede encontrar en /var/log/dmesg (o /var/log/messages).
Como la salida del comando es muy larga, lo normal es filtrar los resultados con grep:
dmesg | grep sda
Ejemplo de salida:
[ 3.166003] sd 1:0:0:0: [sda] 134217728 512-byte logical blocks: (68.7 GB/64.0 GiB) [ 3.166043] sd 1:0:0:0: [sda] Write Protect is off [ 3.166045] sd 1:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 3.166057] sd 1:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 3.195329] sda: sda1 sda2 < sda5 > [ 3.196275] sd 1:0:0:0: [sda] Attached SCSI disk [ 14.208926] EXT4-fs (sda1): mounting ext2 file system using the ext4 subsystem [ 14.215321] EXT4-fs (sda1): mounted filesystem without journal. Opts: (null)
sysctl
Modifica los parámetros del kernel en tiempo de ejecución:
sysctl net.ipv4.ip_forward=1
Los parámetros disponibles se encuentra en /proc/sys/. Para el ejemplo anterior, estarían en /proc/sys/net/ipv4/. Si queremos ver si está activado o no, abrimos el fichero. Por ejemplo, si abrimos /proc/sys/net/ipv4/ip_forward veremos un 0 si no está activado y un 1 si lo tenemos activado.
Los cambios son volátiles, desaparecerán al apagar/reiniciar el equipo. Si se quiere mantener los cambios, hay que añadir los parámetros en el fichero /etc/sysctl.conf
Si queremos ver todos los parámetros disponibles y su estado:
sysctl -a
Ejemplo de salida:
abi.vsyscall32 = 1 crypto.fips_enabled = 0 debug.exception-trace = 1 debug.kprobes-optimization = 1 dev.hpet.max-user-freq = 64 dev.mac_hid.mouse_button2_keycode = 97 dev.mac_hid.mouse_button3_keycode = 100 dev.mac_hid.mouse_button_emulation = 0 dev.scsi.logging_level = 0 dev.tty.ldisc_autoload = 1 fs.aio-max-nr = 65536 (...)
udev
Detecta los dispositivos del sistema y está diseñado para hacer más flexible y seguro el manejo de dispositivos.
Consiste en un daemon udevd que recibe uevent desde el kernel. La comunicación se realiza mediante el sistema de ficheros virtual /sys.
El fichero de configuración es /etc/udev/udev.conf.
El directorio donde se almacenan las reglas definidas por el usuario se encuentra en /etc/udev/rules.d
udevadm
Control de udev en tiempo de ejecución
udevmonitor
Comando que muestra los eventos de udev y el kernel por la salida estándar.
Se puede utilizar para analizar la frecuencia de eventos medidante la comparación del tiemstamp del uevent kernel y el evento udev.
No existe en todas las distribuiciones linux. Cuando existe, suele ser un enlace simbólico a udevadm monitor
