Pull to refresh

Comments 64

Спасибо огромное, поиграю на досуге. Откровенно говоря, я таки не понял до сих пор преимуществ использования EFI. У меня уже сто лет Grub2 и все работает. Такой же список всех ОС и вариантов ядер. В чем преимущество объективное кроме «модно, стильно, красивая тема»?

Кстати, а почему не на Хабр?
На хабре какие-то странные преобразования. В направлении «Разное» нет хабов попросту. А другие направления не подходят вовсе. Поэтому решил здесь, хабы вроде подходящие. К тому же опасался критики, статья всё же не сильно продвинутая в техническом плане, основная сложность тут пожалуй только с rEFInd. С ним действительно можно получить массу проблем и убить выходные.

По поводу самого UEFI. На мой взгляд он попросту упрощает многие вещи в плане загрузчика, выступая сам в его роли. Поиграв пару дней, решив массу интересных проблем, стало понятно, что предыдущая модель была даже сложнее. На мой взгляд схожую ситуацию сейчас можно наблюдать в противостоянии systemd / sysvinit / upstart.
Преимущества объективно:
— понятный и стандартный 64(реже 32)-битный интерфейс вместо 16-битного набора костылей, программных прерываний, ресетов через порт клавиатуры и передачи управления на MBR.
— для загрузки ОС больше не нужны соственнно загрузчики, и даже вот эти «системы управления загрузкой» вроде rEFInd нужны только тем, кого по каким-то непонятным причинам не устраивает стандартное меню выбора загрузочного устройсва.
— отсутсвие легаси времен царя гороха позволяет использовать прошивку в качестве корня доверия, с SecureBoot и TPM measured boot, и быть уверенным, что загрузчик не подменен атакующим на такой же, только с бэкдором.
— то же самое отсутствие костылей ускоряет загрузку, особенно это ускорение заметно на системах с большим количеством OROMов, например, в аппаратным RAID-контролером, но даже на обычном ноутбуке видно невооруженным глазом.
— значительно более простая расширяемость, в том числе и конечным пользователем, через подсистему DriverXXXX/KeyXXXX, о которой надо бы написать статью, а то она пока не очень известна массам
— много других, но конечный пользователь их не замечает и это правильно

Есть и недостатки, основной — UEFI-загрузчик имеет доступ к большему количеству «мяса и кишок» прошивки, и потому к нему должна быть более высокая степень доверия, чем к старому коду из MBR/PBR. Именно поэтому совет по отключению SecureBoot, который в этой статье дается — он крайне вредный, и лучше научиться пользоваться этой технологией, чем отключать ее лишь потому, что она «слишком сложная» и с ней «бывают проблемы».
К сожалению у меня компьютер при установке Ubuntu 16.04 не видит даже клавиатуру со включенным SecureBoot. Я сам люблю использовать новые технологии. Если у читающих есть достаточно свободного времени, то пусть попробуют поставить свой дистрибутив со включенным SecureBoot, может получится поставить без особых проблем. Если использовать PS/2-клавиатуру, то можно добраться до середины установки и Ubuntu сама попросит его отключить, что весьма интересно…

Насчет использования rEFInd. Да, с одной стороны это несколько лишнее, если твоя материнская карта и так предлагает красивый юзер интерфейс для выбора ОС, но увы, мне для смены ОС нужно зайти в UEFI-меню, внести изменения в порядок загрузки, сохранить их, перезапустить и наконец войти куда надо. Я меняю ОС достаточно часто, на дню раза два запросто, поэтому для это серьезная потеря времени. Считаю что мой способ более универсальный и неприхотливый к оборудованию, а так же расширяет возможности кастомизации (под rEFInd сделана масса неплохих тем, к тому же с необычной простотой можно нарисовать свою за вечер).

Те кто используют одну ОС и вовсе могут освоить EFISTUB.
Почему не пользоваться всплывающим меню по F10/F11/F12 для выбора загрузочного устройства вместо того, чтобы в BIOS Setup заходить?
У меня нет такой возможности, при запуске системы внизу справка о том, что можно нажать F2 или Del. Обе клавиши заводят в ASUS EZ Mode.
Специально пошел проверил.
Не работает: ESC, F8, F9, F10, F11, F12. Работают только две вышеозначенные клавиши. Честно говоря не вижу смысла разрабам ASUS пилить фичу и не писать о ней при загрузке.
Что за модель ноутбука?
BBS Popup (то самое меню выбора устройства) есть практически во всех прошивках последних 5 лет, но иногда его нужно включать отдельно. Проверьте свою прошивку на наличие Advanced Mode в дополнение к EZ Mode, возможно, нужное меню и его горячая клавиша просто отключены по умолчанию.
У меня не ноутбук. У меня десктоп с матерью Asus Sabertooth 990FX R2.0.
В Advanced Mode порыться надо, может быть действительно просто отключено…
А чем виртуальные машины не устраивают?
Photoshop и игрушки в виртуальной машине как-то не очень работают.
Со скоростью SSD мне проще переключить систему (дело нескольких секунд, на запуск VM столько же почти уходит).
А в Linux вы что запускаете такого, чего нельзя в VM?
Я в своё время предпочел именно VM реальной, т.к. всегда всё можно вернуть на свои места, если что-то пойдет не так. (:
Я же ответил: Photoshop (различные удобные утилиты сопровождающие его) и игрушки. Для всех них нужны мощные вычислительные ресурсы видеокарты.
Просто не думал, что есть Photoshop под Linux. С играми там как, насколько я знаю бедновато.
Так вы мне предлагаете запускать виртуалку под Linux или под Windows? :) Я про первое. Linux я просто люблю и сидеть в нем через виртуалку не очень интересно.
Под Windows. (:
Просто мне казалось всегда неудобным наличие более одной физической ОС на одном ПК. В одной системе одни файлы/программы, в другой — другие, частенько не доступные из другой ОС.
Ну у меня есть раздел форматированный в NTFS. Его видят все системы. Там и обмениваю все.
У меня тоже было так, при включеном Secure Boot, при загрузке с флешки с LinuxMint не работала клавиатура и мышь, сначала тоже грешил на дистрибутив, а потом вспомнил про параметр IOMMU в BIOS, включил его и всё заработало.
Нужно заметить, что TPM Measured Boot и с BIOS вполне возможен и используется.

Спасибо за вашу статью очень помогла в освоении 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

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

Прочитал статью про rEFInd. Заинтересовался этой модной пакостью в очередной раз-таки потыкать её.
Пару предложений высказал в личку.
Поправлю немного фактических неточностей:
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 и не дает себя установить?
Поддержка других ФС добавляется соотвествующими драйверами, которые с ESP может грузить как сама прошивка, так и системы управления загрузкой вроде rEFInd. Почему ругается установщик — он расчитан на систему «среднего» пользователя, у которого в прошивке никаких драйверов, кроме FAT, нет, и он не будет разбираться, почему после установки на загрузчика раздел EXT4 он не появился в списке.
Именно эти файлы устанавливает rEFInd, если видит ОС на специфической FS (у меня debian лежит на btrfs, rEFInd заботливо скачал btrfs_x64.efi и положил в папочку drivers). Спасибо за ответы.
Без rEFInd то же самое делается добавлением этого драйвера в переменную DriverXXXX, и он будет грузиться самой прошивкой, если она поддерживает спецификацию UEFI не ниже 2.3.
К примеру, посредством этой технологии компьютер можно загружать ОС и вовсе без прослойки в лице 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

и далее сводится к тому, что распакуем архив и поменяем приоритеты. ну и про нескучные обои…
Именно поэтому я опубликовал статью на Geektimes, а не на Habrahabr.
Ошибки исправлю. Старался подать нормальным человеческим языком, а не расписывать 33 варианта установки так, сяк, эдак, получилось выбрать только что-то одно. Теорию которую описал вывел практически эмпирически, тупо потому что нет ни одной статьи на русском языке в которой доходчиво (!), без сотни терминов описано происходящее.
Замечу про BIOS — называть нынешнюю прошивку BIOS'ом вполне можно, т.к. и «по букве» (т.е. как базовая система ввода-вывода) и по духу (т.е. как motherboard firmware) термин вполне подходящий. UEFI — это вообще говоря только интерфейс между прошивкой и OS, и реализовывать его может что угодно, даже coreboot или Uboot.
Короче: термин уже стал нарицательным, и не стоит ругать за него.
Я тоже писал этот термин как нарицательное, но теперь уже всё в статье заменил, наверно так будет всё же корректней и прозрачней.
Интересная тема. Есть x86 планшетник с Android и Windows10, UEFI, захотелось поставить хоть какой нибудь Linux дистрибутив. Но вот проблема — ни один не хочет ставиться. Происходит так (на примере Ubuntu, если вырубить сплеш, чтобы видно что происходит): жму F7, вылезает менюшка откуда грузится (или аналогично через BIOS настройки через EFI Shell), GRUB загружается, тыркаю Live или установку, ядро прогружается, дальше огромное полотно stdin: I/O error, внизу сообщение о том что образ не найдет и BusyBox, не реагирующий на клавиатуру (через USB-otg, в GRUB работает).
Перепробовал множество нагугленных вариантов, но ничего не и не помогло. Возможно кто-то сталкивался?
Legacy mode не нашел. LiveUSB например с Android 6 загружается нормально.
А какая модель планшета? Вообще, с линуксами под планшеты всё очень заморочено, там часто стоят редкие специфические устройства, под которые драйвера фиг найдёшь, а если и найдёшь, то фиг соберёшь.
Можно попробовать ROSA Fresh (уефный 32-битный образ), кое-какие доделки для планшетов мы там в своё время реализовывали.
Onda v919, на вид больше похоже на ПК без клавиатуры, чем на планшет. Но вот ни готовые образа, ни установочные не работают, ни с 32, ни с 64 битным загрузчиком (там несколько странно, из биоса shell ругается на 32 битные efi, а если из меню по f7, то ругается что не поддежрживает 64 битные). Есть подозрение что после загрузки ядра не видны устройства, но с другой стороны android 6 почти тоже linux и там проблемы нет, за исключением не работающего отображения уровня зарядки.
Образ попробую, малоли.
C USB флешки, сделанной разными методами (dd, unetbootin, rufus, убунтовая приблуда и еще чего то пробовал, ФС видимо FAT32), выбирая её в boot menu (по F7) или запуская efi файлик через shell (bios->Launch EFI Shell кажется), думаю не суть, в любом случае дальше загрузки ядра и не реагирующего на клавиатуру (возможно модули какие то не подгружаются) busybox дело не продвинулось. Так же пробовал готовые образы UEFI флешек, результат аналогичный (GRUB -> лог запуска -> busybox).
А я пользуюсь Кловером на хакинтоше, который у меня грузит сразу 3 системы – OS X, Win 10, Arch. Работает как часы.
https://wiki.archlinux.org/index.php/Clover
rEFInd тоже умеет грузить OSX без проблем :)
А про Clover слышал тоже.
Так Кловер форкнутый Рефит допиленный, чтобы грузить хакинтош. Рефинд, к сожалению, не способен грузить хакинтош.
Почему не способен? rEFInd это тоже форк rEFIt. http://www.rodsbooks.com/refind/installing.html
На сайте много про OSX и как из под нее ставить его.
Рефинд может грузить ОС Х на настоящих маках, но никак не на хакинтошах. В Кловере проделана огромная работа, чтобы он мог нормально загрузить ОС Х на обычном писи.
А что яблочники там такого навертели уникального? Я думал и grub2 справиться должен.
Может это как-то с дефолтным LVM связано. Я точно не знаю.
Основная проблема, что яблочники пилят всё только для своих 3.5 железяк и не очень рады, если кто-то хочет использовать железяки не одобренные яблоком же.
И в принципе весьма правильно делают. Свою ОС они продают только вместе с компьютером.
Ну железо-то у них тривиальное. Почему и удивлён.
Ну, так даже у видеокарты для мака свои прошивки, у мамки эппла написанный эпплом ДСДТ. Всё железо действительно писюковское, но нюансов куча, которые не дают запустить ОС Х на писи без всякого геморроя. Вот Кловер и делает кучу работы, чтобы ОС Х спокойно запускалась и думала, что работает на одном из одобренных Эпплом компьютеров.
В прошлом году писал пост на аналогичную тему.
Кстати, у вас в конфиге указана общая иконка «linux» для Ubuntu, хотя, если мне не изменяет память, с rEFInd идёт довольно большой набор иконок, где есть все популярные дистрибутивы.
Это просто пример конфига, у меня другой, у меня он сам определяет установленные ОС.
То есть если я вставил флешку с ОС RHEL, то он отобразит её логотип, покажет что это USB девайс и позволит на нее загрузиться. При этом никаких правок я не вношу.
Параметр scanfor. Конфиг по умолчанию так и делает.
Да, я знаю. У меня же указан мой личный конфиг. Там всё это прописано.
Спасибо, интересная тема, наигрался вдоволь. Начал с установки refind'a, а закончил модификацией биоса видеокарты. Ну никак refind не хотел отображаться в нормальном разрешении на Asus GT610. Теперь красота )
Да, с NVIDIA бывают проблемы. Мне помогло всего лишь это:
resolution 1280 1024
С plymouth вообще отдельная тема, там с проприетарными дровами очень много проблем можно получить.
В моём случае, при указании в конфиге разрешения выше, чем 1024x768, refind вежливо сообщал о невозможности работы в этом режиме и грузился со стандартными настройками. Пришлось воткнуть gop в vbios. Кстати, plymouth у меня отлично работает на проприетарных драйверах.
блин, тоже не могу поднять разрешение выше 1024, расскажите подробнее))
А не проще-ли сделать ярлыки в Reboot to Windows, Reboot to Fedora, Reboot to Debian? Так не придётся ждать окончания перезагрузки для того чтобы выбрать нужный пункт в меню?
Ярлыки в установленных ОС? Не совсем понял о чем вы.
Да. Просто для экономии времени. В которых просто менять систему по умолчанию.
Может кому понадобиться… rEFInd может ядро ubuntu грузить сразу, без grubx64.efi
Сейчас только что настроил для 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"
    }
}
В общем, не надо ничего копировать на EFI. Замечательно грузится и с основного диска, для этого нужно указать строку volume.Указывать можно даже ссылки.
Только не понял, как там указывать через 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"
}

refind не поддерживает указывание UUID - на зато в volume можно указать то что в blkid называется PARTUUID.

Интересно. Спасибо. В копилочку.
Скоро буду на новую систему ставить, может пригодиться)

Sign up to leave a comment.

Articles