Grub无法启动Windows 7(在尝试BURG之后)

我有Grub 2的问题。当我点击Grub启动屏幕上的Windows 7(加载程序)选项时Windows无法启动。 我得到一个黑色屏幕,白色光标闪烁……

这是我的Boot选项的日志。 我只想删除所有其他分区,我不知道它们是如何制作的,只留下Ubuntu ext4分区,交换分区和WIndows 7分区。 我可以帮助解决一下我的问题吗?

这是日志: http : //paste.ubuntu.com/1014619/

ps:我只能用Hiren的Boot CD启动Windows,第一个选项是Boot form first hard drive(win7,xp,vista)。


更新回应日期为6月3日的评论(引用如下)

  • 我重命名了burg文件夹,在我重新启动PC之后,我试图将其删除。 但同样,没有。 它说文件夹不是空的。 我该如何删除它?

你试过sudo rm -r吗?

注意: 使用此命令时要非常小心。 如果您没有提供要删除的目录的确切名称,则可以进行安装!

  • 我创建了另一个BootInfo摘要 。 它说我在sdb磁盘上安装了Winodws XP。 但我没有sdb磁盘上安装WIndows XP或任何操作系统。

如果您指的是其他内容,请更正我,但我相信您正在谈论下面的BootInfo摘要中的摘录。

 sdb1: __________________________________________________________________________ File system: ntfs Boot sector type: Windows XP: NTFS Boot sector info: No errors found in the Boot Parameter Block. Operating System: Boot files: 

这并不意味着安装了Windows XP。 如果是这种情况,您将看到Operating System:和/或Boot files: 。 上面的Windows XP: NTFS描述了/dev/sdb1分区的Boot sector的内容。

除了在硬盘驱动器的扇区0中找到的引导加载程序(即主引导记录 )之外,每个分区都可以并且通常也包含引导加载程序代码。 根据谁在谈论它,这可以称为Volume Boot Record (VBR,Microsoft或IBM)或Partition Boot Record (PBR,GRUB)。

VBR / PBR本质上是分区开头的保留区域中的“原始”二进制代码。 它不是文件系统的一部分,无法从Windows或Ubuntu中轻松访问。

当你第一次创建分区并且之后没有被触及时,你所看到的可能就是放在那里。 我的建议是忽略它。


更新回应5月31日的评论(引用如下)

  • 我只需要使用Windows 7 DVD进行自动启动修复,现在它可以毫无问题地双启动Windows 7和Ubuntu。

我很高兴再次为你正常工作。 我没想到你会因为使用GRUB的ntldr加载bootmgr而得到一个稍微更有用的错误信息,但事后看来这有点道理。 也许这可能是未来有用的隔离技术问题?

  • 什么是sda2分区? 为什么我不能删除它?

您的BootInfo摘要显示500 GB硬盘驱动器/dev/sda的以下分区

 Partition Boot Start Sector End Sector # of Sectors Id System /dev/sda1 * 63 927,941,469 927,941,407 7 NTFS / exFAT / HPFS /dev/sda2 927,942,654 976,769,023 48,826,370 5 Extended /dev/sda5 927,942,656 968,957,951 41,015,296 83 Linux /dev/sda6 968,960,000 976,769,023 7,809,024 82 Linux swap / Solaris 

查看右侧的最后一列,您将看到sda2的内容被描述为Extended 。 这表明sda2扩展分区而不是主分区

由于历史原因,使用主引导记录(MBR)分区表的硬盘驱动器在MBR(扇区0)中仅有四个用于分区的“时隙”。 主分区只是在硬盘驱动器扇区0中可用于分区的四个条目之一中定义的分区。

这种限制的结果是硬盘驱动器只能使用四个或更少的主分区进行分区。 如果你需要有更多的分区而不仅仅是可以放入MBR的4个分区,那么就会使用“技巧”。 磁盘被分区为三个主分区和一个特殊的主分区 ,称为扩展分区

可以将扩展分区视为(主)分区,其中分区中的空间被细分为其他分区,而不是将其全部用于单个文件系统(例如ext4NTFS )。 扩展分区 (即sda5sda6 )内的分区称为逻辑分区

MBR中的一个“槽”中的扩展分区的存在是如何将所有 逻辑分区使用的空间标记为“ 在使用中 ”并因此不可用。 这就是为什么你不能删除sda2

如果您可以从扇区0中的MBR分区表中删除它,那么sda5sda6使用的硬盘驱动器部分将被视为“ 未分配 ”。 可以覆盖逻辑分区中的数据,删除文件。

在删除sda2之前,首先必须删除它包含的所有逻辑分区 。 也就是说,您必须删除扩展分区 sda2 内部sda5sda6 。 由于这会删除你的Ubuntu安装,你显然不想这样做。

  • 当我尝试安装Windows时,为什么Windows 7安装DVD显示标记为“OSselector”的15MB分区,但是在安装后我无法从Windows或Ubuntu中看到它?

您没有看到该分区,因为它被标记为“隐藏”分区。 以下是BootInfo摘要中/dev/sdb的分区表。 OSselector是(隐藏的)FAT16 逻辑分区 sdb5 ,它位于扩展分区 sdb2

 Partition Boot Start Sector End Sector # of Sectors Id System /dev/sdb1 * 63 1,953,487,934 1,953,487,872 7 NTFS / exFAT / HPFS /dev/sdb2 1,953,487,935 1,953,520,064 32,130 5 Extended /dev/sdb5 1,953,487,998 1,953,520,064 32,067 14 Hidden FAT16 < 32M 

我想你可以使用gparted “看到”这个分区。 您还可以清除“隐藏”标志,以便在Ubuntu和Windows中查看和安装它。 然后,您可以看到此分区中的文件。

注意:虽然gparted包含在Live CD或USB中,但在安装Ubuntu时不包含它。 要使用安装在驱动器上的Ubuntu的gparted ,您需要先使用以下命令安装它: sudo apt-get install gparted (您也可以使用Ubuntu Software Center GUI进行安装。)

  • 在BootInfo摘要中,我看到GRUB使用GRUB和BURG配置文件来引导操作系统。 我怎样才能完全删除BURG?

我实际上对BURG一无所知,所以我可能不是最好的建议。 但是从我在BootInfo摘要中看到的内容来看,BURG目前还没有用于任何事情。

它的文件仍然在/boot/burg ,这就是BootInfo摘要检测到的内容。 但它是MBR中的GRUB引导记录,它加载GRUB的core.img ,后者又从/boot/grub加载GRUB。

我想你可以简单地删除目录/boot/burg 。 尽管简单地将目录重命名为其他东西作为测试可能会更好。 如果在将/boot/burg重命名为/boot/hidden-burg之后没有遇到任何问题,那么我希望删除该目录是安全的。


原帖

我没有看到GRUB配置有问题。 (当然,它可能仍然存在,我只是没有看到它。)

问题可能出在Windows启动配置上。 您可以尝试安装(免费用于非商业用途)Windows实用程序Easy BCD并validationWindows BCD文件的内容是否正确。 (滚动到页面底部并选择“ 注册”按钮。您无需提供名称或电子邮件即可下载EasyBCD。)

什么时候出现这个问题通过GRUB启动Windows? 你还记得你所做的改变可能导致了什么吗?


您还可以尝试以下操作来validation您使用的是正确的grub.cfg文件,以及Windows分区(又称卷)引导记录(PBR / VBR)是否已损坏。

  1. 引导至GRUB菜单。
  2. 选择GRUB菜单项Windows 7 (loader) (on /dev/sda1)
  3. e编辑条目的GRUB命令。 您应该看到以下命令。

     insmod part_msdos insmod ntfs set root='(hd0,msdos1)' search --no-floppy --fs-uuid --set=root 6060682360680260 chainloader +1 
  4. 编辑如下所示的命令以使用GRUB的ntldr而不是chainloader命令。 注意:以这种方式对GRUB引导菜单所做的更改不会持久。 它们仅适用于下一次启动。 grub.cfg 没有改变。

     insmod part_msdos insmod ntfs insmod ntldr set root='(hd0,msdos1)' search --no-floppy --fs-uuid --set=root 6060682360680260 ntldr ($root)/bootmgr 

    对(3)与(4)中的命令进行了两处更改。

    添加了新命令insmod ntldr
    命令chainloader +1被替换为ntldr ($root)/bootmgr

  5. 在仍然查看已编辑的命令列表的同时,按Ctrl + XF10以使用这些已编辑的命令启动,并查看是否更改了任何内容。