Herramientas de usuario

Herramientas del sitio


informatica:certificaciones:lpic:lpic-2:201_linux_kernel:201.3_kernel_runtime_management_and_troubleshooting

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.
    • /proc filesystem
    • Content of /, /boot/ , and /lib/modules/
    • Tools and utilities to analyze information about the available hardware
    • udev rules
  • 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/sysctl
    • udevmonitor
    • udevadm 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 disponibles
  • a: inserta todos los módulos
  • r: 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

informatica/certificaciones/lpic/lpic-2/201_linux_kernel/201.3_kernel_runtime_management_and_troubleshooting.txt · Última modificación: por tempwin