危险!

危险!

我有一个双启动系统,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 即可。

相关内容