从 Windows 编辑 grub?

从 Windows 编辑 grub?

现在我不确定这是否与主题相关,但如果不是,我不知道将其发布到哪里,超级用户似乎不合适,因为这与 grub 有关,但我退步了。

当我重新启动 Windows 时,它会启动到 grub,然后默认的 grub 选项是 Ubuntu,这导致尝试安装更新时非常烦人,所以我想做的是能够临时编辑 grub 启动配置,以便在重新启动后将 Windows 置于顶部,但Windows启动后,它会回到Ubuntu。

我该如何做呢?

答案1

问题的标题是 OP 提出的解决方案。标题可以改为“我怎样才能让 Grub 自动启动到上次使用的操作系统选择?”

这可以说是默认的 grub 行为。例如,我可能使用 Windows 玩了一周的《质量效应 IV》,但从未进入过 Ubuntu。或者我可能在 Ubuntu 14.04 中使用特定内核测试某些东西,我不喜欢在 50 次重启后每次都要选择它。

上面的各种评论中都有一个链接指向 Stack Exchange 的答案,该答案被提议为重复问题。我们也可以参考 AskUbuntu 问答:如何让 grub2 记住最后的选择?

在摘要编辑中/etc/default/grub,注释掉一行并在其下方插入两行:

#GRUB_DEFAULT=0 # Rather than first menu option, we'll default to last  OS.
GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

然后保存更改并运行sudo update-grub

瞧!在 Windows 中工作时,凌晨 3 点自动更新发生,系统重新启动到 Windows 并应用Stage 3 of 3

OP 提议“从 Windows 编辑 Grub?”在标题中作为问题的解决方案。然而,在说明原因之后,标题就变得很清楚了应该改为如下形式:“我如何确保 Windows 自动更新重启转到 Windows 而不是 Ubuntu?”

如果问题是“如何重新启动到上次选择的操作系统?”这显然是链接的重复。建议的新标题(或更短的标题)有其优点,因为其他人可能会搜索相同的问题。我知道我以前遇到过 Windows 更新-重启-更新问题,但从未想过要搜索此处的链接。

PS 您可以从 Windows 编辑 Grub,但是,您为什么要这么做呢?

答案2

更新:已解决(大部分) - 这个问题之所以如此棘手是因为 Windows 将 ESP 标记为隐藏,因此 WSL 收到拒绝访问错误。我认为这是由于 MBR2GPT 转换。更改这一点并不简单,如果有人好奇,我会解释你是否找不到自己的解决方案。

我在下面添加了实现此设置的 Windows 一半的最后步骤,我将省略运行 WSL 的过程,这很简单(提示:在 Windows 商店中搜索 Linux)。

我提出的答案需要 UEFI 和 GPT 启动,这在当今更为常见。我避免 Windows 无法识别 Linux 分区的问题的方法受到了 Windows 处理启动方式的启发。

在 MBR 中启动的传统方式是交给/boot/grub(第 2 阶段)并使用额外的空间来执行 MBR 无法执行的操作。EFI 分区本质上是您想要放置它的任何磁盘上的巨型 MBR。当我注意到 Windows 基本上将 Windows 启动管理器的第 2 阶段放在 EFI 分区上与 和 相同的目录中时,我恍然大悟。bootmgr.efi那么bootmgfw.efi为什么不把 Grub 第 2 阶段也放在那里呢?

总结

逐步解释如何回答 OP。

  1. ESP(EFI 系统分区)格式为 FAT32 - 非常适合跨平台!

  2. 在 Linux 上,mkdir /boot/efi然后在此安装 ESP;

    grub-install --boot-directory=boot/efi/EFI/grub /dev/nvme0n1
    

    等等。(希望我没有把事情过于简单化。)

  3. 重申其他人针对主要问题提出的解决方案

    GRUB_DEFAULT=saved
    GRUB_SAVEDEFAULT=true
    
  4. 主显示 — — #Grub Environment Block — —grub/grubenv位于 FAT32 分区上,在 Linux 中很容易修改:

    grub-editenv /boot/efi/EFI/grub/grubenv set next_entry=X
    

    其中从 0 开始编号Xmenuentry

  5. 好的,命令是:

    mountvol b: /S
    wsl sudo mount -t drvfs b: /mnt/b
    wsl sudo grub-editenv /mnt/b/EFI/grub/grubenv set next_entry=0
    wsl sudo umount /mnt/b
    mountvol b: /D
    

请参阅底部的 SU 链接:脚本

最后一个问题是,我现在太累了,无法编写脚本来执行此操作,wsl 命令不能单独工作,状态无法传递。我不是程序员,我只是需要一些时间来弄清楚如何将这三个 Linux 命令串联在一起。这足以满足“这个答案是否有效”的要求。我很快就会更新最终版本。例如。目前,您必须启动 WSL 终端才能使用此解决方案。

我将更新这个问题以寻求帮助编写批处理脚本 -如何在 Windows Subsystem for Linux(WSL)中编写脚本并从批处理文件中调用它?

答案3

我不知道如何在 Windows 上执行此操作,但您可以使用 Ubuntu 中的 GUI 完成您描述的大部分操作。

这是避免重新启动 Windows 始终启动到 Ubuntu 的方法

执行以下步骤。完成这些步骤后,重新启动 Windows 将始终自动启动到 Windows。重新启动 Ubuntu 将始终自动重新启动到 Ubuntu。您不必每次都进行编辑。只需配置 Grub 以记住最后的选择。最后的选择将始终是自动默认,无需每次进一步手动更改。

安装 GUIGrub 定制器

$ sudo add-apt-repository ppa:danielrichter2007/grub-customizer
$ sudo apt-get 更新
$ sudo apt-get 安装 grub-customizer

您可以从 GUI 中选择将哪个 Boot 置于顶部,然后单击向上/向下箭头来定位其列出方式。

在常规选项卡下,您可以进一步自定义 Grub 的行为。您还可以单击Advance以更改启用、禁用、添加、删除或更改 grub 文件的行。

临时启动到 Windows 部分可以通过以下方式实现:

1) 选择 GRUB_DEFAULT 条目 -> 单击值列。将“0”替换为
   带有“已保存”
2)添加名为“GRUB_SAVEDDEFAULT”的条目 - >将值设置为“true”
3)现在点击关闭->保存(当你点击保存时,Grub 将更新到你的新
   配置)

现在 Windows 重启后不会返回到 Ubuntu

现在,当您执行 Windows 更新和其他维护时,系统将始终启动到 Windows(一旦您启动了 Windows),直到您选择返回 Ubuntu。

答案4

虽然从 Linux 编辑 Windows 分区内容是可行的,但反过来却不行。

Windows 本身不支持 Linux FS。一些工具可以帮你做到这一点但这些都无济于事。

我自己还没有测试过,但最近似乎有人将 GRUB2 移植到 Windows10、8、7、Vista 和 XP,均在 BIOS 和 EFI 模式下。

我怀疑,即使一切按预期进行,也不会像喝一杯水那么简单。

相关内容