UEFI: erinevus redaktsioonide vahel
Resümee puudub |
|||
52. rida: | 52. rida: | ||
Memtest86 http://www.memtest86.com/ kasutamisel paistab selline pilt |
Memtest86 http://www.memtest86.com/ kasutamisel paistab selline pilt |
||
− | [[ |
+ | [[Fail:Uefi-10.gif]] |
Kasulikud lisamaterjalid |
Kasulikud lisamaterjalid |
Redaktsioon: 19. märts 2022, kell 14:42
Sissejuhatus
TODO
UEFI Shell kasutamine
UEFI shell võib olla
- integreeritud arvuti riistvaras - sel juhul tavaliselt arvuti käivitumisel UEFI setup keskkonnas saab valida efi shelli minemise
- arvuti riistvara oskab käivitada uefi shelli kui talle vastav .efi ette näidata
Teine variant on nt kasutusel arvuti J3170M puhul, efi shell sobib kopeerida nt aadressilt https://sourceforge.net/p/tianocore/edk2/ci/master/tree/
EdkShellBinPkg -> Full Shell -> X64 -> Shell_Full.efi
ja paigutada nt arvutile külge ühendatatava USB pulge juur failisüsteemi või /boot/efi partitsioonile nimega shellx64.efi.
Kopeerimine
fs0:\EFI\debian> cp fs1:\vmlinuz-4.7.0-0.bpo.1-amd64 .
Boot valiku lisamiseks sobib öelda
TODO
OS installeri ISO tõmmise käivitamine
UEFI keskkonnasst OS installeri kasutamise eelduseks on, et see installer on nö EFI võimeline. Peale OS installeri ISO tõmmise arvutiga ühendamist (füüsiline CD seade, mingi remote virtual cd tõmmise ühendamine jms) tuleb öelda UEFI Shellis
Shell> map -r
mille väljundis peaks esinema uus plokkseade, nt fs1. Edasi tuleb käivitada boot*.efi nimeline fail (tab ei lõpeta sedasi kataloogi ja failinimesid ära)
Shell> fs1:\EFI\BOOT\BOOTX64.EFI
Tavaliselt seejärel käivitub GRUB2 bootloader, millest edasi saab jätkata tavalisel viisil. Lisaks on võimalik GRUB2'st väljuda, nt valides C ning seejärel exit
grub> exit
Tulemusena satutakse tagasi EFI shelli.
Arvuti firmware uuendamine EFI shellist
TODO
Võrk EFI shellist
TODO
Arvuti dignostika EFI shellist
Memtest86 http://www.memtest86.com/ kasutamisel paistab selline pilt
Kasulikud lisamaterjalid
efibootmgr
EFI kasutamiseks on vajalikud sellised paketid + grub v. 2.02 vms
grub-efi-amd64-bin efibootmgr
Olemasolevate EFI boot valikute esitamine
# efibootmgr BootCurrent: 0008 Timeout: 0 seconds BootOrder: 0002,0008,0003,0005,0000,0001,0006 Boot0000 EFI Network 3 Boot0001 EFI Network 4 Boot0002* proxmox Boot0003 EFI Network 1 Boot0005 EFI Network 2 Boot0006* Windows Boot Manager Boot0008* debian
kus
- BootCurrent - vaikimisi käivitatav valik
- Timeout - viivitus
- BootOrder - boot valikute läbiproovimise järjekord, esimene töötav käivitub
- Boot0xxx - boot valikud
- UEFI Boot menüü esitab ainult BootOrder nimekirjas olevaid valikuid oma sissekannetena
Kaheksanda boot valiku eemaldamiseks arvuti NVRAM seest
# efibootmgr -b 8 -B
Järgmise UEFI boot sissekande tekitamine, automaatselt pannakse see boot orderis esimesele kohale
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=deb2 --recheck Installing for x86_64-efi platform. File descriptor 4 (/dev/sda1) leaked on vgs invocation. Parent PID 3056: grub-install File descriptor 4 (/dev/sda1) leaked on vgs invocation. Parent PID 3056: grub-install Installation finished. No error reported
Tulemusena tekib UEFI boot menüüsse juurde uus boot valik 'deb2' ning failisüsteemi genereeritaks efi grub rakendus
/boot/efi/EFI/deb2/grubx64.efi
Seejärel võiks uuesti genereerida ka grub.cfg faili
# update-grub
Sobiva uefi valikute järjestatud nimekirja saab tekitada nt selliselt (seejärel programmi väljundis näidatakse kehtestatud uut orderit)
# efibootmgr -o 2,8,3,5,0,1
EFS partitsiooni monteerimiseks sobib kasutada sellist rida
# cat /etc/fstab ... /dev/sda1 /boot/efi vfat umask=0077 0 1
kusjuures EFI failisüsteemi sobib moodustada nt selliselt
# mkfs.vfat -F32 -n EFI /dev/sdb1 mkfs.fat 3.0.27 (2014-11-12)
Tundub, et UEFI arvuti grub promptis öeldes jõuab tulemusena arvuti Setup keskkonda
grub> fwsetup
Trusted Boot ja SHIM
TODO
refind boot iso kasutamine
Tundub, et rEFInd http://www.rodsbooks.com/refind/ sobib hästi erakorraliselt muidu UEFI installiga arvuti käivitamiseks.
- bootida .iso pealt üles
- valida meelepärane efi sissekanne vms (nt tuum, eelduseks on, et kuhugi efi failisüsteemis on sobiv tuuma ja initrd kopeeritud; või siis efi shellis olles kopeerida)
- pressid F2 ja näidata juur failisüsteem (tõnäeoliselt initrd on juba kirjas, st sisestada selle ette 'ro root=/dev/mapper/...')
ro root=/dev/mapper/pve-root initrd=...
refind .zip arhiivi kasutamine
Paigaldamine
Kopeerida ja pakkida lahti, nii et tulemuseks on /boot/efi failisüsteemis /boot/efi/EFI kataloogis bootvalikule 'refind' vastav kataloogi sisu sarnane (kopeerides .zip failist sellised kataloogid ja failid)
/boot/efi/EFI/refind/drivers_x64 /boot/efi/EFI/refind/icons /boot/efi/EFI/refind/refind_x64.efi /boot/efi/EFI/refind/tools_x64
Lisaks tuleb kopeerida efi failisüsteemi tuum ja initramfs, nt
# cp /boot/vmlinuz-4.4.0-87-generic /boot/initrd.img-4.4.0-87-generic /boot/efi/EFI/refind # cd /boot/efi/EFI/refind
nimeteada tuuma failinimi ümber .efi lõpuga failiks (tundub, et see pole praktiliselt vajalik)
# mv vmlinuz-4.4.0-87-generic vmlinuz-4.4.0-87-generic.efi
Seadistamine
Seejärel sobib kasutada nt sellist seadistusfaili sisu
# cat /boot/efi/EFI/refind/refind.conf timeout 20 menuentry refind { icon /EFI/refind/icons/os_linux.png loader /EFI/refind/vmlinuz-4.4.0-87-generic initrd /EFI/refind/initrd.img-4.4.0-87-generic options "ro root=/dev/mapper/system-root" }
kus
- TODO
Veenduda, milline on muudatuste eelne boot järjekord
# efibootmgr -v
ning lisada efi boot valik, nb! lisatud valik muutub vaikevalikuks
# efibootmgr -c -L "refind" -l 'EFI\refind\refind_x64.efi'
ja kohendada muudatuste järgne boot järjekord, et senine default oleks edasi default
# efibootmgr -o 0,1,2
Kasutamine
Peale refind boot loaderi paigaldamist paitab uefi boot valikute nimekiri nimekiri nt selline, refind on aktiivne ja all on efi file path
Valides refind paistab selline pilt
ja liikudes refind edit režiimi selline pilt (valides Tab klahvi)
ning Tab abil editor sisse liikudes, siin saab muuta kerneli parameetreid
ELILO
Märkus: 2017 aasta alguses tundub, et see on iganenud tarkvara.
ELILO EFI rakendus abil saab arvuti käivitada EFI kaudu. Selleks tuleb kuhugi paigaldada elilo pakett
| It is necessary to run /usr/sbin/elilo to install the new elilo binary into the EFI partition. │ │ │ │ WARNING: This procedure will write data into the debian directory of the EFI disk partition, possibly │ │ overwriting files installed there by hand. │ │ │ │ Not installing the new elilo binary on the EFI disk partition may leave the system in an unbootable │ │ state. Alternatives to automatic updating of the partition include running /usr/sbin/elilo by hand, │ │ or installing the new /usr/lib/elilo/elilo.efi executable into the EFI disk partition manually. │ │ │ │ Automatically run elilo?
ning kopeerida bootitava arvuti ESP failisüsteemi sellised failid
# find /boot/efi/EFI/ELILO/ -ls 120 4 drwx------ 2 root root 4096 May 1 01:05 /boot/efi/EFI/ELILO/ 126 236 -rwx------ 1 root root 239976 May 1 01:02 /boot/efi/EFI/ELILO/elilo.efi 127 4 -rwx------ 1 root root 463 May 1 01:14 /boot/efi/EFI/ELILO/elilo.conf 128 4236 -rwx------ 1 root root 4336880 May 1 01:05 /boot/efi/EFI/ELILO/vmlinuz-2.6.32-37-pve 129 1908 -rwx------ 1 root root 20382462 May 1 01:05 /boot/efi/EFI/ELILO/initrd.img-2.6.32-37-pve
kus
- elilo.efi - rakendus
- elilo.conf - seadistusfail
kus nt
# cat /boot/efi/EFI/ELILO/elilo.conf delay=20 default=pve image=vmlinuz-2.6.32-37-pve label=pve initrd=initrd.img-2.6.32-37-pve description="Boot Debian Linux" read-only root=/dev/mapper/pve-root append="console=ttyS0,9600
- booditava operatsioonisüsteemi tuum ja initramfs
Käivitamiseks sobib uefi shellist öelda
Shell> fs0:\efi\elilo\elilo.efi ELILO v3.14 for EFI/x86_64n internal or external command, operable program, or batch fileram, or batch file .. Loading kernel vmlinuz-2.6.32-37-pve... done Loading file initrd.img-2.6.32-37-pve...done ...
EFI Stub
EFI Stub tähistab võimalust kasutada Linux tuuma nagu efi rakendust ning otse sellega süsteem alglaadida. Käsitsi uefi shellist toimub see selliselt
fs0:\> cp vmlinuz-3.2.0-4-amd64 vmlinuz-3.2.0-4-amd64.efi fs0:\> vmlinuz-3.2.0-4-amd64.efi initrd=initrd.img-3.16.0-4-amd64 ro root=/dev/mapper/pve-root_deb8 console=ttyS0,9600
EFI boot sissekannete nimekirja lisamiseks sobib öelda
# efibootmgr -c -g -L "Debian (EFI stub)" -l '\EFI\BOOT\vmlinuz-3.2.0-4-amd64.efi' -u 'root=/dev/mapper/pve-root ro rootfstype=ext3 add_efi_memmap initrd=\\EFI\\BOOT\\initrd.img-3.2.0-4-amd64 console=ttyS0,9600'
Kasulikud lisamaterjalid
syslinux-efi
Tarkvara paigaldamiseks sobib öelda
# apt-get install syslinux-efi
EFI rakendused on
# find /usr/lib/SYSLINUX.EFI -type f /usr/lib/SYSLINUX.EFI/efi64/syslinux.efi /usr/lib/SYSLINUX.EFI/efi32/syslinux.efi
Seadisusfailina kasutatakse
/boot/efi/EFI/syslinux/syslinux.cfg
Getting cached packet My IP is 10.0.0.18 Loading vmlinuz-2.6.32-37-pve... okoking vmlinuz-2.6.32-37-pve... Loading initrd.img-2.6.32-37-pve...okoking initrd.img-2.6.32-37-pve...
GRUB
Kui arvutil on boot valikud on nt sellised
kus
- UEFI: * - arvuti käivitatakse kui UEFI riistvara
- mitmed muud valikud käivitavad arvuti kui BIOS riistvara
Selleks, et käivitatud arvutit saaks seadistatada UEFI'i arvutina (nt kaustada efibootmgr programmi) tuleb ta käivitada UEFI režiimis.
'UEFI: Network Card' kaardilt käivitamiseks on muus osas nagu tavalne DHCP + TFTP käivitamine, kuid seejuures peab TFTP serveril asuma spetsiifiline GRUB EFI rakendus, mis muu hulgas sisaldab kõiki kataloogis /usr/lib/grub/x86_64-efi olevaid grub mooduleid. Sellise rakenduse tekitamiseks sobib öelda (millegipärast grub.cfg'd ei kasutata ...)
# grub2-mkstandalone -d /usr/lib/grub2/x86_64-efi -O x86_64-efi --fonts="unicode" -o bootx64.efi boot/grub/grub.cfg
Peale seda kui UEFI network boot on kopeerinud rakendust ning selle käivitamise tulemusel on ees grub> prompt tuleb laadida mõned olulised moodulid, nt
grub> insmod part_gpt grub> insmod efi_gop grub> insmod efi_uga grub> insmod mdraid1x grub> insmod lvm
ja seejärel tuum, initrd ning arvuti bootida
grub> linux (lvm/pve-root)/boot/vmlinuz-2.6.32-37-pve ro root=/dev/mapper/pve-root console=ttyS0,9600 grub> initrd (lvm/pve-root)/boot/initrd.img-2.6.32-37-pve grub> boot
Tulemusena peaks arvuti töötama.
Märkused
UEFI kasutamiseks tuleb arvuti käivitada UEFI režiimis. Võib-olla on arvuteid, mida ei saagi muul viisil käivitada, aga tundub, et 2015 aasta kevadel on nö kahe-režiimsed arvutid üsna levinud
TODO
Kui selline arvuti on käivitatud nt SystemRescueCd plaadilt BIOS alla, siis paistab efibootmgr väljund sedasi
Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables
- Kui ühte ja sama arvutit käivitada nö UEFI ja mitte-UEFI režiimis (nt laadides sama tuumaga tftp serverilt), siis paistavad dmesg peal sarnased erinevused
# diff /var/tmp/uefita.log /var/tmp/uefiga.log .. < Command line: initrd=initrd.img-2.6.32-37-pve root=/dev/mapper/pve-root ro console=ttyS0,9600 BOOT_IMAGE=vmlinuz-2.6.32-37-pve --- > Command line: BOOT_IMAGE=(lvm/pve-root)/boot/vmlinuz-2.6.32-37-pve ro root=/dev/mapper/pve-root console=ttyS0,9600 10,12c10,11 < BIOS-e820: 0000000000000000 - 000000000009bc00 (usable) < BIOS-e820: 000000000009bc00 - 00000000000a0000 (reserved) < BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved) --- > BIOS-e820: 0000000000000000 - 00000000000a0000 (usable) > BIOS-e820: 00000000000a0000 - 00000000000c0000 (reserved) .. 31a32,118 > EFI v2.31 by American Megatrends > BIOS ID: S1200RP.86B.01.03.0004.201308211450 > ACPI 2.0=0xbefeff98 SMBIOS=0xf0440 > EFI: mem00: type=3, attr=0xf, range=[0x0000000000000000-0x0000000000008000) (0MB) > EFI: mem01: type=7, attr=0xf, range=[0x0000000000008000-0x000000000003f000) (0MB) > EFI: mem02: type=4, attr=0xf, range=[0x000000000003f000-0x0000000000040000) (0MB) > EFI: mem03: type=3, attr=0xf, range=[0x0000000000040000-0x00000000000a0000) (0MB) > EFI: mem04: type=2, attr=0xf, range=[0x0000000000100000-0x0000000001566000) (20MB) ... > efifb: probing for efifb > efifb: framebuffer at 0xc2000000, mapped to 0xffffc90009e00000, using 1920k, total 1920k > efifb: mode is 800x600x32, linelength=3200, pages=1 > efifb: scrolling: redraw > efifb: Truecolor: size=8:8:8:8, shift=24:16:8:0 > Refined TSC clocksource calibration: 3292.375 MHz. > Console: switching to colour frame buffer device 100x37 > Switching to clocksource tsc > fb0: EFI VGA frame buffer device ....
efivar programmiga saab uurida EFI muutujaid
# apt-get install efivar
mis paistab sedasi
# efivar -l 8be4df61-93ca-11d2-aa0d-00e098032b8c-BootCurrent 8be4df61-93ca-11d2-aa0d-00e098032b8c-QuickLookBoot 8be4df61-93ca-11d2-aa0d-00e098032b8c-ErrOutDev 8be4df61-93ca-11d2-aa0d-00e098032b8c-ConOut 8be4df61-93ca-11d2-aa0d-00e098032b8c-ConOutDev 8be4df61-93ca-11d2-aa0d-00e098032b8c-ConInDev 8be4df61-93ca-11d2-aa0d-00e098032b8c-ConIn ...
- Tundub, et mingil juhul ei õnnestus efibootmgr -c ... abil lisada jääval boot sissekannet ja peale rebooti arvuti ise kuidagi avastab mingid /boot/efi failisüsteemi sissekanded ja kasutab valikuliselt neid (nt arvutil https://www.msi.com/Motherboard/H110M-PRO-VD/Overview).
- vahel ütleb efibootmgr nii
# efibootmgr -b 0 -B Could not delete variable: Read-only file system
Aitab öelda
# mount -o remount,rw /sys/firmware/efi/efivars
startup.nsh
Tavaliselt püütakse nö efi shelli boot valiku tegemisel käivitada vaikimisi efi failisüsteemi juurikas asuvat skripti startup.nsh, mille sisu võiks olla nt
fs0: \EFI\debian\grubx64.efi
UEFI kasutamise iseärasusest erineval riistvaral
Kuigi ootus võiks olla, et UEFI on standard, mis realiseerib nö ühetaolise kasutuskogemuse, on erinevate põlvkondade ja erinevate tootjate arvutid selles mõttes üsna erinevad.
HP ProBook 6450b 68CDE laptop
TODO
Partitsioonide ettevalmistamine
# parted /dev/sda (parted) unit s (parted) mklabel gpt (parted) mkpart esp 2048 411647 (parted) mkpart boot 411648 1435647
# fdisk /dev/sda ...
Tulemusena
% parted /dev/sda p Model: DELL PERC H310 (scsi) Disk /dev/sda: 299GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 211MB 210MB esp boot, esp 2 211MB 735MB 524MB boot 3 735MB 299GB 299GB lvm
Xen käivitamine UEFI keskkonnas xen-4.8-amd64.efi rakendusega
Tundub, et 2016 novembris on Debian v. 9 Stretch paketihalduses Xen v. 4.8.0 kohal ja ka seal sisaldub xen-4.8-amd64.efi rakendus. Üks viis seda käivitada peaks olema
UEFI -> XEN.EFI -> TUUM -> INITRAMDISK
- moodustada efi failisüsteemi kataloog xen
# mkdir /boot/efi/EFI/xen
- kopeerida sinna xen efi rakendus, tuum ja initrd
# cp xen-4.8-amd64.efi vmlinuz* initrd* /boot/efi/EFI/xen
- moodustada xen efi rakenduse seadistusfail, midagi sellist
# cat xen-4.8-amd64.cfg [global] default=debian9 [debian9] options=console=vga,com1 com1=9600 loglvl=all noreboot kernel=vmlinuz-4.8.0-1-amd64 ignore_loglevel root=/dev/mapper/system-root ro nosetmode ramdisk=initrd.img-4.8.0-1-amd64
- lisada efibootmgr abil boot valik arvuti nvram'i (alternatiiv on arvuti käivitumisel käsitsi jõuda kõnealuse efi rakenduse käivitamiseni)
# efibootmgr -L Xen -l "\EFI\xen\xen-4.8-amd64.efi" -c
Tulemusena käivitatakse Xen ja dom0 keskkond.
Kasulikud lisamaterjalid
Xen käivitamine UEFI keskkonnas grubx64.efi rakendusega
Osutub, et Xen saab UEFI keskkonnas käivitada ka nö läbi grubx64.efi rakenduse
UEFI -> GRUB.EFI -> XEN.EFI -> TUUM -> INITRAMDISK
Selleks sobib kasutada nt sellist grub seadistust
# cat /etc/grub.d/40_custom #!/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above. menuentry "Xen EFI" { insmod part_gpt insmod search_fs_uuid insmod chain insmod fat set root=(hd0,gpt1) chainloader /efi/xen/xen-4.8-amd64.efi }
Selleks, et 'Xen EFI' oleks vaikevalik alglaaduril sobib
- kasutada /etc/default/grub.d/xen.cfg failis rida
XEN_OVERRIDE_GRUB_DEFAULT=0
- kasutada failis /etc/default/grub rida
GRUB_DEFAULT="Xen EFI"
- öelda
# update-grub
Osutub, et Xen ei saa UEFI keskkonnas käivitada käivitada läbi grubx64.efi rakenduse hüperviisorit /boot/xen-4.8-amd64.gz.
Multiboot
Töötava UEFI multiboot süsteemi käivitamisel on muu hulgas kolm sellist UEFI Boot valikut, nad kõik jagavad ühte ja sama ESP failisüsteemi
- debian
- ubuntu_1404
- ubuntu_1604
Sellisse UEFI multiboot süsteemi efi kataloogis asuvad grub efi rakendused paistavad nii
# ls -ld /boot/efi/EFI/*/* -rwx------ 1 root root 143360 Apr 2 2015 /boot/efi/EFI/debian/grubx64.efi -rwx------ 1 root root 143360 Mar 30 2015 /boot/efi/EFI/ubuntu_1404/grubx64.efi -rwx------ 1 root root 143360 Apr 2 2015 /boot/efi/EFI/ubuntu_1604/grubx64.efi
kusjuures Debian ja Ubuntu operatsioonisüsteemid juurfailisüsteemid asuvad LVM peal (kus asub ka nö klassikaline /boot kataloog) on
- /dev/system/debian
- /dev/system/ubuntu_1404
- /dev/system/ubuntu_1604
Järgmise multiboot keskkonna tekitamiseks tuleb nt
- moodustada /dev/system/debian_test ja kopeerida sinna töötava debiani juurfailisüsteem
- bootida käsitsi mingi olemasoleva grub abil uus keskkond (kopeerides vastavasse /boot kataloogi uue süsteemi initrd ja vmlinuz)
- ühendada külge /dev/sda -> /boot/efi
- keskkonna enda sees öelda, tulemusena genereeritakse /boot/efi/EFI/debian_test/grubx64.efi
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian_test --recheck
- uuendada grub.cfg (tõenäoliselt kasutatakse siis uusi uuid väärtusi jms)
# update-grub
Tulemusena on UEFI Setup boot valikute nimekirjas järgmine sissekanne lisaks. Seda näeb ka efibootmgr väljundis.
Probleem: Ebaselge selle asja juures on, et kuidas iga /boot/efi all olev grub efi rakendus teab minna just edasi tegelema oma lvm köite pealt /boot/grub kataloogiga (lugeda sealt konfi). Tundub, et kui kõnealuse süsteemi alt öelda grub-install, siis nii juhtub.
20220317 - efi is not directory anomaalia
TODO
Kasulikud lisamaterjalid