我有一台双启动 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 棒。
从记忆棒启动。我必须将记忆棒插入 USB 端口进行冷启动,否则 PC 无法识别它。然后我必须告诉 grub 从 启动
(hd1)
。恢复盘可能能够修复一些东西,但对我来说没用。
启动命令提示符并执行以下操作:
复制引导加载程序。X:是恢复驱动器,C:是笔记本电脑上的分区。
copy x:\windows\boot\pcat\bootmgr c:\bootmgr attrib +s +h c:\bootmgr
如果这不起作用,您可能必须先删除 bootmgr:
c: attrib -s -h bootmgr del bootmgr
正确安装引导加载程序。从
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 应该再次正确显示在菜单中。
资源:
- 有关 BOOTMGR 的信息对我有帮助:http://cfc.kizzx2.com/index.php/bootmgr-is-missing-totally-demytisfied/
- 如何将 Windows 7(恢复 CD)ISO 放到 USB 记忆棒上:http://www.webupd8.org/2010/10/create-bootable-windows-7-usb-drive.html