我在朋友的电脑上安装了 Linux 发行版。他不太会使用 Linux 甚至 Windows,我希望它尽可能简单。当我安装 GRUB 时,它检测到 HP 为他安装的恢复分区,并且它是列表中的第一个 Windows。
在谷歌上搜索并查看 grub 手册和配置文件后,我仍然不知道如何隐藏 GRUB 中的分区。我查看了30_osprober
,但没有看到任何排除操作系统的明确方法。
有人能指出我从 GRUB 菜单中排除操作系统/分区的正确方向吗?
答案1
//编辑// 因编辑而更改(我发誓在我输入时这已经更改了)
一个肮脏的解决方案是编辑 grub.cfg,但每次内核升级时都需要这样做。
在 grub v2 中:(注意:不推荐这样做)
vim /boot/grub/grub.cfg
正确的方法是编辑 /etc/grub.d/30_os-prober(如你所述)并告诉它忽略某些分区,可以找到一个很好的指南这里
肮脏的解决方案#2 可能是运行一个脚本,为您的朋友从 grub.cfg 中注释掉该行。
答案2
我遵循了这个帖子(第 6 节)
GRUB 2 将查找并创建 Windows (Vista) 恢复分区的菜单项。至少在 Vista 中,菜单名称与普通 Vista 操作分区相同,唯一的区别是分区名称。要从菜单中删除恢复分区项:
备份现有
/etc/grub.d/30_os-prober
文件,从备份中删除可执行位,以便它不会在更新期间运行,然后打开原始文件进行编辑(该部分从第 134 行开始):sudo cp /etc/grub.d/30_os-prober /etc/grub.d/30_os-prober.original && sudo chmod -x
/etc/grub.d/30_os-prober.original
gksu gedit +83 /etc/grub.d/30_os-prober &
确定确切的标题和 Windows 恢复分区。它们可以在 中找到
/boot/grub/grub.cfg file
。添加以下条目。在示例中,菜单项显示为“Windows Vista (loader) (on /dev/sda1)”。请确保选择正确的分区,因为正常标题和恢复标题的标题可能相同。 和 的内容$LONGNAME
应${DEVICE}
为恢复分区菜单项中引号之间的准确内容: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 # Added to remove Windows Recovery if [ "$LONGNAME" = "Windows Vista (loader)" ] && [ "${DEVICE}" = "/dev/sda1" ] ; then continue fi # End Added
保存文件,然后运行:
sudo update-grub
我不得不考虑 Windows 7(方法相同),而不是 Vista,并且一切都正常。
答案3
在文件中,/etc/default/grub
您可以添加GRUB_OS_PROBER_SKIP_LIST
用空格分隔的列表值UUID@path_to_device
,以让 OS_PROBER 跳过那些文件系统。
例如:
GRUB_OS_PROBER_SKIP_LIST=12345@/dev/sda1
您可以从 获取 UUID 列表lsblk -fs
。