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

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

我在使用 Grub 2 时遇到了问题。当我在 Grub 启动屏幕上点击 Windows 7(加载器)选项时,Windows 无法启动。我看到一个黑屏,上面有一个白色光标闪烁......

这是我的启动选项的日志。我只想删除所有其他我不知道它们是如何创建的分区,只保留 Ubuntu ext4 分区、交换分区和 Windows 7 分区。有人能帮我解决我的问题吗?

以下是日志: http://paste.ubuntu.com/1014619/

ps:我只能使用 Hiren 的启动 CD 以第一个选项启动 Windows,即从第一个硬盘启动(win7、xp、vista)。

答案1


更新对 6 月 3 日评论的回应(引述如下)

  • 我重命名了 burg 文件夹,并在重启电脑后尝试删除它。但还是没有任何效果。它说该文件夹不是空的。我该如何删除它?

你有没有尝试过sudo rm -r

笔记: 非常使用此命令时要小心。如果您没有提供精确的您想要删除的目录的名称可能会损坏您的安装!

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

如果您指的是其他内容,请纠正我,但我相信您正在谈论以下来自 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的内容。Boot sector/dev/sdb1

除了位于硬盘 0 扇区中的引导加载程序(即主引导记录),每个分区通常也包含引导加载程序代码。根据谈论它的人的不同,这可以称为Volume Boot Record(VBR、Microsoft 或 IBM)或Partition Boot Record(PBR、GRUB)。

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

您看到的内容可能是在首次创建分区时放置在那里的,此后一直没有被触及。我的建议是忽略它。


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

  • 我只需要使用 Windows 7 DVD 进行自动启动修复,现在就可以同时启动 Windows 7 和 Ubuntu,没有任何问题。

我很高兴它又能正常工作了。我没想到使用 GRUBntldr加载时你只会得到一个稍微更有用的错误消息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,那么可以使用“技巧”。磁盘被划分为三个主分区加上特别的主分区这被称为扩展分区

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

的存在扩展分区在 MBR 中的一个“插槽”中,全部逻辑分区标记为“正在使用“因此不可用。这就是您无法删除的原因sda2

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

在删除之前,sda2你必须先清空它,删除所有的逻辑分区它包含。也就是说,你必须删除sda5sda6里面扩展分区 sda2. 因为那会删除你的 Ubuntu 安装,所以你显然不是想这么做。

  • 为什么当我尝试安装 Windows 时,Windows 7 安装 DVD 会显示一个标有“OSselector”的 15MB 分区,但在安装 Windows 或 Ubuntu 后我都看不到它?

您看不到该分区,因为它被标记为“隐藏”分区。这是来自/dev/sdbBootInfo 摘要的分区表。操作系统选择器是(隐藏的)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 中看到并安装它。然后您就可以看到此分区中有哪些文件。

笔记:虽然gpartedLive CD 或 USB 中包含它,但安装 Ubuntu 时不包含它。要使用gparted安装在驱动器上的 Ubuntu,您需要先使用此命令安装它:( sudo apt-get install gparted您可能还可以使用 Ubuntu 软件中心 GUI 来安装它。)

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

我其实对 BURG 一无所知,所以我可能不是这方面的最佳建议。但从我在 BootInfo 摘要中看到的情况来看,BURG 目前没有用于任何事情。

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

我认为您可以直接删除目录/boot/burg。不过,最好先将目录重命名为其他名称以进行测试。如果重命名后没有遇到任何问题/boot/burg/boot/hidden-burg那么我认为删除该目录是安全的。


原始帖子

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

问题可能出在你的 Windows 启动配置上。你可以尝试安装(免费用于非商业用途)Windows 实用程序简易BCD并验证 Windows BCD 文件的内容是否正确。(滚动到页面底部并选择按钮Register。您不是需要提供姓名或电子邮件才能下载 EasyBCD。

通过 GRUB 启动 Windows 时出现此问题的时间是什么时候?您还记得您做了哪些可能导致此问题的更改吗?


您还可以尝试以下操作,以验证您使用的是正确的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. 如下所示编辑命令以使用 GRUBntldr代替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使用这些编辑的命令进行启动,看看是否会发生任何变化。

相关内容