Как я могу сказать GRUB, я хочу перезагрузить Windows, прежде чем перезагружаться?

У меня есть двойная система загрузки Linux / 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-editenv и grub-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 секунд.

Я попробовал еще раз, я думал, что мог бы написать неправильную запись (она основана на нуле, правда?). В тот раз он просто повесился на экране меню, и мне пришлось жестко перезагрузить компьютер, чтобы он мог загрузиться.

Если кто-нибудь может попробовать это, просто чтобы убедиться, что это только я, я был бы признателен. (монетный двор дал мне трудное время, и это было бы хорошим поводом для изменения: 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=0 на GRUB_DEFAULT=saved
  2. sudo update-grub
  3. ваша команда будет:

     sudo grub-reboot "$(grep -i 'windows' /boot/grub/grub.cfg|cut -d"'" -f2)" && sudo reboot 

симпатичная функция в вашем ~ / .bashrc будет выглядеть так:

 # ****************************************************************** # reboot directly to windows # Inspired by http://askubuntu.com/questions/18170/how-to-reboot-into-windows-from-ubuntu # ****************************************************************** function my_reboot_to_windows { WINDOWS_TITLE=`grep -i 'windows' /boot/grub/grub.cfg|cut -d"'" -f2` sudo grub-reboot "$WINDOWS_TITLE" sudo reboot } 

В случае, если ваш 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 } 

Я использую openSUSE, который поставляется со сценарием grubonce , который делает именно то, что вам нужно – установить запись grub, которая будет использоваться при следующей перезагрузке.

 # grubonce 0: Trace -- openSUSE 12.1 - 3.1.10-1.16 1: Debug -- openSUSE 12.1 - 3.1.10-1.16 2: Desktop -- openSUSE 12.1 - 3.1.10-1.16 3: Failsafe -- openSUSE 12.1 - 3.1.10-1.16 # grubonce 0 Using entry #0: Trace -- openSUSE 12.1 - 3.1.10-1.16 # grubonce 2 Using entry #2: Desktop -- openSUSE 12.1 - 3.1.10-1.16 

Я не знаю, какие (если есть) другие дистрибутивы отправляют этот скрипт, поэтому, если ваш дистрибутив не имеет его, вы можете проверить эту страницу:

http://sidvind.com/wiki/GRUB:_Boot_another_OS_once

grub-set-default кажется более доступным ( grubonce не указан в стихе Ubuntu). Это также может быть более полезным, так как Windows 7 имеет привычку выполнять перезагрузку во время запуска, если при последнем запуске были применены обновления (то есть, он запускается при запуске, обрабатывает некоторые данные обновления, перезагружается, а затем отображает страницу входа).
Я часто запускал Windows 7 только для того, чтобы вернуться и найти Ubuntu.

В Fedora вы можете использовать следующий скрипт. Обратите внимание, что это в основном такое же, как описано в https://askubuntu.com/a/18186/149422 , с некоторыми изменениями для GRUB 2 в Fedora .

 #!/bin/bash if [ `readlink /boot/grub2/grubenv` == "/boot/efi/EFI/fedora/grubenv" ]; then sudo mv /boot/grub2/grubenv /boot/grub2/grubenv-original sudo ln -s ../efi/EFI/fedora/grubenv /boot/grub2/grubenv fi MENU_ENTRY=`grep ^menuentry /boot/grub2/grub.cfg | grep --line-number Windows` MENU_NUMBER=$(( `echo $MENU_ENTRY | sed -e "s/:.*//"` - 1 )) sudo grub2-reboot $MENU_NUMBER sudo reboot