如何从 Linux 恢复 Windows 7 启动扇区

如何从 Linux 恢复 Windows 7 启动扇区

我有一台双启动 Windows 7 和 Ubuntu 的笔记本电脑,但它无法再启动 Windows。我很确定 Windows 分区的启动扇区(分区的开头,而不是 MBR!)已损坏。如何从 Linux 恢复它?

(笔记本电脑没有 DVD 驱动器,而且我宁愿不制作 Windows 安装 USB,因为上次我尝试了好几次。此外,Windows 安装程序不仅会覆盖引导扇区,还会覆盖 MBR,从而杀死 GRUB,所以我必须随后修复 Ubuntu。)


细节:

分区布局如下:

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1              54   151129367    75564657    5  Extended
/dev/sda2       151129368   302247179    75558906    7  HPFS/NTFS/exFAT
/dev/sda3   *   302247180   312497351     5125086    c  W95 FAT32 (LBA)
/dev/sda4       312497352   312578243       40446   ef  EFI (FAT-12/16/32)
/dev/sda5             108     4194827     2097360   82  Linux swap / Solaris
/dev/sda6         4194882   151129367    73467243   83  Linux

sda1 是包含 Linux 的扩展分区(sda4、sda5 和 sda6)。sda3 是恢复分区(似乎是修改过的 Windows XP)。sda2 是 Windows 7 分区(NTFS)。我可以从 Linux 安装它,一切似乎都在那里。

Grub 无法启动 Windows 7。启动菜单包含一个名为“Windows”(请注意有趣的引号)的条目,它尝试启动(hd0,1)=sda1,当然没有成功。我可以手动启动 sda3,但是没有意义。

当我尝试启动 sda2(Windows 7)时,我收到“NTLDR 丢失”的消息。这很奇怪,因为 Windows 7 不使用 NTLDR,而是使用 BOOTMGR。我不记得这是怎么发生的(它发生过一段时间),但我猜我尝试过的某个恢复工具在该分区上安装了错误的引导扇区。这是分区的开头:

$ sudo dd if=/dev/sda2 bs=512 count=1 | hd
00000000  eb 52 90 4e 54 46 53 20  20 20 20 00 02 08 00 00  |.R.NTFS    .....|
00000010  00 00 00 00 00 f8 00 00  36 00 d6 00 18 0d 02 09  |........6.......|
00000020  00 00 00 00 80 00 80 00  f3 df 01 09 00 00 00 00  |................|
[...]
00000170  b4 01 8b f0 ac 3c 00 74  09 b4 0e bb 07 00 cd 10  |.....<.t........|
00000180  eb f2 c3 0d 0a 41 20 64  69 73 6b 20 72 65 61 64  |.....A disk read|
00000190  20 65 72 72 6f 72 20 6f  63 63 75 72 72 65 64 00  | error occurred.|
000001a0  0d 0a 4e 54 4c 44 52 20  69 73 20 6d 69 73 73 69  |..NTLDR is missi|
000001b0  6e 67 00 0d 0a 4e 54 4c  44 52 20 69 73 20 63 6f  |ng...NTLDR is co|
[...]

我不得不说,我尝试过 update-grub 和 boot-repair,但都无济于事。Grub 已安装并正常工作,问题在于由 Grub 链式加载的 Windows 加载程序。我需要的是类似bootsect /nt60 C:Linux 的东西,或者任何方法将 bootloader 的干净副本复制到我的分区上。有什么想法吗?

答案1

有趣的是,我尝试了这么久,刚在这里发帖就找到了解决方案。我偶然发现了一个 Windows 7 恢复 USB 棒。

  1. 从记忆棒启动。我必须将记忆棒插入 USB 端口进行冷启动,否则 PC 无法识别它。然后我必须告诉 grub 从 启动(hd1)

  2. 恢复盘可能能够修复一些东西,但对我来说没用。

  3. 启动命令提示符并执行以下操作:

    复制引导加载程序。X:是恢复驱动器,C:是笔记本电脑上的分区。

    copy x:\windows\boot\pcat\bootmgr c:\bootmgr
    attrib +s +h c:\bootmgr
    

    如果这不起作用,您可能必须先删除 bootmgr:

    c:
    attrib -s -h bootmgr
    del bootmgr
    
  4. 正确安装引导加载程序。从X:\windows\system32调用:

    bootsect /nt60 c:
    bootrec /fixboot
    

    第二行是为了好用,不确定是否有必要。不要这样做bootrect /fixmbr,因为这会覆盖 GRUB。

现在它可以工作了,但如果不行,你必须重新创建启动菜单数据(BCD)。从恢​​复提示:

attrib -s -h C:\boot
ren C:\boot C:\bootbak
bootrec /rebuildbcd

(hd0,2)现在重新启动。告诉 grub 从Windows 分区启动,它应该可以工作。之后grub-update,Windows 7 应该再次正确显示在菜单中。

资源:

相关内容