Cómo comprobar si el buffer circular del kernel está activo en Linux

LinuxLinuxBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás cómo verificar si el buffer circular del kernel (kernel ring buffer) está activo en Linux. El buffer circular del kernel es un componente vital para comprender los eventos del sistema y solucionar problemas. Explorarás tres métodos para acceder e inspeccionar su contenido: utilizando el comando dmesg para ver el buffer directamente, verificando su presencia y contenido a través del archivo /proc/kmsg y, finalmente, utilizando journalctl para examinar los registros del kernel gestionados por el diario de systemd. Estos pasos te proporcionarán habilidades prácticas para monitorear y analizar los mensajes del kernel en tu sistema Linux.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/BasicFileOperationsGroup -.-> linux/less("File Paging") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") subgraph Lab Skills linux/cat -.-> lab-558723{{"Cómo comprobar si el buffer circular del kernel está activo en Linux"}} linux/less -.-> lab-558723{{"Cómo comprobar si el buffer circular del kernel está activo en Linux"}} linux/grep -.-> lab-558723{{"Cómo comprobar si el buffer circular del kernel está activo en Linux"}} end

Verificar el buffer con dmesg

En este paso, aprenderás cómo utilizar el comando dmesg para ver el buffer circular del kernel (kernel ring buffer). El buffer circular del kernel es un área especial en la memoria donde el kernel de Linux almacena mensajes sobre el hardware, controladores de dispositivos y eventos del sistema. Estos mensajes son cruciales para solucionar problemas y entender lo que está sucediendo a un nivel bajo en tu sistema.

Imagina el buffer circular del kernel como un libro de registros para el kernel. Cuando sucede algo importante, como la detección de un dispositivo o la ocurrencia de un error, el kernel escribe un mensaje en este buffer. dmesg es la herramienta que se utiliza para leer estos mensajes.

Abre tu terminal si no está abierta. Puedes hacer esto haciendo clic en el icono de Xfce Terminal en el lado izquierdo de tu escritorio.

Ahora, escribe el siguiente comando y presiona Enter:

dmesg

Verás una gran cantidad de salida desfilando por tu terminal. Este es el contenido del buffer circular del kernel. La salida podría verse algo así (el contenido exacto variará según tu sistema y cuánto tiempo haya estado en funcionamiento):

[    0.000000] Linux version 5.15.0-xx-generic (buildd@lcy02-amd64-xx) (gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #xx-Ubuntu SMP Tue Feb 20 15:48:58 UTC 2024
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.15.0-xx-generic root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ro console=ttyS0,115200
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
...
[   10.123456] usb 1-1: new high-speed USB device number 2 using xhci_hcd
[   10.567890] usb 1-1: New USB device found, idVendor=xxxx, idProduct=xxxx
[   10.567890] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
...

Las marcas de tiempo al comienzo de cada línea indican el tiempo transcurrido desde que se inició el sistema.

Debido a que la salida puede ser muy larga, a menudo es útil canalizar la salida de dmesg a un paginador como less o more. Esto te permite desplazarte por la salida página por página.

Prueba este comando:

dmesg | less

Ahora puedes usar las teclas de flecha para desplazarte hacia arriba y hacia abajo, y presionar q para salir de less.

También puedes filtrar la salida de dmesg utilizando grep para buscar palabras clave específicas. Por ejemplo, para ver los mensajes relacionados con dispositivos USB, podrías usar:

dmesg | grep -i usb

La opción -i hace que la búsqueda sea insensible a mayúsculas y minúsculas.

Utilizar dmesg es una habilidad fundamental para diagnosticar problemas de hardware y entender los procesos de arranque del sistema en Linux.

Haz clic en Continuar para pasar al siguiente paso.

Verificar el buffer en /proc/kmsg

En el paso anterior, utilizaste el comando dmesg para ver el buffer circular del kernel (kernel ring buffer). Ahora, exploremos de dónde obtiene dmesg su información. El buffer circular del kernel se expone como un archivo virtual en el sistema de archivos /proc, específicamente en /proc/kmsg.

El sistema de archivos /proc es un sistema de archivos especial en Linux que proporciona información sobre procesos y otra información del sistema. Es una forma en que el kernel se comunica con los programas de espacio de usuario. Los archivos en /proc no son archivos reales en el disco; son generados sobre la marcha por el kernel cuando los accedes.

El archivo /proc/kmsg contiene los mismos mensajes del kernel que muestra dmesg. Sin embargo, leer directamente de /proc/kmsg es un poco diferente. dmesg procesa y formatea la salida para que sea más fácil de leer, mientras que leer /proc/kmsg directamente te da los mensajes en bruto.

Intentemos leer el contenido de /proc/kmsg utilizando el comando cat.

Abre tu terminal si no está abierta.

Escribe el siguiente comando y presiona Enter:

cat /proc/kmsg

Puedes ver alguna salida, pero puede que no sea tan fácil de leer como la salida de dmesg. Además, leer /proc/kmsg a veces puede bloquearse si no hay nuevos mensajes, o puede mostrar mensajes que ya se han leído.

<level>message
<level>message
...

La parte <level> indica el nivel de registro del mensaje (por ejemplo, crítico, error, advertencia, información, depuración).

Si bien puedes leer /proc/kmsg directamente, dmesg es la herramienta estándar y recomendada para ver el buffer circular del kernel porque proporciona mejores opciones de formato y filtrado. Entender que /proc/kmsg es la fuente te ayuda a comprender cómo funciona dmesg por debajo.

Para la mayoría de los fines prácticos, utilizarás dmesg en lugar de leer /proc/kmsg directamente. Este paso es principalmente para mostrarte la fuente subyacente de la salida de dmesg.

Haz clic en Continuar para pasar al siguiente paso, donde veremos un sistema de registro más moderno.

Inspeccionar registros con journalctl

En los pasos anteriores, aprendiste sobre el buffer circular del kernel (kernel ring buffer) y cómo ver su contenido utilizando dmesg. Si bien dmesg es excelente para los mensajes del kernel, los sistemas Linux modernos utilizan un sistema de registro más completo llamado systemd-journald. El comando journalctl es la herramienta principal para interactuar con el registro (journal) de systemd-journald.

systemd-journald recopila mensajes de registro de diversas fuentes, incluyendo el kernel (como los mensajes que viste con dmesg), servicios del sistema, aplicaciones e incluso la salida estándar y el error estándar de los procesos. Almacena estos registros en un formato estructurado e indexado, lo que facilita la búsqueda y el filtrado de mensajes.

Exploremos el comando journalctl.

Abre tu terminal si no está abierta.

Escribe el siguiente comando y presiona Enter:

journalctl

Este comando mostrará todos los mensajes de registro recopilados por systemd-journald. Similar a dmesg, la salida puede ser muy larga y normalmente se canaliza automáticamente a un paginador como less.

-- Journal begins at Tue 2024-07-23 10:00:00 UTC, ends at Tue 2024-07-23 10:30:00 UTC. --
Jul 23 10:00:01 hostname systemd[1]: Starting Network Manager...
Jul 23 10:00:02 hostname kernel: Linux version 5.15.0-xx-generic (...)
Jul 23 10:00:03 hostname systemd[1]: Started Network Manager.
Jul 23 10:00:04 hostname systemd[1]: Starting OpenSSH server daemon...
...

Puedes usar las teclas de flecha para desplazarte y presionar q para salir del paginador.

journalctl tiene muchas opciones para filtrar registros. Aquí hay algunos ejemplos:

Para ver solo los mensajes del kernel (similar a dmesg):

journalctl -k

Para ver los registros de un servicio específico, por ejemplo, el servicio SSH:

journalctl -u ssh.service

Para ver los registros desde una hora específica, por ejemplo, desde "hoy":

journalctl --since "today"

Para ver los registros más recientes y seguir los nuevos mensajes a medida que llegan (como tail -f):

journalctl -f

Presiona Ctrl+C para salir del comando journalctl -f.

journalctl es una herramienta poderosa para la administración y solución de problemas del sistema. Proporciona una ubicación centralizada para los registros y opciones flexibles para verlos y filtrarlos.

Experimenta con algunas de las opciones de journalctl en tu terminal para ver cómo afectan la salida.

Haz clic en Continuar para completar este laboratorio.

Resumen

En este laboratorio, aprendiste cómo verificar si el buffer circular del kernel (kernel ring buffer) está activo en Linux. Comenzaste utilizando el comando dmesg para ver el contenido del buffer circular del kernel, que almacena mensajes importantes sobre el hardware, controladores de dispositivos y eventos del sistema. Viste cómo dmesg muestra estos mensajes con marcas de tiempo, proporcionando un registro de bajo nivel de la actividad del sistema.

También aprendiste que la salida de dmesg puede ser extensa y que canalizarla a un paginador como less o more es una técnica útil para navegar por la salida. Este primer paso demostró el método principal para acceder al contenido del buffer circular del kernel y comprender su papel en la monitorización y solución de problemas del sistema.