Настройка UEFI-загрузчика. Самое краткое руководство в мире

  • Tutorial

Как устроена загрузка современных ОС? Как при установке системы настроить загрузку посредством 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-скриптов, которые до сих пор валяются у меня в корневой ФС:


efibootmgr -c -L "Archlinux (debug)" -l '\EFI\archlinux\vmlinuz-linux' -u "root=/dev/mapper/vg1-lvroot rw initrd=\EFI\archlinux\initramfs-linux.img systemd.log_level=debug systemd.log_target=kmsg log_buf_len=1M enforcing=0"

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


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


grub-install --target=x86_64-efi --efi-directory=esp_mount --bootloader-id=grub

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


bootctl install --path=/boot

Эта команда делает ровно две вещи: копирует исполняемый файл загрузчика на 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" с тремя строчками (привожу свои):


default     archlinux
timeout     10
editor      1

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


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


title          Arch Linux
linux          /efi/archlinux/vmlinuz-linux
initrd         /efi/archlinux/initramfs-linux.img
options        root=/dev/mapper/vg1-lvroot rw initrd=\EFI\archlinux\intel-ucode.img

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


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


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


rEFind — очень красивый загрузчик. Скачать можно тут в виде deb-пакета. Использую на своём ноуте. Умеет создавать загрузочное меню автоматически, без конфига — просто сканируя файлы.


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


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


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


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

Поделиться публикацией
Похожие публикации
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама
Комментарии 84
  • +10
    Это руководство в стиле «как нарисовать сову»
    • +3
      Напишите с какого места непонятно. Можно в личку. Я допишу если нужно.
      • 0
        Мне тоже непонятно.
        1. Прошивка UEFI (чип) ищет GPT-диск и запускает файл (загрузчик) по фиксированному пути
        2. Загрузчик читает /loader/loader.conf со списком пунктов меню — в примере по умолчанию выбирается archlinux
        3. Загрузчик для выбранного пункта меню читает конфиг пункта меню — в файле /entries/arch.conf, раздел 'Arch Linux'.
        Каким образом archlinux сочетается с /entries/arch.conf и текстом Arch Linux? Как загрузчик нашел файл из которого читать конфиг пункта меню?
        4. Загрузчик запускает Linux с нужными опциями
        В опциях указана обычная опция initrd /efi/archlinux/initramfs-linux.img, а также дополнительный параметр ядра initrd=\EFI\archlinux\intel-ucode.img.
        Что такое \EFI\archlinux\intel-ucode.img, откуда он взялся и нужен ли он для загрузки?
        • 0
          Я изменил default arch на default archlinux в тексте, чтобы убрать возможность прочитать слово в значении «архитектура». Имя файла подправить забыл.
          Специально указываю, что все настройки — мои собственные, все равно настраивать надо по аналогии, копировать тут смысла нет. intel-ucode это микрокод процессора, для работы не обязателен.
          • 0
            Чтоб настраивать по аналогии, надо чтоб хоть что-то работало :)
            Итого, ещё раз повторим инструкцию по рисованию совы:
            1. Удалить все имеющиеся загрузочные записи в чипе UEFI
            2. После этого чип UEFI запускает загрузчик по фиксированному пути /EFI/Boot/BOOTX64.EFI
            3. Загрузчик из systemd-boot читает свой конфиг из /loader/loader.conf
            4. Загрузчик из systemd-boot читает свой конфиг из /entries/XXX.conf
            5. Загружаемся
            Все правильно?
            • 0
              1. Незачем что-то удалять. Незачем вообще лишний раз трогать. Просто выставить загрузку с диска.

              2. Да. И он уже должен работать, даже если не настроен — запускаться, получать управление, отображать меню. Вопрос дальнейшей настройки — чисто механический: открыть в инете документацию, и согласно ей настроить. И необязательно это должен быть systemd-boot, можно и grub зафигачить, и rEFInd, настройки у всех разные — но сам загрузчик должен заработать сразу, как только его положили по нужному пути.

              3,4. /loader/entries/xxx.conf (папка entries должна лежать рядом с loader.conf)
    • 0
      На сколько понимаю, если кривыми руками полезу в загрузчик, у меня большая вероятность превратить винт в кирпич. Собственно как сделать дамп оригинального загрузчика, а в случае кирпича вернуть его на место?
      Если это возможно, это должно быть первым шагом перед любыми манипуляциями над загрузчиком)

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

      Я правильно понимаю, что можно клонировать загрузчик на флешку, удалить оригинал с винчестера, и в итоге у меня получается что-то вроде HASP-а для запуска системы?

      P.S.
      Очень интересно будет почитать исполнение на тему: как поставить любой linux параллельно с windows 8+ при наличии лицензии на оную и UEFI-загрузчика, без виртуалок, ничего не сломав.

      • +2
        Кирпичится не винт, а материнка, точнее микросхема UEFI. После этого решается только одним способом — выпаиванием чипа, перепрошивкой на программаторе и припаиванием обратно. Опасность возникает при добавлении пунктов в меню загрузки, потому что они хранятся в NVRAM чипа. Если очень не повезло, то окирпичить комп может операционка, причем в худших случаях — просто при старте с live-cd (без какой-либо записи на диск). Так было с Ubuntu и ноутами Samsung. Если ничего не путаю, производитель менял пострадавшим мать по гарантии, но не факт что всем.

        Манипуляции над загрузчиком, если иметь в виду манипуляции с файлами на EFI-разделе, абсолютно безопасны. Опасность возникает, когда ты вдруг понимаешь, что только что написал команду efibootmgr и собираешься её запустить. К слову, если ты набрал её на маке — то с высокой степенью вероятности получишь кирпич )) потому что формат прошивки UEFI у них свой, линуксовая прога там всё порушит. Моя статья как раз о том, что НЕ НАДО использовать команды, изменяющие NVRAM.

        > Я правильно понимаю, что можно клонировать загрузчик на флешку, удалить оригинал с винчестера, и в итоге у меня получается что-то вроде HASP-а для запуска системы?

        Да. Перед тем, как писать статью, я вдоволь поигрался с флешкой. Удалять вот файлы на системном диске не пробовал, но должно сработать.

        > Очень интересно будет почитать исполнение на тему: как поставить любой linux параллельно с windows 8+ при наличии лицензии на оную и UEFI-загрузчика, без виртуалок, ничего не сломав.

        Я могу тебе тут в паре предложений рассказать. Ставишь обе системы в произвольном порядке, в линуксе если инсталлер предложит поставить загрузчик — отказываешься. Винда создаст EFI-раздел (при разбитии диска она его сама создаёт), на него пихает свой загрузчик в папку /EFI/Microsoft/ и прописывает в NVRAM микросхемы UEFI загрузочную запись «Windows Boot Manager» с путём к загрузчику. Заходишь в биос, в списке порядка загрузки помимо дисковых устройств появится эта запись. Ты меняешь загрузку обратно на диск. В этом случае при старте UEFI будет искать загрузчик в «пути по умолчанию», то есть попытается запустить файл /EFI/Boot/bootx64.efi

        Скорее всего это сработает, потому что винда туда копию своего загрузчика наверняка делает. Ну если юзер выставит загрузку с диска вместо Windows Boot Manager, чтоб у него винда грузилась. Так вот, дальше по моей статье — находишь бинарник с загрузчиком, заменяешь им виндовый в «пути по умолчанию» (в папке Microsoft не трогаешь), кидаешь куда надо текстовый конфиг, прописываешь пути для запуска линукса и винды, и после ребута новый загрузчик покажет уже свое загрузочное меню, которые ты сам настроил.

        При этом «ничего не сломав» гарантируется тем фактом, что в любой момент ты можешь в биосе выставить загрузку в Windows Boot Manager, который находится /EFI/Microsoft и который ты не трогаешь совсем. То есть, винда гарантированно не пострадает.
        • 0
          Я правильно понял, когда винда ставится, она патчит микросхему UEFI своей записью на Windows Boot Manager и этого никак не избежать без бубна?
          И ещё — выше были комментарии по поводу livecd и других операций, которые лезут в NVRAM и могут кирпичнуть мать. Можно поподробнее как/когда и при каких условиях? То есть, я при каких то действиях, могу даже не подозревать, что софт в процессе своей обычной работы лезет в NVRAM UEFI и что то там меняет? Как так жить то?
          • 0
            Установщик «винды», как и установщики других ОС (естественно, поддерживающие UEFI) «патчат микросхему UEFI» так же, как и Вы, когда, например, корректируете очередность поиска загрузчика в «setup-е» BIOS-а (читай, UEFI). Спешу Вас успокоить — ни установщик, ни сама ОС (без «вредоносов», естественно) ничего плохого Вашей материнке не сделает. К тому же, если у Вас не китайский компьютер, то производитель материнки наверняка (но не гарантированно) предусмотрел «защиту» от «невалидных» переменных и наверняка реализует возможность «сброса к заводским настройкам». У меня есть китайский компьютер с «китайской» прошивкой UEFI))) Так там буквально все разрешено бесконтрольно менять — после некоторых экспериментов у меня перестала работать встроенная видеокарта (на экране ничего небыло, а вот диск «жужжал» и клавиатура включалась). Так вот мне и в этом случае удалось «вслепую» сбросить настройки до заводских и восстановить работоспособность компьютера).
            Так что, если Вы не ставите целью «окирпичивание» материнки, то это наверняка Вам не грозит. Ведь не даром говорят: «Тонут в основном те, кто умеет плавать».
            • 0
              То есть, я при каких то действиях, могу даже не подозревать, что софт в процессе своей обычной работы лезет в NVRAM UEFI и что то там меняет? Как так жить то?

              Окирпичивание без действий со стороны может произойти в исключительных случаях, когда в конретной модели конкретного производителя есть ошибка.
        • 0
          «Берёте USB-флешку, форматируете в таблицу разделов GPT» — Как это сделать?
          • +4
            В Linux
            #: fdisk /dev/sdX
            fdisk> g
            fdisk> w

            В Windows
            diskpart
            list disk
            select disk X
            clean
            convert gpt
            • 0
              в линухе лучше пользоваться не fdisk-ом а parted-ом — fdisk только «недавно» GPT научили.
              parted mktable gpt
            • 0
              У меня просто винды под рукой нет, чтобы посмотреть.
              Когда 10 винда устанавливается на новый диск, она его как раз в GPT конвертирует — то есть она это гарантированно умеет.
            • 0
              > Не надо использовать GRUB

              Может, конечно, и так, но вдруг вам захотелось сделать нормальное полнодисковое шифрование?
              • 0
                Нет, когда нужны возможности конкретного загрузчика — то его конечно и надо использовать. Просто у меня уже крик души, я постоянно наблюдаю что люди ставят себе Grub, нередко с большим трудом, когда можно обойтись куда меньшей кровью.
                • 0
                  Обычно /boot — не шифруют. А LUKS — работает точно также (ручками передаем параметры ядру).
                • +3
                  вот отличная статья: https://habrahabr.ru/post/308032/
                • +1
                  Спасибо за статью. Сняло многие вопросы.
                  • +1
                    >>Не надо использовать GRUB
                    Да, только при мультибуте юниксов с виндой возникает знатный пердолинг с этими вашими GPT и UEFI. А вот старый добрый MBR и GRUB честно тянет тележку без танцев с бубнами. Может для каких-то мега объемных дата-систем и актуально это дело, но для большинства домашних систем нужно как козе баян.
                    • 0
                      Вот я и статью задумал, чтобы рассказать что есть прямая и короткая дорога без пердолинга.
                      Реализация подкачала )
                      • +3
                        Жесткое ограничение на число разделов, постоянное «какого хрена эта флешка не определяется как загрузочная, я же сделал все по инструкции», если не дай бог выбрал не то место для установки линуксового загрузчика — не увидишь либо линукс, либо винду. До сих пор помню команды fixboot и fixmbr.

                        Так что лично я очень рад, что этот отход жизнедеятельности мамонта под названием MBR наконец закопали. Единственная проблема, с которой я сталкивался на компьютерах с UEFI — это выбор темы покрасивее для refind.
                        • 0
                          >>какого хрена эта флешка не определяется как загрузочная, я же сделал все по инструкции
                          Используете самурайский метод — dd в консоли как диды завещали?:) Не знаю таких проблем. Делаю загрузочные флешки с Unetbootin в линуксе или в UltraISO под окнами. Ни разу факапов не было. Все грузится спокойно, что установочная винды, что лайв флешка с Убунтой.
                          >> если не дай бог выбрал не то место для установки линуксового загрузчика — не увидишь либо линукс, либо винду
                          Откуда вы такие проблемы себе роете? Подозреваю, что стараетесь реализовывать нетривиальные решения, ну тогда могу посоветовать перестать выбирать шашечки, а заняться реальной работой. Проверенно — когда не хватает времени на работу, про выбор шашечек забываешь. Как в общем и про системы где постоянно требуется знание тантрического секса на бубне типа Генту или Арч.
                        • 0
                          Да не, не очень

                          • 0
                            Ну с Arch линукс может все и безоблачно, но у меня с Убунтой, Win7 и GPT вышли какие то проблемы, сейчас уж и не вспомню, что там было. Вроде Убунта говорила, что жесткий диск не видит, на который предварительно была установлена винда с GPT. Переустановил винду с MBR и сразу все завелось без всякого выпендрежа. С разделами тоже проблем у меня нет. У меня три жестких диска: 1TB, 500ГБ, 320ГБ. Линукс установлен на диск 1TB, диск разбит на несколько разделов в разных форматах естественно. Не пойму зачем мне этот ваш GPT и UEFI, если у меня и так все работает?
                            • +3
                              Это проблемы исключительных дистров. Убунту — совсем уже исключительный.

                              Не пойму зачем мне этот ваш GPT и UEFI, если у меня и так все работает?

                              Так-то можно и на ms-dos до сих пор сидеть — а чё, там тоже всё работает.
                              • 0
                                Деаа?? И чем отличается работа в системе загруженной через GRUB + MBR от системы загруженной Gpt + НЕХ. Чем? Расскажите — посмешите.
                                • +5
                                  Ну, например, фреймбуфер на всех этапах загрузки, а не жалкий VGA.
                                  Ну, например, упирание в два терабайта для MBR.
                                  Ну, например, нормальные драйверы на этапе инициализации, а не 16-битные огрызки.
                                  Ну, например, secure boot.
                                  Ну, например, отсутствие проблем «да где этот чертов загрузочный сектор».
                                  Ну, например, создание несколько больше, чем 4 (7) разделов.

                                  Ну как, ржёте там небось, да?
                                  • 0
                                    Ну, например, упирание в два терабайта для MBR.

                                    Актуально только для загрузочного диска. У меня два 3ТБ диска и режим BIOS, так как XP x64 ничего не знает про UEFI, а GPT для дисков с данными умеет.
                                    • –4
                                      Я просил указать чем отличается работа в загруженной системе, а не ваши прохладные истории пердолинга с шашечками на стадии загрузки. Или пердолинг с шашечками на стадии загрузки это ваша основная деятельность? Тада пардоньте. Единственный явный плюс который для реальных дел это поддержка жестких дисков 2тб + ну и хочу сказать, что я имею ввиду домашние машины, а не серверные монстры.
                                      • 0
                                        Я тоже много чего просил. Только вот какое отношение загрузка имеет к процессу работы? Перефразирую более понятно для пердолящих всё и вся: как процесс доставка товара может изменить свойства самого товара? Совершенно неважно, привезёте ли вы мебель на самолёте из другой страны или его джамшуты за бутылку принесут из соседнего магазина — мебель то одна.
                                        • 0
                                          Ну да. Перефразирую старый анекдот про бананы и пальмы на новый лад.
                                          Загружается юзер на своем писюке, а за спиной кулхацкер ходит и под нос бубнит: «ну как так можно… Загружаешься… Загружаешься через граб и на жестком диске мбр, а не гпт… Посмотри на меня! Я закончил MIT, прочел статью на хабре, просидел ночь, укокошил один жесткий диск ковыряясь в его прошивке, но зато я теперь гружусь в гпт! Вот тебе ссылочка на статью на хабре приступай к экспериментам! „
                                          Юзер: “И что же я получу в итоге?»
                                          Кулхацкер удивленно: «Как что? Ты будешь грузить систему! „
                                          • 0
                                            Да разные могут быть причины.
                                            И использование 2+ гиговых дисков, и загрузка ОС на ZFS и пр. и пр.
                                • 0
                                  Интересно, с чего вы решили, что речь идет об установленных и работающих системах?
                                  Мне казалось очевидным, что настройка загрузчика это неотъемлемый шаг именно установки.

                                  А про выбор MS-DOS+MBR против GPT+EFI — большинство возражений, которые я встречал, сводятся к «Я не понимаю как это работает, и не хочу разбираться». Конечно, за исключением редких случаев, когда есть какая-то необходимость именно в первом варианте. Просто те, кто разобрался, перестают видеть хоть какой-то смысл в ставить систему «по старому».
                            • 0
                              подскажите, а как без GRUBа всякие quiet splash, nomodeset и прочие параметры ядру передать?
                              • 0
                                Например так?
                                efibootmgr -c -L «Archlinux (debug)» -l '\EFI\archlinux\vmlinuz-linux' -u «root=/dev/mapper/vg1-lvroot rw initrd=\EFI\archlinux\initramfs-linux.img systemd.log_level=debug systemd.log_target=kmsg log_buf_len=1M enforcing=0 quiet splash nomodeset»
                                • 0
                                  Это относится к пункту «как не надо делать»)
                                  • 0
                                    Почему? Пожалуй именно этого описания не хватает.
                                    • 0
                                      Последствиям от необходимости юзеру писать в NVRAM посвящено полстатьи. И про кирпичи, и про то что неудобно, что параметры на лету не поменяешь, и что строка длинная и сложная получается, с высоким шансом ошибиться/опечататься
                                      • 0
                                        Тогда тогда изменить параметры «на лету»? Поставить GRUB? Дописать параметры в /etc/modprobe.d/? Использовать efishell для загрузки nsh-скрипта? Вопрос ведь не в записи в nvram — в случае изменения одного параметра (AHCI/IDE) мы и ранее окирпичивали Windows, здесь же мы удалим пути к EFI программам установленными производителем.
                                        • 0
                                          > здесь же мы удалим пути к EFI программам установленными производителем.
                                          Вот этого не понял. А параметры на лету умеет менять не только Grub.
                                          • 0
                                            efibootmgr --help
                                            efibootmgr # получили список всех возможных загрузчиков для efi
                                            efibootmgr -B -b XXXX # удалили ненужную запись
                                            efibootmgr -c -L "..." -l "..." # добавили новую
                                            efibootmgr --bootorder XXXX,YYYY,ZZZZ # изменили порядок загрузки
                                            rm -rf /sys/firmware/efi/efivars/* # выстрелить себе в ногу и биться головой об стол

                                            Файлы .efi — это переносимый исполняемый файл, т.е. программа. Т. е. Setup это тоже EFI, но хранится он в чипе на материнской плате.

                                            P.S.: Пример
                                            • 0
                                              Ясно, я считал что efivars это просто переменные.
                                              • 0
                                                efivars — это и есть переменные. Думаю что стоит почитать статьи CodeRush, или дождаться когда он расскажет о efivars и зачем они нужны сам :)
                                                • +1
                                                  efivars — это такая псевдо-ФС в Linux, абстракция над UEFI runtime-сервисами для работы с переменными — GetVariable, SetVariable, GetNextVariableName и QueryVariableInfo.
                                                  Зачем эту псевдо-ФС по умолчанию монтируют на запись — мне не ведомо, скорее всего для efibootmgr вышеупомянутого. Вследствие того, что конкретные реализации прошивок не всегда следуют последним стандартам, а efibootmgr — не самая всезнающая утилита, то на некоторых машинах её использование действительно приводит к «кирпичу», поэтому в этом смысле я согласен с автором — положи загрузчик на ESP в \EFI\BOOT\boot{архитектура}.efi и пусть диспетчер BDS прошивки сам его найдет и добавит в BootOrder/BootXXXX заведомо правильным образом.
                                                  Что же до использования GRUB/shim/bootmgr/черта-лысого — это вкусовщина и у делу не относится.
                                                  Если вам интересно, как устроены переменные BootXXXX и BootOrder, первая устроена вот так, а вторая — просто список из UINT16, этих самых XXXX.
                                                  Проблема же efibootmgr в том, что она пытается угадать формат DevicePath, который в различных версиях стандарта периодически обновляется, а у некоторых вендоров имеет и свои собственные расширения, поэтому если вы можете ей не пользоваться — лучше и не пользуйтесь, во избежание.
                                • 0
                                  Grub — это один из многих загрузчиков, очень навороченный.
                                  Во всех остальных загрузчиках параметры ядру передаются абсолютно так же — прописываются в текстовом конфиге либо меняются «на лету» прям перед загрузкой (зависит уже от конкретной реализации).
                                  Идея в том, что 7 строчек конфига и 3 файла у systemd-boot гораздо легче настраиваются, чем Grub, при одинаковом в принципе результате — на выходе меню со списком загрузки.
                                • 0
                                  А зачем для загрузки винды отдельный диск и почему именно Fat32? :) Папка EFI вполне замечательно видится загрузчиком даже если она лежит на большом NTFS разделе рядом с папкой Windows. Главное чтобы в файле EFI\Microsoft\Boot\BCD все правильно было прописано.
                                  • +2
                                    Папка EFI вполне замечательно видится загрузчиком даже если она лежит на большом NTFS разделе

                                    Это если в UEFI есть драйверы на эту ФС. Стандарт предписывает обязательную поддержку только FAT, поэтому форматирование в FAT32 является наиболее совместимой конфигурацией.
                                  • 0
                                    Упущено главное: в чем профит? Когда это может понадобиться?
                                    • 0
                                      Каждый раз при установке linux либо linux+windows в любых сочетаниях?
                                      • 0
                                        Все продвинутые дистры имеют гуй для этого.
                                        • +1
                                          Который не работает тогда, когда надо, или так, как надо.

                                          Достаточно ли продвинутым дистром является Ubuntu 16.04?
                                          Так вот, её установщик не умеет ставить систему рядом с виндой в UEFI-режиме. Я сделал пять попыток, которые все закончились одинаково. Это был как раз тот случай, когда я выбрал Убунту ради скорости установки, а в итоге потратил уйму времени и нервов. А потом примерно за 15 минут поставил Арч — с такой разбивкой диска, какая мне нужна.

                                          Не надо про гуй, пожалуйста.
                                    • 0
                                      Говоря о копировании в /boot, или приводя такие команды, как
                                      bootctl install --path=/boot
                                      
                                      , неплохо было бы заметить, что в /boot должен быть примонтирован этот EFI-раздел с FAT32.

                                      Кстати, EFI-раздел на диске в формате GPT имеет тип EF00. А как будет себя вести система, если тип EF00 не будет найден на дисках?
                                      • 0
                                        Я проверил на флешке и трех разных загрузчиках. Комп подхватывает fat-раздел в качестве ефишного, хотя тип у него 0700 Microsoft basic data.
                                        • 0
                                          Думаю, Вами верно замечено, что производители реализуют UEFI, как им заблагорассудится. И тот рецепт, что подошел для одного комплекта оборудования, вполне может не подойти для другого. У меня после смены матери (на ASUS-B150) стал игнорироваться загрузчик EFI\Boot\Bootx64.efi (который systemd-boot), а загружался EFI\ubuntu\grubx64.efi Пока не нашел в BIOS-firmware переключатель Boot-mode: Windows/OtherOS и не переключил его в OtherOS.
                                      • 0
                                        Интересует, как правильно настроить загрузчик, расположенный на разделе одного из дисков, для загрузки нескольких ОС (Windows, OS X и Linux) с разных дисков. Сейчас использую Clover с USB флэшки, что бы загружать OS X, установленный на отдельный жёсткий диск. Без флешки просто запускается Windows.
                                        • 0
                                          Я понял проблему так: вы пользуетесь хакинтошем, и вы намеренно установили его на внешний жёсткий диск. Вам неудобно, что если хотите загрузиться в хакинтош, вам кроме внешнего жёсткого диска приходится вставлять ещё и флешку с кловером.

                                          Я бы сделал так.
                                          1) Установил бы первым загрузчиком rEFInd. По-моему самый удобный и красивый загрузчик.
                                          2) Установил бы clover вторым загрузчиком. Вроде как он заточен именно под загрузку яблок.
                                          3) REFInd имеет возможность обнаруживать установленные ОС даже без конфигурации конфига. Вы можете настроить, чтобы наряду с Linux и Windows в его меню отображался clover. В rEFInd есть возможность сразу добавить в меню мак, но я думаю это будет работать только на настоящих маках.
                                          4) Когда нужен win или lin, выбираете их из меню rEFInd при включении. Если нужен хакинтош — выбираете кловер, затем, попав в него, уже выбираете мак с подключенного жёсткого диска.
                                          Проблема решена — загрузочная флешка с кловером больше не нужна.
                                          • 0
                                            Спасибо, обязательно попробую так сделать.
                                            И попробую добавить OS X в rEFInd, так как железо у меня всё совместимо с маками — мои процессор, материнка и видеокарта ставятся в маки и OS X с ними работает как с родным железом. Если получится, постараюсь описать процесс с ньюансами :)
                                            Установил не на внешний, а на внутренний, но разницы нет, я так думаю.
                                            • 0
                                              И попробую добавить OS X в rEFInd, так как железо у меня всё совместимо с маками

                                              Там не только железо, но и свои приколы с UEFI, на обход которых и рассчитан clover. Так что экспериментировать вам никто не запрещает, но считаю, что это ничем не закончится, макось не запустится.
                                        • 0
                                          На компьютере установлены Windows 10 + Linux Mint, загрузчик — rEFInd.
                                          Проблема в том, что если загрузить компьютер в Windows, то в биосе сбрасывается загрузчик на Windows Boot Manager, и компьютер после этого будет загружаться в Windows, вместо rEFInd.
                                          Как это можно исправить?
                                          • 0
                                            https://ubuntuforums.org/showthread.php?t=2294337&p=13383524#post13383524
                                            то что нашёл навскидку
                                            • 0
                                              Спасибо за попытку, но не помогло. Как сбрасывалось на Windows Boot Manager, так и продолжает сбрасываться.
                                              • 0
                                                Там много чего гуглится по этому вопросу, проблема решаема
                                                • 0
                                                  Попробуйте армейский способ — подменить Windows Boot Manager, bootmgr.efi, переименованным refind_x64.efi, а оригинал положить рядом, под именем, скажем, bootmgr_orig.efi. С клевером у меня это работает прекрасно.
                                                  Только проверьте, что rEFInd работает с прямыми путями, а не относительными.
                                            • 0
                                              мой коммент будет откровением, но для uefi достаточно 48МB
                                              • 0
                                                И хотел бы я посмеяться над этими словами, да не получается. Когда-то я считал так-же, и себе сделал раздел 100 Мб, чтоб «с запасом». А теперь живу и мучаюсь — появилась необходимость держать две системы, и внезапно выяснилось — чуть больше 50 Мб ядро занимает. Если перед обновлением забуду fallback-ядро удалить, то обновление обламывается, а вот модули новые поставиться успевают. После ребута система мертва. А чтобы места добавить — это надо весь стек ресайзить: фс, потом логический том LVM, потом группу томов, и потом физический смещать. Называется пожалел 200 метров. Да, про вторую систему и предполагать не мог, а вот поди ж ты.
                                              • +1

                                                Ещё один важный момент, если я не ошибаюсь. Если у вас x86 железо и UEFI, то вместо этого:


                                                Переименовываем и кладем этот файл на созданный раздел по адресу /EFI/Boot/bootx64.efi

                                                Надо файл назвать /EFI/Boot/bootia32.efi


                                                Такого уже осталось очень мало, но мне пока попадается, особенно дешёвые китайские планшеты (Intel, x86, x64)

                                                • +1
                                                  Asus VivoTab Smart (ME400) как раз 32-разрядный, буду сегодня пробовать.
                                                  Спасибо за наводку.
                                                • 0
                                                  А кто-нибудь пробовал мигрировать установленную Windows 7 с MBR/BIOS на GPT/UEFI? Если просто сменить разметку диска с помощью gdisk, венда перестает загружаться. Раздел на месте (другая венда отлично его видит), линукс тоже без проблем работает. Обидно, поменял разметку диска по сути от скуки, и потерял установленную и обжитую систему.
                                                  • 0

                                                    Вполне удачно мигрировал.
                                                    Нужно на ESP положить загрузчик со всеми потрохами, настроить BCD и всё.

                                                  • 0
                                                    Clover.… конфиг в виде xml нечитаем, настроить не смог.
                                                    Должен отметить, что это следствие его узкого назначения. Да, его можно использовать как универсальный загрузчик — примерно с тем же успехом, что и виндовый. Если сумеете настроить, ага.

                                                    Кстати, может кто-нибудь подсказать, как можно победить винду, при каждой загрузке выставляющую в NVRAM свой загрузчик первым и по умолчанию? Я это решил только армейским способом, переименовав cloverx64.efi в bootmgr.efi, но может, это просто как-то отключается?
                                                    • 0

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


                                                      PS: В некоторых UEFI можно в настройках активировать "boot order lock", что не позволит винде менять порядок загрузчиков. Но я видел это только на lenovo.

                                                      • 0
                                                        Да, я с этим сталкивался, почему и хочу сменить армейский способ на что-то встроенное. Впрочем, заменить файл всё равно проще, чем перебивать команды bcfg.
                                                    • 0
                                                      Объясните зачем это нужно и что раньше было не так?
                                                      • 0
                                                        В первых двух предложениях я написал, зачем статья:
                                                        1. Рассказать, что происходит «под капотом» при загрузке ОС в UEFI-режиме
                                                        2. Рассказать, как при установке системы установить и настроить загрузчик

                                                        Основной причиной написания статьи является тот факт, что мой способ настройки проще и безопасней, чем в подавляющем большинстве руководств по установке системы в режиме UEFI

                                                        Вернёмся к вашему вопросу, который я не понимаю и от которого у меня болит голова)
                                                        Что именно «зачем нужно»? Когда «раньше»?

                                                        Если вопрос означает «У меня всё и так работает, зачем мне это перенастраивать» — ответ будет «Вам это не нужно, но знания могут пригодиться при переустановке системы или при возникновении проблем»

                                                        Если вопрос означает «Я предпочитаю старый способ загрузки с использованием таблицы разделов MS-DOS и MBR, зачем мне UEFI» — ответ будет «Загрузка в UEFI-режиме гораздо проще для понимания, настройки и исправления проблем. И установка нескольких ОС на один диск гораздо проще.»
                                                      • 0
                                                        Спасибо за статью! Очень полезно!
                                                        • 0
                                                          А вы не могли бы рассказать, как Clover на Хакинтоше заставить нормально грузить с диска Ubuntu? Мне не удалось настроить.
                                                          • 0

                                                            А что конкретно у вас не заработало?
                                                            У меня Clover видит и Windows и Ubuntu и MacOS.


                                                            Причём знаний у меня на уровне — скачал iso, записал в rufus на флешку, выбрал GPT при записи, поставил с флешки.


                                                            Там единственная хитрость — я запускал efi shell из clover и путь до инсталлятора ubuntu набивал руками.
                                                            что-то типа
                                                            cd FS0:
                                                            \EFI\BOOT\BOOTX64.efi
                                                            этот путь на флешке с ubuntu должен быть — запускаешь его и загружается инсталлятор ubuntu, исталлятор прописывает запись об ubuntu в EFI раздел.


                                                            Clover потом подхватывает эту запись из EFI раздела — всё работает.

                                                            • 0
                                                              Я пытаюсь стартануть Ubuntu Live с флешки и получаю пустой черный экран. Если выбрать в Bios загрузку с флешки напрямую, всё грузится нормально. Как это победить?
                                                          • 0
                                                            Скачиваем из интернета любой UEFI-загрузчик
                                                            (нам нужен сам загрузчик, это один бинарный файл!)
                                                            Переименовываем и кладем этот файл на созданный раздел по адресу /EFI/Boot/bootx64.efi

                                                            NTLDR.EXE от Win2000 SP4 пойдёт? А копия boot-сектора с винта с RHEL 3? (шутка)
                                                            Лучше напишите, как отличить гуашевые загрузчики от нормальных старорежимых.
                                                            • 0
                                                              Поиском отличать. Первая же ссылка по поиску «UEFI bootloader» даёт довольно исчерпывающую информацию.
                                                              Другое дело, что я действительно неправ, предлагая искать «любой загрузчик», по-хорошему нужна конкретика. Про «любой» я написал, чтобы дать понять что тут нет особой загрузочной магии, т.е. для более понятного объяснения самого процесса. Не хотелось бы превращать статью в руководство по настройке одного конкретного загрузчика, когда она призвана быть как можно более общей.

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