Comments 64
Кстати, а почему не на Хабр?
По поводу самого UEFI. На мой взгляд он попросту упрощает многие вещи в плане загрузчика, выступая сам в его роли. Поиграв пару дней, решив массу интересных проблем, стало понятно, что предыдущая модель была даже сложнее. На мой взгляд схожую ситуацию сейчас можно наблюдать в противостоянии systemd / sysvinit / upstart.
— понятный и стандартный 64(реже 32)-битный интерфейс вместо 16-битного набора костылей, программных прерываний, ресетов через порт клавиатуры и передачи управления на MBR.
— для загрузки ОС больше не нужны соственнно загрузчики, и даже вот эти «системы управления загрузкой» вроде rEFInd нужны только тем, кого по каким-то непонятным причинам не устраивает стандартное меню выбора загрузочного устройсва.
— отсутсвие легаси времен царя гороха позволяет использовать прошивку в качестве корня доверия, с SecureBoot и TPM measured boot, и быть уверенным, что загрузчик не подменен атакующим на такой же, только с бэкдором.
— то же самое отсутствие костылей ускоряет загрузку, особенно это ускорение заметно на системах с большим количеством OROMов, например, в аппаратным RAID-контролером, но даже на обычном ноутбуке видно невооруженным глазом.
— значительно более простая расширяемость, в том числе и конечным пользователем, через подсистему DriverXXXX/KeyXXXX, о которой надо бы написать статью, а то она пока не очень известна массам
— много других, но конечный пользователь их не замечает и это правильно
Есть и недостатки, основной — UEFI-загрузчик имеет доступ к большему количеству «мяса и кишок» прошивки, и потому к нему должна быть более высокая степень доверия, чем к старому коду из MBR/PBR. Именно поэтому совет по отключению SecureBoot, который в этой статье дается — он крайне вредный, и лучше научиться пользоваться этой технологией, чем отключать ее лишь потому, что она «слишком сложная» и с ней «бывают проблемы».
Насчет использования rEFInd. Да, с одной стороны это несколько лишнее, если твоя материнская карта и так предлагает красивый юзер интерфейс для выбора ОС, но увы, мне для смены ОС нужно зайти в UEFI-меню, внести изменения в порядок загрузки, сохранить их, перезапустить и наконец войти куда надо. Я меняю ОС достаточно часто, на дню раза два запросто, поэтому для это серьезная потеря времени. Считаю что мой способ более универсальный и неприхотливый к оборудованию, а так же расширяет возможности кастомизации (под rEFInd сделана масса неплохих тем, к тому же с необычной простотой можно нарисовать свою за вечер).
Те кто используют одну ОС и вовсе могут освоить EFISTUB.
Не работает: ESC, F8, F9, F10, F11, F12. Работают только две вышеозначенные клавиши. Честно говоря не вижу смысла разрабам ASUS пилить фичу и не писать о ней при загрузке.
BBS Popup (то самое меню выбора устройства) есть практически во всех прошивках последних 5 лет, но иногда его нужно включать отдельно. Проверьте свою прошивку на наличие Advanced Mode в дополнение к EZ Mode, возможно, нужное меню и его горячая клавиша просто отключены по умолчанию.
Со скоростью SSD мне проще переключить систему (дело нескольких секунд, на запуск VM столько же почти уходит).
Я в своё время предпочел именно VM реальной, т.к. всегда всё можно вернуть на свои места, если что-то пойдет не так. (:
Спасибо за вашу статью очень помогла в освоении Secure Boot. У меня материнская плата ASUS, в ней были встроенные средства для добавления ключей и всё прошло как по маслу.
Добавлю только, чтобы с rEFInd включить безопасную загрузку нужно дополнительно ISK.pem
сконвертировать в DER
формат с помощью команды:
openssl x509 -outform DER -in ISK.pem -out ISK.cer
далее эти файлы ISK.key
, ISK.pem
, ISK.cer
скопировать в папку /etc/refind.d/keys
и переименовать их:
ISK.key -> refind_local.key
ISK.pem -> refind_local.crt
ISK.cer -> refind_local.cer
и потом дать команду:
refind-install --local
эта команда переустановить rEFInd и подпишет все нужные файлы (ох и замучался я набирать парольную фразу раз 10 пришлось, я первый раз подумал, что неправильно её набираю).
Оказывается нужно подписывать все файлы, которые будут запускаться через UEFI, т.е. дополнительно еще нужно было подписать и само ядро:
sbsign --key ISK.key --cert ISK.pem --output /boot/vmlinuz-x.xx.x-xx-generic /boot/vmlinuz-x.xx.x-xx-generic
Кто знает как можно автоматизировать это, чтобы при установке нового ядра оно автоматом и подписывалось?
Пару предложений высказал в личку.
UEFI видит только один специальный ESP-раздел, обычно он имеет размер 100-200 мегабайт и форматирован в FAT32 (бывает в FAT16)Это неверно. UEFI видит все разделы, для ФС которых в конкретной реализации прошивки имеются драйверы. ESP же отличается от остальных разделов только тем, что а) для FAT драйвер иметь обязательно и б) на разделе ESP осуществляется поиск загрузчиков и автоматическое создание соответсвующих переменных BootXXXX, если загрузчики нашлись.
Но сам просматривать ESP-разделы и добавлять новые записи он не умеет, эти обязанности возложены на EFI Shell и операционные системы.Еще как умеет, и это умение требуется спецификацией начиная с UEFI 2.2 (SecureBoot появился в UEFI 2.3.1C). Я советую полностью отказаться от использования efibootmgr, т.к. утилита эта имеет давнюю историю порчи вполне валидных переменных на платах с прошивками на кодовой базе Insyde H2O и Phoenix SCT. Если вам не нравится управление загрузчиками и приоритетами из BIOS Setup — используйте команду bcfg из UEFI Shell, она работает значительно лучше и проблем с ней я не видел ни разу, в отличие от.
Разбирался сам, литературы на русском маловато. Кстати, у меня на одном из компьютеров UEFI 2.1 вроде как, поэтому не знал, что UEFI уже научился так делать. Добавлю в пост чуть позже, пока нет под рукой компьютера.
И ещё: А как завести поддержку других ФС? И почему, к примеру, Fedora ругается, что раздел загрузчика должен быть именно в FAT32 и не дает себя установить?
К примеру, посредством этой технологии компьютер можно загружать ОС и вовсе без прослойки в лице GRUB / LILO / etc, загрузчиком может выступать сама UEFI.
в целом, не верно. то, что в случае некоторых ос мы можем EFISTUB — это отдельный разговор.
Запись образа Windows 10 (8/8.1) на диск/флешку.
Установка Windows 10 на часть диска.
проще сразу wim/esd развернуть
UEFI видит только один специальный ESP-раздел
нет, видит всё, лезет туда, на что есть драйвера. в esp ищет *.efi
efibootmgr
лучше забыть и настраивать из шелла
сам, собственно, BIOS, он умеет читать эти записи и выстраивать приоритеты.
какой такой BIOS?
Но сам просматривать ESP-разделы и добавлять новые записи он не умеет, эти обязанности возложены на EFI Shell и операционные системы.
нэ-нэ-нэ…
Все ваши действия в efibootmgr записываются в NVRAM
аха… прям сам…
В большинстве случае BIOS умеет восстанавливать битый NVRAM каждый раз проверяя его и перезаписывая, в случая неполадок.
хрена с два… как бы не наоборот… и какой опять BIOS?
с BIOS на базе Phoenix SCT окирпичиваются
не только. и какой опять BIOS?
но я всё же рекомендую его отключить
великолепно.
не пишите почему у вас что-то не получается на том или ином этапе
учитывая выше и ниже сказанное — великолепно…
Не сложно заметить, то тут нет абсолютно никакой магии. Мы просто форматируем флешку в FAT32:
аха, только вот за этим скрывается куча всего. на флешке создаётся таблица разделов (куча флешек идёт завода с флоппи-стайл форматированием), записываются загрузчики и т.д. но нет, мы же просто форматируем флешку(!!!!!, флешку, блин) в FAT32
После этого нужно просто открыть ISO-файл архиватором и перекинуть содержимое на чистую флешку. Всё, UEFI-флешка готова. На Linux можно сделать всё аналогичным образом, просто форматируем в FAT32 и копируем содержимое.
просто за вас уже всё сделали
Поэтому перейдем к этапу установки
в этом разделе и паре следующих всё прекрасно, практически каждое слово.
Наводим красоту, ставим rEFInd
и далее сводится к тому, что распакуем архив и поменяем приоритеты. ну и про нескучные обои…
Ошибки исправлю. Старался подать нормальным человеческим языком, а не расписывать 33 варианта установки так, сяк, эдак, получилось выбрать только что-то одно. Теорию которую описал вывел практически эмпирически, тупо потому что нет ни одной статьи на русском языке в которой доходчиво (!), без сотни терминов описано происходящее.
Короче: термин уже стал нарицательным, и не стоит ругать за него.
Перепробовал множество нагугленных вариантов, но ничего не и не помогло. Возможно кто-то сталкивался?
Legacy mode не нашел. LiveUSB например с Android 6 загружается нормально.
Можно попробовать ROSA Fresh (уефный 32-битный образ), кое-какие доделки для планшетов мы там в своё время реализовывали.
Образ попробую, малоли.
https://wiki.archlinux.org/index.php/Clover
А про Clover слышал тоже.
На сайте много про OSX и как из под нее ставить его.
resolution 1280 1024
С plymouth вообще отдельная тема, там с проприетарными дровами очень много проблем можно получить.
Сейчас только что настроил для ubuntu 20.04, все получилось. Кстати, до этого была загрузка legacy, через grub. Оказывается, и такую можно переделать на UEFI без проблем.
В начале поставил rEFInd, он сам сделал загрузку через grubx64.efi. Потом создал в EFI разделе папку ubuntu, скопировал туда два файла — ядро и рам-диск. Прописал их в refind.conf. Параметры для строки options взял из конфига grub. Добавил параметр root. В итоге все заработало. Работает даже хибернация. Переменные БИОСа не модифицировал. Секция в refind.conf получилась такой:
menuentry "Ubuntu kernel" {
icon /EFI/BOOT/icons/os_ubuntu.png
loader /ubuntu/vmlinuz-5.4.0-26-generic
initrd /ubuntu/initrd.img-5.4.0-26-generic
options "root=UUID=9fbdd4e9-d063-4e50-ba1b-5839c507d0fb ro quiet splash resume=UUID=886298de-99f2-4300-b2f5-4c03de886b55 $vt_handoff"
}
}
Только не понял, как там указывать через UUID. Указал через метку, которую установил через e2label, так заработало:
menuentry "Ubuntu kernel" {
icon /EFI/BOOT/icons/os_ubuntu.png
volume "root"
loader /boot/vmlinuz
initrd /boot/initrd.img
options "root=UUID=9fbdd4e9-d063-4e50-ba1b-5839c507d0fb ro quiet splash resume=UUID=886298de-99f2-4300-b2f5-4c03de886b55 $vt_handoff"
}
Настройка UEFI Dual Boot системы, приправленной rEFInd