在Windows分区中安装了grub时,如何启动Windows 7?


15

原标题:如何解决使用grub在同一分区上启动Windows 7?

我已经研究了这个问题两到三天,但我还是空了。

基本上,分区1是Windows 7,分区2是Ubuntu 12.04。我告诉Ubuntu将其安装到分区2中,并在分区1上安装GRUB,这很好。但是现在的问题是我无法启动Windows7。选择它后,它仅返回GRUB菜单。

根据我的研究,如果我可以编辑GRUB来启动Windows 7“ mbr”或启动加载程序\windows\system32\winload.exe(不使用Windows 7修复盘),则可以解决我的问题。这有可能吗?


Boot-Repair-Info的URL是http://paste.ubuntu.com/981952/


命令输出 sudo blkid

/dev/sda1: UUID="1EA0019AA0017A13" TYPE="ntfs" 
/dev/sda2: UUID="e4402f9e-83df-4dc3-8913-69b28314d253" TYPE="ext4" 
/dev/sda3: LABEL="Vault Drive" UUID="74145BFD145BC132" TYPE="ntfs" 
/dev/sda4: UUID="1c030d32-657f-4a78-9468-307d9e09a977" TYPE="ext4"

Answers:


14

您可以按如下所述使用引导修复工具创建Bootinfo摘要报告,然后将链接发布到该报告吗?

我知道您已经提供了有关启动配置的一些详细信息。但是,我要的报告包含更详细的信息,可能会使我们更好地理解为什么无法使用GRUB引导Windows。

如何使用引导修复程序提供“ Bootinfo摘要”


由于仍然可以引导Ubuntu,因此可以使用以下命令安装并运行Boot-Repair工具apt-get,然后将其用于Create a Bootinfo summary

在终端窗口中运行以下命令以安装该boot-repair工具。

sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install -y boot-repair
  1. 完成后,输入命令boot-repair以启动工具。
  2. 稍有延迟后,boot-repair将询问您是否要下载其最新版本。由于您刚刚安装了最新版本,请回答No
  3. 如果boot-repair要求安装pastebinit软件包,请用响应Yes
  4. 该工具现在将扫描您的系统,并(最终)显示下图所示的窗口。单击Create a Bootinfo summary框/按钮。这将收集有关系统引导配置的信息,但不会进行任何更改。


    初始引导修复窗口

  5. 创建了bootinfo摘要后,boot-repair将显示一条包含URL的消息,该URL应该如下所示:http://paste.ubuntu.com/123456/

    请更新/编辑您的问题并添加此URL。该链接指向的pastebin中的信息将(希望)有助于我们诊断问题。

我认为覆盖Windows分区的VBR导致了此问题。

我的理解是启动操作系统有几个步骤。就您而言,我认为以下步骤会发生。

  1. 您计算机上的BIOS尝试在硬盘驱动器的第一个扇区中运行代码。该第一扇区通常被称为MBR(主引导记录)
  2. 除了MBR,每个分区还可以具有启动记录。它通常称为卷启动记录或VBR。硬盘驱动器上的MBR将控制转移到分区1(Windows分区)的VBR。
  3. Windows希望分区的VBR朝着引导诸如Windows 7的操作系统迈出下一步。因此Windows最初会安装一个VBR,它将控制权转移到bootmgrWindows分区中的Windows 程序。

    但是,当您指示Ubuntu安装程序将GRUB安装到Windows分区时,GRUB似乎已用其自己的Windows VBR替换了。该GRUB VBR显示GRUB引导菜单。
  4. GRUB当前用于引导Windows的指令实际上是在Windows分区中定位VBR并将控制权转移到该分区。Windows分区中的VBR是GRUB的VBR。仅将控制权转移给它(重新)将显示GRUB引导菜单。

不幸的是,我不确定什么是解决此问题的最佳方法。我们要小心,不要试图破坏GRUB,并且在尝试解决Windows的启动问题时,不可能在您的计算机上引导任何东西。

以下是您的Bootinfo摘要中的一些信息的副本,以供参考。我在上面的评论基于此信息。

============================= Boot Info Summary: ===========================

 => Grub2 (v1.99) is installed in the MBR of /dev/sda and looks at sector 1 
    of the same hard drive for core.img. core.img is at this location and 
    looks for (,msdos2)/boot/grub on this drive.

sda1: ______________________________________________________________________

    File system:       ntfs
    Boot sector type:  Grub2 (v1.99)
    Boot sector info:  Grub2 (v1.99) is installed in the boot sector of sda1
                       and looks at sector 44090872 of the same hard drive 
                       for core.img. core.img is at this location and looks
                       for (,msdos2)/boot/grub on this drive. No errors 
                       found in the Boot Parameter Block.
    Operating System:  Windows 7
    Boot files:        /bootmgr /Boot/BCD /Windows/System32/winload.exe

sda2: ______________________________________________________________________

    File system:       ext4
    Boot sector type:  -
    Boot sector info: 
    Operating System:  Ubuntu 12.04 LTS
    Boot files:        /boot/grub/grub.cfg /etc/fstab /boot/grub/core.img

引导Windows 7的可能解决方法

以下是编辑GRUB引导命令的建议,该命令可能允许您引导Windows7。我不确定这是否可行,但似乎值得尝试。

当前,您grub.cfg使用下面的GRUB启动命令来启动Windows 7。

menuentry "Windows 7 (loader) (on /dev/sda1)" --class windows --class os {
    insmod part_msdos
    insmod ntfs
    set root='(hd0,msdos1)'
    search --no-floppy --fs-uuid --set=root 1EA0019AA0017A13
    chainloader +1
}

我建议您尝试更改此设置并改用这些命令。

menuentry "Windows 7 (loader) (on /dev/sda1)" --class windows --class os {
    insmod part_msdos
    insmod ntfs
    insmod ntldr
    set root='(hd0,msdos1)'
    search --no-floppy --fs-uuid --set=root 1EA0019AA0017A13
    ntldr ($root)/bootmgr
}

这是执行此操作的步骤。

  1. 将系统引导至GRUB菜单。
  2. 选择(突出显示)GRUB引导菜单项Windows 7 (loader) (on /dev/sda1)
  3. 按下e以编辑Windows 7的GRUB引导命令。
  4. 如上所示,对该命令列表进行两项更改menuentry
    • 添加命令 insmod ntldr
    • 将命令更改
      chainloader +1

      ntldr ($root)/bootmgr
  5. Ctrl+ XF10使用这些编辑的命令启动。

注1:

如果上述解决方法成功加载Windows 7启动菜单,则可以通过以下方式将其设置为半永久性

  1. 使用sudo编辑该文件/etc/grub.d/40_custom并添加第二,改性menuentry如上所示。(如果这样做,我还建议您更改此“自定义”条目的标题。)
  2. 运行命令sudo update-grub以更新/boot/grub/grub.cfg以包括您的自定义条目。(启动时,它将在GRUB菜单的底部。)

我认为以上建议只是部分解决方案。更好的解决方案是将Windows VBR还原到Windows分区,而不破坏GRUB的启动能力。

我认为...但不确定100%是否bootsect可以使用Windows恢复命令来执行此操作。如果您想冒险,下面概述了一种可行的方法。

  • 引导Windows时,按F8弹出Advanced Boot Options菜单。
  • 选择Repair Your Computer条目。
  • 穿过下一个窗户,直到到达System Recovery Options
  • 选择 Command Prompt
  • 运行命令 bootsect /nt60 C:

但是,您可能还需要稍等一下,然后再看一下问题的其他答案,然后再尝试上述操作。

笔记2:

在搜索其他内容时,我在AskUbuntu上遇到了另外两个与您的问题相关的问题。

  1. 安装Ubuntu 11后Windows 7无法启动
  2. 安装Ubuntu后Windows 7无法启动

我不确定这些问题能提供多少帮助。第二个问题的答案是使用命令bootrec /fixboot为Windows分区还原VBR。从这个问题中我的理解是使用bootrec /fixboot命令可以解决问题。

但是第二个问题,坚持bootrec /fixboot没有解决这个问题。

(就那里发生的事情打败我了。)


谢谢您的回复。我很好,很幸运,但是如果其他人不知道,他们现在就可以了。Boot-Repair-Info的网址是http://paste.ubuntu.com/981952/
2012年

1
我认为您的问题是由于将GRUB安装到Windows分区中引起的。查看我的答案的更新。
不合理的约翰

那你认为我能做什么?我应该使用bootrec然后重新安装grub吗?还是有另一种方法?
Sim 2012年

您可以照常修复Windows启动,完成后Windows会自动启动,甚至不会询问您(Windows无法识别Linux)。在此问题解决之后,您可以从USB引导Linux并再次运行GRUB,这次不要触摸Windows分区;)
pzkpfw 2012年

为我的答案添加了一个可能的临时解决方法的建议。
不合理的约翰

7
menuentry "Windows 7" {
    insmod ntfs
    set root=(hd0,1)
    drivemap -s (hd0) ($root)
    ntldr /bootmgr
    #or chainloader +1
}

如果您将Windows安装在(hd0,1)以外的分区上,则需要使用drivemap命令引导到Windows。Chainloader +1或ntldr / bootmgr均可用于启动Windows 7。

您所做的是修改了第一个分区的VBR。从安装CD引导时,您可以通过在cmd的Windows恢复模式下执行以下命令来还原该命令:

bootrec.exe /FixMbr  

bootrec.exe /FixBoot  

bootrec.exe /RebuildBcd

这是唯一有效的答案。+1
雏菊

1

我真的不知道 您应该尝试使用Windows Repair磁盘修复Windows的“(UN)booting”(选择Command Prompt运行该bootsect.exe实用程序。Bootsect位于引导文件夹内,因此将目录更改为boot。现在运行bootsect /nt60 C:\(不带)。如果您最初在C:分区中安装了Windows 7 ,则可以运行“ bootsect / nt60 SYS”或“ bootsect / nt60 ALL”)

然后重新安装GRUB。


感谢您的答复。我的意思是在选择它之后是g靴子,而不是窗户。研究表明,要修复mbr的启动,我们应该使用“ bootrec.exe / fixboot”,然后使用“ bootrec.exe / fixmbr”。您的方法与bootrec相同还是不同?
Sim 2012年

以我的经验,将Ubuntu安装为双引导后,最好在重新引导时运行Windows并自行进行修复,然后再回到Ubuntu。我每次都遵循此方法,并发现成功。
beeju 2012年

真正。对于Windows,我使用EasyBCD
Sim

0

GRUB已安装在Windows分区引导扇区(PBR)中,如BootInfo所示:

sda1: __________________________________________________________________________

File system:       ntfs
Boot sector type:  Grub2 (v1.99)
Boot sector info:  Grub2 (v1.99) is installed in the boot sector of sda1 
                   and looks at sector 44090872 of the same hard drive 
                   for core.img. core.img is at this location and looks 
                   for (,msdos2)/boot/grub on this drive. No errors found 
                   in the Boot Parameter Block.
Operating System:  Windows 7

这样可以防止Windows启动。

解决方案在这里很好地描述:http : //ubuntuforums.org/showpost.php?p=11693662&postcount=1


0

我遇到了同样的问题,并希望确认对我有用的解决方案,希望它对其他人有帮助...

我编辑了grub.cfg以在此处反映更改:

menuentry "Windows 7 (loader) (on /dev/sda1)" --class windows --class os {
    insmod part_msdos
    insmod ntfs
    insmod ntldr
    set root='(hd0,msdos1)'
    search --no-floppy --fs-uuid --set=root 1EA0019AA0017A13
    ntldr ($root)/bootmgr
}

也就是说,我添加了...

insmod ntldr

并将最后一行更改为...

ntldr($ root)/启动

我将尝试尽快恢复VBR,并将报告结果。


0

解决了我的Windows 10启动问题....

menuentry "Windows 10 (loader) (on /dev/sda1)" --class windows --class os {
    insmod part_msdos
    insmod ntfs
    insmod ntldr
    set root='(hd0,msdos1)'
    search --no-floppy --fs-uuid --set=root 1EA0019AA0017A13 
    ntldr ($root)/bootmgr
}

hexadec.code可能不同


2
我不确定这是否真正属于这个问题……
Zanna
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.