[О блоге] [наверх] [пред] [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 тоже уже и нет.