有没有办法让 grub 从 Windows 自动重新启动到 Windows?

amo*_*san 13 grub2 dual-boot windows

我有一个双启动设置:

  1. Ubuntu 16.04 LTS
  2. 视窗

目前,当我想reboot从 Ubuntu 进入 Windows 时,我使用grub-reboot适当的数字作为参数。这很好用。

然而,有时 Windows 需要重新启动,以便某个程序可以安装或更新,我必须手动选择正确的 grub 启动菜单项。是否有类似的方式(来自 Windows UI)告诉 grub 启动哪个条目?

我想该grub-reboot命令将参数传递给一个文件,该文件又由 grub on 读取reboot

编辑(关于我选择的答案): 我目前正在考虑安装包含 /boot 的 ext4 驱动器并编写编辑脚本。这可能需要很长时间,因为我是在每周 40 小时的非技术工作之外的空闲时间做这件事。^^

Win*_*nix 20

最简单的方法是使用 Grub

grub从 Windows控制很麻烦。从 Windows 访问 Ubuntu 的第三方应用程序和一些黑客是必需的。但是,从这篇文章的顶部:如何更改我的双启动发行版上的顺序,您可以设置grub为自动重新启动到最后一个菜单选项。因此,当您最初使用 Windows 启动并在凌晨 2 点醒来运行更新时,grub将重新加载 Windows,以便它可以正常完成更新。

当您手动重新启动并从grub所有下一次重新启动中选择 Ubuntu 时,会自动加载 Ubuntu。如果您当前内核中存在错误并希望grub自动重新启动到您选择的旧内核版本,则此功能同样有效。

如何让 Grub 重复上次启动选择

这是相当直接的。使用sudo权力编辑/etc/default/grub和更改以下内容:

#GRUB_DEFAULT=0 # Rather than option #1, we'll always default to last boot choice.
GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
Run Code Online (Sandbox Code Playgroud)

您将注释掉的第一行并在其下方插入接下来的两行。

保存文件并在终端中输入:

sudo update-grub
Run Code Online (Sandbox Code Playgroud)

Ubuntu 命令行重新启动到 Windows

目前你使用这样的东西:

sudo grub-reboot x # Where x is Windows zero-based grub menu number
sudo reboot now
Run Code Online (Sandbox Code Playgroud)

从这个修改后的 Stack Exchange答案中,您可以使用默认的 grub 重新启动到 Windows。将此代码复制到您的~/.bashrc文件中:

function reboot-to-windows {
    WINDOWS_TITLE=`grep -i "^menuentry 'Windows" /boot/grub/grub.cfg|head -n 1|cut -d"'" -f2`
    sudo grub-set-default "$WINDOWS_TITLE"
    sudo reboot
}
Run Code Online (Sandbox Code Playgroud)
  • ~/.bashrc用新reboot-to-windows函数保存文件。
  • 关闭您当前的终端会话。
  • 打开一个新的终端会话~/.bashrc以加载更改。
  • 您可以键入: ~/.bashrc以将其重新加载到现有的终端会话中,但有些人建议不要这样做。

要从命令行重新启动到 Windows,请使用:

reboot-to-windows
Run Code Online (Sandbox Code Playgroud)

如果 Windows 在您不在时自动重新启动,则 Windows 将重新启动。这允许在 Windows 有时使用的多次重新启动周期内正常处理 Windows 自动更新。

  • @Jennifer 但是,问题是 XY 问题的一个实例。所以这个答案很有用。另外,它实际上是关于启动顺序的,因为它要求一种从 Windows UI 临时更改启动顺序的方法。 (2认同)

Oli*_*Oli 8

你可以复制什么grub-reboot。这只是一个最终调用的脚本:

grub-editenv /boot/grub/grubenv set next_entry="Windows"
Run Code Online (Sandbox Code Playgroud)

Windows您的 grub 菜单项的名称在哪里。可能不是那样

我跑了。它所做的一切都插入next_entry=Windows/boot/grub/grubenv. 在第 2 行。因此,如果它只是一个文件,则在文件系统上,您可以在 Windows 中执行完全相同的操作。这是一个需要解决的 Windows 问题,但这里是高级概述:

  • 挂载引导所在的磁盘。这可能是最难的一点,因为这可能是 ext4。可能会有所帮助,但您可能需要在 Windows 上运行 Linux 才能对其进行编辑,这并非令人难以置信。

    正如穆鲁指出的那样,它不需要那么难。你可以移动/boot到它自己的 FAT32 分区。这使得在 Windows 中安装变得微不足道。

  • next_entry=Windows在评论之后,在哈希之前插入(或其他)到文件中。

  • 卸载。
  • 重启。

在 Windows 中编写脚本完全超出了我的舒适区,而不是我们在这里所做的。但这应该是您需要做的全部。