原标题:我该如何解决使用 grub 在同一个分区上启动(取消启动)windows 7 的问题?
我已经研究这个问题两三天了,但一无所获。
基本上,分区 1 是 Windows 7,分区 2 是 Ubuntu 12.04。我告诉 Ubuntu 安装到分区 2,并在分区 1 上安装 GRUB,这样就可以正常工作。但现在的问题是我无法启动 Windows 7。在我选择它之后,它只是返回到 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"
答案1
您能否使用如下所述的引导修复工具创建 Bootinfo 摘要报告,然后发布该报告的链接?
我知道您已经提供了一些有关启动配置的详细信息。但是,我要求的报告包含更详细的信息,可能让我们更好地了解您无法使用 GRUB 启动 Windows 的原因。
如何使用启动修复提供“启动信息摘要”
由于你仍然可以启动 Ubuntu,你可以安装并运行启动修复工具使用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
- 完成后,输入命令
boot-repair
启动该工具。 - 稍等片刻后,
boot-repair
系统会询问您是否要下载最新版本。由于您刚刚安装了最新版本,请回答No
。 - 如果
boot-repair
要求安装该pastebinit
包,请响应Yes
。 - 该工具现在将扫描您的系统并(最终)显示下图所示的窗口。单击
Create a Bootinfo summary
框/按钮。这将收集有关系统启动配置的信息,但不会做出任何改变。
- 创建 bootinfo 摘要后,
boot-repair
将显示一条包含 URL 的消息,该 URL 应如下所示:http://paste.ubuntu.com/123456/
。
请更新/编辑您的问题并添加此 URL。此链接指向的 pastebin 中的信息(我希望)可以帮助我们诊断问题。
我认为覆盖 Windows 分区的 VBR 导致了此问题。
我的理解是启动操作系统有几个步骤。对于你的情况,我认为会发生类似以下步骤的情况。
- 计算机上的 BIOS 会尝试运行硬盘驱动器第一个扇区中的代码。这个第一个扇区通常称为MBR(主引导记录)。
- 除了 MBR 之外,每个分区还可以有一个引导记录。它通常被称为卷引导记录。硬盘上的 MBR 将控制权转移到分区 1(即 Windows 分区)的 VBR。
- Windows 期望分区的 VBR 能够启动 Windows 7 等操作系统。因此,Windows 最初会安装一个 VBR,它会将控制权转移到 Windows
bootmgr
分区中的 Windows 程序。
但是,当您指示 Ubuntu 安装程序将 GRUB 安装到 Windows 分区时,GRUB 似乎已用自己的 VBR 替换了 Windows VBR。此 GRUB VBR 显示 GRUB 启动菜单。 - GRUB 当前用于启动 Windows 的指令本质上是定位 Windows 分区中的 VBR 并将控制权移交给它。Windows 分区中的 VBR 是 GRUB 的 VBR。将控制权移交给它只是(重新)显示 GRUB 启动菜单。
不幸的是,我还不确定修复此问题的最佳方法是什么。当我们尝试修复启动 Windows 的问题时,我们要小心,不要破坏 GRUB 并导致您的计算机上无法启动任何程序。
以下是您 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 启动命令的建议,它可能允许您启动 Windows 7。我不确定这是否有效,但似乎值得尝试。
目前,您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
}
以下是执行此操作的步骤。
- 将系统启动到 GRUB 菜单。
- 选择(突出显示) GRUB 启动菜单项
Windows 7 (loader) (on /dev/sda1)
。 - 按下e编辑 Windows 7 的 GRUB 启动命令。
- 对此命令列表进行两处更改,如上所示
menuentry
。- 添加命令
insmod ntldr
- 将命令更改
chainloader +1
为ntldr ($root)/bootmgr
- 添加命令
- 按Ctrl+X或F10使用这些编辑的命令进行启动。
注1:
如果上述解决方法成功加载 Windows 7 启动菜单,那么您可以通过以下方式使其半持久化:
- 使用
sudo
编辑文件/etc/grub.d/40_custom
并添加上面显示的第二个修改内容menuentry
。(如果您这样做,我还建议您更改此“自定义”条目的标题。) - 运行命令
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 上发现了另外两个与您的问题相关的问题。
我不确定这些问题能提供多少帮助。第二个问题的答案是使用命令bootrec /fixboot
恢复 Windows 分区的 VBR。我对这个问题的理解是使用bootrec /fixboot
命令解决了问题。
但第二个问题坚持bootrec /fixboot
认为不是解决这个问题。
(我完全不知道那里到底发生了什么。)
答案2
menuentry "Windows 7" {
insmod ntfs
set root=(hd0,1)
drivemap -s (hd0) ($root)
ntldr /bootmgr
#or chainloader +1
}
如果您在 (hd0,1) 以外的分区上安装了 Windows,则需要使用 drivemap 命令来启动 Windows。Chainloader +1 或 ntldr /bootmgr 都可用于启动 Windows 7。
您所做的是修改了第一个分区的 VBR;您可以在从安装 CD 启动时在 cmd 中的 Windows 恢复模式下执行以下命令来恢复它:
bootrec.exe /FixMbr
bootrec.exe /FixBoot
bootrec.exe /RebuildBcd
答案3
我不知道“(联合国)启动)”
您应该尝试使用 Windows 修复磁盘修复 Windows(选择Command Prompt
运行该bootsect.exe
实用程序。Bootsect 位于启动文件夹内,因此请将您的目录更改为。如果您最初在分区中安装了 Windows 7,boot
请运行(不带引号) 。或者,您可以运行“bootsect /nt60 SYS”或“bootsect /nt60 ALL”)bootsect /nt60 C:\
C:
然后重新安装 GRUB。
答案4
我遇到了同样的问题,并想确认对我有用的解决方案,希望它能够帮助其他人......
我编辑了 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
}
也就是说,我添加了...
修改注册表
并将最后一行改为...
ntldr($root)/bootmgr
我将很快尝试恢复 VBR,然后报告结果。