Grub2 检测到两个 Windows 7(加载程序)条目

Grub2 检测到两个 Windows 7(加载程序)条目

这是我向 Ubuntu 社区提出的第一个问题。

我对 Ubuntu 还不熟悉,但我了解基础知识,也知道如何使用终端。我还知道如何在寻求帮助之前搜索现有的解决方案。我在网上到处搜索,了解了很多 Grub2 的工作原理。但没有什么能帮助我解决问题。

我的问题是这样的:我有一台有三个硬盘的电脑。它以前安装的是 Windows XP,但我升级到了 Windows 7。我还安装了 Ubuntu 12.04 LTS(Precise Pangolin)。

在安装 Windows 7 时,出现了故障,我不得不重新启动安装。之后,我安装了 Ubuntu。在费了一番周折删除了 XP 操作系统的所有痕迹后(Ubuntu 自动检测到了 XP,但 Windows 7 没有检测到),我让这两个操作系统完美地运行。或者说,几乎完美。

在启动时,Grub2 通常会显示 Ubuntu、Ubuntu 恢复模式、其他版本的 Linux、memtest,然后是Windows 7 (loader) on /dev/sda1Windows 7 (loader) on /dev/sdb1

我最终删除了恢复模式、其他版本和 Memtest。现在,当我运行:

sudo update-grub

我得到了这个打印输出:

Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.2.0-26-generic
Found initrd image: /boot/initrd.img-3.2.0-26-generic
Found Windows 7 (loader) on /dev/sda1
Found Windows 7 (loader) on /dev/sdb1

我想删除“/dev/sda1 上的 Windows 7 (loader)”,因为它是一个不应该存在的损坏条目,并且一定是在我第一次尝试 Windows 7 时安装的。

我在文件夹中找不到 Windows 7 条目/etc/grub.d而且我不知道在哪里查找。

这是我的硬盘布局:

/dev/sda1/ (1.82 TiB), NTFS ("Media")

/dev/sdb1/ (100 Mib), NTFS ("System Reserved")
/dev/sdb2/ (149 GiB), NTFS ("Windows 7")
/dev/sdb3/ (149 GiB), Extended (" ")
    /dev/sdb4/ (145 GiB), ext4 (" ")
    /dev/sdb5/ (4 GiB), linux-swap (" ")

/dev/sdc1/ (488.28 GiB), NTFS ("Downloads")
/dev/sdc2/ (488.28 GiB), NTFS ("AltMedia") 
/dev/sdc3/ (886.45 GiB), NTFS ("Personal")
unallocated (2.09 MiB), unallocated

我认为发生了什么:Windows 7 首次安装时安装得很糟糕。我再次安装了它。首先,Windows XP 可以指导引导加载程序转到何处,因此将其放在 上/dev/sdb1/。但是,第二次没有这样的指南,所以机器将另一个引导加载程序放在 上/dev/sda1/。顺便说一下,sda1 是 2TB 驱动器上的唯一分区。根据 ,似乎不存在引导记录分区gedit。我不确定 Grub2 从哪里获得此信息。但是,它就在那里。

有人能帮我做些什么吗?或者,我还需要补充更多信息吗?

答案1

如果 sda 是外部驱动器,则快速解决方案

我不知道您的/dev/sda硬盘是内置还是外置。如果是外置硬盘,请在运行update-grub2命令之前拔下外置硬盘。这应该会很快有所帮助。

解决方案:

安装/dev/sda1驱动器。(我想你可以很容易地做到这一点)。然后在该驱动器中查找名为 的文件夹Boot和名为 的文件bootmgr。删除文件夹和文件。然后update-grub2再次运行命令。

您可能需要再次安装 grub2。我看到您的 Ubuntu 安装在/dev/sdb,命令将是

sudo grub-install /dev/sdb
sudo update-grub 

问题的原因是什么:

Grub2 查找 Windows 启动文件来检测 Windows 条目。尽管您删除了 Windows 7,但 Windows 7 启动文件并未被删除(即“Boot”文件夹和“bootmgr”文件)。由于 Windows 7 启动文件在那里,grub2 只是假设那里也有 Windows 7 安装。因此有双重条目。

答案2

您应该在 中找到您要查找的内容/boot/grub/grub.cfg。此文件由 动态生成update-grub2。我正在双启动 Ubuntu 32 位和 64 位。如果我想删除一个,我只需从此文件中删除它的部分即可。以下是我的一个条目的样子-

menuentry 'Ubuntu, with Linux 3.2.0-23-generic' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    gfxmode $linux_gfx_mode
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos2)'
    search --no-floppy --fs-uuid --set=root 94916094-afe9-4b74-9413-a3c54b39eb91
    linux   /boot/vmlinuz-3.2.0-23-generic root=UUID=94916094-afe9-4b74-9413-a3c54b39eb91 ro   quiet splash $vt_handoff
    initrd  /boot/initrd.img-3.2.0-23-generic
}

更改应立即生效,因此请备份并小心谨慎。此外,如果您update-grub2再次运行,您在此文件中所做的任何更改都将被完全覆盖。

相关内容