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

473
George T

Мне интересно, есть ли способ иметь компьютер с установленным UEFI и двумя разными ОС (в моем случае Windows 10 и Linux Mint 17.x), где вам не нужно ждать выключения системы, чтобы выбрать другая система для загрузки.

Чтобы пояснить далее:
обычная работа мультизагрузочных систем заключается в том, что при запуске компьютера появляется меню (из менеджера uefi, загрузчика и т. Д.), И вы выбираете ОС для загрузки. Это меню обычно можно настроить так, чтобы оно имело значение по умолчанию, поэтому, если оставить его без присмотра, оно «сделает выбор» самостоятельно или даже запомнит ваш последний выбор и будет использовать его повторно, пока вы не сделаете другой выбор (по крайней мере, дело с наследием GRUB).

На моем компьютере по умолчанию используется Mint, и это работает большую часть времени. Однако, если я нахожусь в Windows и хочу снова перезагрузиться в Windows, мне нужно подождать, пока появится меню GRUB, и выбрать Windows, иначе он перезагрузится в Mint. Поскольку завершение работы может занять некоторое время (особенно при установке обновлений), это означает, что вы должны оставаться рядом с компьютером, в противном случае я смог бы отойти.

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

Очевидно, что это не будет частью стандартного «выключенного» меню ни в одной из систем, но я думаю, что это может произойти с помощью запускаемого сценария.
Например, с GRUB может быть возможно иметь скрипт, который изменяет свой файл конфигурации, чтобы установить определенную систему по умолчанию, а затем запускает перезагрузку, но это может занять слишком много времени, потребует привилегий root и также будет работать только из Mint.

Существует ли такой метод, использующий любой доступный менеджер загрузки (например, rEFInd), который будет работать с любой ОС без какого-либо специального подтверждения?

РЕДАКТИРОВАТЬ: REFInd сам поддерживает такую ​​функцию, по-видимому. Ссылка На той же странице также предлагается, как установить переменную из Linux. Кроме того, в MSDN, похоже, есть метод для установки переменной EFI с помощью кода C ++, доступный в Windows 10. Ссылка
Таким образом, кажется, что установка способа сделать это была бы возможна. Однако я не смогу сделать это в течение нескольких дней.

4
То, что вы спрашиваете, равносильно тому, что Windows передает переменную в GRUB. Вряд ли, ИМХО. MariusMatutiae 8 лет назад 0
Я не спрашиваю конкретно о GRUB, о любом типе загрузчика / менеджера, который бы это делал, это приемлемо. George T 8 лет назад 0
Я понимаю это, но на самом деле я не думаю, что это меняет суть моего комментария выше. MariusMatutiae 8 лет назад 0
Да, но вы хотели бы много оперативной памяти и плохой процессор, как новый i7 Jordan Davis 8 лет назад 0
http://www.uefi.org/sites/default/files/resources/ACPI_6.0.pdf Jordan Davis 8 лет назад 0

1 ответ на вопрос

1
Rod Smith

Your question itself contains some possible answers. Another one is to manipulate the EFI's BootNext parameter. This sets a one-time boot to the specified target boot program. This can be done in Linux via the efibootmgr utility:

  1. Type efibootmgr (or efibootmgr -v to get more detail) as root or using sudo. This will display a list of your boot options.
  2. Identify the boot option you want to boot. For instance, to boot straight to Windows, you probably want the option entitled Windows Boot Manager. (Note, however, that these names are sometimes deceptive. You may need to experiment and figure out the details for your system.)
  3. Type efibootmgr -n #### as root or using sudo to tell the system to boot to Boot#### next, where #### is the number of the entry you want to boot.

I believe you can do something similar with EasyUEFI in Windows, but that's a GUI tool and so may not be useful for the scenario you describe. Perhaps bcdedit could do the trick, but I've not looked into it.

EasyUEFI предоставляет доступ к командной строке в своей платной версии, что может быть вариантом для некоторых людей. George T 8 лет назад 0