Re: [Xen-devel] [PATCH] Add HybridISO support for PyGrub2

Tim Deegan
Tue, 25 Oct 2011 09:51:17 -0000

At 10:17 +0100 on 25 Oct (1319537858), Ian Campbell
wrote:
> On Tue, 2011-10-25 at 09:56 +0100, Philipp Hahn wrote:
> > grub-mkrescue internally uses xorriso, which generates a
> > so-called "hybrid ISO": The ISO images also contains a DOS
partition table,
> > which allows the identical ISO file to be stored on an USB stick for
booting
> > from it. This breaks PyGrub, since it (wrongly) detects the DOS
partition
> > table and uses the first partition instead of the complete ISO file.
>
> Is the problem here that, having detected a DOS partition, pygrub is
> then unwilling to accept that the partition contains an ISO9660 file
> system?

The problem is that since the disk has a valid MBR partition table,
pygrub tries all the partitions in that but _doesn''t_ try the whole
device (as it would if it couldn''t find an MBR).

> Or is it that the DOS partition table covers something other
> than the ISO9660 data? Where does the kernel we want to boot actually
> live?
>
> Is there some reference to the layout of an hybridiso? i.e. what is the
> significance on 0x8006? What are the chances of false positives?

Looking for "\001CD001" at offset 0x8000 is a pretty good way to
identify an ISO9660 image (e.g. I think that''s how magic(5) does it).
This patch doesn''t _quite_ do that, and in any case this is the wrong
place to do it.  The right fix to have get_partition_offsets() detect
ISO9660 images and add ''[0]'' to whatever else it comes up
with.

Cheers,

Tim.