Grub2

我如何告訴 GRUB 我想在重新啟動之前重新啟動到 Windows?

  • December 9, 2021

我設置了雙引導 Linux/Windows 系統,並且經常從一個系統切換到另一個系統。我在想是否可以在其中一個菜單中添加一個菜單項以直接重新啟動到 Windows,而無需在 GRUB 提示符處停止。

我在論壇上看到了這個問題,這正是我想要的,但它與 lilo 打交道,這不是我的情況。

我想到了一個解決方案,可以修改 GRUB 菜單中的預設條目,然後重新啟動,但是有一些缺點,我想知道是否有更清潔的替代方案。

(另外,我會對從 Windows 直接啟動到 Linux 的解決方案感興趣,但這可能更難,並且不屬於這裡。無論如何,只要我以一種方式擁有它,另一種方式可以設置為預設值。

更新似乎有人問了一個類似的問題,如果這些是建議的答案,我不妨編輯和/boot/grub/grubenv做。)grub-reboot``grub-set-default``grub-editenv

提前感謝您的任何提示。

更新

這是我的 GRUB 版本:(GRUB) 1.99-12ubuntu5-1linuxmint1

我嘗試執行grubonce,找不到該命令。在儲存庫中搜尋它什麼也沒給我。我在 Linux Mint 上,所以可能是這樣……

看到man grub-reboot,它似乎做了我想要的,就像它grubonce一樣。它也隨處可用(至少對我來說,我認為它是 grub 包的一部分)。我看到了兩個相關的命令:grub-editenvgrub-set-default.

我發現在執行之後sudo grub-set-default 4,執行時grub-editenv list你會得到類似的東西:

saved_entry=4

執行時grub-reboot 4,你會得到類似的東西:

prev_saved_entry=0
saved_entry=4

這意味著兩者都做同樣的事情(一個是臨時的,一個不是)。

令人驚訝的是,當我嘗試:

sudo grub-reboot 4
sudo reboot now

它不起作用,好像我什麼都沒做一樣,它只是像往常一樣向我顯示菜單,並選擇了第一個條目,說它將在 10 秒內啟動該條目。

我又試了一次,我想我可能寫錯了條目(它是從零開始的,對吧?)。那時,它只是掛在菜單螢幕上,我不得不硬重置 PC 才能啟動。

如果有人可以嘗試一下,看看是否只有我,我將不勝感激。(薄荷一直讓我很難過,那將是改變的好時機:P)。

閱讀中的程式碼/boot/grub/grub.cfg,似乎這是要走的路,但根據我的觀察,它只是忽略了這些設置……

為了使grub-reboot命令起作用,必須進行一些必要的配置更改:

  • grub 的預設條目必須設置為saved. 一個可能的位置GRUB_DEFAULT=/etc/default/grub
  • 用於grub-set-default將預設條目設置為您通常使用的條目。
  • 更新你的 grub 配置(例如update-grub)。

這應該注意初始設置。將來,只需grub-reboot <entry>一次性啟動<entry>.

  1. 編輯 /etc/default/grub 並替換GRUB_DEFAULT=0GRUB_DEFAULT=saved
  2. sudo update-grub
  3. 您的命令將是:
sudo grub-reboot "$(grep -i windows /boot/grub/grub.cfg|cut -d"'" -f2)" && sudo reboot

一個漂亮的功能,你的~/.bashrcor.bash_aliases可能看起來像:

# Reboot directly to Windows
# Inspired by http://askubuntu.com/questions/18170/how-to-reboot-into-windows-from-ubuntu
reboot_to_windows ()
{
   windows_title=$(grep -i windows /boot/grub/grub.cfg | cut -d "'" -f 2)
   sudo grub-reboot "$windows_title" && sudo reboot
}
alias reboot-to-windows='reboot_to_windows'

編者註:

  • 我已將不推薦使用的反引號( ````)替換為$(...)構造。
  • 一般來說,我已經重寫了它以符合目前的POSIX (wiki)標準,並且在此期間,做了一些小的其他更改。
  • 為了完整起見,我將以下功能保持不變以進行比較。

如果您的 grub.conf 包含 Windows 的多行,以下函式將只關注從第一行開始menuentry並選擇第一行的行,指的是 Windows:

function my_reboot_to_windows {
   WINDOWS_TITLE=`grep -i "^menuentry 'Windows" /boot/grub/grub.cfg|head -n 1|cut -d"'" -f2`
   sudo grub-reboot "$WINDOWS_TITLE"
   sudo reboot
}

引用自:https://unix.stackexchange.com/questions/43196