Use o dmesg para entender o que está funcionando mal no seu computador

O dmesg ajuda a obter informações, direto do kernel, sobre o que está havendo com o seu sistema.
Com este utilitário, tradicional em sistemas UNIX-like, você irá ter tanto boas, como más notícias.
dmesg show delta
O comando pode ser útil para detectar problemas com drivers e módulos de kernel que não estão funcionando adequadamente. Quando você sabe o que precisa ser “arrumado” no seu sistema, tarefas, como reduzir o tempo de boot podem ser facilitadas.
O dmesg pode dar pistas bem concretas sobre por que sua placa de vídeo ou rede não atende às suas expectativas, por exemplo.
Também uso muito esta ferramenta para acompanhar o suporte do kernel (à medida em que vai sendo atualizado) ao meu hardware.

Como usar o dmesg para obter informações sobre o funcionamento do seu sistema

A ferramenta é muito simples de usar e pode ser acompanhada do comando grep, sempre que você quiser filtrar as informações, para visualizar apenas o que interessa.
Para obter informações sobre erros, vindos da execução do kernel, experimente o seguinte comando:

dmesg | grep -i error

Note que a ferramenta não exige ser executada com privilégios especiais.
Esta característica permite que um usuário comum, sem privilégios administrativos no sistema, possa obter informações sobre seu funcionamento, copiar e colar em uma mensagem para obter ajuda de outros usuários remotamente.
No meu caso, como você pode ver abaixo, temos alguns problemas relacionados ao firmware da minha GPU AMD Topaz XT [Radeon R7 M260/M265].

[    5.120310] amdgpu 0000:04:00.0: Direct firmware load for amdgpu/topaz_mc.bin failed with error -2
[    5.120341] [drm:gmc_v7_0_sw_init [amdgpu]] *ERROR* Failed to load mc firmware!
[    5.120358] [drm:amdgpu_device_init [amdgpu]] *ERROR* sw_init of IP block <gmc_v7_0> failed -2
[    5.120361] amdgpu 0000:04:00.0: Fatal error during GPU init
[    5.120542] amdgpu: probe of 0000:04:00.0 failed with error -2
[ 3460.081234] mce: [Hardware Error]: Machine check events logged
[ 3460.081240] mce: [Hardware Error]: Machine check events logged

Se você usar apenas o comando dmesg, sem parâmetro ou opção alguma, ele irá exibir todas as mensagens do kernel ring buffer.
Por isto, é necessário usar o grep e/ou alguma outra opção, para poder fazer uma investigação mais precisa sobre possíveis problemas que estejam em andamento no seu sistema.
A sua investigação pode continuar, no seu mecanismo de busca favorito, na busca por explicações para as mensagens de erro.

Exemplos de uso do dmesg

Veja alguns exemplos de uso do dmesg que podem ajudar a obter informações sobre o seu hardware ou sobre o sistema operacional.
Use o dmesg para obter a versão do kernel em uso:

dmesg | grep -i "command line"
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.7.0-1-amd64 root=UUID=1bde5861-68d5-4f8b-b759-2def64a9e8dc ro quiet
[    0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-4.7.0-1-amd64 root=UUID=1bde5861-68d5-4f8b-b759-2def64a9e8dc ro quiet

Como obter informações sobre a arquitetura (32 ou 64 bits) detectada:

dmesg | grep -i "architedmesg | grep -i "architect"

Note que este comando ajuda, inclusive, a detectar a presença do systemd.

[    3.443553] systemd[1]: Detected architecture x86-64.dmesg | grep -i "architect"

Com o uso da opção ‘–userspace’, o utilitário permite ver as ocorrências do kernel, desde o momento em que o userspace ou modo usuário foi carregado.

dmesg --userspace 
[    3.443437] systemd[1]: systemd 231 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN)
[    3.443553] systemd[1]: Detected architecture x86-64.
[    3.444484] systemd[1]: Set hostname to <inspiration>.
[    3.677904] systemd[1]: Created slice User and Session Slice.
[    3.677973] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
[    3.677982] systemd[1]: Reached target Encrypted Volumes.
[    3.678038] systemd[1]: Listening on Journal Audit Socket.
[    3.678046] systemd[1]: Reached target User and Group Name Lookups.
[    3.678070] systemd[1]: Listening on /dev/initctl Compatibility Named Pipe.
[    3.678091] systemd[1]: Listening on Journal Socket (/dev/log).
[    3.678108] systemd[1]: Listening on udev Kernel Socket.
[    3.678133] systemd[1]: Started Forward Password Requests to Wall Directory Watch.
[    3.678149] systemd[1]: Listening on Syslog Socket.
[    3.678168] systemd[1]: Listening on udev Control Socket.
[    3.678177] systemd[1]: Reached target Remote File Systems.
[    3.678251] systemd[1]: Created slice System Slice.
[    3.678262] systemd[1]: Reached target Slices.
[    3.678333] systemd[1]: Created slice system-getty.slice.
[    3.678476] systemd[1]: Set up automount Arbitrary Executable File Formats File System Automount Point.
[    3.678503] systemd[1]: Listening on Journal Socket.
[    3.690010] systemd[1]: Mounting Debug File System...
[    3.690418] systemd[1]: Mounting Huge Pages File System...
[    3.690837] systemd[1]: Mounting POSIX Message Queue File System...
[    3.691373] systemd[1]: Starting Journal Service...
[    3.758083] systemd[1]: Starting Set the console keyboard layout...
[    3.758665] systemd[1]: Starting Create list of required static device nodes for the current kernel...
[    3.759199] systemd[1]: Starting Remount Root and Kernel File Systems...
[    3.759877] systemd[1]: Starting Load Kernel Modules...
[    3.822693] systemd[1]: Mounted Debug File System.
[    3.822724] systemd[1]: Mounted POSIX Message Queue File System.
[    3.822736] systemd[1]: Mounted Huge Pages File System.
[    3.822796] systemd[1]: Started Journal Service.
[    3.913397] systemd-journald[1082]: Received request to flush runtime journal from PID 1
[    6.721371] systemd[1]: apt-daily.timer: Adding 7h 26min 30.367128s random time.
[   17.134471] systemd[1]: apt-daily.timer: Adding 42min 23.553328s random time.
[   21.124814] systemd[1]: apt-daily.timer: Adding 51min 47.360901s random time

Para investigar erros e avisos do sistema, use a opção ‘–level’.
Use ‘–level=err’, para ver apenas mensagens de erro emitidas pelo kernel:

dmesg --level=err

Na sua tela, o seguinte resultado, deve ser exibido em cores predominantemente vermelhas:

[    4.600707] iwlwifi 0000:03:00.0: Unsupported splx structure
[    5.120309] amdgpu 0000:04:00.0: firmware: failed to load amdgpu/topaz_mc.bin (-2)
[    5.120311] cik_mc: Failed to load firmware "amdgpu/topaz_mc.bin"
[    5.120341] [drm:gmc_v7_0_sw_init [amdgpu]] *ERROR* Failed to load mc firmware!
[    5.120358] [drm:amdgpu_device_init [amdgpu]] *ERROR* sw_init of IP block <gmc_v7_0> failed -2
[    5.120360] amdgpu 0000:04:00.0: amdgpu_init failed
[    5.120361] amdgpu 0000:04:00.0: Fatal error during GPU init
[    5.120363] [TTM] Memory type 2 has not been initialized

Veja uma imagem do meu terminal, após executar o comando acima:
dmesg kernel errors
Para ver apenas as mensagens de aviso (warnings), use o comando assim:

dmesg --level=warn

Neste caso, o resultado pode ser bem mais extenso.
Você pode combinar os 2 parâmetros, separando-os por vírgulas:

dmesg --level=err,warn

Mensagens de nível crítico podem ser exibidas com o parâmetro ‘crit’:

dmesg --human --level=crit
[out 1 09:56] CPU0: Core temperature above threshold, cpu clock throttled (total events = 1)
[  +0,000001] CPU2: Core temperature above threshold, cpu clock throttled (total events = 1)
[  +0,000001] CPU3: Package temperature above threshold, cpu clock throttled (total events = 1)
[  +0,000002] CPU1: Package temperature above threshold, cpu clock throttled (total events = 1)
[  +0,000002] CPU2: Package temperature above threshold, cpu clock throttled (total events = 1)
[  +0,000006] CPU0: Package temperature above threshold, cpu clock throttled (total events = 1)

Veja todos os níveis de mensagens que você pode usar com a opção ‘–level’:

Parâmetro Descrição
emerg emergengy ou emergência — sistema está inutilizável
alert ação deve ser tomada imediatamente
crit condições críticas
err condições de erro
warn condições de aviso
notice condição normal, mas significativa
info informativo
debug mensagens de nível de depuração

No Linux, estas 2 formas de uso são válidas:
dmesg --level=err
ou
dmesg --level err
Use o que achar melhor.
Você pode restringir a saída a recursos específicos do sistema, com a opção ‘–facility’.
Para obter resultados unicamente sobre os serviços ou daemons em execução no sistema, use-o da seguinte forma:

dmesg --facility daemon 
[    3.443437] systemd[1]: systemd 231 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN)
[    3.443553] systemd[1]: Detected architecture x86-64.
[    3.444484] systemd[1]: Set hostname to <inspiration>.
[    3.677904] systemd[1]: Created slice User and Session Slice.
[    3.677973] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
[    3.677982] systemd[1]: Reached target Encrypted Volumes.

...

[    3.822693] systemd[1]: Mounted Debug File System.
[    3.822724] systemd[1]: Mounted POSIX Message Queue File System.
[    3.822736] systemd[1]: Mounted Huge Pages File System.
[    3.822796] systemd[1]: Started Journal Service.
[    6.721371] systemd[1]: apt-daily.timer: Adding 7h 26min 30.367128s random time.
[   17.134471] systemd[1]: apt-daily.timer: Adding 42min 23.553328s random time.
[   21.124814] systemd[1]: apt-daily.timer: Adding 51min 47.360901s random time.

Se você está com o computador ligado há muito tempo, o dmesg pode ter uma quantidade excessiva de informações para exibir. Muitas delas, podem nem fazer mais sentido. Para limpar o buffer de mensagens do dmesg, use a opção ‘–clear’ (c/privilégios administrativos):

dmesg --clear

Publicado por

Elias Praciano

Autor de tecnologia (livre, de preferência), apaixonado por programação e astronomia.
Fã de séries, como “Rick and Morty” e “BoJack Horseman”.
Me siga no Twitter e vamos trocar ideias!

One thought on “Use o dmesg para entender o que está funcionando mal no seu computador”

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *