如何准确确定 Systemd 进入紧急模式的原因

如何准确确定 Systemd 进入紧急模式的原因

我运行 Debian Jessie 的台式计算机在每次启动时都会进入紧急模式 shell。屏幕提示使用journalctl -xb查找原因,使用systemctl default继续启动。当我执行时systemctl default,系统继续启动,并且在使用系统几周后没有任何明显的错误。

纵观整个过程journalctl -xb,没有什么明显的理由成为陷入紧急困境的原因。有没有简单的方法可以确定确切地它决定进入紧急模式的原因是什么?是否有其他标志或启动选项可以让问题出在哪里?

答案1

故障应该[ FAIL ]在控制台上显示为红色(而不是[ OK ]),并在旁边显示设备的描述。通常,第一次失败是最重要的。在控制台上使用shift+pageup向上滚动并查看过去几屏的输出。如果输出太多,这可能不起作用。

即使您通常看不到[ OK ]消息(例如由于quietDebian 使用的内核命令行),此功能也能正常工作。第一次失败时,systemd 会切换到详细模式。

否则,您可以使用systemctl.如果没有任何选项,它会显示大量已知单元的列表,其中故障以红色突出显示。要仅显示失败的,请使用systemctl --state=failedsystemctl --failed


如果你搜索单元文件,只有很少的方法可以让启动回退到emergency.target.通常是当.mount本地文件系统的某个单元发生故障时,导致local-fs.target失败。或者当您的 initramfs 无法挂载根文件系统时,如果您的 initramfs 使用 systemd。

local-fs.targetOnFailure=emergency.target。它会失败,因为本地文件系统的单元会自动添加到 local-fs.target 的 Requires 列表中(除非它们有DefaultDependencies=no)。

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

答案2

每隔一段时间,我就会遇到“维护模式”提示,并且我还必须滚动日志以查找错误。由于 Journalctl 使用 less 作为分页器,因此您应该能够在搜索中应用任何 less 快捷方式。

通常,我会依靠搜索功能 (/) 并搜索与“错误”、“警告”或“失败”等效的任何内容。并确保 -i 强制不区分大小写的搜索。

所以我的击键往往是这样的:

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

从技术上讲,这并不是对精确问题的详尽或精确搜索,但我从未以这种方式错过启动问题。

下面是一些相关的较少键盘快捷键:

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

答案3

有时journalctl -xb使用“less”作为寻呼机会妨碍快速发现问题。我改为使用:

journalctl -xb | egrep -i '(error|fail|warn)'

还有/var/log/boot.log一个非安静启动序列的副本,很容易看到颜色编码的问题:

more /var/log/boot.log

我使用“更多”而不是“更少”,因为后者的默认行为是转义控制序列,这会将颜色编码更改为(咳咳)无用的泥。

相关内容