victor_sudakov: (Default)

Для ремонта, установки операционных систем и т.п. С поддержкой загрузки с UEFI. Не требует пересборки при добавлении ISO-шника, достаточно положить новый ISO-шник на FAT32 раздел.

www.ventoy.net

Интересно, что в режиме GPT Ventoy создает загрузочный раздел с типом не EFI AKA c12a7328-f81f-11d2-ba4b-00a0c93ec93b, а с типом ms-basic-data AKA ebd0a0a2-b9e5-4433-87c0-68b6b72699c7. И при этом загрузка с данного раздела всё равно происходит (я проверял на двух разных компах).

Автор говорит, что

That is a workaround. If I set the efi partition c12a7328-f81f-11d2-ba4b-00a0c93ec93b then we will not be able to install windows. Because windows require that only one efi system partition can be exist in the whole system.

А всё равно грузится потому, что

Many UEFI firmare has a good compatibility. So if you have a FAT partition (even in MBR), then is will detects it as bootable in UEFI mode.

Вот и в UEFI у нас теперь начались обходные пути, и что характерно, опять для обхода странностей Windows.

victor_sudakov: (Default)

Всё же нравится мне UEFI с GPT. Можно забыть как про страшный сон про нулевые сектора, MBR, VBR, ограничение на размер и количество разделов и прочее. Например для подготовки диска под клонирование FreeBSD достаточно:

gpart create -s gpt ada1
gpart add -s200M -t efi ada1
gpart add -s2G -t freebsd-swap ada1
gpart add -t freebsd-ufs ada1
gpart bootcode -p /boot/boot1.efifat -i 1 ada1    

(на клоне ada1 превратится ada0)

boot1.efifat здесь не VBR, а просто образ (dd) файловой системы FAT16, содержащий загрузчик EFI в нужном подкаталоге. Никакой магии, можно было отформатировать ada1p1 под FAT16 (newfs_msdos -F16 /dev/ada1p1), создать там нужные каталоги и положить BOOTx64.efi. А то и ещё вдобавок какие-нибудь полезные утилиты под EFI, например rEFInd.

Инсталлятор FreeBSD штатно поддерживает установку на чистый UEFI+GPT как для UFS, так и для ZFS.

См. также тут и тут про размер EFI-раздела.

victor_sudakov: (Default)
Случилась на компе сына беда: не загружается. Из сообщения можно догадаться, что диск не читается или initrd побился:



Загрузился с флешки mfsBSD, HDD прекрасно читается, проблема не похожа на аппаратную. Выбрал в меню grub предыдущую версию ядра и initrd, загрузился, смотрю - и правда побился самый свежий initrd:

# lsinitramfs /boot/initrd.img-5.3.0-53-generic 
.
kernel
kernel/x86
kernel/x86/microcode
kernel/x86/microcode/AuthenticAMD.bin
cpio: преждевременный конец архива
#

Переустановил насильно пакет
apt-get --reinstall install linux-image-5.3.0-53-generic

initrd при этом пересоздался и проблема ушла, комп грузится.

Но вот отчего initrd мог попортиться? И что пришлось бы делать, если бы в меню grub не нашлось других initrd?
victor_sudakov: (Default)
Ура, есть встроенный bectl для управления сабжами, можно сносить sysutils/beadm или sysutils/beadm-devel
victor_sudakov: (Default)
Может пригодиться, например, для тестирования графических desktop environments. В качестве оболочки к bhyve использован sysutils/vm-bhyve, в качестве VNC клиента - net/tightvnc.

Поскольку framebuffer console доступна только при загрузке гостевой ОС в режиме UEFI (а в режиме bhyveload недоступна), то нужно установить гостевую FreeBSD в режиме UEFI.

I. В конфиге новой VM должны присутствовать параметры
loader="uefi"
graphics="yes"
graphics_wait="auto"
graphics_res="1280x720"
xhci_mouse="no"

II. Запускаем установку как обычно для UEFI гостей:
vm install test1 FreeBSD-12.1-RELEASE-amd64-disc1.iso
vncviewer 192.168.1.1:5900

В EFI консоли дожидаемся FreeBSD boot menu, нажимаем 3 (Escape to loader prompt). В консоли лоадера
set boot_serial=NO
boot

При установке Auto (ZFS) нужно выбрать "Partition Scheme GPT(UEFI)", bsdinstall создаст EFI раздел и положит туда загрузчик. При установке на UFS придется вручную создать EFI раздел и наполнить его содержимым из /boot/boot1.efifat.

III. На последнем шаге установки (Manual Configuration):
echo 'boot_serial="NO"' >> /boot/loader.conf

IV. Устанавливаем иксы и нужный desktop environment:
pkg install xorg gnome3

V. В /usr/local/etc/X11/xorg.conf.d/driver-scfb.conf добавляем секцию:
Section "Device"
        Identifier    "Card0"
        Driver        "scfb"
EndSection

Это важно! Если не добавить, X-server не найдет framebuffer-ную консоль.

VI. Запускаем нужную графическую среду
sysrc dbus_enable=YES
sysrc hald_enable=YES
sysrc gdm_enable=YES
apply "service %1 start" dbus hald gdm

Источники:
https://wiki.freebsd.org/bhyve/UEFI
Тред в https://lists.freebsd.org/pipermail/freebsd-virtualization/2019-December/007944.html
victor_sudakov: (Default)
bhyve и некоторые другие гипервизоры (похоже что VirtualBox тоже) в режиме EFI не поддерживают эмуляцию NVRAM для сохранения efi variables между перезагрузками. Это может привести к проблеме: гостевая ОС установится штатно, а после перезагрузки получаем сообщение от EFI наподобие
Boot Failed. EFI DVD/CDROM
Failed to set MokListRT: Invalid Parameter
Failed to open \EFI\BOOT\grubx64.efi - Not Found
Failed to load image \EFI\BOOT\grubx64.efi: Not Found
start_image() returned Not Found
Boot Failed. EFI Misc Device
.

Это происходит оттого, что инсталлятор при установке ОС сохранил в efi variables путь к загрузчику (например "\EFI\centos\grubx64.efi"), а после перезагрузки гостевой системы настройка забылась и гипервизор начинает пытаться грузить нечто другое, что заложено в него по умолчанию или по эвристике.

Решений может быть несколько.

Первое тупое. Подмонтировать как-нибудь efi-раздел установленной гостевой ОС (например из другой виртуалки, или из LiveCD в той же виртуалке) и положить нужный загрузчик в то место, где его ищет и не может найти гипервизор: например подложить его в качестве "\EFI\BOOT\BOOTX64.EFI", или как в примере выше, скопировать из \EFI\centos\grubx64.efi в \EFI\BOOT\grubx64.efi.

Второе более интересное. После неудачной загрузки дождаться EFI interactive shell и создать файл startup.nsh, это типа такой autoexec.bat:

fs0:
edit startup.nsh


А в нем уже прописать тот загрузчик, который нужен гостевой ОС, например строчку "\EFI\centos\grubx64.efi".

Третье фантастическое. Запинать авторов UEFI-EDK2 firmware реализовать поддержку сохранения efi variables между перезагрузками.

UPDATE. Вот на ту же тему https://www.centos.org/forums/viewtopic.php?p=278745#p278745

UPDATE 2. А инсталлятор FreeBSD уже сразу создает в EFI-разделе startup.nsh c нужным загрузчиком. Молодцы!

Profile

victor_sudakov: (Default)
Виктор Судаков

December 2024

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
293031    

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 11th, 2025 03:40 pm
Powered by Dreamwidth Studios