更新:似乎mountall 挂在例程emit_event() 中,它在/ 重新挂载后调用该例程以发出该效果的事件。在emit_event 内部,它调用ply_boot_client_flush(),然后构造env 数组,调用upstart_emit_event(),然后是dbus_pending_call_block()。它挂在那里。那么有什么想法为什么 dbus_pending_call_block 会无限期挂起?破普利茅斯?总线?暴发户?关于修复或进一步诊断的任何建议?
重启我的 Ubuntu 10.04 LTS,64 位 AMD 机器 100% 挂起。驱动器访问指示灯熄灭,但 alt-sysreq 键起作用。硬件是联想 W700ds 笔记本电脑。现在,我提前道歉,因为我对可用系统的信息非常有限,以及我可以用它做什么(因为它无法启动)。我可以从 10.04 CD 启动 - 像急救盘一样使用它。我可以对我的分区进行 fsck、挂载和读写 - 它们很好。我已经尝试用 mkswap 重新格式化我的交换。我的系统上有 4 个 ext4 分区:sda1 是 /,sda2 是 /usr,sda3 是 /home,第四个分区用于数据存储 /sdb1(是整个磁盘,安装在我创建的挂载点 /hdb) . 还有 /sda4 是交换。现在,我正在从 10 的“救援会话”中打开的浏览器中编写此内容。
我将不胜感激什么我可以做些什么来帮助诊断什么是挂,为什么,我可以做些什么来解决这个问题有什么建议/评论。我已经进行了网络搜索,但没有发现任何新内容(一些 1-1.5 年前的错误报告具有类似的症状,但他们的修复没有奏效)。
我在七月一日左右在新磁盘上安装了 10.04,然后使用 aptitude 将所有内容更新到最新。从那以后我一直在安装很多包(我将在下面附上 dpkg 日志)。由于 sda 为 750GB(/ 20GB,/ usr 80GB),我有足够的空间来安装我“可能有一天会使用”的软件包。我想知道我安装的这些软件包中的一个是否搞砸了我的系统?我安装了内核 2.6.32-32-generic 并重新启动,但此后安装了更多软件包。我尽可能少地重新启动这台机器 - 更喜欢在从一个地方到另一个地方时让它休眠。不过最近,我注意到一些与解除休眠相关的奇怪行为:当系统解除休眠时,它会显示 gnome 屏幕保护程序以及解锁所需的密码 - 好吧,它不会识别我的密码!我不得不按 alt-F1,以 root 身份登录,然后关闭屏幕保护程序。然后一切都会好起来的,或者看起来是这样。还,在解除休眠状态时,我经常会看到一小段时间在屏幕上闪烁五颜六色的垃圾。它会消失,所以我没有试图找出原因。另一个可能相关的一点是,我需要在 10.04 的安装中使用“nomodeset”,当从同一张 CD 调出救援外壳时,如果我只使用 nomodeset,它最终会挂起闪烁的 NumLock LED 或 Caps Lock LED(崩溃?),但如果我也使用“noapic nolapic acpi=off”,那么它就可以了。我已经在我的系统上尝试过这些选项,看看它们是否能解决引导挂起问题——但它们没有。如果我只使用 nomodeset,它最终会挂起闪烁的 NumLock LED 或 Caps Lock LED(崩溃?),但如果我也使用“noapic nolapic acpi=off”,那么它就可以了。我已经在我的系统上尝试过这些选项,看看它们是否能解决引导挂起问题——但它们没有。如果我只使用 nomodeset,它最终会挂起闪烁的 NumLock LED 或 Caps Lock LED(崩溃?),但如果我也使用“noapic nolapic acpi=off”,那么它就可以了。我已经在我的系统上尝试过这些选项,看看它们是否能解决引导挂起问题——但它们没有。
这是一台机器我使用的工作,以及对其他几乎一切,所以得到它再次开机是TOP的优先级。/home 完好无损,这很好。但是我在尝试诊断(更不用说修复)挂起引导的这个原因时,我的智慧已经结束。
我启动系统,它开始运行 /etc/init/mountall.conf 中的 mountall 配置脚本。我看到 mountall 运行 fsck 的输出 - 4 行说:来自 util-linux-ng 2.17.2 的 fsck(每个 ext4 分区一个)。然后还有来自 fsck 的 4 行通知用户发现分区是“干净的”。就是这样 - 一切都停止了。驱动器活动 LED 熄灭。我可以使用 alt-sysreq 键,但到目前为止还没有证明它们有用。我看到了一个错误报告,其中一个用户使用 alt-sysreq-i 来终止进程并将他放入一个 shell 中。对我来说,它确实说它已经杀死了进程(udev 和 udev-bridge 和 plymouth,说它重新生成了 udev 等),但我没有得到任何 shell。
我一直在试图确定到底挂的是什么。为此,我修改了 /etc/init/mountall.conf。我添加了 echo 行,并且在 mountall 的 exec 中添加了 -v(详细)选项。在 mountall 的 exec 之后没有显示回声行,所以这可能意味着 mountall 正在挂起。或者,它可能不会显示最后一个输出 - 在这种情况下 mountall 可能已经退出并且其他东西可能挂起。我注意到 alt-sysreq-i 并没有说 mountall 被杀死了。我试图通过从 fstab 注释掉 sda3 (/home)、swap 和 sdb1 (/hdb) 来缩小系统可能挂起的范围,但它仍然挂起。
我自己有很多事情可以做,但我觉得我在这里不知所措。例如,我想获取 mountall 的源代码,添加打印的标志,重新编译并将其粘贴在我的系统上 - 缩小 A) 如果 mountall 实际挂起,以及 B) 它挂在什么上面。但是,我无法将我的机器引导到要在其中进行编译的 shell - 并且救援磁盘环境只有 2.6.32-28-generic #55 - 所以它与我的系统不匹配。我想删除或重新安装软件包,但同样,我无法启动我的机器并执行此操作。
(我的 dpkg 日志文件有几 MB,所以我会在下面的对话框中附加它)
谢谢,格雷格
Denwerko:我没有对我的机器做任何应该产生这种结果的事情。它在 Ubuntu 9.10 下非常稳定 - 从来没有发生过这样的事情。所有对源代码的修改、重新编译——都是用户空间代码。我根本没有对操作系统进行过修改。我也没有在标准渠道之外安装任何操作系统空间代码(aptitude/synaptic 包管理器,通过这些工具获得的 deb 包)。格雷格昨天
但是,我已经获得了 mountall 2.15.3 的源代码,并在安装 5 次后(libnih-dev、libnihdbus-dev、lindbus-1-dev、linudev-dev、libplymouth-dev)在救援环境中编译它。我通过 nih_info() 调用在代码中添加了调试打印,并且我已经使执行 fsck 阻塞而不是非阻塞的生成。我正在研究 mountall 在某个地方崩溃的理论(或 nih、dbus 或 plymouth...)。我似乎没有在每次运行的代码中将输出输出到同一位置,但在 Mounted() 例程中将 /dev/sda1 重新挂载到 / - 后,它似乎会停止。格雷格昨天
我还按照您的建议通过 chroot 执行了 dpkg -r 软件包,这似乎有效(除了一个想要对 /proc 执行某些操作的卸载脚本)。我卸载了wine,以及它所需的32位兼容包(lib32nss、ia32lib、lib32v4l等)和几个未安装在救援环境中的ibus包(有些ibus包是,我很小心地没有删除它们)-删除等离子小部件 kimpanel-后端-ibus、ibus-qt4、ibus-qt1。这些都没有影响问题,所以我删除了更多我现在不需要的包(wx widget 和 jdk 包等)-没有效果
更新:看来mountall挂在例程emit_event()中,它在重新挂载/后调用以发出事件并达到该效果。在emit_event内部,它调用ply_boot_client_flush(),然后构造env数组,调用upstart_emit_event(),然后调用dbus_pending_call_block()。它就挂在那里。那么有什么想法为什么 dbus_pending_call_block 会无限期挂起吗?普利茅斯破了?总线?暴发户?对于修复或进一步诊断有什么建议吗?
解决方案 所以,看来我已经安装了 cloud-init 和 cloud-utils,因为我想有一天我可能想使用它。威尔,事实证明,cloud-init 与 ureadahead 配置有关,并在 dbus 事件“mounted /”发生时启动,这导致我的系统在发送该 dbus 消息后立即挂起,该消息发生在 / 从 ro 重新挂载到读写。我卸载了 cloud-init 和 cloud-utils,现在一切正常。只是,我很困,已经失去了我生命中的 24 个小时:\