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

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



Hi all,

The ISO in question was in fact the same one mentioned (http://ftp.fr.debian.org/debian/dists/testing/main/installer-amd64/20150107/images/netboot/mini.iso).

I have copied the contents of efi.img to the FAT partition and it does boot on my EFI firmware now. Thank you!

On 01/27/2015 04:47 AM, Thomas Schmitt wrote:
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


--
Jack Truong
IT Specialist @ Engineering Computing
University of Waterloo (PHY-3019 x35147)
http://jacktruong.net/


Reply to: