Сначала немного основ ....
Есть два критических класса программ, вовлеченных в загрузку компьютера, под BIOS или EFI:
- Диспетчер загрузки - эта программа представляет меню или иным образом позволяет пользователю выбрать, какую ОС загружать.
- Загрузчик - эта программа загружает ядро ОС в память и запускает его.
Некоторые программы, включая GRUB и большинство других загрузчиков Linux, о которых вы, возможно, слышали в BIOS, фактически выполняют обе функции. Таким образом, пользователи Linux имеют тенденцию быть немного лингвистически неаккуратными и использовать "загрузчик" при обращении к любому типу программы. Однако понимание различия важно для EFI, потому что некоторые программы EFI выполняют только одну функцию, а не другую. Кроме того, EFI предоставляет встроенный менеджер загрузки. К сожалению, в спецификации EFI ничего не говорится о том, какой пользовательский интерфейс должен предоставлять встроенный менеджер загрузки. В результате на одних машинах это практически бесполезно, на других - неудобно, а на лучших из них - сносно.
Встроенный менеджер загрузки EFI может управляться из операционной системы путем редактирования переменных EFI. В Linux эта задача обрабатывается утилитой efibootmgr
, которая является типичным обычным инструментом командной строки Linux. Таким образом, это не очень удобно для пользователя. Когда вы загружаете компьютер, вы обычно получаете доступ к менеджеру загрузки, нажимая клавишу Esc или функциональную клавишу, но детали могут различаться для разных компьютеров.
Слегка переключая передачи, GRUB разработан, чтобы работать почти одинаково для систем BIOS и EFI. Под BIOS GRUB устанавливает часть себя в Master Boot Record (MBR), которая является первым сектором на жестком диске. BIOS жестко запрограммирован для выполнения кода в MBR, поэтому GRUB получает контроль над компьютером при загрузке, представляет меню и загружает ядро или перенаправляет процесс загрузки на другой загрузчик, хранящийся в другом месте. В EFI процесс немного отличается: GRUB регистрируется в NVRAM EFI (во время установки через efibootmgr
, даже если вы не вводили команду самостоятельно). Затем менеджер загрузки EFI запускает GRUB, который представляет меню и запускает ядро или перенаправляет на другой загрузчик.
Другое ключевое отличие между BIOS и EFI заключается в том, что загрузчики BIOS полностью или частично хранятся в MBR и других "скрытых" частях диска. Загрузчики EFI и менеджеры загрузки (кроме встроенного менеджера загрузки) хранятся в ESP как обычные файлы. Это делает EFI немного легче в управлении - по крайней мере, теоретически и когда вы это понимаете.
Теперь, со всей этой теорией, я могу более прямо ответить на ваш вопрос: большая часть Linux не заботится о режиме загрузки, поэтому преобразование существующей установки в режиме BIOS для загрузки в режиме EFI требует установки загрузчика EFI для Linux. На самом деле существует несколько таких программ. Вы прямо или косвенно ссылались на два из них, но есть и другие:
- GRUB 2 - это стандартная версия большинства дистрибутивов, поэтому обычно легко начать работу с новой установкой. OTOH, это довольно загадочно и трудно работать вручную. Под BIOS и EFI он может читать ядра практически из любого места.
- GRUB Legacy - Этот загрузчик официально не работает под EFI, но Fedora выпустила исправленную версию, которая работала. Этот вариант больше не поддерживается. Как и GRUB 2, он может загружать ядра из большинства файловых систем Linux.
- ELILO - этот загрузчик моделируется после загрузчика LILO для BIOS. Это легко настроить, если вы привыкли к LILO. Это требует, чтобы ваши ядра хранились в ESP. Он больше не активно развивается, но все еще выполняет свою работу.
- SYSLINUX - этот загрузчик в общих чертах похож на ELILO и связан с одноименным загрузчиком BIOS. Как и ELILO, оно требует, чтобы ваше ядро хранилось в ESP.
- Загрузчик-заглушка EFI. Само ядро Linux включает в себя загрузчик EFI, поэтому вы можете загрузить свою систему, используя только встроенный менеджер загрузки EFI и зарегистрированное непосредственно в нем ядро. Таким образом, для запуска ядра непосредственно из диспетчера загрузки EFI необходимо, чтобы ядро хранилось в ESP (или, по крайней мере, в разделе FAT, или иногда в HFS+ на компьютерах Mac). Одна из публикаций, на которую вы ссылались, была посвящена такой конфигурации, но такой тип установки встречается редко и я не рекомендую ее, потому что она негибкая.
В дополнение к этим загрузчикам, есть несколько специализированных менеджеров загрузки EFI, которые могут помочь расширить ваши возможности:
- gummiboot - эта программа представляет собой простой менеджер загрузки в текстовом режиме, который может запускать любой из предыдущих загрузчиков, включая ядро Linux; однако он может перенаправить процесс загрузки только на программу, хранящуюся в ее собственном разделе, который обычно является ESP. Таким образом, чтобы использовать gummiboot для непосредственного запуска ядра (через поддержку заглушки EFI), ваше ядро должно храниться в ESP.
- rEFIt - эта программа была создана на Mac и остается популярной на этой платформе, хотя rEFIt была заброшена в течение многих лет. Он может перенаправить процесс загрузки на любой раздел, который может прочитать EFI, и rEFIt включает пару драйверов EFI, позволяющих EFI читать тома ext2/3fs или ReiserFS. Необычно, что rEFIt активно сканирует загрузчики при запуске, что делает его очень адаптируемым в мультизагрузочной среде. Однако запускать ядра Linux не очень хорошо, потому что rEFIt не может передать ядрам пользовательские параметры, которые обычно требуются для нормальной работы.
- REFInd - это мой собственный форк REFIt. Добавлены драйверы для ext4fs, Btrfs, NTFS, HFS+ и ISO-9660; и это позволяет передавать параметры в ядра Linux. Поэтому комбинация rEFInd с загрузчиком заглушек EFI обеспечивает большую часть гибкости GRUB с точки зрения расположения ядра. rEFInd также сохраняет активное сканирование REFIt для параметров загрузки, что может значительно снизить трудоемкость поддержки системы с несколькими установленными дистрибутивами Linux; когда вы устанавливаете (или удаляете) новое ядро в любом дистрибутиве, rEFInd получает изменения при следующей загрузке.
Мне немного непонятно, какие у вас текущие настройки, но у меня сложилось впечатление, что у вас есть как минимум две установки Linux, включая хотя бы одну, которая ранее загружалась в режиме BIOS. Если это так, вы можете рассмотреть возможность использования rEFInd. Если он установлен в качестве загрузочной программы по умолчанию, он будет активно сканировать вашу систему на наличие ядер и создавать меню при каждой загрузке. Вам потребуется установить драйверы файловой системы EFI для файловой системы, в которой хранятся ваши ядра, но сценарий установки может позаботиться об этой детали за вас. Вам также может понадобиться создать файлы конфигурации с именем /boot/refind_linux.conf
для каждого дистрибутива; этот файл содержит параметры статической загрузки. (Однако иногда это не нужно; это зависит от структуры вашего раздела и потребностей конкретного дистрибутива.) Если вы устанавливаете rEFInd, используя его скрипт установки в Linux, refind_linux.conf
будет создан автоматически для этого дистрибутива, но вам может потребоваться создать его эквивалент для вашего другого дистрибутива (ов). Документация rEFInd включает в себя страницу по загрузке Linux, которая может помочь вам сделать все это.
Если вы не хотите использовать rEFInd, у вас должна быть возможность получить GRUB одного дистрибутива для подбора ядер других установок. Если вы можете загрузить один дистрибутив через GRUB, то вам нужно выполнить update-grub
(в Ubuntu или аналогичных дистрибутивах) или grub-mkconfig -o /boot/grub/grub.cfg
. (Однако вам может потребоваться изменить этот выходной путь; в некоторых дистрибутивах grub.cfg
может храниться в другом месте.) Проблема в том, что если и когда вы обновите ядро в этом втором дистрибутиве, вам нужно будет загрузить первый и перестроить файл конфигурации GRUB, чтобы GRUB распознал новое ядро. Альтернативой является установка GRUB дважды, по одному разу для каждого дистрибутива. Затем вы можете использовать менеджер загрузки EFI, чтобы выбрать, какой GRUB запускать, или настроить каждый GRUB с записью для другого.
Как видите, у вас много вариантов. Дополнительную информацию по этой теме см. На моей веб-странице, посвященной загрузчикам EFI для Linux.
Я понимаю, что это не пошаговая процедура, которую вы хотели, но сочетание понимания того, как все работает, и знание вашей собственной точной настройки обычно работают лучше, чем любая процедура "поваренной книги", особенно когда процедуры так зависит от деталей конфигурации, входящей в процесс.