Re: F37 Change: Deprecate Legacy BIOS (System-Wide Change proposal)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

> OK so there isn't (yet) an option to embed the GRUB core.img in a GPT
> BIOS boot partition, I take it? The assumption is MBR? On hard drives,
> core.img goes in the MBR gap. I'm not sure where it goes on xorriso
> produced ISOs though, but presumably not the gap because there's a
> valid GPT there too.

One could probably use core.img for booting from USB stick. But it would
not obsolete the x86 code in MBR and it currently is not necessary for
grub-mkrescue ISOs because eltorito.img does a job equivalent to core.img.
eltorito.img is stored in the ISO 9660 filesystem as normal data file.
The MBR x86 code transfers execution to it and the El Torito catalog has
it as boot image for x86 legacy BIOS.


> Yeah, I'm not aware off hand of any UEFI that have a problem with the
> first 440 bytes of LBA 0 being non-zero. I am aware though, of this
> tianocore bug [1] where if the active bit on that 0xEE partition is
> set, the GPT is considered invalid.

That's why grub-mkrescue lets xorriso produce a pure GPT with no
boot/active flag at the 0xEE partition. But this lets old HP laptops
refuse to boot from USB stick.
A foul compromise is to add another MBR partition of type 0x00 with
boot/active flag. EFI is known to ignore it, but HP legacy BIOS takes it
as reason to run the MBR x86 code (which is not related to partitions).


> (b) we don't really want to work around buggy
> BIOS firmware anyway, we want them to fail here rather than later.

That's a harsh decision but would match the purpose of this thread, indeed.
If so, then producing a pure GPT instead of the current jackalope seems
the way to go. grub-mkrescue will point the way or could even be the
solution to go for.

I would propose to care for a mountable ISO 9660 partition, by moving
the EFI boot image / EFI system partition out of the filesystem and
rather appending it as extra partition. An example can be created by
MKRESCUE_SED_MODE=gpt_appended with script frontend/grub-mkrescue-sed.sh
out of libisoburn.)
Further one would need xorrisofs option
  -partition_offset 16
so that a mountable GPT partition can be created which starts at 512-block
address 64, i.e. after the GPT partition table data. This wastes some
space because a second directory tree has to be generated additionally to
the normal directory tree which will be used when booting or mounting
the ISO from a DVD.
The waste would not be much with Fedora Live ISOs. In 3-year-old
Fedora-Workstation-Live-x86_64-31-1.9.iso the first data file is already
at 2048-block address 43. That would be at most 23 * 2048 bytes for the
directory records which form the file tree (43 - 16 blocks System Area -
4 blocks of Volume Descriptors). So the waste would be <= 46 KiB.

At that occasion consider to drop the HFS+ Mac boot image and the Apple
Partition map which marks it for some obscure non-EFI x86 Macs. I.e.
consider to remove from the current xorrisofs command the options
  -eltorito-alt-boot
  -e images/macboot.img -no-emul-boot -isohybrid-gpt-hfsplus
and try to find a Mac which misses this boot image and refuses to boot
but boots with the original ISO.


> Some legacy BIOS insist on seeing certain MBR structures in LBA 0 or
> they face plant.

I only know of the buggy demand for a boot/active flag at some MBR
partition. If you can name more stumble stones, i would be highly
interested to learn about them.


> If we can opt out of making a hybrid/faux MBR, and create a PMBR
> instead, that'd also mean there's one clear unambiguous partition map
> for USB sticks, which could make it easier to implement persistence.

A PMBR is an MBR at the start of a partition and gets activated only
if the device MBR decides to do so. Sometimes there is MBR code on newly
bought USB sticks which looks for a partition with boot/active flag and
then chain-loads the PMBR from there.
But in an EL Torito bootable ISO this makes few sense. The little
hybrid MBR and the larger BIOS boot image can do everything that is
needed.

A neat partition map is indeed a valuable goal. To my knowledge it can
only be achieved by dropping support for the buggy legacy BIOSes which
demand to see an MBR partition with boot/active flag or by dropping
support for buggy EFIs which do not recognize the MBR partition type
0xEF unless a smell of GPT is on the storage device.

---------------------------------------------------------------------
Just for the fun of it i post xorriso's assessment of the jackalope boot
equipment in Fedora-Workstation-Live-x86_64-31-1.9.iso :

  $ xorriso -indev Fedora-Workstation-Live-x86_64-31-1.9.iso -report_el_torito plain -report_system_area plain
  ...
  El Torito catalog  : 42  1
  El Torito cat path : /isolinux/boot.cat
  El Torito images   :   N  Pltf  B   Emul  Ld_seg  Hdpt  Ldsiz         LBA
  El Torito boot img :   1  BIOS  y   none  0x0000  0x00      4       16852
  El Torito boot img :   2  UEFI  y   none  0x0000  0x00  21716          43
  El Torito boot img :   3  UEFI  y   none  0x0000  0x00  45520        5472
  El Torito img path :   1  /isolinux/isolinux.bin
  El Torito img opts :   1  boot-info-table isohybrid-suitable
  El Torito img path :   2  /images/efiboot.img
  El Torito img path :   3  /images/macboot.img
  System area options: 0x00000202
  System area summary: MBR isohybrid cyl-align-off GPT
  ISO image size/512 : 3768320
  Partition offset   : 0
  MBR heads per cyl  : 0
  MBR secs per head  : 0
  MBR partition table:   N Status  Type        Start       Blocks
  MBR partition      :   1   0x80  0x00            0      3768320
  MBR partition      :   2   0x00  0xef          172        21716
  MBR partition      :   3   0x00  0x00        21888        45520
  MBR partition path :   2  /images/efiboot.img
  MBR partition path :   3  /images/macboot.img
  GPT                :   N  Info
  GPT disk GUID      :      892c8c3c5015534296ffb0417be2c61f
  GPT entry array    :      2  248  overlapping
  GPT lba range      :      64  3768256  3768319
  GPT partition name :   1  490053004f00480079006200720069006400
  GPT partname local :   1  ISOHybrid
  GPT partition GUID :   1  892c8c3c5015534296feb0417be2c61f
  GPT type GUID      :   1  a2a0d0ebe5b9334487c068b6b72699c7
  GPT partition flags:   1  0x1000000000000001
  GPT start and size :   1  0  3768256
  GPT partition name :   2  490053004f004800790062007200690064003100
  GPT partname local :   2  ISOHybrid1
  GPT partition GUID :   2  892c8c3c5015534296fdb0417be2c61f
  GPT type GUID      :   2  a2a0d0ebe5b9334487c068b6b72699c7
  GPT partition flags:   2  0x1000000000000001
  GPT start and size :   2  172  21716
  GPT partition path :   2  /images/efiboot.img
  GPT partition name :   3  490053004f004800790062007200690064003200
  GPT partname local :   3  ISOHybrid2
  GPT partition GUID :   3  892c8c3c5015534296fcb0417be2c61f
  GPT type GUID      :   3  005346480000aa11aa1100306543ecac
  GPT partition flags:   3  0x1000000000000001
  GPT start and size :   3  21888  45520
  GPT partition path :   3  /images/macboot.img

Note that the MBR partition table is not "protective" by consisting only
of one partition of type 0xEE. Thus the GPT is not valid, which is good
so, because the EFI system partition in GPT does not show the prescribed
Type GUID 28732ac11ff8d211ba4b00a0c93ec93b
aka C12A7328-F81F-11D2-BA4B-00A0C93EC93B.
(I wonder why this ISO does not show an Apple Partition Map. The xorrisofs
options shown in this thread should have caused one.)

For comparison a grub-mkrescue ISO for BIOS and EFI:

  ...
  El Torito catalog  : 1669  1
  El Torito cat path : /boot.catalog
  El Torito images   :   N  Pltf  B   Emul  Ld_seg  Hdpt  Ldsiz         LBA
  El Torito boot img :   1  BIOS  y   none  0x0000  0x00      4        3544
  El Torito boot img :   2  UEFI  y   none  0x0000  0x00   5760          84
  El Torito img path :   1  /boot/grub/i386-pc/eltorito.img
  El Torito img opts :   1  boot-info-table grub2-boot-info
  El Torito img path :   2  /efi.img
  System area options: 0x00004201
  System area summary: MBR protective-msdos-label grub2-mbr cyl-align-off GPT APM
  ISO image size/512 : 30848
  Partition offset   : 0
  MBR heads per cyl  : 64
  MBR secs per head  : 32
  MBR partition table:   N Status  Type        Start       Blocks
  MBR partition      :   1   0x00  0xee            1        30847
  GPT                :   N  Info
  GPT disk GUID      :      07f29bb153383349a5ecd605dcf5ebd6
  GPT entry array    :      20  176  separated
  GPT lba range      :      64  30802  30847
  GPT partition name :   1  4700610070003000
  GPT partname local :   1  Gap0
  GPT partition GUID :   1  07f29bb153383349a5e8d605dcf5ebd6
  GPT type GUID      :   1  a2a0d0ebe5b9334487c068b6b72699c7
  GPT partition flags:   1  0x1000000000000001
  GPT start and size :   1  64  272
  GPT partition name :   2  450046004900200062006f006f007400200070006100720074006900740069006f006e00
  GPT partname local :   2  EFI boot partition
  GPT partition GUID :   2  07f29bb153383349a5e9d605dcf5ebd6
  GPT type GUID      :   2  28732ac11ff8d211ba4b00a0c93ec93b
  GPT partition flags:   2  0x1000000000000001
  GPT start and size :   2  336  5760
  GPT partition path :   2  /efi.img
  GPT partition name :   3  48004600530050004c0055005300
  GPT partname local :   3  HFSPLUS
  GPT partition GUID :   3  07f29bb153383349a5ead605dcf5ebd6
  GPT type GUID      :   3  005346480000aa11aa1100306543ecac
  GPT partition flags:   3  0x1000000000000001
  GPT start and size :   3  6096  24104
  GPT partition name :   4  4700610070003100
  GPT partname local :   4  Gap1
  GPT partition GUID :   4  07f29bb153383349a5ebd605dcf5ebd6
  GPT type GUID      :   4  a2a0d0ebe5b9334487c068b6b72699c7
  GPT partition flags:   4  0x1000000000000001
  GPT start and size :   4  30200  600
  APM                :   N  Info
  APM block size     :      2048
  APM gap fillers    :      2
  APM partition name :   1  Gap0
  APM partition type :   1  ISO9660_data
  APM start and size :   1  16  1508
  APM partition name :   2  HFSPLUS_Hybrid
  APM partition type :   2  Apple_HFS
  APM start and size :   2  1524  6026
  APM partition name :   3  Gap1
  APM partition type :   3  ISO9660_data
  APM start and size :   3  7550  162

The Apple Partition Map (APM) marks the mount point of the internal HFS+
filesystem tree. If we are speaking of legacy, then this is the most
obsolete part of a grub-mkrescue ISO.

A description of the above listing format is put out by a run of
  xorriso -report_el_torito help -report_system_area help


Have a nice day :)

Thomas
_______________________________________________
devel mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxx
Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: https://lists.fedoraproject.org/archives/list/devel@xxxxxxxxxxxxxxxxxxxxxxx
Do not reply to spam on the list, report it: https://pagure.io/fedora-infrastructure




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Fedora Announce]     [Fedora Users]     [Fedora Kernel]     [Fedora Testing]     [Fedora Formulas]     [Fedora PHP Devel]     [Kernel Development]     [Fedora Legacy]     [Fedora Maintainers]     [Fedora Desktop]     [PAM]     [Red Hat Development]     [Gimp]     [Yosemite News]

  Powered by Linux