Как заставить BIOS UEFI запускать GRUB, а не Windows?


22

TL; DR, добавлено в редактировании:

Вопрос в том:

Как я могу сделать так, чтобы BIOS предпочитал GRUB вместо Windows Boot Manager на том же загрузочном разделе UEFI?

Проблема не в Grub; Grub делает правильно, когда его запускает BIOS. Проблема не в том, что «диск не является загрузочным», поскольку загрузочная версия UEFI для Windows и загрузочная UEFI для Grub являются загрузочными. Проблема заключается в том, с какого UEFI-загрузчика BIOS выбирает загрузку.

Я настраиваю новый компьютер и хочу, чтобы он по умолчанию загружался в Ubuntu, но у меня есть возможность выбрать Windows при загрузке. Это особенно важно, если власть выходит и возвращается; Я даже не буду в доме.

Я начал с установки Ubuntu 17.04 на свой внутренний диск NVMe, разделенный с помощью GPT, чтобы использовать половину диска, и отдельный загрузочный раздел UEFI. GRUB загружается просто отлично, и я вижу при загрузке меню загрузки GRUB, где я могу выбрать любые элементы, о которых GRUB знает.

Затем я установил Windows 10 Pro с недавно загруженного ISO. Он установил Windows Boot Manager на тот же раздел UEFI и оставил Ubuntu нетронутым (замечательно!), И он отлично загружается в Windows 10.

Тем не менее, он сделал «что-то», что заставляет прошивку UEFI сразу выбирать загрузочный менеджер Windows, а не GRUB при включении питания. Единственный способ загрузить Linux сейчас - это использовать менеджер загрузки BIOS (F11 в моем BIOS) и вручную выбрать загрузчик GRUB. BIOS UEFI знает, что в разделе UEFI есть несколько загрузочных установок, потому что я могу выбирать между ними в менеджере загрузки. Тем не менее, когда я нахожусь в меню настройки в UEFI BIOS, он просто позволяет мне выбрать «UEFI загрузку моего внутреннего диска» в выборе приоритета загрузки - он не позволяет мне выбирать, какой конкретный загрузчик в этом разделе использовать , И, по умолчанию, он выбирает Windows, а не GRUB.

В интернете (и на этом сайте) предполагается, что старый способ исправить это - запустить update-grub(чтобы GRUB распознал Windows), а затем grub-install(вернуть GRUB обратно на устройство). Я сделал это, но, к сожалению, он по-прежнему выглядит как описано выше, где BIOS по умолчанию выбирает Windows Boot Manager. ( update-grubнаходит установку диспетчера загрузки Windows и добавляет ее в меню, и этот пункт меню работает, когда я вручную выбираю раздел GRUB в диспетчере загрузки UEFI.)

Что я могу сделать, чтобы GRUB загрузился по умолчанию на моем загрузочном разделе UEFI?

Использование материнской платы MSI X399 Carbon.

Второе редактирование: потому что правильный комментарий заканчивается упоминанием в комментарии к ответу, я повторю его здесь:

"BCDEDIT" in an admin shell on Windows is the working solution. The others don't work.

Вам просто нужно установить Windows, а затем Linux. А не наоборот. У меня точно противоположная проблема. Когда питание отключается, а затем снова включается, мой компьютер переходит в режим загрузки и загружается в Linux. Единственное, что у меня есть каждая система на своем диске. В порядке загрузки я выбираю диск с Linux и Grub.
DMB

1
Удивительно, как много людей предлагают вещи, которые уже были предложены другими людьми, и я уже сказал, что это не сработало ни в моем оригинальном посте, ни в комментариях ниже. Правильным решением было «BCDEDIT» в оболочке администратора Windows. Ни одно из других предложений не решило это (и большинство из них я уже попробовал, согласно моему вопросу)
Джон Уотт

Ответы:


21

Есть довольно много разных способов сделать это, в том числе:

  • Утилита настройки EFI. Большинство EFI предоставляют утилиты настройки, к которым вы можете обратиться, нажав специальную клавишу во время загрузки (Esc, Del или функциональную клавишу, обычно; но какая это клавиша, зависит от одной системы к другой). Они часто, но не всегда, дают возможность изменить порядок загрузки. Если ваша прошивка предоставляет такую ​​возможность, вы сможете использовать ее для перемещения GRUB в верхнее положение. (Вероятно, будет вызван GRUB ubuntu, учитывая, что вы установили его из этого дистрибутива.)
  • Оболочка EFI - Вы можете использовать bcfgкоманду в оболочке EFI версии 2, как описано в вики Arch Arch. Если ваша система еще не настроена с простой в доступе оболочкой, этот подход, вероятно, будет сложнее в использовании, чем другие, но он не зависит от ОС.
  • EasyUEFI - сторонняя программа Windows EasyUEFI, вероятно, будет самым простым способом сделать то, что вы хотите. Вы можете нажать на ubuntuзапись в списке EasyUEFI и переместить ее наверх.
  • bcdedit- Команда Windows bcdeditможет изменить порядок загрузки на основе NVRAM. В частности, открытие окна командной строки администратора и ввод текста bcdedit /set "{bootmgr}" path \EFI\ubuntu\shimx64.efi(необязательно с последующим bcdedit /set "{bootmgr}" description "ubuntu"сохранением описания) должны помочь.
  • efibootmgr- Этот инструмент Linux может регулировать порядок загрузки. Начните с того, что наберите sudo efibootmgrодин, чтобы увидеть варианты. Обратите внимание на число ( Boot####), связанное с ubuntuзаписью, и текущий порядок загрузки (в BootOrderстроке). Затем вы можете ввести новый порядок загрузки, указав ubuntuзапись сверху -o. Например, если текущий порядок загрузки равен 0000 0003 ubuntu0007 0004 и 0007, вы должны ввести sudo efibootmgr -o 0007,0000,0003,0004порядок загрузки.
  • refind-mkdefault- Этот скрипт поставляется с rEFInd, и это способ автоматизации предыдущей процедуры. Если вы не используете rEFInd, вам нужно скачать скрипт здесь и сделать его исполняемым ( chmod a+x refind-mkdefault). Затем вы запустите его как sudo ./refind-mkdefault -L ubuntuили, sudo ./refind-mkdefault -L shimx64чтобы сделать GRUB загрузочной записью по умолчанию.

Есть потенциальные проблемы и осложнения с любым из этих вариантов. Наиболее вероятным осложняющим фактором является наличие старых или альтернативных ubuntuзагрузочных записей. Важно, чтобы вы переместили правильный в верхнюю позицию в порядке загрузки; если вы переместитесь не в ту сторону, у вас не останется никаких изменений в поведении или что-то из-за нефункциональной загрузки, что затруднит загрузку. Если вы используете efibootmgr, BootCurrentстрока может помочь вам определить, какой вариант следует установить по умолчанию.

Есть другие способы сделать это, которые излишни. Например, переустановка GRUB (через Boot Repair или grub-install) должна помочь. Однако эти подходы могут привести к повреждению известной рабочей конфигурации GRUB.

Также обратите внимание, что некоторые EFI содержат ошибки и существуют другие проблемы, которые могут затруднить надежную загрузку GRUB. Вы можете проверить эти вопросы и ответы в AskUbuntu, если столкнетесь с такими проблемами:


Как я описал в этом вопросе, утилита настройки EFI не позволила бы мне выбрать Ubuntu по умолчанию, хотя она позволяла мне делать это в меню ручной загрузки. Это позволило бы мне выбрать диск, а затем запустить Windows с этого. efibootmgr попытался изменить порядок загрузки, но BIOS не обратил внимания на перезагрузку. EasyBCD не работал - он не позволял мне добавлять больше пунктов меню. Тем не менее, «BCDEDIT» в командной оболочке действительно работал, так что спасибо за эту опцию!
Джон Уотт,

Обратите внимание, что EasyBCD и EasyUEFI - две разные программы от одного поставщика. К сожалению, кажется, что бесплатная версия EasyUEFI больше не доступна - предлагаются только пробные версии. Тем не менее, BOOTICE - еще одна бесплатная программа, которая может редактировать параметры загрузки UEFI: оригинальный китайский сайт , англоязычный сайт с описанием и скриншотами .
Телеком

Использование sudo efibootmgr -n 0002гораздо лучше, чем модифицировать текущий порядок SO. Он изменится BootNext: 0001и уйдет BootCurrent: 0002в следующий раз, оставив ваши текущие записи GRUB нетронутыми. Просто добавьте bash chmod +xи добавьте эту команду вместе с командой перезагрузки.
m3nda

2

У меня была именно эта проблема последние несколько недель. Я понял это с помощью этих опций. Прежде чем делать что-либо из этого, я рекомендую вам зайти в свой BIOS / UEFI и проверить порядок загрузки и убедиться, что сначала установлен grub.

Итак, как я вижу, у вас есть два варианта.

Опция 1

Я бы порекомендовал вам сначала установить Windows 10 . Затем установите Ubuntu. Но я знаю, что это просто табу: просто переустановить программное обеспечение, поэтому я тоже предложу альтернативу.

Вариант 2

С вашей текущей настройкой я бы порекомендовал вам загрузиться на CD / флешку Live Ubuntu, установить и запустить boot-repair. Нажмите «Рекомендуемый ремонт» и следуйте приведенным инструкциям. Пройдите его внимательно и прочитайте все команды перед выполнением. Это заменит текущую установку grub новой, которая, мы надеемся, исправит это.


Спасибо за предложения, но я уже попробовал те. При первой установке я сначала перешел на Windows 10, затем на Ubuntu 17.04, затем на Boot Repair. Он все еще по умолчанию для Windows, а затем я сначала стер с Ubuntu и переустановил его, что привело меня туда, где я сейчас нахожусь.
Джон Уотт

Я полагаю, вы пытались настроить порядок загрузки в вашем UEFI, верно?
taterbotz

Да, как я сказал: «когда я нахожусь в меню настройки в UEFI BIOS, он просто позволяет мне выбрать« UEFI загрузку моего внутреннего диска »в выборе приоритета загрузки - он не позволяет мне выбирать, какой именно загрузчик на этом разделе, чтобы использовать "
Джон Уотт

2

Я вижу несколько решений:

  1. Отредактируйте ваш UEFI для настройки по умолчанию. На Linux вы можете использовать efibootmgr. В Windows я не уверен, но я думаю, что вы можете загрузить опцию восстановления, которая позволяет вам настраивать UEFI. Или вы можете предпочесть установить что-то вроде rEFInd.
  2. Измените имя папки в разделе EFI. Я думаю, что он предпочитает или использует папку с именем boot.
  3. Просто используйте загрузчик Windows, я думаю, его можно настроить для загрузки других ОС.

Я мог бы изменить порядок загрузки, используя efibootmgr, но BIOS игнорирует его и все равно запускает Windows. Изменение имени загрузочной папки (или даже копирование grub в «boot») не работает, пока я не удалю Microsoft. Загрузчик Windows не загружает ОС, отличные от Windows (по крайней мере, без знака).
Джон Уотт,

@JonWatte Возможно, загрузчик uefi отличается, я помню загрузку Ubuntu из загрузчика Windows 7 на 32-битной машине с BIOS. Может быть, он все еще может загрузить grub2? Так efibootmgrкак не работает, я знаю, что не буду покупать MSI.
jiggunjer

Да, у этой материнской платы MSI есть и другие проблемы, и она возвращается в Amazon в обмен на гигабайт.
Джон Уотт

1

Я только что заменил материнскую плату в своем ноутбуке, и грязь полностью исчезла.

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

Чтобы grub отображался как вариант загрузки. Мне нужно было добавить EFI в BIOS.

Я пошел в "вариант списка загрузки" в моем биосе. Нажмите на «Добавить загрузочную опцию» (я знаю, что это специфический BIOS). Это дало мне возможность для имени файла, который в моем случае был \EFI\ubuntu\grubx64.efiи дал ему имяgrub

Затем я переместил grubзапись в начало последовательности загрузки, и теперь она отображается как запись по умолчанию.

То есть, я говорю, что вам может понадобиться найти правильный файл EFI и переместить его в начало последовательности / порядка загрузки.


1

Ни один из вышеперечисленных вариантов не работал для меня со старым ноутбуком HP 655. Я обнаружил, что решение - отключить менеджер загрузки Windows:

sudo -s
efibootmgr
efibootmgr -b 4 --inactive

Замените 4 номером вашего менеджера загрузки Windows. Запустите efibootmgr еще раз, и вы увидите, что звезда исчезает, отмечая бездействие.

После того, как мой компьютер загрузится в grup, загрузочное меню и окна все еще могут быть выбраны из этого.


-2

Возможным решением будет ручное редактирование файла / etc / default / grub.

sudo vim /etc/default/grub

Запись по умолчанию определяется GRUB_DEFAULT=настройкой в ​​/ etc / default / grub. Первый «пункт меню» имеет значение «0». Если Ubuntu - вторая запись на экране загрузки, тогда установите GRUB_DEFAULT = 1.

После этого вам нужно будет выполнить команду для обновления конфигурации grub: update-grub

Другим вариантом будет установка grub-customizer и использование его графического интерфейса для настройки приоритета загрузки.


Проблема не в Grub. Как я уже говорил в этом посте, если я смогу заставить BIOS выбрать опцию загрузки Grub UEFI, я получу меню загрузки Grub, которое позволяет мне выбрать Windows или Ubuntu. Это меню, которое я хочу по умолчанию. К сожалению, BIOS выбирает Windows Boot Manager по умолчанию.
Джон Уотт

Как я уже сказал, вы можете исправить это в порядке загрузки grub, настроив Ubuntu как первую систему для запуска. Используйте grub-customizer, чтобы сделать это с помощью графического интерфейса. linuxandubuntu.com/home/…
Мистер Малина

Опять же, Grub даже не запускается BIOS. Порядок загрузки Grub не имеет значения. GRUB_DEFAULT не имеет значения. Это не проблема здесь.
Джон Уотт,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.