Можно ли настроить Grub на запоминание последней ОС, в которую вы загрузились?

17

У меня обычно есть 2-3 ОС в моем загрузочном меню:

  • Ubuntu 10.04
  • Windows 7
  • [Иногда третий вариант, такой как Ubuntu 10.04 Netbook]

Если я нахожусь в ОС, отличной от выбора по умолчанию (в данном случае Windows 7), и я перезагружаюсь, Grub загружается в Ubuntu 10.04. Этого не должно случиться - когда я перезагружаюсь в Windows 7, я хочу остаться в Windows 7. Есть ли способ настроить Grub для запоминания моего последнего выбора и загрузки в него?

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

Мэтью
источник

Ответы:

20

В оригинальном Grub вы могли бы сделать это, установив, в /boot/grub/menu.lst , по умолчанию ключевое слово в «спасенных» , а затем , используя savedefault ключевое слово в каждом пункте меню загрузки.


Обновлено :
Grub2 немного сложнее. Он также все еще развивается, поэтому, несмотря на то, что Ubuntu 9.10 и 10.04 используют Grub2, есть достаточно различий в том, как вещи упакованы и настроены, чтобы сделать вещи интересными.

Вот как сделать трюк с сохранением по умолчанию в обоих случаях:

  • Ubuntu 10.04:
    направления 9.10 - хитрость; Lucid намного проще. См. Справку Ubuntu для более подробной информации. Вам нужно внести два изменения в / etc / default / grub :

    1. Измените строку, которая читает GRUB_DEFAULT=0наGRUB_DEFAULT=saved

    2. Добавить строку с GRUB_SAVEDEFAULT=true

    Вот и все. На самом деле не так ли плохо, не так ли? Не забудь бежать sudo update-grub.

  • Ubuntu 9.10:
    на форумах Ubuntu есть несколько хаков, чтобы заставить это работать; очевидно, ключевое слово savedefault было ошибочным в Grub v1.97. Этот пост на форумах Ubuntu предоставляет один метод. Другой пост предлагает немного более простой метод:

    1. Установите GRUB_DEFAULT = сохранено в / etc / default / grub .

    2. Поместите эти две строки в /etc/grub.d/40_custom (рядом с нижней частью , после строки "exec tail" ):

      saved_entry=${chosen}
      save_env saved_entry
      

    Я протестировал этот метод в Ubuntu 9.10, и он работает; следующая загрузка автоматически выделит последнюю выбранную запись. В сочетании с таймаутом это автоматически загрузится в последнюю ОС, которую вы загрузили.

И не забудь бежать sudo update-grub. После того, как вы закончите со своими изменениями. Это важно и смущающе легко забыть ....


Grub не может отличить перезагрузку от холодной загрузки , поэтому Grub не может сделать это при перезагрузке самостоятельно. Однако, если вы загрузились в Linux, вы можете использовать sudo grub-set-default N(где N - номер пункта меню загрузки, начиная с 0), чтобы задать запись N, которая будет выбрана при следующей загрузке (вместо какой-либо записи, которая была сохранена).

Теоретически, вы могли бы собрать воедино что-то, что подключалось к процедурам завершения работы (возможно, сценарий Upstart ), которое запускало grub-set-default для вас, когда вы указывали Linux завершать работу (но не когда вы указывали перезагрузить его). Однако при закрытии Windows вы не получите такую ​​же функциональность.

Я слышал о методике Grub4DOS или Grub1, которая включала установку Grub в раздел FAT32 или NTFS / boot , который позволял бы вам также запускать grub-set-default из Windows, чтобы вы могли вызывать его из сценария выхода из Windows. В прошлый раз я видел что-то об этом, это было невозможно на Grub2. Это, возможно, изменилось к настоящему времени.

шарлатан
источник
Решение № 2, похоже, не работает для меня. Я отредактировал / etc / default / grub, отредактировал /etc/grub.d/40_custom и запустил sudo update-grub. Я проверил, загрузившись в Windows 7, выключил и снова включил компьютер. Ubuntu 10.04 (по умолчанию) все еще был выбран. Я также попытался поместить «save_entry» в / etc / default / grub вместо «сохранено» (не уверен, как работают скрипты grub config), но это не помогло. Я еще не пробовал решение № 1.
Матфея
@Matthew: перепроверьте, что /etc/grub.d/40_custom является исполняемым (sudo chmod + x, если это не так). но да, я только что попробовал на своей машине Ubuntu 10.04, и там тоже не работает. проверяя, почему ...
кряканье
@ Матфея: ОК, разобрался. извини, я должен был знать, что Люсид и Кармик будут такими разными. (Ох, и убедитесь, что вы бежите sudo update-grub.)
кряканье
3

Этот пост , вероятно, будет вам полезен, он довольно понятен. Обратите внимание, что 10.04 и 9.10 используют одну и ту же версию GRUB, поэтому для вас все должно быть одинаково.

marcusw
источник