☰
虚拟机开机反复磁盘检查chkdsk?从原理到修复全程指南
2026/10/5 3:03:05 网站建设 项目流程

先说个不太好听的结论:虚拟机里跑Windows系统,开机时卡在或反复弹出“磁盘检查(chkdsk)”这个坑,比物理机出现的概率高得多。很多朋友第一反应是直接拔盘、强制断电、或者疯狂按键盘跳过,结果越修越严重,最后虚拟机直接进不去系统。这篇文章就围绕“虚拟机登录时磁盘检查有误”的完整处理过程,把为什么会出现这种情况、怎么跳过、怎么彻底修复、以及遇到“写保护”等疑难报错时的备用方案,一次性讲透。

我在VMware和VirtualBox里都踩过这个坑。最夸张的一次,一台装了Windows 7的虚拟机开机后每次固定卡在“Press any key to skip disk checking”,我按了任意键,系统却仍然进到修复界面开始检查,最后干脆停在“Checking file system on C:”半小时不动。后来总结下来,虚拟机里的磁盘检查误报或卡死,很大概率不是真的硬盘坏了,而是虚拟磁盘的“脏位”被意外置位、快照回滚造成“脏标记”、或者底层宿主IO卡顿引发的。只要思路对了,大部分情况五到十分钟就能解决。

1. 先搞清楚:为什么虚拟机比物理机更爱“磁盘检查”误报

1.1 虚拟磁盘的“脏位”机制

Windows的NTFS文件系统有一套“脏位(dirty bit)”机制。系统在正常关机前,会把这个脏位清掉;如果出现非正常关机、休眠失败、引导期间崩溃,脏位就会保留下来。下次开机时,Windows的Autochk进程检测到脏位,就会自动进入磁盘检查流程,这就是我们看到的“计划磁盘检查”或“已标记为脏卷”。

物理机出现这个问题,多半是停电、强制断电。而虚拟机里出现脏位残留的场景就太多了:宿主机物理内存不够导致虚拟机磁盘IO长时间卡死、快照回滚造成磁盘状态不连续、虚拟磁盘所在文件夹所在物理磁盘空间不足、甚至VMware自身崩溃或者宿主机强制重启,这些都会让Windows认为“上次没有正常关机”。说白了,虚拟磁盘文件虽然只是一个或几个普通文件,但Windows只认NTFS元数据状态,不会因为是虚拟机就网开一面。

1.2 为什么越按“跳过”越容易卡死

物理机上看到“按任意键跳过磁盘检查”,你按一下,过几秒就进系统了。虚拟机里很多时候你按了也没反应,或者跳过之后几秒钟又弹出来,然后彻底卡死。我遇到过两三种典型情况:

第一种是键盘输入焦点没在虚拟机窗口上。VMware和VirtualBox都要求把鼠标和键盘焦点捕获进虚拟机内部,如果你在虚拟机窗口外按了键盘,虚拟机根本收不到信号。第二种是磁盘IO被占满,比如刚开机时宿主机在做备份、杀毒软件在扫描虚拟磁盘文件,虚拟机的磁盘操作被拖得很慢,Windows虽然在等待输入,但底层IO调度不过来,界面看起来就是按了任意键也没反应。第三种最坑,其实已经是磁盘元数据损坏,按不按都会进入修复流程,卡在“阶段3/阶段5”之类的地方动弹不得。

所以遇到“反复提示磁盘检查”时,别一开始就用旁门左道去强制跳过,先判断是普通脏位还是文件系统已经受损。这两种情况的处理方式完全不同。

2. 能进系统就优先处理的常规三段式做法

2.1 第一步:进Windows后用chkdsk /f清掉脏位

如果运气好,系统还能正常登录,只是每次开机都提示准备磁盘检查,那么最稳妥的方式是在Windows内部主动发起一次“正常模式”的磁盘检查,把脏位清掉。

打开“此电脑”,右键点击系统盘(一般是C盘),选择“属性”,在“工具”标签页里找到“查错”,点击“检查”,然后按提示在弹出的窗口里选择“扫描驱动器”。不过这种做法有个问题,它只是普通的健康检测,不一定能清除脏位。命令行才是关键。用管理员身份打开CMD,执行:

chkdsk C: /f /r

/f参数表示修复磁盘错误,/r参数表示查找坏扇区并恢复可读信息。解释一下为什么这两个参数都比“直接点按钮”有效:chkdsk 的/f会强制对NTFS元数据做一致性检查,并且最终清除脏位标记;/r是基于/f的,还会做扇区级别的可读性恢复。执行过程中如果提示“是否计划下次重启时运行这个检查?”,输入Y,然后正常重启虚拟机。

提示:chkdsk /r不是万能的,它对逻辑坏道和元数据损坏有效,但对物理介质损坏无能为力。不过虚拟机磁盘基本都是宿主机磁盘上的文件,真正的物理坏道很少见,最常见的还是文件系统状态异常。

第一次运行可能比较久。比如一块40GB的虚拟磁盘,在机械硬盘宿主机上可能要跑十到二十分钟,在NVMe固态宿主机上也就两三分钟。跑完再看,如果开机的磁盘检查不见了,说明问题就是脏位未清理,彻底解决。

2.2 第二步:关掉开机自动文件检查选项

如果你已经手动跑完了 chkdsk,但开机还是提示“计划磁盘检查”,那就说明系统里残留了一个计划任务或注册表标记,或者有别的卷(比如隐藏的恢复分区)也处于脏位状态。

先检查自动检查的注册表项。打开注册表编辑器(regedit),定位到:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager

右侧有个BootExecute值,正常情况下它的值应该是autocheck autochk *。如果你看到类似autocheck autochk /p \??\C:这样的内容,说明有人为设置过强制开机检查。可以双击它,把值改回autocheck autochk *,然后重启试试。

如果你是用win+r输入“cmd”再输入命令来手动启动chkdsk,但提示“由于该卷已设置为写保护,因此Windows无法在上面运行磁盘检查”,这种就属于比较麻烦的情况,后面第四章会单独讲。这里先提一个次选方案:尝试在“此电脑”上右键磁盘 ->“属性”->“安全”标签页,看“SYSTEM”是否有“写入”权限。虚拟机里不少精简版系统把该目录权限搞乱了,也会导致chkdsk无法写元数据。如果没有写权限,那就加了管理员也没有用。

2.3 第三步:把开机任务里那个“5秒倒计时”彻底清除

清理完脏位之后,如果开机界面还是会闪一下“按任意键跳过磁盘检查”,别慌,这通常只是残留提示,可以彻底关掉。执行:

chkntfs /d

chkntfs /d的作用是恢复所有卷的默认行为:开机时如果卷是脏的才检查,否则不检查,同时取消所有倒计时。这个命令对Windows 10/11和Windows Server系列都有效。运行完它,再配合注册表BootExecute的默认值,正常情况下开机提示就完全消失了。

不过有一点得说明,chkntfs /d只负责恢复默认检查策略,它不会立刻修复已经存在的文件系统错误,也不该把它当作跳过修复的手段。先做修复,再取消提示,顺序不能反。

3. 卡在“5秒内按任意键跳过磁盘检查”时的破解思路

3.1 为什么按了键还是没有反应

先还原一下经典场景:VMware虚拟机窗口里,开机画面弹出一行英文“Press any key to skip disk checking...”,下面还有个秒数倒计时。你疯狂按键盘,结果它还是在倒计时结束后进入修复。这种情况我在多个版本VMware上都遇到过,最典型的两个原因:

第一个是焦点问题。VMware和VirtualBox默认情况下,鼠标必须在虚拟机窗口内点击过后,键盘输入才会交给虚拟机。如果你没点进去,按多少下都没用。解决办法很简单:先鼠标点一下虚拟机窗口,再按任意键。有些版本还需要在“编辑”->“首选项”->“输入”里把“鼠标键捕获”设置成“当鼠标悬停在窗口内时自动捕获”,避免你再因为忘点而错过。

第二个是磁盘确实处于“无法跳过”的损坏状态。如果磁盘元数据已经严重不一致,Windows的autochk进程会忽略键盘输入,强制跑完检查流程。如果检查流程能正常结束,那问题不大;如果卡在某个阶段不动,就要靠下面的方法来绕开。

3.2 在“无法进入系统”状态下,用命令绕过开机检查

如果你就是想在修复之后暂时不进系统,可以先用Windows安装盘或PE镜像引导虚拟机,打开命令提示符,把自动检查关掉。注意,这一步不是跳过问题,而是跳过“开机阶段的自动检查”,让你先看到不蓝屏不转圈的桌面,然后手动处理。

具体做法是,在引导虚拟机时挂载一个Windows镜像或PE镜像(以WinPE为例,boot from光盘),进入PE的命令行窗口,执行:

chkntfs /x C:

/x参数的含义是“在启动时排除指定卷”,也就是C盘不再自动执行chkdsk。这样系统可能会直接跳过自检,先让你登录进桌面。但这只是权宜之计,等系统进去后最好还是执行一次手动chkdsk把问题根除。否则下次开机会继续弹。

3.3 一个让“启动时磁盘检查”彻底消失的小技巧

我在多次处理虚拟机磁盘检查问题后,总结出一个比较实用的组合拳:先以管理员身份打开CMD,执行chkdsk /f C:;如果提示“无法锁定当前驱动器”,系统会问你是否计划下次重启时运行,输入Y;接着等重启,让它完整跑完。跑完之后再进系统,执行:

chkntfs /d

此时把注册表BootExecute改回autocheck autochk *。别小看这个“默认值”操作,很多精简版系统或优化工具会把这里改成自定义参数,导致每次都提示检查和倒计时。

注意:不要随手删除BootExecute项,有些朋友在注册表里一看到命令行就删,删了之后可能直接导致系统无法正常关机或开机。保留默认值,千万别动空键。

4. 虚拟机彻底进不去系统时,从PE底层修复虚拟磁盘

4.1 怎么给虚拟机临时挂载一个PE镜像

当你连系统登录界面都看不到,一直卡在磁盘检查转圈时,就要考虑用PE镜像来引导了。先准备一个兼容当前系统的Windows PE镜像,我用得比较多的是微软官方的WinPE或基于微PE的ISO镜像包,因为体积小、引导快、工具全。

以VMware Workstation为例,把虚拟机先“关机”,然后在虚拟机设置里找到CD/DVD(SATA),勾选“启动时连接”,在“ISO映像文件”里选中PE镜像的路径。同时把虚拟机的引导顺序改一下,让「CD/DVD」排到虚拟硬盘前面。方法是在“虚拟机设置”->“选项”->“高级”->“引导顺序”,或者直接在开机时快速按F2/F12进入虚拟机BIOS里改。VirtualBox里也一样,把光驱放到启动顺序第一位。

改完引导顺序后开机,虚拟机就会从PE引导,进入一个简易Windows环境,这时原来虚拟硬盘里的Windows并没有真正启动,磁盘上的NTFS卷处于“未挂载”或“可安全访问”的状态,非常适合做底层修复。

4.2 在PE命令行里强制修正文件系统错误

进入PE桌面后,打开命令提示符,运行:

cd /d C:\windows\system32 chkdsk C: /f /r /x

先解释一下/x参数:它会在检查之前先强制卸载卷。在PE里,目标磁盘没有被系统占用,所以/x能顺利执行,不会遇到“无法锁定卷”的报错。如果PE里看不到C盘盘符,先用diskpart查看卷和盘符,命令是:

diskpart list volume exit

找到哪个卷是系统分区之后,再用chkdsk。如果发现某个分区提示“写保护”,不要急,下一节处理。

4.3 清除“写保护”错误:diskpart属性修复

有热搜词提到了“由于该卷已设置为写保护,因此Windows无法在上面运行磁盘检查”。在虚拟机里见到这个提示的概率不低,尤其是从VMDK转换到VDI、或者从物理机备份出来的镜像。

处理方式是打开DISKPART,一条一条执行:

diskpart list disk select disk 0 attributes disk clear readonly list volume select volume 2 attributes volume clear readonly exit

这里list disk用来确认目标虚拟磁盘的编号;select disk 0选中它;attributes disk clear readonly清掉整块磁盘的只读属性;再list volume找到系统卷,attributes volume clear readonly清掉卷级只读标记。如果diskpart依然提示“磁盘处于只读状态”,那有可能是虚拟磁盘文件本身的权限问题,在宿主机里右键VMDK或VDI文件,打开“属性”,确认不是“只读”,也确认当前Windows用户对它有完全控制权限。

有时候VMDK文件本身没问题,但快照状态导致的写保护,可以在VMware里把虚拟机的快照合并掉再试。这类只读属性和真实磁盘的写保护开关不一样,但处理思路反而更简单,跑一遍diskpart基本能解决。

5. 连PE都修不动?把虚拟磁盘拆下来离线处理

5.1 将虚拟磁盘挂载到另一台虚拟机或真机

如果你用PE修复时发现chkdsk总是跑到一半就报错,或者系统文件损坏到了PE环境也无法处理的地步,那就换一种思路:让另一个Windows系统来当“修复宿主”,把出问题的虚拟磁盘当作外挂数据盘去修。

在VMware里,虚拟机关机状态下,打开“虚拟机设置”->“硬盘”->“移除”,把出问题的磁盘解脱。然后新建一个干净的Windows虚拟机,或使用另一台已存在的虚拟机,把刚才移除的VMDK重新“添加”为第二块硬盘:在“添加”里选择“使用现有虚拟磁盘”,然后定位到那个VMDK文件。开机进入新的系统后,打开磁盘管理,找到新加载的磁盘,分配盘符。如果系统提示“此磁盘需要初始化”,可以选择MBR或GPT按原分区表类型处理,不要贸然格式化。

这时打开管理员CMD,对挂载出来的盘执行chkdsk。因为目标盘没有被系统占用,/f /r /x可以直接运行,而且由于宿主系统不是出问题的系统,不会出现“卷正在使用”的锁卷问题。这个方法很适合处理引导崩溃级别的磁盘检查错误,相当于把手术台挪到另一个房间里操作。

5.2 用DiskGenius类工具做“离线检查”的功能取舍

在离线状态下,我还会带一个DiskGenius备用。DiskGenius能直接在WinPE里加载虚拟磁盘镜像,或者对VMDK/VDI格式的虚拟磁盘做文件浏览和分区修复。注意它有两个能力要区分开:“浏览并拷贝文件”和“重建分区表/检查坏道”。

对于磁盘检查误报这种问题,我一般用它来提前备份关键文件,防止后续修坏了损失数据。具体做法是:在DiskGenius里打开对应VMDK文件(新版可以直接打开VMware磁盘文件),把里面的一些重要目录拖出来拷贝到宿主机。这个操作不会修改原始磁盘,很安全。

还有热搜词提到“DiskGenius转虚拟机为U盘”,这里多说一句:把整个虚拟磁盘转换成U盘启动盘时,最好把VMDK转换成普通IMG或DD格式,然后用工具写入U盘。但如果是“修复”场景,没必要先做这种转换,直接对VMDK做文件级操作即可。毕竟转换格式会引入新的变量,万一转换过程出点小状况,反而分不清是原问题还是转换问题。

5.3 给虚拟磁盘扩容、瘦身时的两个经验教训

最后聊两个和磁盘检查误报直接相关的日常操作经验,都是我摔过跟头的地方:

第一,不要在虚拟机运行时直接复制VMDK文件(尤其是写了快照的VMDK)。复制出来的文件可能包含不一致的元数据,下次用这个副本启动,Windows百分之百会认为上次是非正常关机,于是又触发磁盘检查。正确做法是先关机,再用VMware自带的“管理快照”功能把快照合并掉,或者在复制前先删除快照,确保VMDK是干净一致的。

第二,扩容虚拟磁盘之后,一定要在系统里执行一次“扩展卷”和chkdsk。很多人只扩容了虚拟磁盘大小,忘了在Windows磁盘管理里把分区扩大,结果分区表和文件系统之间出现不一致空间状态,也会间接导致开机磁盘检查。我把这种“半扩容”的状况归为“踩坑型脏位”,建议每次扩容后重启一下,再观察后续开机是否还有自检提示。

6. 虚拟机磁盘检查问题速查表:从轻到重一次排完

平时帮别人处理这个问题时,我习惯按下面的顺序排查,每一步都比上一步更深入:

现象可能原因首选处理
开机提示计划磁盘检查,但能进系统NTFS脏位管理员CMD执行chkdsk C: /f /r,重启
按任意键跳过无效焦点不在虚拟机上鼠标点击虚拟机窗口后再按任意键
反复弹提示,注册表BootExecute被改优化工具修改了autochk参数改回autocheck autochk *,执行chkntfs /d
提示卷被写保护虚拟磁盘或卷属性只读diskpartattributes ... clear readonly
卡在checking file system长时间不动元数据损坏挂载PE镜像执行chkdsk C: /f /r /x
PE里也修不动VMDK文件本身状态异常挂载到另一台虚拟机离线修复
修复过程中系统文件严重损坏系统组件损坏备份数据后重建虚拟机或考虑还原快照

整套思路的核心就一句:虚拟机的“磁盘检查错误”大多是虚拟磁盘文件的状态标记在撒谎,先信它、再修复它、最后清掉它。不要迷信“强制跳过”,也不要一上来就重装系统。最好用的工具永远是chkdsk配合chkntfs,一个是治病,一个是治标。

我自己现在已经养成了习惯:任何虚拟机在正常关机前,先等它完全停止IO;做快照前,先结束虚拟机里的磁盘密集型任务;每次开机前,如果提示磁盘检查,优先让它跑完一次而不是跳过。这些习惯看着很小,但能让“磁盘检查误报”的频率下降一大半。

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

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

立即咨询