debian 陷入断言“*_head == _item”的原因是什么?

debian 陷入断言“*_head == _item”的原因是什么?

每当我尝试启动 Debian 11 时都会卡在以下位置

Welcome to Debian GNU/Linux 11 (bullseye)!

systemd[1]: Set hostname to <arm>.
systemd[1]: Failed to open netlink: Function not implemented
systemd[1]: Failed to allocate device monitor: Function not implemented
systemd[1]: Failed to allocate notification socket: Function not implemented
systemd[1]: Assertion '*_head == _item' failed at src/core/device.c:46, function device_unset_sysfs(). Aborting.
systemd[1]: Caught <ABRT>, dumped core as pid 799.
systemd[1]: Freezing execution.

答案1

系统最初安装为 Debian 11,还是从早期版本的 Debian 升级而来?

事实上,您看到“Welcome to Debian...”消息表明系统正在通过 initramfs 阶段并到达真正的根文件系统,但是从 initramfs 的迷你版过渡systemd到真正的全功能版时,事情很快就会发生。出错。

它看起来确实像是systemd在尝试使用某些内核功能,但返回“功能未实现”错误,然后触发断言

(断言主要是一种开发工具,它们永远不应该成为生产级软件上的主要错误检查机制。如果像断言这样的关键系统组件systemd遇到断言,则意味着开发人员在某些方面出现了错误,而开发人员并不真正认为值得这样做编写错误消息。如果您能找出问题的根本原因,您可能需要为 编写错误报告systemd,描述导致您出现此问题的原因,并建议更好的错误消息。)

这可能是由于升级失败而发生的,系统尝试在新旧库的混合上运行,但通常包依赖性应该使这种情况不可能发生。也许系统在升级过程中在错误的时间崩溃了?

也许您添加了一些与 Debian 11 不兼容的软件包存储库,并且软件包管理系统将系统中的一些正常软件包替换为不兼容存储库中的软件包,导致系统现在无法工作。换句话说,你可能已经制作了 FrankenDebian:不相关、互不兼容的软件包的怪异组合。

第三种可能性是,如果您安装了自定义内核:那么您的简约内核配置似乎是systemd最小,并且一些运行所需的内核功能被完全禁用。

无论原因是什么,事实是该问题会导致systemd(系统上的进程#1)失败,这使得大多数访问系统的方法都不可行。如果您已经安装了自定义内核,但仍然安装了标准内核,请尝试告诉引导加载程序引导标准内核。 (我看到你的主机名是“arm”。如果这意味着你使用的是ARM架构的处理器,我认为你的引导加载程序可能不一定是GRUB,而是其他东西。)

否则,您可以尝试添加一个启动参数init=/bin/bash,为您提供一个以 root 身份运行的单个 shell 会话,作为进程#1:如果这有效,您至少可以获得对系统的一些访问权限(在只读状态下)以收集更多信息信息。在这种状态下,所有正常的用户空间启动进程都不会执行,因此您必须执行以下操作一切手动:包括使根文件系统退出只读模式、根据需要安装任何其他文件系统以及配置任何网络接口(如果需要)。

如果该mount命令有效,您可以执行 amount -o remount,rw /来获得对根文件系统的写访问权限;然后,如果包管理工具正在运行,您可以查看/var/log/dpkg.log最近更新或删除了哪些包,并且有机会撤消最近的包操作,这可能会导致问题。如果网络配置命令此时不起作用,您可能必须在另一台计算机上下载任何必要的包,并将它们通过 USB 记忆棒或其他可移动介质传输到此计算机。

如果最近更换/删除了大量软件包,和/或您发现软件包管理工具不起作用,您可能已经达到了这样的地步:备份任何可挽救的数据文件并重新安装系统会更简单。

相关内容