![安装 Ubuntu 后,Classpnp.sys 导致 Windows 挂起](https://linux22.com/image/878065/%E5%AE%89%E8%A3%85%20Ubuntu%20%E5%90%8E%EF%BC%8CClasspnp.sys%20%E5%AF%BC%E8%87%B4%20Windows%20%E6%8C%82%E8%B5%B7.png)
我到处寻找这个问题的解决方案。我尝试了很多方法,从启动修复到 Windows 中的 bootrec,但仍然无法解决。问题是 Windows 在传统模式下可以启动,但在 UEFI 模式下会挂起 - 它挂在 classpnp.sys 上。现在,在传统模式下,grub 菜单不会加载,所以我无法进入 ubuntu。在 UEFI 模式下启动时我可以看到 grub 菜单,但在选择 Windows 引导加载程序时,它会运行到 classpnp.sys。目前,我在 Linux 和 Windows 之间切换的唯一选择是在传统和 UEFI 之间切换。我知道有很多类似的帖子,所以很抱歉再次提起它 - 这是一个很大的挫折。我试过这个Ubuntu 双启动安装后 Windows 7 挂起无济于事。任何想法都欢迎提出。
非常感谢,MRF
附言:我知道这不是 classpnp.sys 的问题,因为这是它最后加载的东西。有趣的是,我在旧版中运行了安全模式(当 Windows 启动时),据我所知,在 classpnp.sys 之后没有加载任何其他驱动程序。
答案1
大多数操作系统(包括 Windows)的安装都是在一种引导模式下进行的(BIOS/CSM/legacy 或 EFI/UEFI)。切换到另一种引导模式需要安装新的引导加载程序,并且通常需要更改分区表类型(MBR 到 GPT 或反之亦然)。使用 Linux 可以从一种引导模式快速切换到另一种引导模式,这非常灵活;但我从未听说过 Windows 可以成功进行动态引导模式切换。
需要考虑的第二个问题是,跨操作系统协调启动模式几乎总是最好的。也就是说,如果 Windows 配置为以 EFI 模式启动,您也应该以 EFI 模式安装 Linux;如果 Windows 处于 BIOS 模式,您也应该以 BIOS 模式安装 Linux。也可以采用其他方式,但需要额外的努力。
在大多数情况下,Windows 是计算机上安装的第一个操作系统。因此,您应该确定 Windows 启动模式。这通常与分区表类型有关:Windows BIOS 模式引导加载程序理解 MBR 但不理解 GPT,而 Windows EFI 模式引导加载程序喜欢看到 GPT。您可以在 Linux 中轻松检查分区表类型:
$ sudo parted -l | grep Table
Partition Table: gpt
如果您得到几行输出,则意味着您有多个磁盘。(可移动磁盘也算在内,因此请先将其移除。)GPT 磁盘显示为类型,gpt
MBR 磁盘显示为类型msdos
。使用此信息,您应该知道 Windows 应该如何启动。如果您有多个磁盘并且它们属于不同类型,则需要找出磁盘的类型Windows 启动盘。
如果您以错误的模式安装了 Linux,解决方案是安装适用于 Linux 的引导加载程序。听起来您已经安装了 BIOS 模式的 Windows,但您设法说服 Ubuntu 以 EFI 模式安装。(这需要一些毅力,但可以做到。)如果是这样,您应该安装grub-pc
将替换的软件包grub-efi
,然后运行sudo grub-install /dev/sda
以安装 GRUB。您可能还需要执行update-grub
。或者,引导修复程序应该自动完成所有这一切,但您必须从正确的启动模式运行它,这可能意味着在正确的启动模式下启动紧急磁盘。
如果您运行parted
后发现分区表类型是 GPT 而不是 MBR,那么肯定是出了什么问题——很可能是 GRUB 错误识别了您的 Windows 引导加载程序。在这种情况下,我需要更多信息来提供具体的修复建议。RESULTS.txt
由启动信息脚本会有所帮助。将其发布到pastebin 网站并在此处发布您的文档的 URL。
编辑:
根据您的 Boot Info Script 输出,您有一个 GPT 磁盘,并且没有证据表明您的任何分区或 MBR 中安装了任何 BIOS 模式的 Windows 引导加载程序。此外,分区布局与 OEM 提供的预装 EFI 模式 Windows 一致。因此,Windows 不太可能以 BIOS/CSM/传统模式启动,正如您在问题开头所述。我怀疑您在固件中启用了 CSM,并且 Windows 在启用该模式的情况下启动,因此您错误地认为 Windows 是以 BIOS 模式启动的。这是一个不合理的结论,原因我在这个网页。为了简化启动过程,我建议您至少在测试时禁用固件中的 CSM(又称“旧版支持”或类似名称)。启用该功能后,每当您启动新设备(如操作系统安装程序)时,您都可以选择启动模式。
另一方面,启动信息脚本也未能找到 EFI 模式 Windows 启动加载程序的证据。有时它只是在这个任务中失败了,原因我不明白;但也可能是文件丢失了。您可能需要“手动”查找它们。最重要的文件在EFI/Microsoft/Boot/bootmgfw.efi
ESP 上——也就是说,/boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
来自 Ubuntu。
您的启动信息脚本输出表明 GRUB 的 EFI 模式和 BIOS 模式版本都已安装,并且您的 GRUB 配置文件设置为链式加载到(可能不存在的)EFI 模式 Windows 引导加载程序。
总的来说,我建议你尝试一下:
- 以任何可能的方式启动 Windows 并禁用视窗(不是固件)功能称为“快速启动”,如下所述这里。如果启用此功能,则只会给双启动配置带来麻烦,并且可能会导致至少部分问题。
- 完成此操作后,重新启动 Windows 几次并彻底关闭。这样应该可以正确卸载磁盘。
- 尝试通过 GRUB 启动 Windows。此时它可能开始工作,但我不能保证。
- 如果 GRUB 仍然无法启动 Windows,请下载我的 USB 闪存驱动器或 CD-R 版本的rEFInd 启动管理器并准备启动介质。
- 启动到 rEFInd 介质。它应该显示启动 Windows 和 Ubuntu 的选项。尝试两者。
- 如果 rEFInd 启动您的两个操作系统,请安装其 PPA 或 Debian 软件包版本。然后 rEFInd 应该接管 GRUB 作为您的主启动管理器。
- 如果失败了,你可以尝试靴子修理,但我怀疑它是否有用,因为根据您的 Boot Info Script 输出,我没有发现 GRUB 配置有任何明显错误,除非可能缺少 Windows 引导加载程序文件。说到这个……
- 如果您发现
bootmgfw.efi
缺少,您可以在步骤 #1 之后跳过上述所有内容。相反,您必须重新安装 Windows 引导加载程序,您必须使用 Windows 恢复媒体执行此操作。完成此操作后,您可能必须使用简易UEFI或bcdedit
将 GRUB 重置为默认启动管理器。
答案2
对我来说,解决方案是从 W7 高级启动选项开始
并使用:禁用驱动程序签名强制执行。
此后,不要关闭你的 win 7,只需休眠即可。
我希望这对你有用