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

Bug#776317: Jessie RC1 amd64 mini image missing efi bootloader



Hi,

Summary:

There are two EFI System Partitions in mini.iso.
The one for booting from USB stick or qemu -hdb is indeed empty.

One could try whether it helps to copy the files from the FAT
image /boot/grub/efi.img in the ISO to MBR partition 2:

- Put mini.iso onto a USB stick /dev/sdb or other hard disk device

    dd if=mini.iso of=/dev/sdb

- Mount the ISO image

    mount -o loop mini.iso /mnt/iso

- Mount the FAT filesystem inside /mnt/iso/boot/grub/efi.img

    mount -o loop /mnt/iso/boot/grub/efi.img /mnt/fat_iso

- Mount the FAT filesystem in MBR partition 2 of the USB stick

    mount /dev/sdb2 /mnt/fat

- Copy from efi.img into partition 2 of the USB stick:

    cp -a /mnt/fat_iso/* /mnt/fat

- Check for sucessful copy:

    find /mnt/fat

  should yield

    /mnt/fat
    /mnt/fat/efi
    /mnt/fat/efi/boot
    /mnt/fat/efi/boot/bootx64.efi

- Unmount what you mounted:

    umount /mnt/fat_iso /mnt/fat /mnt/iso 

- Try whether the stick boots via EFI.
    
---------------------------------------------------------------
Details:

Cyril Brulebois wrote:
> I don't know much about EFI Partition etc. therefore I'm not
> sure how they're related to an ISO9660 image. :/

mini.iso and debian-7*-amd64-netinst.iso differ in this aspect.

In Debian amd64 netinst, the EFI System Partition is a data file
inside the ISO filesystem which contains a FAT filesystem image.
In this FAT image there are the files which EFI will use for booting.
Debian has GRUB2 boot loader equipment in there.
The block address and size of the EFI partition is published by
an entry in the El Torito boot catalog, by a partition table entry
in the MBR, by a partition table entry in GPT, and by a (probably
useless) entry in Apple Partition Map.

Inspecting mini.iso

  http://ftp.fr.debian.org/debian/dists/testing/main/installer-amd64/20150107/images/netboot/mini.iso

by xorriso-1.3.8 yields:

  Volume id    : 'ISOIMAGE'
  El Torito catalog  : 59  1
  El Torito cat path : /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        8959
  El Torito boot img :   2  UEFI  y   none  0x0000  0x00    832        9205
  El Torito img path :   1  /isolinux.bin
  El Torito img opts :   1  boot-info-table isohybrid-suitable
  El Torito img path :   2  /boot/grub/efi.img
  System area options: 0x00000302
  System area summary: MBR isohybrid cyl-align-all
  ISO image size/512 : 44332
  Partition offset   : 0
  MBR heads per cyl  : 64
  MBR secs per head  : 32
  MBR partition table:   N Status  Type        Start       Blocks
  MBR partition      :   1   0x80  0x17            0        45056
  MBR partition      :   2   0x00  0x01        45056        12288
  
So we have no GPT and no (probably useless) APM here.
There are two EFI partitions exposed.
One is the data file /boot/grub/efi.img of the ISO filesystem
pointed to by the El Torito boot catalog.
The other is an appended blob, marked by MBR partition 2.
(The partition type 0x01 is questionable.)

One can extract them by:

  mount -o loop mini.iso /mnt/iso
  cp /mnt/iso/boot/grub/efi.img eltorito_efi.img

  dd if=mini.iso bs=512 skip=45056 count=12288 of=mbr_efi.img

Both files differ heavily in size

  -r--r--r-- 1 thomas thomas  425984 2015-01-27 09:59 eltorito_efi.img
  -rw-r--r-- 1 thomas thomas 6291456 2015-01-27 10:00 mbr_efi.img

Inspecting both:

  $ mount -o loop eltorito_efi.img /mnt/fat
  $ find /mnt/fat
  /mnt/fat
  /mnt/fat/efi
  /mnt/fat/efi/boot
  /mnt/fat/efi/boot/bootx64.efi
  $ umount /mnt/fat
  $ mount -o loop mbr_efi.img /mnt/fat
  $ find /mnt/fat
  /mnt/fat
  $

So the El Torito advertised partition contains files,
whereas the MBR advertised partition has an empty filesystem.
Probably mini.iso will boot via EFI from CD/DVD/BD resp. qemu -cdrom,
but not from USB stick resp. qemu -hdb.
The presence of an isohybrid MBR will allow booting via BIOS emulation.

---------------------------------------------------------------

For comparison the boot anatomy of a amd64 netinst ISO:

  $ xorriso-1.3.8 -indev debian-7.7.0-amd64-netinst.iso \
                  -report_el_torito plain -report_system_area plain
  ...
  Volume id    : 'Debian 7.7.0 amd64 1'
  El Torito catalog  : 847  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         848
  El Torito boot img :   2  UEFI  y   none  0x0000  0x00    896         860
  El Torito img path :   1  /isolinux/isolinux.bin
  El Torito img opts :   1  boot-info-table isohybrid-suitable
  El Torito img path :   2  /boot/grub/efi.img
  System area options: 0x00000102
  System area summary: MBR isohybrid cyl-align-on GPT APM
  ISO image size/512 : 454656
  Partition offset   : 0
  MBR heads per cyl  : 64
  MBR secs per head  : 32
  MBR partition table:   N Status  Type        Start       Blocks
  MBR partition      :   1   0x80  0x00            0       454656
  MBR partition      :   2   0x00  0xef         3440          896
  MBR partition path :   2  /boot/grub/efi.img
  GPT                :   N  Info
  GPT disk GUID      :      a0093564c5a7464b90530645ae2a43b6
  GPT entry array    :      12  208  overlapping
  GPT lba range      :      64  454602  454655
  GPT partition name :   1  490053004f00480079006200720069006400
  GPT partname local :   1  ISOHybrid
  GPT partition GUID :   1  a0093564c5a7464b90510645ae2a43b6
  GPT type GUID      :   1  a2a0d0ebe5b9334487c068b6b72699c7
  GPT partition flags:   1  0x1000000000000001
  GPT start and size :   1  0  454600
  GPT partition name :   2  490053004f004800790062007200690064003100
  GPT partname local :   2  ISOHybrid1
  GPT partition GUID :   2  a0093564c5a7464b90500645ae2a43b6
  GPT type GUID      :   2  a2a0d0ebe5b9334487c068b6b72699c7
  GPT partition flags:   2  0x1000000000000001
  GPT start and size :   2  3440  896
  GPT partition path :   2  /boot/grub/efi.img
  APM                :   N  Info
  APM block size     :      2048
  APM gap fillers    :      0
  APM partition name :   1  EFI
  APM partition type :   1  Apple_HFS
  APM start and size :   1  860  224
  APM partition path :   1  /boot/grub/efi.img

The file /boot/grub/efi.img contains similar stuff as
the El Torito EFI partition of mini.iso :

  $ mount -o loop debian-7.7.0-amd64-netinst.iso /mnt/iso
  $ mount -o loop /mnt/iso/boot/grub/efi.img /mnt/fat
  $ find /mnt/fat
  /mnt/fat
  /mnt/fat/efi
  /mnt/fat/efi/boot
  /mnt/fat/efi/boot/bootx64.efi


Note that all boot entrys for EFI point to the same file
/boot/grub/efi.img inside the ISO filesystem.
Partition editors hate this structure, though, because it
represents overlapping (nested) partitions.
An alternative is the product of GRUB2 script grub-mkrescue.
Its partitions do not overlap (at the price that none of
them represents a mountable ISO filesystem).


Have a nice day :)

Thomas


Reply to: