我的硬盘上安装了 3 个 Windows,总共有 13 个分区。几天前它停止启动,启动时会挂起。在安全模式下启动 Windows 7 时,它会显示 CLASSPNP.SYS 并挂起。状态指示灯每秒闪烁一次。
我可以在 Mac OS 上完美读取硬盘,但启动 WinRE 时,一旦尝试读取其中一个分区,一切都会崩溃。状态 LED 总是闪烁 1 秒,即使我将驱动器插入外部驱动器也是如此(它只是蓝屏显示“DRIVER_POWER_STATE_FAILURE”),但这并不是很重要。Windows PE 可以加载驱动器并在 Explorer 中显示分区,但当尝试读取两个分区时,Explorer 会崩溃。这是我在问题发生之前启动的两个分区。
问题发生的前一天,我碰巧对硬盘进行了完整的 dd 克隆。我能够使用 TestDisk(它显示大多数分区都有错误)从头开始重建整个分区表,使用我在备份中找到的偏移量和所有分区(除了 2 个我不知道存在的小分区,所以现在有 11 个分区)。分区表没有错误,所以我尝试了硬盘,但它仍然导致 Explorer 崩溃。Explorer 确实非常缓慢地逐个加载分区,数据是可读的,但我无法执行 chkdsk 或执行任何其他操作,因为所有其他程序都冻结了,什么也不做,或者只是崩溃。
这让我怀疑引导记录或主文件表可能已损坏。我使用 TestDisk 检查了所有分区上的 MFT,它们都很好。我使用 TestDisk 检查了引导记录,每个分区的引导记录都显示错误,但 TestDisk 能够修复它,现在它们没有任何错误。数据在 Mac 上可以访问,一切都正常,但在 Windows 上仍然不起作用。
我可以使用 dd 将映像重新克隆到硬盘上,但不要浪费时间和不必要的写入周期,而是在写入几 GB 后中断 dd,以便重写驱动器中可能存在问题的第一部分,而其余部分保持不变?我想要一种方法来修复损坏的分区,以便 Windows 在读取它们时不会崩溃,或者我想从备份中放回数据,但只放回分区和文件系统数据库,而不是文件本身,因为它们是完整的。我可以在磁盘上运行 chkdsk 吗?即使我尝试修复时 chkdsk 像所有其他程序一样挂起?
我该怎么做才能找出问题所在?根据 Mac 上的 TestDisk,MBR、MFT 和 NTFS 引导记录完好无损,我再也找不到磁盘的任何问题。是否可以从前一天制作的 dd 映像中复制引导记录和文件表?我不想重写磁盘,因为所有数据仍然完好无损,我想更换损坏的部分,但我不知道磁盘上的哪个错误导致 Windows 出现问题。这一定是只有 Windows 在 NTFS 上才需要的东西,我需要某种方法来修复它。Windows 在读取 NTFS 时会记录错误吗?是什么原因造成的,是宇宙射线还是某些写入错误?也许是恶意代码?硬盘完好无损,没有摔过,它已经运行多年没有问题了,我知道硬盘会坏掉,但不是这样的。有没有人是磁盘取证专家,或者有没有人非常详细地了解 NTFS 的工作原理以及什么会导致这些症状?
答案1
我强烈建议您更新您的思维和方法。我无法容忍工作中出现这样的中断和停机。
您可以使用虚拟机完成所有您想做的事情。我就是这样做的,有 4 台机器每周 7 天、每天 24 小时同时运行,周复一周、月复一月、年复一年,一台又一台电脑。
我使用 VMware Workstation 作为同类产品中最好的,值得花小钱购买它。
使用快速的 SSD 作为主机,虚拟机将会运行得很快。
保留机器的备份,可以进一步防止机器损坏。
我几年前就使用过分区和双启动,但发现它很慢,而且浪费时间。
您的时间很宝贵,任何费用都会很快得到支付。
我所提出的建议对 90% 到 95% 的用户来说是最好的。
答案2
我能够修复它!我花了 2 天时间尝试各种方法,重建了整个分区表并修复了 NTFS 引导记录,但都无济于事。问题不在于此,尽管存在错误,但错误实际上主要是由 MFT 引起的。我忍不住注意到 TestDisk 说“MFT 与备份相同”,并且它不让我运行扫描来验证备份是否也未损坏。
我做了什么:我得到了一个可以启动的 ~500MB Windows PE 映像,它像 Windows 安装 iso 文件一样加载到 Windows PE 环境中的 RAMdisk 上。它有数据恢复工具和其他东西,但最重要的是,这个可启动映像中的资源管理器没有尝试加载分区内容!我注意到,只要一个程序尝试加载损坏的分区内容,整个硬盘就无法读取。也许它将东西放入队列,但硬盘会停止所有活动并拒绝响应,除非有时 Windows 会尝试加载不同的分区。这可能是 Windows 未能错误处理损坏的分区。
由于这个轻量级的 Windows 程序没有尝试读取分区,因此我可以打开 cmd 并运行 chkdsk <letter>: /f
为了查明哪些驱动器已损坏,我只需打开 Explorer 并尝试打开所有分区,但其中一些分区导致 Explorer 崩溃。然后我对这些分区运行了 chkdsk。chkdsk 在常规 Windows 中不起作用的原因是它尝试读取损坏的分区,但只会导致所有内容冻结(等待分区空闲以供读取,但它们已被占用或类似情况)。
您只需确保不要运行任何尝试读取磁盘的程序并立即运行 chkdsk。
重新创建的步骤:
- 拔下有错误分区的硬盘
- 从 WinPE 启动
- 打开CMD并运行MMC
- 添加管理单元并选择本地计算机上的设备管理器
- 将硬盘插入为外部硬盘
- 在设备管理器中选择计算机名称(minint-xxxxxx)
- 点击扫描新硬件
- 关闭 MMC 并打开 Explorer
- 逐个打开检查哪些分区导致资源管理器崩溃
- 对这些运行 chkdsk(或全部运行)
如果这不起作用,则可能是其他分区有问题。如果您启动 Linux,无论是实时启动还是安装启动,都可以在其上执行 gparted,您可以看到哪些分区已损坏,因为这些分区旁边有一个橙色警告三角形。出于某种原因,从 gparted 中删除它们会导致 Windows 上的其他分区无法读取,因此我建议首先从 gparted 中删除损坏的分区,然后在 Windows 中执行 TestDisk 以恢复分区(记住哪些分区已损坏以及它们的大小,这样您就不必再次恢复它们,因为您必须重新启动该过程)。在我的情况下,它是某种 400MB 大小的恢复分区,删除后它未分配,可以放置一个新分区(除非磁盘在此位置物理损坏)。要从损坏的分区恢复数据,TestDisk 也可以执行此操作。