Efi linux error target from imputs 316 что это за ошибка как исправить

Обновлено: 02.07.2024

Как устроена загрузка современных ОС? Как при установке системы настроить загрузку посредством UEFI, не утонув в руководствах и ничего не сломав?

Я обещал "самое краткое руководство". Вот оно:

  1. Создаём на диске таблицу разделов GPT
  2. Создаём FAT32-раздел на пару сотен мегабайт
  3. Скачиваем из интернета любой UEFI-загрузчик
    (нам нужен сам загрузчик, это один бинарный файл!)
  4. Переименовываем и кладем этот файл на созданный раздел по адресу /EFI/Boot/bootx64.efi
  5. Создаём текстовый конфиг, кладем его там, где загрузчик ожидает его увидеть
    (настройка и местоположение конфига зависят от конкретной реализации загрузчика, эта информация доступна в интернете)
  6. После перезагрузки видим меню загрузчика
    (Если на диске установлена Windows 8 или 10 — с большой вероятностью это руководство сокращается до пунктов 3 — 5.)

TL;DR не надо прописывать путь к загрузчику в новых загрузочных записях UEFI — надо файл загрузчика расположить по стандартному "пути по-умолчанию", где UEFI его найдет, и вместо загрузочного меню UEFI пользоваться меню загрузчика, которое гораздо проще и безопаснее настраивается

Как делать не надо

Есть, на самом-то деле, несколько способов настроить UEFI-загрузку. Я начну с описания других вариантов — чтобы было понятно, как (и почему) делать не надо. Если вы пришли за руководством — мотайте в самый низ.

Не надо лезть в NVRAM и трогать efivars

Наиболее "популярная" процедура установки загрузчика в систему такова: установщик ОС создаёт специальный раздел, на нём — структуру каталогов и размещает файлы загрузчика. После этого он с помощью особой утилиты (efibootmgr в linux, bcdedit в windows) взаимодействует с прошивкой UEFI-чипа, добавляя в неё загрузочную запись. В этой записи указывается путь к файлу загрузчика (начиная от корня файловой системы) и при необходимости — параметры. После этого в загрузочном меню компьютера появляется опция загрузки ОС. Для linux существует возможность вообще обойтись без загрузчика. В загрузочной записи указывается путь сразу к ядру вместе со всеми параметрами. Ядро должно быть скомпилировано с опцией EFISTUB (что давно является стандартом для большинства дистрибутивов), в этом случае оно содержит в себе заголовок "исполняемого файла EFI", позволяющий прошивке его запускать без внешнего загрузчика.

При старте системы, когда пользователь выбирает нужную ему загрузочную запись, прошивка UEFI сперва ищет на прописанном в этой записи диске особый EFI-раздел, обращается к файловой системе на этом разделе (обязательно FAT или FAT32), и запускает загрузчик. Загрузчик считывает из файла настроек свой конфиг, и либо грузит ОС, либо предоставляет загрузочное меню. Ничего не замечаете? Да, у нас два загрузочных меню — одно на уровне прошивки чипа UEFI, другое — на уровне загрузчика. В реальности о существовании второго пользователи могут даже не догадываться — если в меню всего один пункт, загрузчик Windows начинает его грузить без лишних вопросов. Увидеть экран с этим меню можно, если поставить вторую копию Windows или просто криво её переустановить.

Обычно для управления загрузочными записями руководства в интернете предлагают взаимодействовать с прошивкой UEFI. Есть аж пять основных вариантов, как это можно сделать: efibootmgr под linux, bcdedit в windows, какая-то софтина на "Маках", команда bcfg утилиты uefi shell (запускается из-под UEFI, "на голом железе" и без ОС, поскольку скомпилирована в том самом особом формате) и для особо качественных прошивок — графическими средствами UEFI (говоря популярным языком, "в настройках BIOS").

За всеми вышенаписанными "многобуков" вы могли легко упустить такую мысль: пользователь, чтобы изменить настройки программной части (например, добавить параметр запуска ОС), вынужден перезаписывать flash-память микросхемы на плате. Есть ли тут подводные камни? О да! Windows иногда способна сделать из ноутбука кирпич, linux тоже, причём разными способами. Качество прошивок часто оставляет желать лучшего — стандарты UEFI либо реализованы криво, либо не реализованы вообще. По логике, прошивка обязана переживать полное удаление всех переменных efivars без последствий, не хранить в них критичных для себя данных и самостоятельно восстанавливать значения по-умолчанию — просто потому что пользователь имеет к ним доступ, и вероятность их полного удаления далека от нуля. Я лично в процессе экспериментов неоднократно (к счастью, обратимо) "кирпичил" свой Lenovo — из загрузочного меню исчезали все пункты, включая опцию "зайти в настройки".

Работа с загрузочными записями UEFI — тоже не сахар. К примеру, утилита efibootmgr не имеет опции "редактировать существующую запись". Если ты хочешь немного изменить параметр ядра — ты удаляешь запись целиком и добавляешь её снова, уже измененную. При этом строка содержит в себе двойные и одинарные кавычки, а также прямые и обратные слеши в не особо очевидном порядке. Когда я наконец заставил эту магию работать — я сохранил её в виде bash-скриптов, которые до сих пор валяются у меня в корневой ФС:

Не надо использовать GRUB

Это чёртов мастодонт, 90% функциональности которого предназначено для дисков с MBR. Для настройки необходимо отредактировать ряд файлов, после чего выполнить команду генерации конфига. На выходе получается огромная малопонятная нормальному человеку простыня. В составе — гора исполняемых файлов. Ставится командой, которую просто так из головы не возьмешь — надо обязательно лезть в документацию

Для сравнения — самый простенький UEFI-bootloader, который есть в составе пакета systemd, ставится командой

Эта команда делает ровно две вещи: копирует исполняемый файл загрузчика на EFI-раздел и добавляет свою загрузочную запись в прошивку. А конфиг для неё занимает ровно СЕМЬ строчек.

"Самое краткое руководство" — чуть более подробно

Загрузочная запись нам не нужна — дело в том, что при выставлении в настройках BIOS загрузки с диска прошивка UEFI сначала ищет на нём EFI-раздел, а затем пытается исполнить файл по строго фиксированному адресу на этом разделе: /EFI/Boot/BOOTX64.EFI

Что такое "EFI-раздел"? В теории, он должен иметь особый тип "EFI System" (ef00). На практике, годится первый раздел на GPT-диске, отформатированный в FAT32 и имеющий достаточно места, чтобы разместить загрузчик и вспомогательные файлы (если есть).

Пункт 3: "Скачиваем из интернета любой UEFI-загрузчик". Что это значит? Загрузчик — это просто исполняемый файл определенного формата, к которому в комплекте идет конфиг. К примеру, если у вас есть под рукой установленный пакет с systemd — файл загрузчика можно найти по адресу /usr/lib/systemd/boot/efi/systemd-bootx64.efi, переименовать его в bootx64.efi и скопировать в /EFI/Boot/ на EFI-разделе. Нет под рукой systemd? Скачайте архив с сайта Archlinux. Или с репозитария Ubuntu. Или Debian. Есть под рукой система с Windows? Возьмите виндовый загрузчик оттуда, тоже сгодится )) Если сумеете настроить, я честно говоря не пробовал.

Пункт 4: "Настроить конфиг". Как и обычная программа, когда загрузчик запускается — он ожидает найти по определенным путям файлы конфигурации. Обычно эту информацию легко найти в интернете. Для загрузчика systemd-boot нам необходимо в корне EFI-раздела создать каталог "loader", а в нём файл "loader.conf" с тремя строчками (привожу свои):

Параметр editor отвечает за возможность отредактировать пункт загрузочного меню перед запуском.

Рядом с loader.conf необходимо создать каталог entries — один файл в нём будет отвечать за одну загрузочную запись в boot-меню. У меня там один файл arch.conf с таким содержанием:

Я не упомянул, но довольно очевидно — ядро и initramfs должны лежать в одной файловой системе с загрузчиком, то есть на EFI-разделе. Пути к ним в конфигах отсчитываются от корня этой ФС.

Другие загрузчики

systemd-boot очень простой и предоставляет спартанского вида чёрно-белое меню. Есть варианты красивей, если душа просит красоты.

Clover. Позволяет выставлять нативное разрешение экрана, имеет поддержку мыши на экране загрузки, разные темы оформления. Дефолтная тема ужасна, конфиг в виде xml нечитаем, настроить не смог.

Различные неочевидные последствия

Вы можете легко попробовать эту схему в работе. Берёте USB-флешку, форматируете в таблицу разделов GPT, создаете FAT-раздел и копируете туда загрузчик. Комп сможет с неё стартовать.

Если просто скопировать на такую флешку boot-раздел установленного linux — система будет спокойно загружаться с флешки, не видя разницы.

i've have a same problem as pao3007 do.

You saying, that we must press POWER + VOL Down + VOL Up to enter Recovery mode. But when I press it, it shows me only ''fastboot starting'' and i can do nothing.

Thanks for reply and hopefully for solution.

  • Introduction
    • Community Spotlight
    • Welcome & FAQs
    • Forum Housekeeping
    • Recently Released Service Tips - Read Only
    • Recently Released Critical Drivers - Read Only
    • Lenovo @ MWC 2021
    • Lenovo @ CES 2021
    • Lenovo @ IFA 2019
    • Lenovo @ CES 2019
    • Special Event Archive
    • ThinkPad X1 Fold
    • ThinkPad: T400 / T500 and newer T series Laptops
    • ThinkPad: P and W Series Mobile Workstations
    • ThinkPad: X Series Laptops
    • ThinkPad: X Series Tablet and Helix Laptops
    • ThinkPad: S Series, ThinkPad Yoga and Twist Laptops
    • ThinkPad: 11e (Windows), 13, E and Edge series Laptops
    • ThinkPad: L, R and SL series Laptops
    • ThinkPad Chromebooks: 11e, X and Yoga
    • ThinkPad; T61 and prior T series plus Other Legacy ThinkPads
    • ThinkBook Notebooks
    • ThinkBook Plus Notebooks
    • Lenovo Yoga Series Notebooks
    • Lenovo IdeaPad 1xx, 3xx, 5xx & 7xx, Edge, LaVie Z, Flex Notebooks
    • Lenovo B and G Series Notebooks
    • Lenovo U and S Series Notebooks
    • Lenovo P, Y and Z series Notebooks
    • Lenovo C, E, K, M, N and V Series Notebooks
    • Lenovo Chromebooks
    • A5 [L18021] Smartphones
    • A Series, Vibe B & Vibe C Smartphones
    • P1, P1m, P70 & P90 Series Smartphones
    • P2 [P2a42] Smartphones
    • K9 [L38043] and K9 Note [L38012] Smartphones
    • K8 [XT1902] Smartphones
    • K and Vibe Z Series Smartphones
    • S and Vibe X Series Smartphones
    • Smartphone Accessories and Wearables
    • Legion Phone Duel
    • Legion Phone Duel 2
    • Mirage AR Hardware – Technical Questions
    • Star Wars™: Jedi Challenges
    • MARVEL Dimension of Heroes
    • Gaming Laptops
    • Gaming Desktops
    • Y Gaming Accessories & Curved Gaming Monitors
    • Legion Game Hub
    • ThinkPad Tablets
    • Android Yoga Series Tablets
    • Lenovo Android based Tablets and Phablets
    • Windows based Tablets
    • Yoga Book C930
    • Yoga Book (Android)
    • Yoga Book (Windows)
    • ThinkCentre A, E, M, S Series
    • Lenovo All In One (AIO) Desktops
    • Lenovo Desktop Towers
    • Lenovo Beacon, Stick 300, D, J and S Series Desktops
    • ThinkStation Workstations
    • BladeCenter / Flex Systems
    • Converged Systems - HX Series
    • ThinkSystem
    • System x - X6, M5, M4
    • ThinkServer
    • Lenovo Sales Configurators
    • Enterprise Storage
    • LenovoEMC Storage
    • Lenovo Iomega Networking Storage
    • Datacenter Networking Hardware
    • Networking Management/Devops
    • Server System Management
    • Lenovo XClarity
    • Solutions on Lenovo Servers
    • LiCO - Lenovo Intelligent Computing Orchestration
    • Displays, Options and Accessories
    • Lenovo Explorer
    • Mirage Solo & Mirage Camera
    • VR Classroom Hardware
    • VR Classroom Software, Content, and Educator Resources
    • Pre-Installed Lenovo Software and Applications
    • Enterprise Client Management
    • Lenovo Patch for SCCM
    • Lenovo Manageability Commander
    • Security & Malware
    • Windows 11
    • Windows 10
    • Windows 8.1, 8, 7, Vista and XP Discussions
    • ThinkSmart
    • Lenovo Smart Display & Lenovo Smart Clock with Google Assistant
    • Lenovo Link App, Smart Home Essentials and Smart Frame
    • Lenovo Smart Tablets with Amazon Alexa
    • Lenovo Smart Tablets with Google Assistant
    • Windows Ecosystem Developers
    • Android Ecosystem Developers
    • Lenovo Technologies
    • General Discussion
    • Feedback on the support site
    • Fedora
    • Red Hat and CentOS
    • Ubuntu
    • Debian
    • Other Linux Discussions
    • XClarity Ideation

    Community Guidelines

    Please review our Guidelines before posting.

    Check out current deals!

    Most Popular Posts

    • Username
    • Match exact username (no wildcards)
    • User ID
    • Email address
    • Match exact email address (no wildcards)
    • IP address
    • Match any of the above criteria
    • Duration of ban(Days)
    • Duration of ban(Hours)
    • Duration of ban(Minutes)
    • Make ban permanent
    • Internal reason for ban
    • Public reason for ban
    Choose the people to notify and enter the reason for this action

    Welcome to Ideation!

    Ideation sections have been created for customers to engage with us by discussing and promoting ideas and improvements relating to Lenovo’s products and services.

    As a reminder, your participation in Ideation is governed by Lenovo’s website Terms of Use [link] and by Lenovo’s Forums Community Guidelines. Additional terms governing the Ideation Program are included in the Ideation Terms and may be found here. For your convenience, here’s a

    Quick summary of the highlights:

    • This area is for ideas – improving our products or suggesting entirely new products – please keep technical support issues on the other boards designated for that purpose
    • You’re giving your ideas freely for us to use so we can improve our offerings to you
    • The ideas you give us are your own and are not confidential
    • If we decide we want exclusive use of your idea, you’re agreeing to sell it to us at a fixed price

    By clicking on “Yes” below you certify that you have read and agree to the Community Guidelines and the Ideation Terms, and acknowledge that by submitting any ideas, material, or information on the Ideation site you grant Lenovo the right to use any such submissions by you in any way without acknowledging, notifying, or compensating you, as described in those documents.

    Когда я это сделал mount -a , он попросил пароль пользователя для подключения к сети. Кажется, что это не может продолжаться без пароля при загрузке, поэтому он просто завис.

    Кажется, я нашел решение:

    • в приглашении grub нажмите a для добавления параметров
    • добавьте init=/bin/bash в конец командной строки ядра и нажмите Enter
    Мне пришлось использовать, mount -o remount,rw / --target / чтобы успешно перемонтировать в режиме RW. Elsecase mount выбирал неверные значения /etc/fstab , см. man mount Подробности. Это все еще верно сегодня - более шести лет спустя. В любом случае, в CentOS7 ключом для изменения записи при загрузке теперь является tab, и однажды в bash вы должны смонтировать свою файловую систему (которая еще не размонтирована на данном этапе) с помощью простого mount /dev/sda(X) /mnt (очевидно,

    Как насчет удаления записи, создания снимка и затем попытки изменить ваш / etc / fstab, чтобы у вас был рабочий снимок, к которому вы можете вернуться?

    В соответствии с man-страницей mount.cifs вы также можете указать пароль через password=arg . Кроме того, согласно этой странице руководства, здесь нет аргументов, username=arg но вместо этого user=arg . Но это может отличаться в вашей системе, лучше проверьте вашу man-страницу для правильных имен аргументов.

    Описание вашей проблемы немного неясно. Вы не можете загрузиться в режиме одного пользователя / восстановления? Следует только попытаться смонтировать root fs и оставить fstab в покое.

    Я нашел решение системной ошибки, не загружающей ядро. Используйте live cd, чтобы получить доступ к вашей существующей установке. После переустановки ядра Linux:

    Затем удалите файл fstab из etc / fstab:

    Теперь переустановите systemd:

    При переустановке systemd он автоматически сгенерирует новый файл fstab

    Теперь переустановите загрузчик, в этом случае я использую grub:

    (проверка ОС полезна, если на вашем жестком диске / ssd установлено более 1 ОС).

    UEFI Tux Logo

    Прочитав недавнюю статью Загрузка ОС Linux без загрузчика, понял две вещи: многим интересна «новинка», датируемая аж 2011 годом; автор не описал самого основного, без чего, собственно, и работать ничего не будет в некоторых случаях. Также была ещё одна статья, но либо она уже устарела, либо там опять таки много лишнего и недосказанного одновременно.

    Итак, что же такое Linux Kernel EFI Boot Stub?

    Общая информация

    А ни что иное, как… «exe-файл»! Да-да, «виндовый» PE/COFF. Ну, а точнее, только закос под него с небольшими модификациями, чтобы угодить загрузчику UEFI. Можно убедиться в этом, прочитав первые 2 байта ядра:

    Знакомо, не правда ли? Как минимум тем, кто хоть раз «для интереса» открывал исполняемый файл MS-DOS или Windows в блокноте, хекс-редакторе или чём-то покруче. Это инициалы Марка Збиковски, который, собственно, и разработал данный формат файлов в MS-DOS. Сигнатура этой заглушки до сих пор висит рудиментом в современных исполнимых файлах Windows, сжирая со своим заголовком целых 64 байта на каждый файл!

    DOS-заголовок попадает на legacy-код, который выполняется в случае загрузки ядра как бут-сектора, и ругается на манеру MS-DOS при запуске PE-файлов: «Direct floppy boot is not supported. Use a boot loader program instead. Remove disk and press any key to reboot . ». Поэтому информация из этого заголовка здесь является мусором, кроме, собственно, сигнатуры 'MZ' и адреса смещения следующего заголовка.

    Идём дальше.
    Спецификация PE/COFF говорит нам, что по смещению 0x3c находится 32-битное смещение второго заголовка с сигнатурой «PE\0\0»:

    итак, смещение равно 0xb8, что справедливо для текущего stable-ядра x86_64 архитектуры, на x86 будет 0xa8. Читаем:

    А вот и сигнатура второго заголовка! Как можно было догадаться, это аббревиатура от словосочетания Portable Executable, с которой и начинается полезная нагрузка в исполнимых файлах.

    Даже загрузчик Windows плевал на половину полей этого заголовка, а уж UEFI они и вовсе не нужны, поэтому некоторые из них прописаны статически, важные же — заполняются во время сборки ядра. Множество «ненужных» полей, всяких таймстемпов, котрольных сумм и пр. просто остаются нулями. Заполняются в основном размеры, смещения, точка входа и т. д. Поэтому, можно с натяжкой назвать данный PE-файл полностью валидным. Однако, классические утилиты LordPE или PETools вполне себе довольствуются сигнатурами и рассказывают о файле всё, что им известно:

    PE optional header

    image

    Основное отличие от «реальных» исполняемых файлов в Windows — это флаг Subsystem опционального заголовка, который выставляется в IMAGE_SUBSYSTEM_EFI_APPLICATION, а не в IMAGE_SUBSYSTEM_WINDOWS_GUI для графических или IMAGE_SUBSYSTEM_WINDOWS_CUI для символьных (консольных) приложений Windows соответственно.

    Структура

    В общем же, всё как в обычном PE-файле. На текущий момент стабильной версии 3.11.4 ядра Arch Linux из репозиториев, в нём содержатся 3 секции: '.setup', '.reloc' и '.text'.

    • Секция .setup, содержит в основном legacy-код для инициализации в случае загрузки в режиме совместимости. При загрузке же в UEFI mode, все переключения режимов процессора, начальные инициализации производит прошивка.
    • .reloc секция обязательно требуется загрузчиком, поэтому при сборке ядра создаётся пустая заглушка «чтоб было».
    • Самая интересная секция .code, собственно, содержит EntryPoint и основной код всего остального ядра. После того, как EFI-application найдено, загрузчик выполняет загрузочный сервис LoadImage, тем самым загружая весь образ в память. Тип резидентности зависит от поля Subsystem: EFI_APPLICATION будет выгружаться, когда отработает. EFI_DRIVER же может быть Unloadable и выгрузится только в случае критической ошибки. Далее передаётся управление на точку входа, обычно это функция efi_main() — аналог main() в C.

    Основные требования

    image

    Прежде всего, необходимо активировать режим загрузки EFI-mode. Пункт может называться как вдумается вендору, обычно находится во вкладке Boot Options. Если увидели там что-то вроде Legacy Mode или CSM (Compatibility Support Mode), либо просто BOIS Mode, меняйте на что-то похожее: (U)EFI Mode, Enhanced Mode или Advanced Mode.

    Если материнская плата имеет логотип «Windows 8 Ready!», то, скорее всего, режим EFI Boot Mode уже активирован по умолчанию.

    В большинстве случаев, для загрузки ядра Linux в EFI-mode необходимо выключить опцию Secure Boot.

    Разметка диска

    Многие источники указывают, что обязательно нужна разметка диска GPT, а не MBR, но это не так. UEFI вполне себе умеет MBR. Другое дело, например, Windows насильно заставляет разбивать диск новым методом, чтобы грузиться в EFI mode и ругается на древность Master Boot Record'а. И правильно делает! Разметив диск «современно» ничего не потеряем, а только выиграем.
    Во-первых, не будет проблем со всякими там Primary/Logical разделами, «туда не ходи — сюда ходи» и прочими рудиментами.
    Во-вторых, хоть сейчас и продвигаются массово SolidState-диски, у которых объёмы пока не сильно удивляют, размером же обычной «вертушки» в несколько терабайт сейчас уже никого не удивишь. А ведь под MBR можно разметить раздел максимум около 2ТБ. GPT же, видит ну очень много, можно даже цифру не называть — относительно не скоро появятся диски таких размеров.
    Ну и плюс всякие бонусы, типа дублирования GPT-записи в начале и конце диска, контрольные суммы целостности и т. п., добавляют желания не раздумывая размечать диск под GPT.

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

    Отдельный раздел
    Тип раздела

    Здесь существует некоторая неявность. Все утилиты для разметки, например, parted, имеют свойство установки и отображения флага «boot», который применяется к разделу. Так вот, в случае с MBR, такая возможность действительно имеется, т. е. существует реальный байт, который указывает БИОСу на «загрузочность» раздела. Этот флаг можно поставить на любой раздел, MBR которого, мы хотим скормить БИОСу для загрузки. Но, когда мы имеем дело с GPT, никакого флага в действительности нет! Под этим флагом parted понимает как раз GUID равный вышеуказанному. Т. е. по факту GPT boot flag = GPT EFI Partition!

    Вывод: если наш EFI-раздел на MBR — ставим тип раздела EFI Partition и boot flag. Если GPT — либо тип EFI Partition, либо boot flag, так как они представляют собой одно и то же.

    Есть ещё всякие вещи, типа GPT legacy boot flag, который устанавливается в Protective MBR, и прочее, но всё это костыли, которые используются только в режиме совместимости. В режиме GPT UEFI Boot должны игнорироваться.

    Файловая система

    В разных источниках пишут по-разному. Кто-то говорит, что FAT16 можно использовать, кто-то даже FAT12 рекомендует. Но, не лучше ли последовать совету официальной спецификации? А она говорит, что системный раздел должен быть в FAT32. Для removable-media (USB HDD, USB Flash) — ещё и FAT12/FAT16 в придачу к FAT32.
    Про размер раздела ничего не говорится. Однако, по причине начальных костыльных и баганых реализаций загрузчиков и прошивок, опытным путём народ выяснил, что во избежание различных «внезапностей», рекомендуется размер не менее 520МиБ (546МБ). Здесь как повезёт, проблем может не быть и с 32-мегабайтным разделом.

    Структура директорий

    После того, как загрузчик нашёл свой «меченый» раздел и убедился, что поддерживает файловую систему, он начинает выполнять все действия с путями, относительно корня раздела. Кроме того, все файлы в данном разделе должны находиться в директории \EFI\, которая, в свою очередь, является единственной в корне раздела. По соглашению, каждому вендору рекомендуется выделить себе папку с уникальным названием и поместить её в \EFI\, например: \EFI\redhat\, \EFI\microsoft\, \EFI\archlinux\. В директории вендора находятся непосредственно исполнимые efi-приложения. Рекомендуется один файл на одну архитектуру. Файлы должны иметь расширение .efi.

    Для съёмных устройств предназначена директория \EFI\BOOT\. В ней так же рекомендуется не более одного файла для каждой архитектуры. В дополнение к этому, файл должен называться boot.efi. Например, \EFI\BOOT\bootx64.efi. Доступные архитектуры: ia32, x64, ia64, arm, aa64.

    Доступ к NVRAM

    По умолчанию, если ничего не записано в энергонезависимой памяти UEFI, будет загружаться \EFI\BOOT\bootx64.efi. Чтобы записать в NVRAM путь к необходимому приложению, можно воспользоваться утилитой efibootmgr. Попробуем вывести текущие записи:

    В некоторых дистрибутивах для работы этой утилиты требуется включенная опция ядра CONFIG_EFI_VARS.

    Приступаем

    image


    Итак, мы разметили FAT32 EFI System Partition (ESP) размером 550МиБ . Либо, у нас стоит винда второй системой и уже сама создала его. Правда, создаёт она его обычно размером около 100МБ, но лично у меня проблем никогда не возникало.
    В /boot уже имеется ядро с поддержкой EFI boot STUB.

    Чтобы проверить, была ли включена опция при сборке ядра, выполним:
    либо

    CONFIG_EFI_STUB=y означает, что опция активна.

      Можно смонтировать ESP\\ на /boot через mount --bind, предварительно скопировав содержимое.
    Данный пункт подходит только для дистрибутивов, которые не содержат символические ссылки в каталоге /boot. Например, на openSUSE монтировать не удастся, т. к. он содержит там несколько ссылок, в том числе и на само ядро.

    • Используем efibootmgr, который умеет передавать параметры ядра.
    • Если efibootmgr брыкается, можно воспользоваться UEFI Shell, который, как и наше ядро, является EFI-приложением. Через его команду bcfg возможно редактировать пункты загрузки.
    • Может быть такой вариант: efibootmgr ругается на добавление параметров, значит прошивка не поддерживает их запись (либо просто кривая, что вероятнее). В прошлой статье в комментах упомянули параметр ядра efi_no_storage_paranoia , который может помочь. Но пользоваться им можно только если вы уверены в том, что ваша прошивка реализована полностью в соответствии со спецификацией! Разработчики предупреждают, что если вендор добавил костылей и отсебятины при реализации, есть неиллюзорная вероятность материализовать кирпич на месте материнской платы.
    • Можно также грузиться через UEFI Shell. Для него создаётся скриптstartup.nsh, в котором указывается команда загрузки ядра с нужным command line. А Shell, в свою очередь, добавляется как пункт загрузки.
    • Существует ещё одна проблема: добавление пункта возможно только для одного пути ядра, при этом ram-disk не видится. В большинстве статей рекомендуют при этом пересобирать ядро со встроенным initrd. Точно не знаю — проблема ли ядра это, или загрузчика. Но на текущий момент в 90% случаев всё поддерживается и пересобирать ядро не нужно.

    Рекомендации по встраиванию рам-диска в ядро пошли, скорее всего, из-за массового неверного указания пути к нему. В ранних реализациях EFI Boot Stub, ядро не плевалось ошибкой о неверном пути к ram-disk, а молча отказывалось грузиться. Видимо поэтому все начали массово внедрять его в ядро, решив, что он не поддерживается. Хотя поддержка параметра initrd существует с самого появления в ядре фичи Boot Stub.
    ВАЖНО: Путь к ram-диску передаётся абсолютный через обратные слеши " \ ", а не прямые! Например, initrd=\EFI\archlinux\initramfs-linux.img.
    На самом деле, ядра, версий выше 3.8.0-rc5 не видят разницы между прямым и обратным слешем — будет работать любой. Но вот с момента появления фичи Boot Stub в версии 3.2.0-rc5, путь, записанный через прямые слеши, ядро просто не видело и молча без ошибок отказывалось грузиться. Ругаться ошибками по этому поводу, оно научилось в версии 3.4.0.

    Dualboot без загрузчика

    Если у вас установлены 2 системы одновременно, и всё равно не хочется ставить сторонний загрузчик, можно добавить обе в пункты загрузки UEFI и подкорректировать предпочитаемый boot order. Загрузчик Windows обычно располагается в \EFI\Microsoft\BOOT\bootmgfw.efi.

    Итого

    Если всё сделано правильно, перегружаемся, вызываем Boot Menu, выбираем добавленный нами пункт и смотрим на почти мгновенную загрузку. В случае с SSD, FastBoot, Readahead и Arch Linux — около 3-4 секунд. Домашний сервер уже год загружается без всяких сторонних загрузчиков, используя EFI Boot STUB.
    Конечно, выигрыш в скорости тут минимальный, но, как пишут знающие люди типа Roderick Smith, иногда в режиме EFI Boot происходит «более адекватная» инициализация оборудования, чем в режимах совместимости.

    Заключение

    По причине относительной сырости прошивок UEFI и совершенно различных реализаций, я не стал приводить примеры кода. В каждом случае может существовать своя проблема. Надеюсь, описанное мной поможет понять общий принцип и применить к своему случаю.
    Также рекомендую прошиться последней версией UEFI с сайта производителя материнской платы.

    Читайте также: