HOME

【VMware】P2V 转换后的 Windows 7 修复引导变 RAW 与卡在 classpnp.sys 的处理记录

文章目录15 节

这次处理的是一台由物理机转换到 VMware 的 Windows 7 虚拟机。最初的问题是系统无法启动,但使用 PE 修复引导后,整块系统卷反而变成了 RAW。迁移到一块结构正常的新虚拟磁盘并重建引导后,系统又卡在 Windows 启动画面;进入安全模式时,最后一行停在 classpnp.sys。最终把新虚拟磁盘挂到 SATA 控制器后,Windows 7 成功启动。

这个案例实际上包含两个相互独立的问题:

  1. P2V 生成的虚拟磁盘没有标准分区边界,NTFS 卷从磁盘 0 B 位置开始,修复 MBR 会覆盖 NTFS 引导扇区。
  2. 新磁盘结构修复后,Windows 7 仍缺少当前虚拟磁盘控制器所需的启动阶段驱动;classpnp.sys 只是安全模式界面最后显示的驱动,并不一定是损坏文件。
flowchart TD
  A["P2V 后的虚拟磁盘"] --> B["NTFS 卷从 0 B 开始"]
  B --> C["PE 执行 MBR 修复"]
  C --> D["NTFS 引导扇区被覆盖,卷显示 RAW"]
  D --> E["新建标准 MBR 磁盘并按文件克隆"]
  E --> F["重建引导后卡在启动页面"]
  F --> G["安全模式最后显示 classpnp.sys"]
  G --> H["改用 SATA 控制器"]
  H --> I["Windows 7 成功启动"]

环境信息

项目本次环境
虚拟化平台VMware
客户机系统Windows 7
磁盘来源物理机经过 P2V 工具转换得到的虚拟磁盘
原虚拟磁盘容量约 238 GB
新虚拟磁盘容量250 GB
维护环境Windows PE、DiskPart、DiskGenius
最终可用控制器VMware SATA

PE 中的盘符只在当前维护环境有效,不能直接用盘符判断哪块是源盘或目标盘。实际操作时应同时核对磁盘容量、磁盘编号、控制器位置和目录内容。

第一阶段:修复引导后系统卷变成 RAW

1. DiskPart 中的关键异常

在 PE 中查看磁盘信息:

diskpart
list disk
select disk 0
detail disk
list partition
list volume
exit

输出中最关键的不是盘符,而是唯一主分区的偏移量:

分区 1    主要    238 GB    0 B

DiskPart 显示 P2V 虚拟磁盘的分区偏移量为 0 B

正常的 MBR 系统盘通常从第 2048 扇区,也就是 1 MiB 位置开始第一个分区:

正常 MBR 磁盘
├─ LBA 0:MBR 引导代码和分区表
├─ LBA 1~2047:对齐保留空间
└─ LBA 2048:NTFS 分区引导扇区及文件系统

本次 P2V 磁盘实际更接近下面这种布局:

异常虚拟磁盘
└─ LBA 0:NTFS 分区引导扇区及文件系统

这说明转换工具很可能把一个 NTFS 卷直接封装成了虚拟磁盘,而不是生成包含标准 MBR 分区表的完整磁盘镜像。这类布局也常被称为 superfloppy 布局。

2. 为什么 /fixmbr 会让 NTFS 变成 RAW

bootrec /fixmbr 或 PE 中的某些“一键修复引导”功能,会把新的 MBR 代码写到磁盘第一个扇区。对于正常磁盘,这个位置本来就是 MBR;但在本次异常布局中,磁盘第一个扇区同时也是 NTFS 卷引导扇区。

NTFS 卷引导扇区内保存了每扇区字节数、每簇扇区数、卷总扇区数、MFT 位置等关键参数。一旦这些内容被 MBR 代码覆盖,Windows 就无法继续识别 NTFS 结构,卷会显示为 RAW。

因此,下面这些操作不能直接用于偏移量为 0 B 的源磁盘:

  • bootrec /fixmbr
  • bootsect /mbr
  • DiskGenius 或其他 PE 工具中的“重建 MBR”
  • 初始化磁盘或重新建立分区表
  • 对 RAW 卷直接格式化或执行 chkdsk

第二阶段:迁移到结构正常的新虚拟磁盘

1. 先保留源盘

开始写入前,应关闭虚拟机并备份源 VMDK,或者至少创建可确认有效的虚拟机快照。后续所有分区表和引导修复操作都只针对新磁盘。

不要在没有备份的情况下反复尝试“一键修复引导”。每次写入磁盘头部,都可能让后续恢复更加困难。

2. 创建标准目标磁盘

本次新建了一块 250 GB 虚拟磁盘作为目标盘,并按以下要求初始化:

  • 分区表类型:MBR
  • 分区类型:主分区
  • 起始位置:第 2048 扇区,即 1 MiB
  • 文件系统:NTFS
  • 活动状态:活动分区
  • 容量:不得小于源卷实际使用空间;为便于后续维护,建议不小于源卷容量

如果使用 DiskGenius 创建分区,应在保存分区表前再次核对目标磁盘容量和编号,避免把源盘重新分区。

3. 使用文件级方式克隆

在 DiskGenius 的“克隆分区(卷)”功能中,本次选择:

  • 源分区:原 P2V 磁盘上的 NTFS 卷,约 238.5 GB
  • 目标分区:新磁盘上的 NTFS 分区,250 GB
  • 克隆方式:按文件复制(可消除碎片)

DiskGenius 将原 NTFS 卷按文件复制到标准 MBR 目标分区

这里不能选择整盘按扇区克隆。整盘复制会把源盘从 0 B 开始的异常布局一并复制到目标盘,等于重新制造同一个问题。按文件复制的目的,是把 Windows 文件、权限和文件系统内容迁移到已经创建好的标准目标分区中,同时保留目标盘正常的 MBR 和分区边界。

4. 复核目标分区边界

克隆完成后,先不要修复引导。使用 DiskPart 检查新盘:

diskpart
list disk
select disk 0
detail disk
list partition
exit

目标分区的预期结果是:

类型:主要
偏移量:1024 KB

只要仍然显示 0 B,就不能继续执行 MBR 修复,应返回检查目标磁盘的分区创建方式。

5. 断开源盘后重建新盘引导

为避免 PE 把引导写入错误磁盘,建议先关机,从虚拟机配置中临时断开原 P2V 磁盘,只保留新磁盘。断开是从虚拟机移除设备,不是从数据存储中删除 VMDK。

重新进入 PE 后,先确认 Windows 所在分区。下面假设新磁盘是 disk 0,并把唯一的 Windows 分区临时指定为 W:

diskpart
list disk
select disk 0
list partition
select partition 1
active
assign letter=W
exit

dir W:\Windows
dir W:\Windows\System32

只有在两个目录都存在,并且已确认 disk 0 是新磁盘后,才执行:

bootsect /nt60 W: /mbr
bcdboot W:\Windows /s W:

这组命令适用于本次“单一主分区同时存放 Windows 与启动文件”的布局。如果目标磁盘另建了 System Reserved 分区,bcdboot/s 参数应指向该活动分区,不能机械照抄为 W:

第三阶段:安全模式卡在 classpnp.sys

新磁盘的分区和引导修复完成后,虚拟机仍卡在 Windows 启动画面。进入安全模式时,画面最后显示:

Loaded: \Windows\system32\drivers\CLASSPNP.SYS

容易产生的误判是:classpnp.sys 文件损坏,需要从其他 Windows 7 系统替换该文件。实际排查中,这一行通常只代表安全模式最后成功显示出来的驱动。系统随后还要枚举磁盘控制器并访问系统卷,如果启动阶段没有对应的存储驱动,也可能停在这个位置。

本次 P2V 后的 Windows 7 能识别 SATA 控制器,但不能通过此前尝试的虚拟磁盘控制器完成启动。把新 VMDK 改挂到 VMware SATA 控制器后,系统成功进入桌面,由此确认问题位于虚拟存储控制器兼容性,而不是 classpnp.sys 文件本身。

控制器选择时的注意点

VMware 控制器Windows 7 注意事项
SATA/AHCI本次环境验证可正常启动;系统仍需启用可用于启动阶段的 AHCI 驱动
LSI Logic SAS/Parallel是否可启动取决于 P2V 系统中对应驱动是否已安装并设为启动加载
VMware Paravirtual/PVSCSI通常需要提前安装或离线注入 VMware PVSCSI 驱动
NVMeWindows 7 原生支持有限,通常需要相应补丁和驱动,不适合作为首次恢复启动的默认选择

控制器调整的安全操作顺序如下:

  1. 完全关闭虚拟机,不要在运行状态下直接更换系统盘控制器。
  2. 从虚拟机配置中移除新 VMDK,但不要勾选删除磁盘文件。
  3. 添加 SATA 控制器,并把同一个新 VMDK 作为“现有虚拟磁盘”重新挂载。
  4. 优先使用第一个 SATA 位置,并检查虚拟机启动顺序。
  5. 保持虚拟机固件模式与磁盘布局一致。本次 MBR 系统盘使用传统 BIOS 启动。
  6. 启动系统验证;如果仍然失败,再考虑离线注入所选控制器的驱动,而不是替换 classpnp.sys

最终验证

本次恢复完成后,至少检查以下项目:

  • Windows 7 能通过新磁盘连续启动两次。
  • 磁盘管理中系统卷显示为 NTFS,不再显示 RAW。
  • 新磁盘的主分区偏移量为 1 MiB,不再是 0 B
  • 系统分区处于活动状态,根目录存在 bootmgrBoot 目录。
  • 设备管理器中当前 SATA/AHCI 控制器没有黄色感叹号。
  • 原 P2V 磁盘仍保持离线或断开,未被后续引导修复写入。

根因总结

这次故障不是一个单独的“引导损坏”问题,而是连续遇到了两个 P2V 常见边界:

  1. 转换后的虚拟磁盘实际上是从 LBA 0 开始的 NTFS 卷,没有为 MBR 保留独立扇区。修复工具把 MBR 写入 LBA 0 后,覆盖了 NTFS 卷引导信息,导致文件系统显示 RAW。
  2. 文件迁移和引导修复完成后,Windows 7 启动环境与虚拟磁盘控制器仍不匹配。安全模式停在 classpnp.sys 只是表象,改用系统能够识别的 SATA 控制器后恢复启动。

经验沉淀

  • P2V 后不要直接执行一键引导修复,先检查磁盘分区表类型和第一个分区的偏移量。
  • 0 B 偏移是本案例最关键的危险信号,说明 MBR 和 NTFS 引导扇区可能占用了同一位置。
  • 修复前先备份 VMDK;发现 RAW 后不要初始化、格式化或直接运行 chkdsk
  • 修复异常磁盘结构时,应新建标准目标磁盘,再做文件级或分区级迁移,不要整盘按扇区复制。
  • 安全模式最后显示的驱动不等于故障驱动。看到 classpnp.sys 时,应同时检查系统盘控制器类型和启动阶段存储驱动。
  • 对老版本 Windows 做 P2V 时,应优先选择操作系统已经具备启动驱动的虚拟控制器,确认能启动后再安装 VMware Tools 或切换到其他控制器。
Windows 7 P2V 故障排查 虚拟磁盘