[О блоге] [index] [пред] [2022-11-24 00:10:24+03:00] [289a1c8a9aa5e98936203d48c6079903aaf3550b]
Темы: [bsd]

Мои серверы не шибко дружат с UEFI

Сегодня перевёз систему со старых дисков на новые. Просто добавляя их к
зеркалу, ожидая конца resilvering, делая detach старых. Но изменил GPT
разбивку диска. На прошлых, кроме разделов для ZFS и swap, был ещё 800KB
для загрузчика FreeBSD. Серверы наверняка придётся менять до смерти
дисков, а на новом железе не UEFI загрузка уже запросто может и не
работать. Сделал EFI раздел с загрузчиком.

Но сервер отказался с него грузится. Хоть в BIOS и выставлены все
галочки для UEFI, но не грузится с них, даже не предлагает в меню.
Ладно, не беда -- удаляю раздел, создаю freebsd-boot на эти 800KB,
пихаю старый загрузчик. Раз всё равно место зарезервированное
осталось для EFI раздела, то на новой системе нужно просто пару команд
gpart выполнить чтобы превратить систему в UEFI compatible.

Насколько же всё это просто под FreeBSD делается и без какой-либо боязни
что сейчас что-то запросто пойдёт не так. Воспоминания о GRUB из
GNU/Linux мира только и только крайне негативные и неприятные.

[оставить комментарий]
комментарий 0:
From: kmeaw
Date: 2022-11-24 19:28:11Z

А атрибут "EFI System Partition" на разделе стоит? В gptfdisk (gdisk)
это делается через x, a, $partno, 0.

Я бы сказал, что схема с UEFI выглядит более понятной и расширяемой -
больше не нужны пляски с stage1/1.5/2 загрузчиками, теперь прошивка
может сразу загрузить ядро ОС, если оно влезает в два гигабайта. И схема
никак не меняется при портировании ОС на AArch64, например.

В Linux для этого есть опция CONFIG_EFI_STUB, которая включена в
большинстве дистрибутивов - она добавляет в ядро необходимые заголовки и
предзагрузчик, делая его UEFI-приложением, которое прошивка может
запустить без всяких загрузчиков-прослоек. Для Secure boot сильно проще
выглядит подпись - не надо по кусочкам дотягивать chain of trust до
ядра.

И теперь больше не надо заниматься копированием загрузочных областей (и
в некоторых случаях - LILO, GRUB embedding - править записанные в них
смещения) для того, чтобы новый диск стал загрузочным. Достаточно либо
положить ядро (или загрузчик) в специфичное для архитектуры место (для
PC/amd64 это $esp/EFI/boot/bootx64.efi) или записать путь до него в
NVRAM. А ещё, наконец-то, прошивки научились качать ядра по HTTP,
который сильно проще дотянуть до целевой машины, чем TFTP - а на
high-latency high-bandwidth каналах ещё и скорость нормальная получится,
не нужно больше дополнительного этапа с {i,g}PXE/EtherBoot. Даже IPv6 во
многих прошивках из коробки поддерживается.

Из бонусов - появляется возможность независимо от ОС (и загрузчика, если
он есть) выбрать систему для следующего запуска на один раз, что полезно
для схем с A/B-загрузкой.
комментарий 1:
From: Sergey Matveev
Date: 2022-11-24 19:50:43Z

*** kmeaw [2022-11-24 19:27]:
>А атрибут "EFI System Partition" на разделе стоит?

При указании "efi" типа в gpart-е (FreeBSD-specific) -- это делается,
да. Загружаемую через UEFI систему (FreeBSD) то я делал много раз, это
тривиально, на всём моём железе работало, которое было новее этих
сервачков. Это явно в них какая-то странность, точно не в моих руках ;-)
(какие-то UEFI образы дистрибутивов на них, помню, тоже не грузились).

>Я бы сказал, что схема с UEFI выглядит более понятной и расширяемой [...]

Согласен. Использовать UEFI то я стал, насколько помню, вынужденно ещё
на старом ноутбуке. Если загрузиться не в UEFI, то будет только VESA
режим графики доступен, который тормозит так, что работать нельзя. А под
UEFI доступен scfb драйвер X11, который годился и для просмотра фильмов
без проблем. А потом увидев, что и устанавливать "загрузчик" UEFI более
чем просто (man uefi), плюс лёгкость загрузки разношёрстных ОС, плюсов в
CSM режиме уже не перестал видеть.

>А ещё, наконец-то, прошивки научились качать ядра по HTTP,
>который сильно проще дотянуть до целевой машины, чем TFTP - а на
>high-latency high-bandwidth каналах ещё и скорость нормальная получится,
>не нужно больше дополнительного этапа с {i,g}PXE/EtherBoot. Даже IPv6 во
>многих прошивках из коробки поддерживается.

Даже по iSCSI я видел (слышал) умеют загружать. А у TFTP ещё и
ограничение на максимальный размер ощутимое (насколько помню, 32MiB, но
даже до 2010-х этого уже бывало не хватает).

Я то всеми руками за UEFI. Прежде я на него ещё косо смотрел потому что
FreeBSD можно на ZFS поставить вообще без каких-либо таблиц разделов.
ZFS и самое начало диска не трогает (куда можно первичный загрузчик
поместить), и имеет пару мегабайт зарезервированного пространства, куда
можно вторичный засунуть. https://www.unix.com/man-page/freebsd/8/zfsboot/
Никаких MBR/GPT, только ZFS и всё грузится и работает. Приятно. Но...
swap всё равно лучше вне ZFS размещать, плюс label на диск удобно (я бы
сказал must-have) навешивать. Плюс не забывать выравнивать по 4K
границам. Вот и получается что всё равно GPT стоит добавлять. А раз он
есть, то и смысла не использовать UEFI тоже уже и нет.