启动与虚拟机故障

排查 Azure 中的 Linux 内核恐慌问题 - Virtual Machines

· 52CE 我爱测

适用于:✔️ Linux VM 总结 本文讨论可能导致内核崩溃的多个条件,并提供故障排除指南。 一般情况下,内核崩溃是内核无法正确加载的情况,因此系统无法启动。 当内核遇到无法处理的情况时,会出现另一种内核恐慌,并通过停止来保护自身。 先决条件 确保在 Linux VM 中启用串行控制台(serial-console-linux) 并正常运行。 如何识别内核恐慌? 使用 Azure 门户在启动诊断边栏选项卡、串行控制台边栏选项卡或 AZ CLI(/zh-c

适用于:✔️ Linux VM

总结

本文讨论可能导致内核崩溃的多个条件,并提供故障排除指南。

一般情况下,内核崩溃是内核无法正确加载的情况,因此系统无法启动。 当内核遇到无法处理的情况时,会出现另一种内核恐慌,并通过停止来保护自身。

先决条件

确保在 Linux VM 中启用串行控制台 并正常运行。

如何识别内核恐慌?

使用 Azure 门户在启动诊断边栏选项卡、串行控制台边栏选项卡或 AZ CLI 中查看 VM 的串行控制台日志输出,以标识特定的内核恐慌字符串。

内核恐慌类似于下面的输出,将在串行控制台日志的末尾显示:

Probing EDD (edd=off to disable)... ok
Memory KASLR using RDRAND RDTSC...
[  300.206297] Kernel panic - xxxxxxxx
[  300.207216] CPU: 1 PID: 1 Comm: swapper/0 Tainted: G               ------------ T 3.xxx.x86_64 #1

一些最常见的内核恐慌事件:

恐慌消息 原因
糟糕: 0000 [#1] SMP “ (查看日志以了解详细信息) 由于取消引用错误的地址,系统崩溃。
SysRq:触发故障转储 核心转储是通过 sysrq-c 发起的,或通过将 c 回显到 /proc/sysrq-trigger 来启动。
内核 BUG 位于 <pathname/filename>:<line number>! 此格式是失败的 BUG 检查的标准(这与 ASSERT 类似,但逻辑被反转)。 文件名和行号将指示哪个 BUG 检查失败。
内核恐慌 - 未同步:软锁定:任务挂起 软锁定检测器发现了一颗 CPU,该 CPU 在软锁定阈值内未计划看门狗任务。
内核崩溃 - 未进行同步:看门狗检测到 CPU 0 上的硬锁定 硬锁定检测器发现了一个 CPU,该 CPU 在硬锁定阈值内未收到任何 hrtimer 中断。
内核恐慌 - 未同步:挂起任务:阻塞的任务 挂起的任务监视器检测到至少有一个任务处于不可中断状态,超过阻止的任务超时值。
内核恐慌 - 未同步:内存不足。 已选择“panic_on_oom” 系统的内存和交换空间已耗尽,被迫开始杀死进程以释放内存空间(这不是默认行为)。
内核崩溃 - 未同步:内存不足,没有可终止的进程... 系统内存和交换区已耗尽,系统一直在杀死进程以释放内存,但已没有更多进程可供杀死。
内核崩溃 - 未能同步:发生 NMI,请参阅集成管理日志以了解详细信息。 监视器已截获 NMI(不可屏蔽的中断)。
内核恐慌 - 未同步:NMI IOCK 错误:未继续 系统从硬件收到了一次 IO 检查 NMI(而不是内存奇偶校验错误),且已设置 kernel.panic_on_io_nmi(不是默认值)。
内核恐慌 - 未同步:NMI:停止 系统收到 NMI(硬件或内存奇偶校验错误),并且已设置kernel.panic_on_unrecovered_nmi(而不是默认值)。
内核恐慌 - 未同步:nmi 监视器 系统收到 NMI,并且已设置kernel.panic_on_timeout或kernel.panic_on_oops(而不是默认值)。
内核恐慌 - 未同步:严重计算机检查 已因致命状况引发机器检查异常事件。
内核恐慌 - 未同步:尝试终止 init! init 进程是启动的第一个进程,不应退出。
内核恐慌 - 未同步:VFS:无法在未知块上装载根 fs(0,0) 假设内核将使用 initramfs 来挂载 rootfs。 当内核没有 initramfs 时,会发生此错误。

场景 1:启动时发生内核崩溃

启动时出现内核崩溃会阻止 VM 完成操作系统启动过程。 每次启动虚拟机时都会发生这种情况,并且不允许登录。

此类事件通常相关,但包括但不限于:

方案 1 的解决方法

为了处理此类内核恐慌,可以使用以下方法:

方法 1:使用Azure串行控制台

使用Azure串行控制台中断启动过程,并选择以前的内核版本(如果可用)。 这样,VM 就可以再次启动,然后可以使用以下方法之一来修复非启动内核的特定问题:

方法 2:使用救援 VM 脱机修复

如果Azure串行控制台不可用或没有以前的内核可用,则需要救援/修复 VM 才能进行脱机修复。

使用“修复 VM”命令创建附加了目标 VM OS 磁盘副本的修复 VM。 然后使用 chroot 装载修复 VM 中的 OS 文件系统的副本。 之后,请尝试以下方法来修复内核问题:

方案 2:运行时内核恐慌

操作系统启动过程完成后,这种内核恐慌通常会在不可预知的时刻触发,并导致 VM 停止响应,防止其登录。 它通常相关,但包括但不限于:

方案 2 的解决方法

为了处理此类内核恐慌,可以使用以下方法:

  • 查看资源使用情况和整体系统性能。 内核恐慌可能与可能导致 VM 大小调整的资源短缺有关。
  • 如果可能,请安装相应的 Linux 分发存储库中可用的最新更新。 内核崩溃可能与内核或其他软件中的已知错误相关。
  • 内核崩溃可能与最近的内核更改相关,在这种情况下,建议启动以前的内核版本,如方案 1的解决方法中所述。
  • 如果上述选项不适用,则可能需要配置 kdump 并生成核心转储,以便与支持人员共享以进行进一步分析。

更详细的内核崩溃场景

常见的内核恐慌场景及具体故障排除/恢复指南:

文档 场景
在主机节点升级后,基于 3.10 内核的 Azure Linux VM 发生故障 本文讨论运行基于 3.10 的内核的 Azure Linux VM 在Azure主机节点升级后崩溃时发生的问题。
如何从内核相关的启动问题恢复 Azure Linux 虚拟机 本文提供了在应用内核更改后 Linux 虚拟机(VM)无法重启的问题的解决方案。

资料来源与适用范围

资料来源
微软官方 Linux 虚拟机排障文档
适用范围
Azure Linux 虚拟机;按正文发行版、内核及代理版本
内容语言
中文;命令、路径和错误标识保留技术原文
本地收录日期
2026-10-26
授权说明
CC BY 4.0

正文与所需资源由本站本地存储。查看来源及更新记录 ↗

请按适用版本和实际日志确认原因;本站没有对每一种系统或设备逐项执行文中的操作。