Como determinar exatamente por que o Systemd entra no modo de emergência

10

Meu computador desktop executando o Debian Jessie começou a cair em um shell de modo de emergência a cada inicialização. A tela diz para usar journalctl -xbpara encontrar o motivo e systemctl defaultpara continuar a inicialização. Quando executo systemctl default, o sistema continua inicializando e, após algumas semanas de uso do sistema, não há nada aparentemente errado.

Olhando através journalctl -xb, nada se destaca como sendo o motivo de cair para uma concha de emergência. Existe uma maneira fácil de determinar exatamente o motivo pelo qual decidiu entrar no modo de emergência? Existem outras opções de sinalizadores ou de inicialização que tornarão óbvio onde está o problema?

jordanm
fonte
2
Ele deve estar visível no diário, mas com as informações limitadas fornecidas, não há como orientá-lo. Você tem uma cópia de journalctl -xb quando aconteceu?
Julie Pelletier
3
Bota em detalhado modo de registo systemd.log_level=debug systemd.log_target=kmsg log_buf_len=1Mpara o detalhe nível forense ...
jasonwryan
2
Os logs existentes já devem fornecer o motivo. Há tantas razões que é muito difícil adivinhar.
Giacomo Catenazzi 28/11
1
Eu tenho o mesmo problema em uma instância do Ubuntu 16.04. Instalamos, utilizamos e reparamos muitos sistemas Linux nos últimos 20 anos. Nada de especial na tela e desta vez nada se destaca nos logs. A tela diz que Ctrl-D continua a inicialização, mas isso só leva de volta ao mesmo prompt depois de um momento. Sem uma pista. Frustrante, não é?
Stéphane Gourichon
Você já tentou todas as etapas da seção "Diagnosticando Problemas de Inicialização" em Depurando systemd ?
Siosm

Respostas:

6

A falha deve ter mostrado um vermelho [ FAIL ]no console (em vez de [ OK ]), com a descrição da unidade ao lado. Normalmente, as primeiras falhas são mais importantes. Use shift + pageup no console para rolar para cima e exibir as últimas telas de saída. Isso pode não funcionar se houver muita saída.

Isso funciona mesmo se você normalmente não vê [ OK ]mensagens, por exemplo, devido à quietlinha de comando do kernel conforme usada pelo Debian. Na primeira falha, o systemd muda para o modo detalhado.

Caso contrário, você pode usar systemctl. Sem opções, ele mostra uma lista enorme de unidades conhecidas com falhas destacadas em vermelho. Para mostrar apenas os que falharam, use systemctl --state=failedou systemctl --failed.


Se você pesquisar os arquivos da unidade, existem apenas algumas maneiras pelas quais a inicialização volta emergency.target. Geralmente é quando uma .mountunidade de um sistema de arquivos local falha, causando local-fs.targetfalha. Ou quando o initramfs falhar ao montar o sistema de arquivos raiz, se o initramfs usar systemd.

local-fs.targettem OnFailure=emergency.target. E ocorre uma falha porque as unidades dos sistemas de arquivos locais são automaticamente adicionadas à lista Requer local-fs.target (a menos que tenham DefaultDependencies=no).

$ systemctl show --property Requires local-fs.target
Requires=-.mount home.mount boot.mount boot-efi.mount
sourcejedi
fonte
2

De vez em quando eu corro para um prompt de "modo de manutenção" e também preciso rolar o diário por erros. Como o journalctl usa menos como pager, você poderá aplicar menos atalhos à sua pesquisa.

Normalmente, eu confiava na função de pesquisa (/) e procurava algo equivalente a "erro", "aviso" ou "falha". E certifique-se de -i para forçar a pesquisa sem distinção entre maiúsculas e minúsculas.

Portanto, minhas teclas tendem a se parecer com:

-i (case insensitive)
g (move to start)
/error
nnnn (skip through results)
g (move to start)
/fail
nnnn (skip through results)
g (move to start)
/warn
nnnn (skip through results)

Tecnicamente, não é uma pesquisa exaustiva ou exata do problema exato, mas nunca perdi um problema de inicialização dessa maneira.

Alguns atalhos de teclado menos relacionados abaixo:

http://www.thegeekstuff.com/2010/02/unix-less-command-10-tips-for-effective-navigation/

madumlao
fonte
Eu acredito que também deve ser possível folhear rapidamente e procurar as mensagens em vermelho (LOG_ERR e acima). systemdregistrará mensagens vermelhas para falhas ao iniciar uma unidade de serviço ou, mais importante, para montar um sistema de arquivos.
sourcejedi