我有一个双启动系统,Ubuntu 12.04 和 Windows 7,使用 GRUB2(带有 Burg)作为引导加载程序。
由于某种原因,Windows 安装在启动菜单中出现了两次:
Ubuntu GNU/Linux, with Linux 3.2.0-24-generic
Ubuntu GNU/Linux, with Linux 3.2.0-24-generic (recovery mode)
Windows 7 (loader) (on /dev/sda1)
Windows 7 (loader) (on /dev/sda2)
如果我查看我的分区表,/dev/sda2
是 Windows 安装的 C:\,/dev/sda1
是“系统保留”分区(如果我没记错的话,这是 Windows 自己的引导加载程序)。此外,gparted 显示/dev/sda2
带有标志的分区(但没有其他分区)boot
:
这是怎么回事?我只想有 Ubuntu 的条目和一启动菜单中有 Windows 条目 - 我如何删除其中一个?
答案1
您说得对,Windows 7 默认将其“启动”分区放在上面/dev/sda1
,但也可以让 Win 7 将所有内容放在其“根”分区上 - 例如通过安装到预先格式化的 NTFS 分区。
也许您以前调整过 Windows,使得 bootloader/bootable 标志打开了/dev/sda2
?您能成功从两个都Windows 条目?如果是,删除其中一个是安全的。
如何删除条目
危险!
这可能会使您的 Windows 无法启动;要按照以下步骤操作,您必须在
sudo
适当的位置插入并确保 NTFS 分区事先以读写方式安装。
cd /mnt/where-o-where-my-ntfs-be rm -rf bootmgr 启动 BOOTSECT.BAK 恢复 cd && 卸载 /mnt/ntfs1 更新 grub
那应该试试吧——显然我还没有在双启动系统上试过。如果不起作用,请告诉我,我会给你更危险的方法,或者查看源代码,grub
看看它如何检测 Windows 分区,以获得明确的答案。
答案2
我已经持续不断地解决了这个问题,满足了我的需求。我稍微修改了 /etc/grub.d/30_os-prober 脚本:
从第 150 行开始(只需添加变量和条件来检查是否已经找到 Windows 7):
wubi=
for OS in ${OSPROBED} ; do
DEVICE="`echo ${OS} | cut -d ':' -f 1`"
LONGNAME="`echo ${OS} | cut -d ':' -f 2 | tr '^' ' '`"
LABEL="`echo ${OS} | cut -d ':' -f 3 | tr '^' ' '`"
BOOT="`echo ${OS} | cut -d ':' -f 4`"
if [ -z "${LONGNAME}" ] ; then
LONGNAME="${LABEL}"
fi
echo "Found ${LONGNAME} on ${DEVICE}" >&2
改成:
wubi=
windows7_found=
for OS in ${OSPROBED} ; do
DEVICE="`echo ${OS} | cut -d ':' -f 1`"
LONGNAME="`echo ${OS} | cut -d ':' -f 2 | tr '^' ' '`"
LABEL="`echo ${OS} | cut -d ':' -f 3 | tr '^' ' '`"
BOOT="`echo ${OS} | cut -d ':' -f 4`"
if [ -z "${LONGNAME}" ] ; then
LONGNAME="${LABEL}"
fi
# Mi-La patch to add Windows 7 only once
if [ "${LONGNAME}" = "Windows 7 (loader)" ]; then
if [ "${windows7_found}" = yes ]; then
echo "Skipping duplicated entry for ${LONGNAME} on ${DEVICE}." >&2
continue
else
windows7_found=yes
fi
fi
echo "Found ${LONGNAME} on ${DEVICE}" >&2
至少在 grub 不再更新之前应该可以正常工作。尽情享受吧。
编辑:Ubuntu 12.10
30_os-prober 稍有变化,但在以下几行之后使用相同的 if:
if [ -z "${LONGNAME}" ] ; then
LONGNAME="${LABEL}"
fi
效果很好。
答案3
只需通过终端编辑 Burg 配置文件:1.) 打开终端 2.) 输入
Sudo gedit /boot/burg/burg.cfg
3.) 找到菜单项“Windows ...”并在--class os 后添加:
--group group_secondary
其中,“group_secondary”是将一组操作系统组合在一起的唯一名称。如果您查看该文件,您将看到 Linux 内核具有:
--group group_main
现在您的 Windows 和 Windows 恢复应该如下所示:
menuentry "Windows 8 (loader) (on /dev/sdc1)" --class windows --class os --group group_secondary {
insmod ntfs
set root='(hd2,1)'
search --no-floppy --fs-uuid --set b896bf7f96bf3d26
drivemap -s (hd0) ${root}
chainloader +1
}
menuentry "Windows 8 (loader) (on /dev/sdc2) (recovery mode)" --class windows --class os --group group_secondary {
insmod ntfs
set root='(hd2,2)'
search --no-floppy --fs-uuid --set c46cc0a06cc08f1c
drivemap -s (hd0) ${root}
chainloader +1
}
4.) 最重要的部分!!! 保存!!! 现在您可以重新启动或开始:
sudo burg-emu
5.) 在选择屏幕上按“F”折叠文件夹。
*** 附注:折叠时,Burg 将使用文件中的第一个菜单项作为折叠模式下的默认菜单项。
答案4
sudo nano /boot/grub/grub.cfg 然后注释第二个 Windows 条目 (sda2),即在条目开始处添加一个“#”。它将删除该条目而不影响您的文件。burg 也一样。只需在命令中将 grub 替换为 burg 即可。