grub是否可以从Windows自动重启进入Windows?


12

我有双重启动设置:

  1. Ubuntu 16.04 LTS
  2. 视窗

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

但是有时Windows需要重新启动,因此某些程序可以安装或更新,而我必须手动选择正确的grub引导菜单项。是否有类似的方法(从Windows UI)告诉grub要引导哪个条目?

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

编辑(关于我选择的答案): 我目前正在研究装入包含/ boot的ext4驱动器并编写编辑脚本。这可能会花费相当长的时间,因为我除了每周40小时的非技术性工作以外的空闲时间都在这样做。^^


评论不作进一步讨论;此对话已转移至聊天
terdon

将来请使用最终使grub自动重新启动到Windows的方式来更新您的问题。我很想知道哪种方法对您有效,并希望看到您编写的Window脚本(如果有)。我相信其他很多人也有兴趣。
WinEunuuchs2Unix

@ WinEunuuchs2Unix当前我正在研究它。正如Oli所说-Windows中的脚本是一种皇家PITA。
阿蒙

@amonsan我已经更新我的答案与reboot-to-windows函数,它是在使用妥协ext2fsd腐败的ext4超级块
WinEunuuchs2Unix

@amonsan您现在是否具有重新启动Windows Update以便自动返回Windows的系统设置?
WinEunuuchs2Unix

Answers:


8

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

grub-editenv /boot/grub/grubenv set next_entry="Windows"

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

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

  • 将磁盘安装在引导所在的位置。这可能是最难的一点,因为这可能是ext4。可能会有所帮助,但是您可能需要运行Windows的Linux对其进行编辑,这并非不可理解。

    正如大师指出的那样,不必那么难。您可以移动/boot到其自己的FAT32分区。这使得在Windows中安装变得很简单。

  • next_entry=Windows在注释之后,哈希之前插入(或其他内容)到文件中。

  • 卸载。
  • 重启。

在Windows中编写脚本远远超出了我的舒适范围,实际上并不是我们在此所做的。但这应该是您所要做的。


1
在这种方法中,正如我现在在评论中提到的要聊天一样,最好移至单独的/boot分区,并将其格式化为FAT32或NTFS,然后在Windows上轻松地对其进行编辑。没什么/boot特别需要Unix-y功能的。使用Powershell编写脚本应该很容易。
大师

19

最简单的方法是使用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

您将注释掉的第一行,并在其下方插入第二行。

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

sudo update-grub

Ubuntu命令行重启进入Windows

目前,您使用的是这样的:

sudo grub-reboot x # Where x is Windows zero-based grub menu number
sudo reboot now

从修改后的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
}
  • ~/.bashrc使用新reboot-to-windows功能保存文件。
  • 关闭您当前的终端会话。
  • 打开一个新的终端会话以更改~/.bashrc要加载。
  • 您可以键入: ~/.bashrc将其重新加载到现有的终端会话中,但有人建议不要这样做。

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

reboot-to-windows

如果Windows不在时自动重新启动,则Windows将重新启动。这使Windows自动更新可以在Windows有时使用的多个重新引导周期中正常处理。


1
这个问题与启动顺序无关。
詹妮弗

2
@Jennifer问题是XY问题的一个实例。所以这个答案很有用。另外,它实际上与启动顺序有关,因为它正在寻求一种从Windows UI临时更改启动顺序的方法。
wizzwizz4

2

grub-set-default应该和grub-reboot一样,但是要使设置永久化。并非完全按照您的要求来自Windows UI,但也许它对您有用。


这个问题与启动顺序无关。
詹妮弗

我对那句话的意思不太了解,可以解释吗?
塞巴斯蒂安·史塔克

Amon San没问我如何将grub默认设置为Windows?ze询问的是,如果Windows已经启动,如何立即重启,并选择要启动的操作系统。
詹妮弗

@Jennifer OP并未询问“如何立即重新启动到Windows”。如果是这样,OP可以简单地选择Windows Restart,然后在grub菜单中选择Windows。OP询问“当Windows不存在时Windows自动重新启动时,如何确保它重新启动回Windows,而不是默认的grub菜单选项”。至少我就是这样看待主要问题的。
WinEunuuchs2Unix

是的,OP可以只选择Windows Restart,然后在grub菜单中选择Windows。但是OP专门询问我如何自动返回Windows,不必在启动菜单中选择Windows;换句话说,在没有我干预的情况下该如何做?X Ying太多了!
詹妮弗

1

您尚未说出哪个版本的Windows或是否在UEFI上。

如果您使用的是正确的UEFI引导(而不是旧式引导),则可以临时引导到Windows UEFI引导条目。在Linux上,可以使用诸如之类的工具来完成此操作efibootmgr。在Windows上,我个人使用EasyUEFI。它是免费的,供个人,GUI使用,但不适用于企业或CLI。我不能保证它的安全。它似乎也有些慢,但是它确实起作用了

在我自己的设置中,它使用Arch Linux(内核EFI垫片,不带GRUB)和Windows 10,在开始屏幕上选择“管理EFI引导选项”后,它是这样的:

该图显示了一次性启动选项

如果您使用的是UEFI引导,则对于Windows,应该会看到类似的内容,对于Ubuntu(会加载GRUB),会看到一个条目,以及其他一些特定于设备的选项。然后,可以使用一次性启动选项将其设置为一次引导至Windows的UEFI引导条目,然后在此之后重新引导至GRUB。设置完后,您可以正常重启。


1
谢谢,但这每次都需要我手动进行过多的手动交互。
阿蒙·桑(Amon San)

1
耸耸肩。无论如何,您应该移至/bootNTFS或FAT32,而不是将其编辑为ext4。在Windows中编写对ext4的支持还很困难,那样会冒很大的风险。
muru
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.