Cómo determinar exactamente por qué Systemd entra en modo de emergencia

10

Mi computadora de escritorio con Debian Jessie comenzó a caer en un shell de modo de emergencia en cada arranque. La pantalla dice usar journalctl -xbpara encontrar la razón y usar systemctl defaultpara continuar el arranque. Cuando ejecuto systemctl default, el sistema continúa arrancando, y después de un par de semanas de usar el sistema, aparentemente no hay nada malo.

Mirando a través journalctl -xb, nada se destaca como la razón para caer a un proyectil de emergencia. ¿Hay una manera fácil de determinar exactamente la razón por la que decidió pasar al modo de emergencia? ¿Hay otras banderas u opciones de arranque que harán obvio dónde está el problema?

jordanm
fuente
2
Debe estar visible en el diario, pero con la información limitada que proporciona, no hay forma de guiarlo. ¿Tienes una copia de journalctl -xb cuándo sucedió?
Julie Pelletier
3
Arranque en modo de registro detallado systemd.log_level=debug systemd.log_target=kmsg log_buf_len=1Mpara detalles de nivel forense ...
jasonwryan
2
Los registros existentes ya deberían darle la razón. Hay tantas razones que es muy difícil adivinar.
Giacomo Catenazzi
1
Tengo el mismo problema en una instancia de Ubuntu 16.04. He estado instalando, usando, reparando muchos sistemas Linux durante los últimos 20 años. Nada especial en la pantalla y esta vez nada destaca en los registros. La pantalla dice Ctrl-D para continuar el arranque, pero eso solo lleva de vuelta al mismo mensaje después de un momento. Sin una pista. Frustrante, ¿no es así?
Stéphane Gourichon
¿Has probado todos los pasos de la sección "Diagnóstico de problemas de arranque" en Depuración de systemd ?
Siosm

Respuestas:

6

La falla debería haber mostrado un rojo [ FAIL ]en la consola (en lugar de [ OK ]), con la descripción de la unidad al lado. Por lo general, las primeras fallas son las más importantes. Use shift + pageup en la consola para desplazarse hacia arriba y ver las últimas pantallas llenas de resultados. Esto podría no funcionar si hay demasiada salida.

Esto funciona incluso si normalmente no ve [ OK ]mensajes, por ejemplo, debido a quietla línea de comando del núcleo que usa Debian. En la primera falla, systemd cambia al modo detallado.

De lo contrario, puede usar systemctl. Sin ninguna opción, muestra una lista masiva de unidades conocidas con fallas resaltadas en rojo. Para mostrar solo los fallidos, use systemctl --state=failedo systemctl --failed.


Si busca a través de los archivos de la unidad, solo hay unas pocas formas de recurrir al arranque emergency.target. Por lo general, ocurre cuando .mountfalla una unidad para un sistema de archivos local, lo local-fs.targetque hace que falle. O cuando su initramfs no puede montar el sistema de archivos raíz, si su initramfs usa systemd.

local-fs.targettiene OnFailure=emergency.target. Y falla porque las unidades para los sistemas de archivos locales se agregan automáticamente a la lista Requiere de local-fs.target (a menos que lo hayan hecho DefaultDependencies=no).

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

De vez en cuando me encuentro con un mensaje de "modo de mantenimiento", y también tengo que desplazarme a través de journald en busca de errores. Dado que journalctl usa menos como buscapersonas, debería poder aplicar cualquier atajo menos a su búsqueda.

Normalmente, confiaría en la función de búsqueda (/) y buscaría cualquier cosa equivalente a "error", "advertencia" o "error". Y asegúrese de -i para forzar la búsqueda insensible a mayúsculas y minúsculas.

Así que mis pulsaciones de teclas tenderían a verse así:

-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)

Técnicamente no es una búsqueda exhaustiva o exacta del problema exacto, pero nunca me he perdido un problema de arranque de esta manera.

Algunos atajos de teclado menos relacionados a continuación:

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

madumlao
fuente
Creo que también debería ser posible navegar rápidamente y buscar los mensajes rojos (LOG_ERR y superiores). systemdregistrará mensajes rojos por fallas al iniciar una unidad de servicio, o lo más importante, falla al montar un sistema de archivos.
sourcejedi