Estou enfrentando um problema estranho journald
em um sistema Linux embarcado personalizado criado com Yocto.
Em um sistema recém-preparado e inicializado, o diário funciona bem:
- usando
--list-boots
mostra apenas uma (0) entrada journalctl -n 5 -b
mostra os últimos 5 logs
Entretanto, após emitir reboot
e efetuar login novamente, a inicialização atual se torna de alguma forma invisível:
--list-boots
ainda mostra apenas uma entradajournalctl -b
resultados em-- No entries --
- inspecionar
system.journal
o arquivo comjournalctl --file
revela que as últimas entradas que ele contém são de desligamentos anteriores (ou seja, nada após a reinicialização), os mesmos logs são mostrados ao chamar apenasjournalctl
sem-b
Tudo acima é corrigido após a chamada --rotate
- novo arquivo é criado em journal/
dir, -b
começa a mostrar logs para inicialização atual, listar as inicializações mostra mais uma entrada, conforme o esperado. Parece-me que o system.journal
arquivo fica inacessível para journald
escrita após a reinicialização, e a rotação de alguma forma corrige isso.
Curiosamente, isso só acontece com reboot
o comando (reinicialização "soft"). Desligar e ligar novamente a energia do dispositivo (com ou sem chamada poweroff
primeiro, e mesmo usando reboot
o corte de energia logo após o sistema iniciar a inicialização novamente), após o sistema ser inicializado novamente, journald
está funcionando conforme o esperado e a nova inicialização é reconhecida corretamente.
Algumas informações adicionais:
- Os logs são armazenados em uma partição separada no cartão SD, que é montada com
fstab
e para a qual/var/log
há um link simbólico:
lrwxrwxrwx 1 root root 6 Mar 9 2018 /var/log -> /log
- A desmontagem da partição em questão falha durante a sequência de reinicialização/desligamento:
[FAILED] Failed unmounting /log
(acho que isso pode ser crucial para resolver o problema, mas não tenho certeza de como) - A versão do Yocto é
scarthgap
systemd255.4
- O sistema está sendo executado inteiramente no cartão SD, partição raiz no RW montado e nenhum initramfs é usado
Eu ficaria grato por sugestões sobre como resolver ou depurar melhor isso e, adicionalmente (mesmo que não relacionadas ao problema principal), sobre como resolver a falha de desmontagem da partição de log mencionada (talvez haja uma maneira de atrasar a desmontagem até que ela journald
tenha parado?).
Obrigado
Responderei minha própria pergunta:
A única correção necessária foi anexar o ponto de montagem do volume de log no
RequiresMountsFor
arquivosystemd-journal-flush
de unidade do serviço:No Yocto, isso exigiu
systemd
uma receita de patch para fazer uma alteração emunits/systemd-journal-flush.service
.Após essa alteração, a nova inicialização será reconhecida corretamente todas as vezes, e não haverá mais falhas de desmontagem durante o desligamento.