Gil*_*il' 63 linux startup systemd crash intel
经过最近的一些更新,我的电脑不再启动!这是我可以确定的:
apt-clone),它工作得很好。它有不同的硬件(也是 amd64,但不同的 CPU、不同的 GPU 等)。splash从linuxGrub的命令行中删除),我会看到许多服务正在启动,然后它会锁定。我可以通过添加init=/bin/sh到linuxGrub的命令行来获得 root shell 。我什至可以通过添加进一步
systemd.unit=basic.target systemd.shell
Run Code Online (Sandbox Code Playgroud)
这将启动许多服务并在 tty9 上运行一个 root shell。
systemctl start multi-user.target从那个 root shell运行,计算机就会锁定。所以大概问题是由这些服务之一触发的。systemctl list-dependencies multi-user.target看看有哪些服务开始了。我手动一一启动了列出的依赖项,一切都开始了。因此,这看起来像是由某些软件触发的硬件错误(因为它发生在一台计算机上而不是另一台计算机上)。但是什么软件?由于电脑死机很厉害,我无法获得任何日志。我什至无法获得任何有用的控制台输出。
有用的调试技术:
linux. 在现代 Ubuntu 上,您会在“Ubuntu 的高级选项”下找到旧内核。对命令行进行所需的更改后,按Ctrl+x启动。您在此处所做的任何更改仅针对此引导,它们不会保存到磁盘。linux命令行上的一些有用选项:
quiet nosplash隐藏几乎所有的启动消息。删除它们以在引导期间在控制台上获取消息,这对于诊断问题是必要的。recovery给你一个几乎没有服务的 root shell。您需要知道 root 密码。“恢复模式”菜单条目使用此。init=/bin/sh为您提供一个根本没有服务的 root shell。要恢复正常启动,请运行exec init. 此时您可以传递 systemd 选项,例如exec init --unit=basic.target启动 init 和一些服务(请注意,这不会以任何方式启动登录,因此您最好在另一个控制台上运行一个 shell)。请注意,根文件系统以只读方式挂载;运行mount -o remount,rw /以能够写入它。systemd.unit=basic.target启动一组非常基本的服务。请注意,这不包括任何登录方式!您可以通过systemctl set-default basic.target在 root 提示符下运行来将其设为默认值。要恢复原始默认目标,请运行systemctl set-default graphical.target(或systemctl set-default multi-user.target对于没有 GUI 的服务器)。systemd.debug-shell在 tty9 上启动一个 root shell。您可以通过systemctl enable debug-shell在 root 提示符下运行来为每次引导启用此功能。解决了问题后,不要忘记禁用它systemctl disable debug-shell。按Alt+F9切换到 tty9。Gil*_*il' 71
事实证明,我的问题是(某些?)Skylake CPU 上最新的 Intel 微码与最近的 Linux 内核之间的一个已知问题,主要由sssd触发。请参阅Ubuntu 错误 #1759920“intel-microcode 3.20180312.0 导致登录屏幕锁定(带有 linux-image-4.13.0-37-generic)”,以及许多其他与相同问题有关的错误,例如Ubuntu 错误 #1746806“sssd 似乎使 AWS c5 和 m5 实例崩溃,导致 100% CPU”和Ubuntu 错误 #1746418“安装 linux-image-4.13.0-32-generic 后启动 Xorg 时系统冻结”。如果出现以下情况,您可能会遇到此错误:
该错误是由于2018 年 1 月发布的Spectre安全问题的缓解措施所致。某些内核代码和某些处理器微代码之间存在不兼容,这会导致在某些情况下锁定。
noibpb参数添加到内核命令行( 1746418/14、1759920/56 )。这应该可以让您正常启动并进行一些修复。noibpb到内核命令行来使其永久化,直到您获得一个固定的内核。我尝试了几件事(请参阅问题)并确定该错误是在到达basic.target和到达之间的某个地方触发的multi-user.target。所以我将默认的 systemd 目标设置为basic.target( systemctl set-default basic.target) 并启用debug-shell服务 ( systemctl enable debug-shell) 以获取 root shell。
我systemctl list-dependencies multi-user.target一一运行并手动启动了列出的依赖项。这并没有触发崩溃。
并非所有服务都由systemd直接管理。有些作为Upstart服务进行管理,有些作为SysVinit 脚本进行管理。下面的 shell 脚本运行所有这些。注意:我只测试过一次,它在设计上崩溃了。
#!/bin/sh
wants=$(systemctl show -p Wants multi-user.target | sed 's/^Wants=//' | tr ' ' '\n' | sort)
log=/var/tmp/multi-user-steps-$(date +%Y%m%d-%H%M%S)
log () {
echo "$* ..." | tee -a "$log"
sync
"$@"
ret=$?
echo "$* -> $ret" | tee -a "$log"
sync
return $ret
}
# systemd services
for service in $wants; do
log systemctl start $service
sleep 2
done
# upstart services
for conf in /etc/init/*.conf; do
service=${conf##*/}; service=${service%.conf}
log service ${service} start
sleep 2
done
# sysvinit services
for service in /etc/rc3.d/S*; do
log ${service} start
sleep 2
done
Run Code Online (Sandbox Code Playgroud)
我的电脑启动后就死机了sssd。从那里,对“sssd linux kernel hang”的网络搜索使我找到了https://bugs.launchpad.net/cloud-images/+bug/1746806以及诊断和解决方案。
| 归档时间: |
|
| 查看次数: |
5455 次 |
| 最近记录: |