☰
虚拟机死循环重启排查与修复全攻略
2026/9/26 4:45:57 网站建设 项目流程

相信每一个玩虚拟机的朋友都经历过那种令人抓狂的时刻:虚拟机一开机,还没进入桌面,就自动重启,反复循环,像中了邪一样。尤其是当你手头有重要工作,或者刚配好一个复杂的开发环境还没来得及快照的时候,那种血压飙升的感觉我太懂了。

虚拟机死循环重启(Boot Loop)这个问题,跟物理机还不一样,既有系统层面的原因,又有虚拟机软件层面的坑。我这些年帮同事、帮网友处理过不下几十起,总结下来其实就几类病根,大部分情况下根本不需要重装系统。今天就把我踩过的坑和常用的修复套路一次性讲清楚,希望能帮你在遇到这个问题时少走弯路,十分钟内把虚拟机“捞”回来。

1. 死循环重启前,先搞明白它到底卡在哪一步

很多人一看到虚拟机重启就慌了,其实第一步不是急着修复,而是观察。死循环重启只是一个现象,背后可能对应完全不同的病因,修法也完全不同。我习惯把重启的“卡点”分成三个阶段,判断清楚了,修复就有方向了。

1.1 第一阶段:开机能到硬件自检或VMware/ VirtualBox的启动画面

这种情况,说明虚拟机的CPU、内存、磁盘控制器这些底层硬件初始化是没问题的,问题大概率出在BIOS/UEFI固件设置、引导记录,或者系统启动初期的驱动上。常见表现是:你看到VMware的LOGO一闪而过,或者看到“Press F2 to enter setup”这类提示,然后还没到Windows加载标志,机器就重启了。这时候我一般优先怀疑固件类型不对、引导记录损坏、或者虚拟磁盘控制器驱动不兼容。

举个例子,我之前接过一个案例,同事把一台物理机用第三方工具直接做成虚拟机,结果一启动就死循环,卡在VMware启动画面。后来我进虚拟机的VMX配置文件一看,原来源物理机用的是UEFI引导,但VMware里创建虚拟机时默认选了BIOS,引导方式不匹配,系统根本找不到启动项,自然就重启。这种情况修起来也很简单,进虚拟机设置里把固件类型从BIOS改成EFI即可,或者反过来,改完重启就正常了。

1.2 第二阶段:能看到Windows/ Linux的加载界面,但到一半就重启

如果是Windows,你会看到蓝色或黑色的Windows LOGO,底下转圈,转着转着突然黑屏重启;如果是Linux,你可能会看到内核启动日志刷到一半,然后突然断电式重启。这类问题的核心通常是三个方面:驱动冲突、系统关键文件损坏、或者磁盘空间被完全占满。

虚拟机里最容易出驱动冲突的就是显卡驱动和VMware Tools。我印象最深的一次是给虚拟机装了某个新版本显卡驱动后,重启直接就死循环,安全模式也进不去,最后是靠虚拟机的“启动时按Shift+重启”硬掰出来的。另外,很多人忽略了磁盘空间问题——虚拟磁盘文件所在物理磁盘满了,虚拟机内部的系统盘也满了,Windows更新的临时文件、休眠文件等把C盘塞得只剩几百MB,系统在启动阶段要写页面文件、要初始化服务,结果写入失败,就触发自动重启保护机制。

1.3 第三阶段:进入了系统桌面,但几秒或几分钟后又重启

这类情况最迷惑人,因为乍一看系统是好的,但很快又开始重启,再次进入循环。我遇到最多的原因是:Windows更新补丁反复失败、某个系统服务崩溃触发自动重启、或者杀毒软件与虚拟化环境冲突。还有一类比较隐蔽的情况——虚拟机挂载的物理磁盘或网络驱动器在系统启动时挂载失败,导致某些服务反复拉起、反复失败。

另外,如果虚拟机是运行在ESXi这类底层虚拟化平台上的,还要考虑CPU过热降频、内存故障导致宿主机主动重启虚拟机这种更底层的因素。当然,在个人电脑上用VMware Workstation的场景里,这种概率低一些,但不能完全排除。

2. 最快的一招:先别急着进系统,把“自动重启”关掉

Windows系统默认在系统崩溃时会自动重启,这个设计在物理机上是为了保证服务器能快速恢复,但在虚拟机的死循环场景里,它恰恰成了“帮凶”——你根本来不及看蓝屏代码是什么原因,机器就重启了,排查无从下手。

所以我的第一个建议是:进入Windows恢复环境(Windows Recovery Environment,WinRE),把自动重启功能关掉。启动虚拟机后,在系统刚出现Windows LOGO时强制关闭虚拟机电源(右键点虚拟机,选Power -> Power Off),连续操作两三次,系统一般会检测到启动失败,自动进入“正在准备自动修复”的界面。在这个界面里,依次点击“高级选项 -> 疑难解答 -> 高级选项 -> 启动设置 -> 重启”,重启后选择“禁用系统失败时自动重新启动”这一项(通常按数字键7)。

关掉自动重启后再开机,你就能看到真正的蓝屏错误代码了。把代码记下来,比如0x0000007B(磁盘控制器不兼容)或0x0000001E(驱动问题),再对症下药,效率直接翻倍。这一步看起来简单,但真的能救回不少虚拟机,因为死人不会说话,蓝屏代码其实就是系统的遗言。

2.1 顺利进入安全模式的标准姿势

如果能关掉自动重启并正常看到蓝屏代码或停止错误,接下来要争取进入安全模式。安全模式是Windows的一个最小化启动环境,只加载最基本的驱动和服务,很多在正常模式下引发死循环的第三方软件、驱动、服务都不会被加载,所以它是修复系统问题的首选环境。

在WinRE界面里,同样通过“疑难解答 -> 高级选项 -> 启动设置 -> 重启”,这次选择“启用安全模式”(数字键4)或“启用带网络的安全模式”(数字键5,如果你需要联网下载工具就选这个)。我建议优先选带网络的版本,因为修复过程中经常需要下载补丁或工具。

进入安全模式后,常见的操作依次是:打开设备管理器,把最近更新过的可疑驱动回滚(右键属性 -> 驱动程序 -> 回退驱动程序);打开“程序和功能”,卸载最近安装的软件;打开命令提示符(管理员),跑一遍系统文件检查命令sfc /scannow;如果Windows更新是罪魁祸首,可以去控制面板的“更新与安全”里查看更新历史,卸载最近的补丁。实测下来,一大半虚拟机死循环都能在这一步收尾。

3. 进不了安全模式?用启动修复和命令行硬修

安全模式进不去也别灰心,还有两条路:一是Windows自带的启动修复,二是用命令行手动修复引导。这两条路我都在实战里用过,尤其是命令行那套,几乎是把系统从“半死不活”状态拉回来的最后手段。

3.1 启动修复:适合引导记录损坏的场景

还是在WinRE界面,选择“高级选项 -> 疑难解答 -> 高级选项 -> 启动修复”。Windows会自动扫描引导记录、系统文件、注册表配置等重要项,并尝试修复。这个过程可能要反复跑几次,我第一次用的时候以为一次就能搞定,结果跑了一遍提示“无法修复你的电脑”,后来重启再跑一遍就过了。所以遇到这个提示别马上放弃,多试一两次,很多时候是修复进度的累积效应。

3.2 命令提示符三件套:bootrec、sfc、DISM

启动修复搞不定,那就打开“高级选项里的命令提示符”,手动操作。我先说核心思路:Windows引导修复三板斧,对应的是主引导记录、启动管理器配置和系统文件完整性,缺一不可。

进入命令提示符后,先输入bootrec /fixmbr修复主引导记录,再输入bootrec /fixboot修复引导扇区,最后输入bootrec /rebuildbcd重建引导配置数据(BCD)。老手习惯直接一次输入三行,每行执行完会提示“操作已成功完成”。如果提示找不到启动设备,你可以先用diskpart命令确认磁盘状态:输入diskpart,然后list disk查看磁盘,再list volume查看卷,确认系统分区和启动分区都还在。

把系统文件完整性检查也放进来:先确认Windows安装在哪个盘,通常C:或D:,然后运行sfc /scannow。如果sfc提示找不到修复源文件,再配合DISM /Online /Cleanup-Image /RestoreHealth来修复系统镜像。注意,在WinRE的命令行里,sfc的/scannow和DISM有时候需要指定Windows目录位置,比如sfc /scannow /offbootdir=C:\ /offwindir=C:\Windows,这个细节很多人不知道,导致命令直接报错。我头一次用的时候也是被这个坑过,后来养成习惯:先bcdedit看下系统分区,再写全参数。

3.3 卸载补丁的隐藏命令

如果死循环原因是最近的Windows更新补丁,且安全模式也进不去,可以在WinRE的命令提示符里用dism /image:C:\ /get-packages查看已安装的补丁列表,然后用dism /image:C:\ /remove-package /packagename:xxx卸载指定补丁。这个方法比进入安全模式卸载更底层,也更直接。我处理Windows Server 2012更新死循环时,就靠这个命令卸掉了一个冲突补丁,系统立刻恢复。

4. 虚拟机专属的“改配置”三板斧,比修系统还快

有时候系统本身没坏,是虚拟机的配置跟系统“不对付”,这时候你在系统里修来修去都是白费功夫。虚拟机的配置改动,操作起来比重装系统快得多,而且很多时候能一招制敌。

4.1 第一板斧:换一个磁盘控制器类型

虚拟机的磁盘控制器类型,在VMware里通常有IDE、SATA、SCSI(LSI Logic)和NVMe几种,在VirtualBox里则是IDE、SATA、SCSI、NVMe。Windows不同版本的驱动支持情况不一样,如果你把虚拟机从一台机器迁移到另一台,或者把镜像文件从模板克隆出来,控制器类型往往会影响系统能否正常找到引导盘。如果进入系统时蓝屏报0x0000007B,大概率就是磁盘控制器驱动不兼容。

操作方法是关机后打开虚拟机设置,找到硬盘所在的控制器接口,换一个类型保存重启。注意:没有把握之前,先备份一份VMX配置文件和VMDK磁盘文件,避免磁盘无法识别后数据丢了。实测下来,Windows 7及之前的系统用IDE兼容性最好,Windows 10以上用SATA或NVMe更稳。

4.2 第二板斧:调整内存、CPU核心数与显存设置

虚拟机的内存设置是死循环里一个经常被忽略的因素。比如你给虚拟机分配了8GB内存,但宿主机物理内存紧张,内存交换剧烈,虚拟机内系统启动时频繁缺页,就可能在某个环节卡住重启。更离谱的是,我之前遇到过一台虚拟机配置了4个CPU核心,但宿主机只有2个物理核心,超量分配导致系统负载异常高,开机就卡死重启。后来把处理器数量降到2,问题直接消失。

还有一种情况是显卡相关:在VMware里如果开启了“加速3D图形”,某些老系统或特定驱动下会导致启动时渲染崩溃重启。遇到死循环时,不妨把3D加速关掉,或者把显存从默认的128MB调到256MB,再试一次。这个操作30秒就能完成,成本极低,建议每次都先试。

4.3 第三板斧:清理快照和锁文件

快照是虚拟机的救命功能,也是死循环的潜在坑。如果你的虚拟机有多层快照,而且其中某一层快照文件损坏(比如异常断电导致),启动时就可能反复失败重启。排查方法是右键点击虚拟机标签,选择“快照 -> 快照管理器”,查看快照文件是否完整;如果确实无法进入系统,可以在关机状态下删除故障快照或恢复到一个更早的快照点。

另外,当你同时打开一个虚拟机多开、或者上一次异常关闭后,虚拟机目录下会残留.lck锁定文件,有时也会导致启动异常。解决办法是关机状态下进到虚拟机所在目录,删除所有的.lck文件夹和.lck文件,再重新开机。我修复过一次同事的虚拟机就是被这个坑搞的,删掉锁文件后一切正常。

5. Linux虚拟机死循环:Ubuntu和CentOS的常见解

标题里提到了Linux虚拟机蓝屏、Ubuntu黑屏进不去桌面这类热词,其实Linux虚拟机死循环重启的修复思路跟Windows有相似之处,但手法不同,单独讲一下。

5.1 Grub引导损坏与Recovery模式

Linux虚拟机最常见的死循环是开机到Grub界面后反复重启,或者卡在引导加载阶段。如果你能看到Grub菜单,直接选“Advanced options for Ubuntu”(高级选项),进入“Recovery mode”(恢复模式),通常就能进入一个带Root Shell的菜单。在这个菜单里选择“fsck”检查并修复文件系统,选“network”启用网络,再选“root”进入命令行界面,手动修复。

常见的排查命令包括:fsck -y /dev/sda1修复根分区;查看/var/log下的启动日志;如果最近装过内核更新导致问题,可以在Grub菜单里选择“上一个内核版本”启动,进入系统后卸载问题内核(apt remove linux-image-xxx或yum remove kernel-xxx)。我在Ubuntu 22.04虚拟机上就遇到过一次,升级内核后死循环,回退到老内核秒进系统,然后再针对性排查新内核的问题。

5.2 虚拟机Ubuntu黑屏但系统存活:别急着重启

有一种情况很迷惑:Ubuntu虚拟机黑屏,但CPU有活动、网络也通,说明系统其实还在运行,只是图形界面或显示驱动崩了。这时候不要反复重启,重启只会让你陷入“黑屏-重启-黑屏”的循环。正确处理是等系统启动稳定后,通过SSH远程连进去,然后用sudo systemctl restart gdm(GNOME桌面环境)或sudo systemctl restart lightdm(Xfce/LightDM)重启显示管理器,图形界面就能回来。如果SSH也连不上,在虚拟机设置里把显示控制器从VMSVGA换成VMWare兼容模式,或者关闭3D加速再开机。我之前处理过一台Ubuntu虚拟机,就是显卡驱动升级后黑屏,改VM设置就好,根本不用重装系统。

5.3 ESP分区挂载修复

如果你把Ubuntu装在UEFI模式下,死循环还可能跟EFI系统分区(ESP)挂载异常有关。可以在Recovery模式的Root Shell里,手动挂载EFI分区后修复Grub。操作路径大致是:mount /dev/sda1 /boot/efi,然后grub-install /dev/sda重建引导,再update-grub更新菜单。每次我给别人讲这个操作的时候都会强调:先确认你的EFI分区路径和根分区路径,别挂错盘符,否则越修越坏。

6. 常见问题快查表,收藏这一张就够了

前面讲了不少场景,我整理了一张速查表,方便你遇到问题时对号入座,也能少走弯路。平时我遇到虚拟机死循环,基本都是按这个思路来排查的。

现象最可能原因优先级最高的处理动作
开机卡在VMware/ VirtualBox画面无限重启固件类型不匹配(BIOS/EFI)、引导记录损坏检查虚拟机设置中的固件类型,尝试切换;用启动修复重建引导
Windows LOGO转圈后重启显卡驱动冲突、VMware Tools异常、系统文件损坏强制关机进入WinRE,关自动重启,争取安全模式回滚驱动、跑sfc
进入桌面几秒后自动重启更新补丁冲突、服务崩溃触发重启安全模式卸载最近更新,检查事件查看器中崩溃的服务
蓝屏0x0000007B后循环重启磁盘控制器驱动不兼容关机后切换虚拟机磁盘控制器类型(IDE/SATA/SCSI)
内存或CPU设置不合理导致重启过载分配触发异常调低虚拟机内存或CPU核心数,检查宿主机内存余量
启动到Grub但反复重启(Linux)内核更新故障、文件系统损坏Recovery模式用上一内核启动,fsck修复,卸载问题内核
Ubuntu黑屏但CPU还在跑显示管理器崩溃、显卡驱动问题SSH进系统重启gdm/lightdm,或调整显示控制器配置
打开虚拟机就闪退或无法连接锁文件残留、快照损坏、VMX配置异常删除目录下.lck文件,检查快照链,核对VMX配置文件

排查顺序我一般建议:先看硬件配置(内存、CPU、控制器、3D加速),再看固件和引导,再看系统和驱动,最后才考虑重装。实际操作中,80%的问题都在前两步就解决了,重装系统是最不得以的下策。

6.1 关于备份和快照的最后几句

写到最后,还是想分享一点个人体会。处理这种死循环问题,最让我心痛的从来不是修复过程多曲折,而是发现用户没有做任何备份。虚拟机的优势就在于它是一个文件集合,你可以随时复制、压缩、打快照,但大多数人都是在灾难发生后才会想起这个优势。我现在每配置好一台重要的虚拟机,第一件事就是给它做一个干净的基础快照,并定期把虚拟磁盘文件备份到一个独立的物理硬盘上。

另外一个小技巧:在修改虚拟机硬件配置之前,先把VMX配置文件复制一份存到别处,因为VMware的虚拟机配置全都在这个文本文件里,有时候手动改一行参数就能解决某些奇葩问题。比如在VMX文件里加一句vmci0.unrestricted = "TRUE"就能解决部分与VMCI驱动相关的启动异常,这种细节文档里很少提,但实测有效。

希望这篇文章能帮你把虚拟机从死循环里救回来。我也建议你在虚拟机恢复后,花十分钟把事件查看器里记录的错误日志翻一遍,弄清楚根因,避免它下次再来找你。踩过坑、填过坑,下次再遇到就真的是老手了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询