El comando dmesg le permite mirar dentro del mundo oculto de los procesos de inicio de Linux. Revise y supervise los mensajes del controlador y del dispositivo de hardware desde el búfer de anillo del núcleo con «el amigo del buscador de fallas».
Tabla de contenido
Cómo funciona el búfer de anillo de Linux
En las computadoras Linux y similares a Unix, el arranque y el inicio son dos fases distintas de la secuencia de eventos que tienen lugar cuando la computadora está encendida.
Los procesos de arranque (BIOS o UEFI, MBRy COMIDA) llevan la inicialización del sistema al punto en que el kernel se carga en la memoria y se conecta al disco ram inicial (initrd o initramfs), y systemd Está empezado.
Luego, los procesos de inicio toman el relevo y completan la inicialización del sistema operativo. En las primeras etapas de la inicialización, los demonios de registro como syslogd o rsyslogd aún no están en funcionamiento. Para evitar perder mensajes de error y advertencias notables de esta fase de inicialización, el kernel contiene un búfer de anillo que utiliza como almacén de mensajes.
Un búfer de anillo es un espacio de memoria reservado para mensajes. Es de diseño simple y de tamaño fijo. Cuando está lleno, los mensajes más nuevos sobrescriben los mensajes más antiguos. Conceptualmente, se puede considerar como una «búfer circular. «
El búfer de anillo del kernel almacena información como los mensajes de inicialización de los controladores de dispositivos, mensajes del hardware y mensajes de los módulos del kernel. Debido a que contiene estos mensajes de inicio de bajo nivel, el búfer de anillo es un buen lugar para iniciar una investigación sobre errores de hardware u otros problemas de inicio.
Pero no vayas con las manos vacías. Lleva dmesg contigo.
El comando dmesg
El comando dmesg le permite para revisar los mensajes que se almacenan en el búfer de anillo. De forma predeterminada, debe usar sudo para usar dmesg.
sudo dmesg
Todos los mensajes del búfer circular se muestran en la ventana del terminal.
Eso fue un diluvio. Obviamente, lo que tenemos que hacer es canalizarlo a través de menos:
sudo dmesg | less
Ahora podemos desplazarnos por los mensajes en busca de elementos de interés.
Puede usar la función de búsqueda dentro de less para ubicar y resaltar elementos y términos que le interesan. Inicie la función de búsqueda presionando la tecla de barra diagonal «/» en less.
Eliminando la necesidad de sudo
Si desea evitar tener que usar sudo cada vez que usa dmesg, puede usar este comando. Pero tenga en cuenta: permite que cualquier persona con una cuenta de usuario en su computadora use dmesg sin tener que usar sudo.
sudo sysctl -w kernel.dmesg_restrict=0
Forzar la salida de color
Por defecto, dmesg probablemente estará configurado para producir una salida en color. Si no es así, puede decirle a dmesg que coloree su salida usando la opción -L (color).
sudo dmesg -L
Para forzar a dmesg a que siempre tenga una pantalla coloreada por defecto, use este comando:
sudo dmesg --color=always
Marcas de tiempo humanas
Por defecto, dmesg usa una notación de marca de tiempo de segundos y nanosegundos desde que comenzó el kernel. Para que esto se represente en un formato más amigable para los humanos, use la opción -H (humano).
sudo dmesg -H
Esto hace que sucedan dos cosas.
La salida se muestra automáticamente en menos.
Las marcas de tiempo muestran una marca de tiempo con la fecha y la hora, con una resolución de minutos. Los mensajes que ocurrieron en cada minuto están etiquetados con los segundos y nanosegundos desde el inicio de ese minuto.
Marcas de tiempo legibles por humanos
Si no necesita una precisión de nanosegundos, pero desea que las marcas de tiempo sean más fáciles de leer que las predeterminadas, use la opción -T (legible por humanos). (Es un poco confuso. -H es la opción «humana», -T es la opción «legible por humanos»).
sudo dmesg -T
Las marcas de tiempo se representan como fechas y horas estándar, pero la resolución se reduce a un minuto.
Todo lo que sucedió en un solo minuto tiene la misma marca de tiempo. Si lo único que le preocupa es la secuencia de eventos, esto es suficiente. Además, tenga en cuenta que lo devuelven al símbolo del sistema. Esta opción no invoca menos automáticamente.
Ver eventos en vivo
Para ver los mensajes a medida que llegan al búfer de anillo del kernel, use la opción –follow (esperar mensajes). Esa frase puede parecer un poco extraña. Si el búfer de anillo se usa para almacenar mensajes de eventos que tienen lugar durante la secuencia de inicio, ¿cómo pueden llegar los mensajes en vivo al búfer de anillo una vez que la computadora está en funcionamiento?
Cualquier cosa que provoque un cambio en el hardware conectado a su computadora hará que los mensajes se envíen al búfer circular del kernel. Actualice o agregue un módulo del kernel y verá mensajes de búfer en anillo sobre esos cambios. Si conecta una unidad USB o conecta o desconecta un dispositivo Bluetooth, verá mensajes en la salida dmesg. Incluso el hardware virtual hará que aparezcan nuevos mensajes en el búfer de anillo. Encienda una máquina virtual y verá que llega nueva información al búfer de anillo.
sudo dmesg --follow
Tenga en cuenta que no volverá a la línea de comandos. Cuando aparecen nuevos mensajes, se muestran mediante dmesg en la parte inferior de la ventana del terminal.
Incluso montar un disco CD-ROM se considera un cambio, porque ha insertado el contenido del disco CD-ROM en el árbol de directorios.
Para salir de la fuente en tiempo real, presione Ctrl + C.
Recuperar los últimos diez mensajes
Usa el comando tail para recuperar los últimos diez mensajes de búfer de anillo del núcleo. Por supuesto, puede recuperar cualquier número de mensajes. Diez es solo nuestro ejemplo.
sudo dmesg | last -10
Los últimos diez mensajes se recuperan y se enumeran en la ventana del terminal.
Búsqueda de términos específicos
Canalice la salida de dmesg a través de grep para buscar cadenas o patrones particulares. Aquí estamos usando la opción -i (ignorar mayúsculas y minúsculas) para que no se tenga en cuenta el caso de cadenas coincidentes. nuestros resultados incluirán «usb» y «USB» y cualquier otra combinación de minúsculas y mayúsculas.
sudo dmesg | grep -i usb
Los resultados de búsqueda resaltados están en mayúsculas y minúsculas.
Podemos aislar los mensajes que contienen referencias al primero SCSI disco duro en el sistema sda. (En realidad, sda también se usa hoy en día para el primer disco duro SATAy para unidades USB).
sudo dmesg | grep -i sda
Todos los mensajes que mencionan sda se recuperan y se enumeran en la ventana de terminal.
Para hacer una búsqueda grep de varios términos a la vez, use la opción -E (extender expresión regular). Debe proporcionar los términos de búsqueda dentro de una cadena entre comillas con barra vertical «|» delimitadores entre los términos de búsqueda:
sudo dmesg | grep -E "memory|tty|dma"
Cualquier mensaje que mencione alguno de los términos de búsqueda se muestra en la ventana del terminal.
Usar niveles de registro
Cada mensaje registrado en el búfer circular del kernel tiene un nivel adjunto. El nivel representa la importancia de la información en el mensaje. Los niveles son:
emerg: el sistema no se puede utilizar.
alerta: Se deben tomar medidas de inmediato.
crit: condiciones críticas.
err: condiciones de error.
advertir: Condiciones de advertencia.
aviso: Condición normal pero significativa.
info: Informativo.
debug: mensajes de nivel de depuración.
Podemos hacer que dmesg extraiga mensajes que coincidan con un nivel en particular usando la opción -l (nivel) y pasando el nombre del nivel como un parámetro de línea de comandos. Para ver solo mensajes de nivel «informativo», use este comando:
sudo dmesg -l info
Todos los mensajes que se enumeran son mensajes informativos. No contienen errores ni advertencias, solo notificaciones útiles.
Combine dos o más niveles de registro en un comando para recuperar mensajes de varios niveles de registro:
sudo dmesg -l debug,notice
La salida de dmesg es una combinación de mensajes de cada nivel de registro:
Las categorías de instalaciones
Los mensajes dmesg se agrupan en categorías denominadas «instalaciones». La lista de instalaciones es:
kern: mensajes del kernel.
usuario: mensajes a nivel de usuario.
mail: sistema de correo.
demonio: demonios del sistema.
auth: mensajes de seguridad / autorización.
syslog: mensajes internos de syslogd.
lpr: subsistema de impresora de línea.
noticias: subsistema de noticias de la red.
Podemos pedirle a dmesg que filtre su salida para mostrar solo los mensajes en una instalación específica. Para hacerlo, debemos usar la opción -f (facilidad):
sudo dmesg -f daemon
dmesg enumera todos los mensajes relacionados con los demonios en la ventana de terminal.
Como hicimos con los niveles, podemos pedirle a dmesg que enumere los mensajes de más de una instalación a la vez:
sudo dmesg -f syslog, daemon
El resultado es una combinación de mensajes de registro de syslog y daemon.
Combinando instalación y nivel
La opción -x (decodificar) hace que dmesg muestre la instalación y el nivel como prefijos legibles por humanos para cada línea.
sudo dmesg -x
La instalación y el nivel se pueden ver al inicio de cada línea:
La primera sección resaltada es un mensaje de la función «kernel» con un nivel de «aviso». La segunda sección resaltada es un mensaje de la función «kernel» con un nivel de «información».
Eso es genial, pero ¿por qué?
En pocas palabras, búsqueda de fallas.
Si tiene problemas con una pieza de hardware que no se reconoce o no se comporta correctamente, dmesg puede arrojar algo de luz sobre el problema.
Utilice dmesg para revisar los mensajes desde el nivel más alto hasta cada nivel inferior, en busca de errores o advertencias que mencionen el elemento de hardware o que puedan tener relación con el problema.
Utilice dmesg para buscar cualquier mención de la instalación adecuada para ver si contienen información útil.
Canalice dmesg a través de grep y busque cadenas o identificadores relacionados como el fabricante del producto o los números de modelo.
Canalice dmesg a través de grep y busque términos genéricos como «gpu» o «almacenamiento», o términos como «error», «fallido» o «incapaz».
Utilice la opción –follow y vea los mensajes dmesg en tiempo real.
Feliz cacería.