这是我向 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/sda1
和Windows 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
再次运行,您在此文件中所做的任何更改都将被完全覆盖。