使用 Puppy Linux 修复 Windows 7 分区

使用 Puppy Linux 修复 Windows 7 分区

在我的 Windows 7 PC 上,我从 USB 启动了浏览器 Linux,运行 GParted 来创建一个新分区以安装 Linux。GRUB 也已安装并提供:

  1. Windows 7 的 /dev/sda1
  2. 浏览器 Linux /dev/sda2

Linux 可以启动,但 Win7 无法启动。

The boot selection failed because a required device is inacessible (0xc0000225)

我读到的所有内容都建议使用 Win7 CD 进行修复 -> 目前不是一种选择。当然,有一种方法可以从 Linux 内部修复分区表。由于这是浏览器 Linux(Puppy Linux - 不是 Ubuntu),我没有安装 apt-get 和一些宝贵的工具。

跑步ntfsfix /dev/sda2并没有任何帮助。

以下 fdisk 输出表明存在错误 - 显然“没有在柱面结束”是没有意义的:

#fdisk -l
Disk /dev/sda: 128.0 GB, 128035676160 bytes
255 heads, 63 sectors/track, 15566 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1       14539   116779288+   7  HPFS/NTFS
Partition 1 does not end on cylinder boundary.
/dev/sda2           14540       15566     8249377+  83  Linux

我该如何修复它以便 Win7 再次启动?我对手动重建表格持谨慎态度。

答案1

在编辑分区之后但在将 GRUB 安装到 MBR 之前,您需要使用dd以下命令对 MBR 进行快照:

dd if=/dev/sda bs=512 count=1 of=/boot/win7.mbr

然后为 Windows 7 创建一个 Grub 菜单项,将其作为引导扇区映像加载。Windows 7 在 Win7 MBR 中包含一些代码,Win7 会查找这些代码的结果,这可能是您遇到问题的根源。

编辑:我还注意到,您的 Linux 安装被列为 /dev/sda2,这对于 Windows 7 安装来说似乎不正确。Windows 7 默认设置启动分区 /dev/sda1 和系统分区 /dev/sda2。您需要将 Linux 设置为 /dev/sda3,以避免重新排序分区表,并导致 Windows 7 在分区 2 上查找自身但找不到时崩溃。此外,您似乎正在使用fdisk柱面磁头扇区兼容模式,这对于 Vista/7 来说是大忌。使用ufdisk 中的命令切换到扇区单位而不是柱面单位。

当您使用 ntfsresize 缩小分区 2 时,您需要确保替换分区表条目从驱动器的完全相同的扇区开始,否则 Windows 将无法启动。

答案2

尝试使用 dd 创建 Windows 恢复光盘(pendrive)。

启动恢复光盘。选择“修复我的电脑”。然后选择自动启动修复。

如果失败,打开命令提示符并输入:

bootrec /fixmbr

bootrec /fixboot

bootrec/重建bcd

答案3

使用 Windows 7 恢复盘解决了这个问题。对于普通人来说,尝试从 Linux 制作 Windows 7 启动盘是不可能的。

相关内容