[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] Add HybridISO support for PyGrub2
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? 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? > Add a check to detech HybridISO files and fall back to unpartitioned > operation. > > Signed-off-by: Philipp Hahn <hahn@xxxxxxxxxxxxx> > --- a/tools/pygrub/src/pygrub > +++ b/tools/pygrub/src/pygrub > @@ -41,12 +41,16 @@ def enable_cursor(ison): > pass > > def is_disk_image(file): > + """Detect DOS partition table.""" > fd = os.open(file, os.O_RDONLY) > - buf = os.read(fd, 512) > + buf = os.read(fd, 0x8006) > os.close(fd) > > if len(buf) >= 512 and \ > struct.unpack("H", buf[0x1fe: 0x200]) == (0xaa55,): > + # HybridISO contains a DOS partition table for booting from USB > devices, but really is an ISO image > + if len(buf) >= 0x8006 and buf[0x8001:0x8006] == 'CD001': > + return False > return True > return False > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |