efibootmgr

Hier ist die Work-in-Pogress Zone für alles Nichtallgemeine sondern Konkrete an Vorarbeiten für die kommenden UEFI-Wiki-Artikel
Forumsregeln
Alles was konkrete Vorarbeiten zu den geplanten UEFI bezogenen Wiki-Artikeln angeht und keine allgemeine Infos sondern eben genauere Arbeitsschritte, detaliertere Anleitungen, aufgetauchte Probleme, Workarounds um eben diese etc. darstellt bitte hier reinsetzen.

efibootmgr

Beitragvon gehrke » So 12. Apr 2015, 12:08

Im folgenden soll es um Themen und Tests zu Linux-Tool 'efibootmgr' gehen.

Es wird das folgende Setup verwendet (Linux+Windows-Dualboot):
Code: Alles auswählen
suse132-win10:~ # lsblk
NAME                          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                             8:0    0   50G  0 disk
├─sda1                          8:1    0  300M  0 part
├─sda2                          8:2    0   99M  0 part /boot/efi
├─sda3                          8:3    0  128M  0 part
├─sda4                          8:4    0   30G  0 part
├─sda5                          8:5    0  311M  0 part /boot
└─sda6                          8:6    0 19.2G  0 part
  ├─system-swap               253:0    0  512M  0 lvm  [SWAP]
  ├─system-opsensuse131--root 253:1    0    9G  0 lvm  /
  └─system-unused             253:2    0  9.7G  0 lvm 


Code: Alles auswählen
suse132-win10:~ # gdisk -l /dev/sda
GPT fdisk (gdisk) version 0.8.7

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sda: 104857600 sectors, 50.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 16E1A025-C2AF-4108-A2D4-25320B203216
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 104857566
Partitions will be aligned on 2048-sector boundaries
Total free space is 4029 sectors (2.0 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          616447   300.0 MiB   2700  Basic data partition
   2          616448          819199   99.0 MiB    EF00  EFI system partition
   3          819200         1081343   128.0 MiB   0C01  Microsoft reserved part
   4         1081344        63895551   30.0 GiB    0700  Basic data partition
   5        63895552        64532479   311.0 MiB   0700  primary
   6        64532480       104855551   19.2 GiB    8E00  primary

Man erkennt, dass der Bootloader Shim als aktiv markiert ist (BootCurrent: 0007):
Code: Alles auswählen
suse132-win10:~ # efibootmgr -v
BootCurrent: 0007
Timeout: 0 seconds
BootOrder: 0007,0006,0009,0000,0001,0002,0003,0004,0005
Boot0000* EFI DVD/CDROM ACPI(a0341d0,0)PCI(1,1)ATAPI(1,0,0)
Boot0001* EFI DVD/CDROM 1       ACPI(a0341d0,0)PCI(1,1)ATAPI(0,0,0)
Boot0002* EFI Floppy    ACPI(a0341d0,0)PCI(1,0)ACPI(60441d0,0)
Boot0003* EFI Floppy 1  ACPI(a0341d0,0)PCI(1,0)ACPI(60441d0,1)
Boot0004* EFI Hard Drive        ACPI(a0341d0,0)PCI(1,1)ATAPI(0,1,0)
Boot0005* EFI Internal Shell    MM(b,900000,10fffff)
Boot0006* opensuse      HD(2,96800,31800,78c4e591-a88a-44d3-80c1-930cc36f40ae)File(\EFI\opensuse\grubx64.efi)
Boot0007* opensuse-secureboot   HD(2,96800,31800,78c4e591-a88a-44d3-80c1-930cc36f40ae)File(\EFI\opensuse\shim.efi)
Boot0009* Windows Boot Manager  HD(2,96800,31800,78c4e591-a88a-44d3-80c1-930cc36f40ae)File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}...C................

Nur der Chainloader für Windows (/boot/grub2/grub.cfg):
Code: Alles auswählen
### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Windows Boot Manager (on /dev/sda2)' --class windows --class os $menuentry_id_option 'osprober-efi-BA2C-5359' {
        insmod part_gpt
        insmod fat
        set root='hd0,gpt2'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  BA2C-5359
        else
          search --no-floppy --fs-uuid --set=root BA2C-5359
        fi
        chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

Der Zusammenhang wird deutlich, wenn man sich die UUIDs ansieht:
Code: Alles auswählen
suse132-win10:~ # blkid
/dev/sda1: LABEL="Wiederherstellung" UUID="0ED62AE4D62ACC31" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="d96e3f2c-da75-4831-9e07-29c273d4a5a0"

/dev/sda2: UUID="BA2C-5359" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="78c4e591-a88a-44d3-80c1-930cc36f40ae"

/dev/sda3: PARTLABEL="Microsoft reserved partition" PARTUUID="345523d6-4fab-4dd5-a8d8-0f3dae793aca"

/dev/sda4: UUID="20DE2F40DE2F0E1A" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="b08eb833-6fe9-434d-b614-41eccde5caf4"

/dev/sda5: UUID="e464c3a4-a89f-42d4-b270-03a6555fb4be" TYPE="ext3" PARTLABEL="primary" PARTUUID="81434400-3aca-4935-be82-2838abec5e80"

/dev/sda6: UUID="b6Izp6-XsdX-nYON-dHpa-0nmj-lbpx-lJCfsb" TYPE="LVM2_member" PARTLABEL="primary" PARTUUID="b96d43f0-1f2d-45ab-bb28-e94c2736379a"

/dev/mapper/system-swap: UUID="5bff2383-88f9-4021-82fd-75ffd0204e58" TYPE="swap"

/dev/mapper/system-opsensuse131--root: UUID="58d175a0-c60c-42fc-9ead-64485731d2c9" TYPE="ext4"
Der Eintrag
Code: Alles auswählen
Boot0009* Windows Boot Manager  HD(2,96800,31800,78c4e591-a88a-44d3-80c1-930cc36f40ae)File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}...C................
referenziert beispielsweise über die UUID '78c4e591-a88a-44d3-80c1-930cc36f40ae' diese Partition:
Code: Alles auswählen
/dev/sda2: UUID="BA2C-5359" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="78c4e591-a88a-44d3-80c1-930cc36f40ae"
http://www.youtube.com/watch?v=PpUrMk3g_og (Angriff auf die Freiheit von Ilija Trojanow / Juli Zeh) - let’s encrypt
Benutzeravatar
gehrke
 
Beiträge: 118
Themen: 1
Registriert: Mo 23. Dez 2013, 21:53

Re: efibootmgr

Beitragvon gehrke » So 12. Apr 2015, 12:09

Windows soll einmalig als nächstes zu bootendes OS gesetzt werden, weitere Starts danach sollen aber wieder opensuse-secureboot wählen:
Code: Alles auswählen
suse132-win10:~ # efibootmgr --bootnext 0009
BootNext: 0009
BootCurrent: 0007
Timeout: 0 seconds
BootOrder: 0007,0006,0009,0000,0001,0002,0003,0004,0005
Boot0000* EFI DVD/CDROM
Boot0001* EFI DVD/CDROM 1
Boot0002* EFI Floppy
Boot0003* EFI Floppy 1
Boot0004* EFI Hard Drive
Boot0005* EFI Internal Shell
Boot0006* opensuse
Boot0007* opensuse-secureboot
Boot0009* Windows Boot Manager

suse132-win10:~ # reboot

Das Ergebnis ist anders als erwartet. Im UEFI-BootManager wird weiterhin 'opensuse-secureboot' angezeigt und das wird auch verwendet, es startet GRUB2. Ein Verständnisproblem meinerseits?
http://www.youtube.com/watch?v=PpUrMk3g_og (Angriff auf die Freiheit von Ilija Trojanow / Juli Zeh) - let’s encrypt
Benutzeravatar
gehrke
 
Beiträge: 118
Themen: 1
Registriert: Mo 23. Dez 2013, 21:53

Re: efibootmgr

Beitragvon gehrke » So 12. Apr 2015, 18:41

Ein Test mit der Reihenfolge...

Vorher - erster Loader ist Boot0007 (shim):
Code: Alles auswählen
suse132-win10:~ # efibootmgr
BootCurrent: 0007
Timeout: 0 seconds
BootOrder: 0007,0006,0009,0000,0001,0002,0003,0004,0005
Boot0000* EFI DVD/CDROM
Boot0001* EFI DVD/CDROM 1
Boot0002* EFI Floppy
Boot0003* EFI Floppy 1
Boot0004* EFI Hard Drive
Boot0005* EFI Internal Shell
Boot0006* opensuse
Boot0007* opensuse-secureboot
Boot0009* Windows Boot Manager

Änderung - Windows (Boot0009) soll zuerst starten:
Code: Alles auswählen
suse132-win10:~ # efibootmgr --bootorder 0009,0006,0007,0000,0001,0002,0003,0004,0005
BootCurrent: 0007
Timeout: 0 seconds
BootOrder: 0009,0006,0007,0000,0001,0002,0003,0004,0005
Boot0000* EFI DVD/CDROM
Boot0001* EFI DVD/CDROM 1
Boot0002* EFI Floppy
Boot0003* EFI Floppy 1
Boot0004* EFI Hard Drive
Boot0005* EFI Internal Shell
Boot0006* opensuse
Boot0007* opensuse-secureboot
Boot0009* Windows Boot Manager
suse132-win10:~ # reboot

Als Ergebnis startet Windows direkt und die Einstellung bleibt auch persistent so erhalten. Das sieht gut aus.
http://www.youtube.com/watch?v=PpUrMk3g_og (Angriff auf die Freiheit von Ilija Trojanow / Juli Zeh) - let’s encrypt
Benutzeravatar
gehrke
 
Beiträge: 118
Themen: 1
Registriert: Mo 23. Dez 2013, 21:53

Re: efibootmgr

Beitragvon gehrke » So 12. Apr 2015, 19:20

Test: Der Eintrag für shim soll verschwinden, so dass GRUB2 nicht mehr aufgerufen wird. So was könnte beispielsweise bei einer nachträglichen Installation oder Update von Windows passieren. Im Anschluss sollte der Eintrag über eine Live-Version wiederhergestellt werden, gegebenenfalls via chroot.

Löschen des Eintrags:
Code: Alles auswählen
suse132-win10# efibootmgr --delete-bootnum --bootnum 0007
BootCurrent: 0007
Timeout: 0 seconds
BootOrder: 0006,0009,0000,0001,0002,0003,0004,0005
Boot0000* EFI DVD/CDROM
Boot0001* EFI DVD/CDROM 1
Boot0002* EFI Floppy
Boot0003* EFI Floppy 1
Boot0004* EFI Hard Drive
Boot0005* EFI Internal Shell
Boot0006* opensuse
Boot0009* Windows Boot Manager

Windows als Standard setzen:
Code: Alles auswählen
suse132-win10# efibootmgr --bootorder 0009,0006,0000,0001,0002,0003,0004,0005
BootCurrent: 0007
Timeout: 0 seconds
BootOrder: 0009,0006,0000,0001,0002,0003,0004,0005
Boot0000* EFI DVD/CDROM
Boot0001* EFI DVD/CDROM 1
Boot0002* EFI Floppy
Boot0003* EFI Floppy 1
Boot0004* EFI Hard Drive
Boot0005* EFI Internal Shell
Boot0006* opensuse
Boot0009* Windows Boot Manager

Wie erwartet ist nach dem Reboot der Eintrag für shim verschwunden und Windows startet sofort.

Zur Reperatur wird der Start einer Live-Version simuliert durch Einbinden eines passenden ISOs im Start-Script der VM und dieses im Boot-Menu ausgewählt:
Code: Alles auswählen
CDROM="/home/gehrke/vm/iso/openSUSE-13.2-KDE-Live-x86_64.iso"

Nach dem Start der Live-Version sieht man sich erst mal den Stand an:
Code: Alles auswählen
linux:~ # blkid
/dev/cdrom: UUID="2014-10-27-15-28-42-00" LABEL="openSUSE 13.2 KDE Live" TYPE="udf" PTUUID="e28d2fda" PTTYPE="dos"
/dev/loop0: TYPE="squashfs"
/dev/ram1: UUID="c6fe4537-8620-4633-bf02-382db894210e" TYPE="ext3"
/dev/sda1: LABEL="Wiederherstellung" UUID="0ED62AE4D62ACC31" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="d96e3f2c-da75-4831-9e07-29c273d4a5a0"
/dev/sda2: UUID="BA2C-5359" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="78c4e591-a88a-44d3-80c1-930cc36f40ae"
/dev/sda4: UUID="20DE2F40DE2F0E1A" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="b08eb833-6fe9-434d-b614-41eccde5caf4"
/dev/sda5: UUID="e464c3a4-a89f-42d4-b270-03a6555fb4be" SEC_TYPE="ext2" TYPE="ext3" PARTLABEL="primary" PARTUUID="81434400-3aca-4935-be82-2838abec5e80"
/dev/sda6: UUID="b6Izp6-XsdX-nYON-dHpa-0nmj-lbpx-lJCfsb" TYPE="LVM2_member" PARTLABEL="primary" PARTUUID="b96d43f0-1f2d-45ab-bb28-e94c2736379a"
/dev/mapper/system-swap: UUID="5bff2383-88f9-4021-82fd-75ffd0204e58" TYPE="swap"
/dev/mapper/system-opsensuse131--root: UUID="58d175a0-c60c-42fc-9ead-64485731d2c9" TYPE="ext4"
/dev/sda3: PARTLABEL="Microsoft reserved partition" PARTUUID="345523d6-4fab-4dd5-a8d8-0f3dae793aca"

Code: Alles auswählen
linux:~ # efibootmgr -v
BootCurrent: 0001
Timeout: 0 seconds
BootOrder: 0009,0006,0000,0001,0002,0003,0004,0005
Boot0000* EFI DVD/CDROM ACPI(a0341d0,0)PCI(1,1)ATAPI(1,0,0)
Boot0001* EFI DVD/CDROM 1       ACPI(a0341d0,0)PCI(1,1)ATAPI(0,0,0)
Boot0002* EFI Floppy    ACPI(a0341d0,0)PCI(1,0)ACPI(60441d0,0)
Boot0003* EFI Floppy 1  ACPI(a0341d0,0)PCI(1,0)ACPI(60441d0,1)
Boot0004* EFI Hard Drive        ACPI(a0341d0,0)PCI(1,1)ATAPI(0,1,0)
Boot0005* EFI Internal Shell    MM(b,900000,10fffff)
Boot0006* opensuse      HD(2,96800,31800,78c4e591-a88a-44d3-80c1-930cc36f40ae)File(\EFI\opensuse\grubx64.efi)
Boot0009* Windows Boot Manager  HD(2,96800,31800,78c4e591-a88a-44d3-80c1-930cc36f40ae)File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}...C................


Dann wird der Eintrag für shim neu erstellt und als erster Eintrag in der Reihenfolge gesetzt:
Code: Alles auswählen
linux:~ # efibootmgr --create --disk /dev/sda --part 2 --label "opensuse-secureboot (re-constructed)" --loader \\EFI\\opensuse\\shim.efi
BootCurrent: 0001
Timeout: 0 seconds
BootOrder: 0007,0009,0006,0000,0001,0002,0003,0004,0005
Boot0000* EFI DVD/CDROM
Boot0001* EFI DVD/CDROM 1
Boot0002* EFI Floppy
Boot0003* EFI Floppy 1
Boot0004* EFI Hard Drive
Boot0005* EFI Internal Shell
Boot0006* opensuse
Boot0009* Windows Boot Manager
Boot0007* opensuse-secureboot (re-constructed)

linux:~ # efibootmgr --bootorder 0007,0006,0009,0000,0001,0002,0003,0004,0005
BootCurrent: 0001
Timeout: 0 seconds
BootOrder: 0007,0006,0009,0000,0001,0002,0003,0004,0005
Boot0000* EFI DVD/CDROM
Boot0001* EFI DVD/CDROM 1
Boot0002* EFI Floppy
Boot0003* EFI Floppy 1
Boot0004* EFI Hard Drive
Boot0005* EFI Internal Shell
Boot0006* opensuse
Boot0007* opensuse-secureboot (re-constructed)
Boot0009* Windows Boot Manager

Das war scheinbar erfolgreich. Nach dem Reboot startet wie erhofft erst shim und dieser dann GRUB2, wo der User dann zwischen Linux und Windows auswählen kann.

Anmerkung: chroot war an dieser Stelle nicht notwendig. Es ging in diesem Test auch nur um die Wiederherstellung eines verlorenen Eintrages. Im Ernstfall (nachträgliche Windows-Installation) hätten möglicherweise dazu auch noch die entsprechenden Loader auf die EFI-Partition kopiert werden müssen.
http://www.youtube.com/watch?v=PpUrMk3g_og (Angriff auf die Freiheit von Ilija Trojanow / Juli Zeh) - let’s encrypt
Benutzeravatar
gehrke
 
Beiträge: 118
Themen: 1
Registriert: Mo 23. Dez 2013, 21:53

Re: efibootmgr

Beitragvon gehrke » Mi 29. Apr 2015, 20:28

Ich habe diese Zeile noch nicht vollständig verstanden:
Code: Alles auswählen
Boot0006* opensuse      HD(2,96800,31800,78c4e591-a88a-44d3-80c1-930cc36f40ae)File(\EFI\opensuse\grubx64.efi)

Insbesondere der Teil 'HD(2,96800,31800'.
Laut https://www.happyassassin.net/2014/01/2 ... work-then/ handelt es sich hier wohl um einen 'Full UEFI native boot entry' nach EFI_DEVICE_PATH_PROTOCOL. Ich vermute, die 2 steht für die Partition 2, welche in diesem Fall tatsächlich auch die ESP ist.

Aber die beiden Zahlen (96800,31800) danach, was bedeuten die? Startposition und Größe? Aber in welcher Einheit??? Wie passt das zu den Ausgaben der gängigen Partitionierungstools?
http://www.youtube.com/watch?v=PpUrMk3g_og (Angriff auf die Freiheit von Ilija Trojanow / Juli Zeh) - let’s encrypt
Benutzeravatar
gehrke
 
Beiträge: 118
Themen: 1
Registriert: Mo 23. Dez 2013, 21:53

Re: efibootmgr

Beitragvon Robi » Do 30. Apr 2015, 12:55

gehrke hat geschrieben:Ich habe diese Zeile noch nicht vollständig verstanden:
Code: Alles auswählen
Boot0006* opensuse      HD(2,96800,31800,78c4e591-a88a-44d3-80c1-930cc36f40ae)File(\EFI\opensuse\grubx64.efi)

Insbesondere der Teil 'HD(2,96800,31800'.

Aber die beiden Zahlen (96800,31800) danach, was bedeuten die? Startposition und Größe? Aber in welcher Einheit??? Wie passt das zu den Ausgaben der gängigen Partitionierungstools?


der erste ist der hexadezimale Anfang der Partition in Maßstab der Sektorsize deiner Platte (also bei den virtuellen Platten die wir verwenden 512 Byte) demnach
0x96800 = 616448 x 512 = 315621376 Byte
das zweite ist die Größe der Partition genauso gerechnet. also 103809024 Byte
ob dabei jetzt aber dazu die physikalische oder die logische Sektorsize genommen werden muss, kann ich im Moment auch nicht ermitteln, bei mir sind beide gleich. (steht oben im Kopf bei der parted Ausgabe bei print.)

die selben Zahlen solltest du für START un SIZE auch mit parted bekommen, wenn du im interaktiv Modus von parted vor dem "print" den Befehl "unit B" abgibst.

robi
Robi
 
Beiträge: 68
Themen: 10
Registriert: So 15. Feb 2015, 16:02

Re: efibootmgr

Beitragvon gehrke » Do 30. Apr 2015, 20:24

Robi hat geschrieben:
gehrke hat geschrieben:
Code: Alles auswählen
Boot0006* opensuse      HD(2,96800,31800,78c4e591-a88a-44d3-80c1-930cc36f40ae)File(\EFI\opensuse\grubx64.efi)


der erste ist der hexadezimale Anfang der Partition in Maßstab der Sektorsize deiner Platte (also bei den virtuellen Platten die wir verwenden 512 Byte) demnach
0x96800 = 616448 x 512 = 315621376 Byte
das zweite ist die Größe der Partition genauso gerechnet. also 103809024 Byte
ob dabei jetzt aber dazu die physikalische oder die logische Sektorsize genommen werden muss, kann ich im Moment auch nicht ermitteln, bei mir sind beide gleich.

Ja, das passt. Bei gdisk komme ich direkt auf den umgerechneten hex-Wert:
Code: Alles auswählen
suse132-win10:~ # gdisk -l /dev/sda
[...]
Logical sector size: 512 bytes
[...]
Number  Start (sector)    End (sector)  Size       Code  Name
   2          616448          819199   99.0 MiB    EF00  EFI system partition

TNX
http://www.youtube.com/watch?v=PpUrMk3g_og (Angriff auf die Freiheit von Ilija Trojanow / Juli Zeh) - let’s encrypt
Benutzeravatar
gehrke
 
Beiträge: 118
Themen: 1
Registriert: Mo 23. Dez 2013, 21:53


Zurück zu Workspace

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron