Как я могу выбрать, какой OS grub перезагрузит меня, прежде чем перезагружаться? [dубликат]

Я ищу способ перезагрузки в Windows от Ubuntu в системе с двойной загрузкой 10.10 / Vista. Конкретный вариант использования заключается в том, что я хотел бы иметь возможность ssh в моем исполняемом экземпляре Ubuntu и выдать команду, которая инициирует перезагрузку непосредственно в Windows.

Я нашел многообещающий пост в блоге, но сценарий, который он не работает:

#!/bin/bash WINDOWS_ENTRY=`grep menuentry /boot/grub/grub.cfg | grep --line-number Windows` MENU_NUMBER=$(( `echo $WINDOWS_ENTRY | sed -e "s/:.*//"` - 1 )) sudo grub-reboot $MENU_NUMBER sudo reboot

man grub-reboot не очень помогает, но, похоже, он ведет меня в правильном направлении:

задает начальную загрузку по умолчанию для GRUB, для следующей загрузки только WINDOWS_ENTRY=`grep menuentry /boot/grub/grub.cfg | grep --line-number Windows` MENU_NUMBER=$(( `echo $WINDOWS_ENTRY | sed -e "s/:.*//"` - 1 )) echo $MENU_NUMBER

Это возвращает ожидаемое значение, но при перезагрузке первая запись меню по-прежнему выделена. Любые идеи, почему это не работает или предложения для других решений?

32
задан 20 December 2010 в 00:54

64 ответа

Я не уверен, что это будет 100% также работать в ubuntu, но я как-то сделал эту работу на машине centos

, в основном вам придется сказать grub, какой id # из grub.conf он должен работать дальше. Идентификатор id # может быть найден

  echo `sudo grep ^ title /boot/grub/grub.conf |  grep -n Windows |  cut -f 1 -d: `-1  

, поэтому в моем случае это будет, например, вывод «4-1», поскольку четвертая запись в моем grub.conf содержит текст «Windows». (Замените это на фактическое имя записи (также частично), которое вы хотите использовать. Затем вы можете подать это на grub как:

  echo "savedefault --stage2 = / boot / grub / stage2 -  -default = 4-1 --once "| sudo / sbin / grub  

и при следующей перезагрузке он должен автоматически загружать запись, о которой вы ей сказали.

все это можно скомпоновать в скрипте следующим образом:

  #! / bin / sh let NEWBOOT = `sudo grep ^ title /boot/grub/grub.conf | grep -  n Windows | cut -f 1 -d: `-1 echo Загрузка $ NEWBOOT -` sudo grep ^ title. \ * Windows / boot / grub / grub.conf` echo "savedefault --stage2 = / boot / grub / stage2 -  -default = $ NEWBOOT --once "| sudo / sbin / grub sudo reboot  

скрипт автоматически определит, какая запись из вашего grub.conf соответствует тексту« Windows », будет кормить это для того, чтобы рассказать, что должно быть загружено при следующей загрузке, и перезагрузит ваш компьютер.

для gui, например, вы можете добавить ярлык на рабочий стол, чтобы добиться этого.

-1
ответ дан 13 August 2018 в 12:36
  • 1
    Конфигурационный файл для grub-legacy - menu.lst, а не grub.conf. Для grub2 это grub.cfg, но ваша вторая команда предназначена только для grub-legacy. – psusi 26 September 2011 в 20:46

Я думаю, что нашел еще более приятный способ для людей, которые хотят, чтобы они были на локальном компьютере без ssh.

Решение для перезагрузки в определенную систему, выбранную с помощью пусковой установки единства, было опубликовано только на webupd8. См. [D0] http://www.webupd8.org/2011/05/custom-unity-launcher-to-reboot-in.html

Я знаю, что это не совсем то, что вопрос, но в случае, если у кого-то есть аналогичный вопрос позже, это может быть полезно.

4
ответ дан 13 August 2018 в 12:36

Просто отредактируйте /boot/grub/grub.cfg и измените запись по умолчанию, чтобы указать на запись, которую вы хотите загрузить. Значение может быть либо порядковым номером записи (начиная с нуля для первого), либо вы можете поместить полный заголовок записи в кавычки.

11
ответ дан 13 August 2018 в 12:36
  • 1
    Не советуйте изменять boot.cfg , он будет восстановлен при каждом ручном или автоматическом update-grub . Пользователь должен изменить / etc / default / grub . – enzotib 26 September 2011 в 21:46
  • 2
    @enzotib, поскольку изменение предназначено только для следующей загрузки, нет причин делать это именно так. – psusi 26 September 2011 в 22:14
  • 3
    вы забываете, что неправильное редактирование в этом файле может привести к не загружаемой системе – enzotib 26 September 2011 в 23:08
  • 4
    @enzotib, не совсем; одна из прекрасных вещей о grub2 заключается в том, что вы всегда можете восстановить вручную в командной строке. Кроме того, опасность завинчивания других частей файла является аргументом, и если вы ошиблись по умолчанию, худшее, что происходит, это то, что оно по умолчанию относится к первой записи. – psusi 26 September 2011 в 23:11

Существует команда grub только для этого, это grub-reboot .

Кажется, что работает только тогда, когда у вас есть grub, настроенный на запуск с последней сохраненной записи , Если вы еще этого не сделали, измените / etc / default / grub и установите

  GRUB_DEFAULT = сохранено  

, затем обновить конфигурационный файл grub:

  sudo update-grub  

С этого момента в каждой загрузке grub запустит последнюю использованную запись.

Теперь, если вы хотите заранее установить, какой должна быть система для загрузки в следующий раз, используйте

  sudo grub-reboot ENTRY  

где ENTRY может быть числом относительно записи в меню (нумеруется начиная с 0) или точным заголовком меню, например

  sudo grub-reboot «Microsoft Windows  XP Professional (on / dev / sda1) " 

Эта команда может быть легко доступна в качестве пусковой установки

  #! / Usr / bin / env xdg  -open # # save as ~ / Desktop / reboot-in-windows.desktop # [Desktop Entry] Version = 1.0 Type = Application Terminal = false Exec = sh -c 'gksu "grub-reboot 2" & amp; & amp; & amp; & amp; & amp; & amp; & amp; & amp;  gnome-session-save --shutdown-dialog 'Name = Перезагрузка в Windows Icon = gnome-panel-launcher  

, но я не знаю, как это можно было бы интегрировать в системное меню.

Вы можете получить доступное название записи в меню с помощью

  sed -n '/ menuentry / s /.* \ (["' \ '']. * ["  '\' '] \). * / \ 1 / p' /boot/grub/grub.cfg  
11
ответ дан 15 August 2018 в 22:07

Другие вопросы по тегам:

Похожие вопросы: