Como visualizar todas as mensagens de inicialização no Linux após a inicialização?

6

Questões relevantes são:

Onde o Linux coloca as mensagens de boot?

Nome do arquivo de log no qual o processo de inicialização está registrado

No entanto, eles não respondem a essa pergunta. Esta questão está relacionada a como all as mensagens de inicialização podem ser visualizadas.

Isto é para o Gentoo, OpenRC, kernels modernos, 4.9.6 se você quiser ser específico. Uma solução genérica que funcione para todas as distribuições seria, no entanto, preferível.

O problema é que às vezes um erro ou aviso rolará tão rapidamente que não poderá ser visto. Nem sempre é possível simplesmente rolar para cima por dois motivos (mesmo com --noclear no inittab): ao alternar para o framebuffer rolando para cima até o ponto antes que o switch mude de lugar não seja mais possível, e segundo, que após o X começar, alternar para o console e tentar rolar para cima não permite a rolagem até que um novo texto seja adicionado ao buffer. Às vezes, certas mensagens simplesmente não são encontradas no dmesg nem no / var / log / messages.

Como posso ver todas as mensagens?

Eu vejo alguém aqui link sugerindo que pressionar a trava de rolagem pode pausá-lo. No entanto, esta é uma solução não muito elegante na melhor das hipóteses - algumas mensagens irão rolar muito rapidamente, os sistemas podem repentinamente produzir um monte de texto nos dias de hoje ao inicializar.

Isso é o que eu idealmente quero:

  • Um dmesg | menos tipo de solução, se possível, ou alguma outra maneira de percorrer o processo de inicialização.
  • Uma maneira de garantir que tudo que é impresso na tela também seja registrado.

Existe uma maneira simples de alcançar um desses?

Eu sei de uma solução:

CONFIG_BOOT_PRINTK_DELAY: Atrasa cada mensagem printk de inicialização por N milissegundos

Estranhamente eu não consigo nem mesmo selecionar BOOT_PRINTK_DELAY no meu menuconfig, eu posso encontrá-lo quando estou procurando por ele, mas sob Kernel hacking - > opções printk e dmesg - & gt ;, eu só tenho "Mostrar informações de tempo em impressões" e "Nível de registro de mensagens padrão". Onde está a opção de atraso do printk? Preciso habilitar algo mais primeiro para torná-lo visível? O que? Seria bom ter isso como parte de uma resposta, se alguém souber.

Mas, de qualquer forma, isso requer uma recompilação do kernel que torna isso uma invasão feia e invasiva para uma tarefa aparentemente trivial. Uma forma adequada de fazer isso seria muito bem-vinda.

    
por AttributedTensorField 14.03.2017 / 01:33

3 respostas

5

Portanto, seu console tem dois tipos de mensagens:

  • gerado pelo kernel (via printk);
  • gerado pelo userspace (geralmente seu sistema init).

As mensagens do kernel são sempre armazenadas no buffer kmsg, visíveis via dmesg . Eles também são frequentemente copiados para o seu syslog. (Isso também se aplica a mensagens do espaço do usuário gravadas em /dev/kmsg , mas essas são bastante raras).

Enquanto isso, quando userspace escreve seu texto de status de inicialização sofisticado em /dev/console ou /dev/tty1 , ele não é armazenado em lugar algum. Apenas vai para a tela e é isso. Então eu acho que qualquer qualquer solução - exceto a sugestão do console serial de Rowan - acabará sendo muito específico da distribuição (devido a cada sistema de inicialização executar logging diferentemente) ou um "hack invasivo" que envolve strace ou hackear o kernel ou algo assim.

No melhor dos casos, o seu sistema init irá si mesmo registrar todos os eventos importantes no syslog (/ var / log / messages ou algo parecido). Por exemplo:

systemd[1]: Starting BIRD routing daemon...
bird[478296]: /etc/bird.conf, line 2: syntax error
systemd[1]: bird.service: Control process exited, code=exited status=1
systemd[1]: Failed to start BIRD routing daemon.

(systemd e upstart também registram os serviços stdout / stderr também; muitos outros sistemas init apenas o redirecionam para o console ou em nenhum lugar.)

    
por 14.03.2017 / 09:05
1

A resposta do Grawity deve ser melhor descrita do que eu seria capaz de realizar para esse estágio na inicialização.

No método de redirecionamento físico, seu BIOS deve suportá-lo. As placas orientadas para o servidor normalmente funcionam. Os sistemas Intel, IBM e SuperMicro geralmente possuem uma opção de Redirecionamento do Console sob o cabeçalho principal do BIOS. Não pode ser usado se sua placa-mãe não tiver uma porta serial física, por exemplo, apenas USB. Talvez seja necessário conectar uma porta física aos pinos da placa-mãe, se houver.

O redirecionamento do console pode causar estranheza quando você chega ao ponto em que o sistema operacional está tentando usar a porta serial para outra coisa. Eu diria que é usado principalmente para depuração em um caso específico, em vez de uso constante.

Para usar, você precisaria definir configurações de porta correspondentes em sua porta COM do receptor que poderia ser baseada em USB, então você precisa vincular os dois dispositivos com um cabo de modem nulo que troca os pinos de transmissão e recepção entre os dispositivos. / p>

O dispositivo receptor precisa estar totalmente ligado e aguardando a comunicação durante a inicialização do sistema de origem. O sistema receptor receberá toda a saída baseada em texto.

Se durante a inicialização seu sistema operacional começar a exibir texto por meio de uma construção grapical e não como texto, o sistema de recebimento ficará com rabiscos.

    
por 14.03.2017 / 15:03
1

Uma sugestão é fazer com que outro laptop filme a tela de inicialização com alta resolução e taxas de quadros e reproduza lentamente o resultado ( MOV-MP4-AVI ) - talvez não seja a melhor solução, mas simplesmente implantar e sua para depuração de qualquer maneira certo? Apenas uma ideia ...

    
por 01.10.2017 / 02:10