我曾经在其中一个硬盘驱动器上安装了双启动系统 - Ubuntu 和 Windows 7。然后,我添加了一个 SSD,现在它是我的主要硬盘驱动器,我完全用它来运行 Windows 7,而 Ubuntu 则保留在旧硬盘中。我恢复了 Grub,所以一切都正常,除了一件事。
每次我更新 grub 时,它都会检测两个窗口:
Found Windows 7 (loader) on /dev/sda1
Found Windows 7 (loader) on /dev/sdb1
显然,我不想让它检测到 sdb1 上的 Windows。因为我不再使用它(我手动删除了文件)。在不完全清除分区的情况下,我该怎么做?
答案1
我不确定它使用什么来检测操作系统。我会尝试快速重新格式化分区。
如果没有其他方法可行,这里有一个补丁可以/etc/grub.d/30_os-prober
让你指定你想要跳过的任何分区:
/etc/grub.d/30_os-prober 修改
可以将这些行添加到文件(中间部分)以跳过您不想在菜单中显示的任何分区。将字符串留空将不会跳过任何内容。
添加以
############## Patch to prevent some partitions being autodetected
通过
############## End of patch
:
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`"
############## Patch to prevent some partitions being autodetected
SKIP_THESE_DEVICES="sdb1"
# SKIP_THESE_DEVICES="sda1 sdb1 sdb2" example for multiple devices
# SKIP_THESE_DEVICES="" example for no devices
PARTITIONNAME="`echo ${DEVICE} | cut -c 6- 2> /dev/null`"
if [ "`echo ${SKIP_THESE_DEVICES} | grep -e ${PARTITIONNAME} 2> /dev/null`" ] ; then
continue
fi
############## End of patch
if [ -z "${LONGNAME}" ] ; then
LONGNAME="${LABEL}"
fi
更改此文件后,您当然需要运行sudo update-grub
以重新生成菜单。当终端对每个条目显示“找到...”时,您应该能够从终端的输出中看到结果;您可以先在修改之前运行它,然后将输出与修改之后的输出进行比较。您不应该看到已删除的条目。
答案2
如果仍然检测到 Windows 7,则意味着您创建的分区仍然包含一些 Windows 7 的引导加载程序文件。 为什么不删除分区本身? 这肯定会解决这个问题。
我建议您备份所有需要的文件,然后删除旧硬盘中的 Windows 7 分区。之后更新 grub。
我认为我不需要向您推荐工具,但据我所知,Gparted 是最好的分区编辑器。
答案3
您应该使用 Gparted live cd 删除旧硬盘上的 Windows 分区。但执行此操作后,您可能需要修复 grub。
答案4
您可以使用它wipefs
来擦除文件系统元数据,这样 NTFS Windows 分区就不再被检测到了。您将丢失该分区中的所有数据。
你只需运行
sudo wipefs -a /dev/sdb1
该命令在运行后立即结束,并且比删除分区或删除文件更快。