[syslinux] "isolinux.bin missing or corrupt" when booting USB flash drive in old PC
Geert Stappers
stappers at stappers.nl
Wed Mar 22 22:38:22 PDT 2017
On Wed, Mar 22, 2017 at 03:18:44PM +0100, Thomas Schmitt via Syslinux wrote:
> Hi,
>
> > In theory, the geometry assumed in the MBR should
> > match the one assumed by the BIOS.
>
> To be exacting: The geometry assuming part of the MBR is the partition
> table, not the executable MBR code.
>
> Of course it would be nice if C/H/S was not such a brain damaged concept
> which has two semi-secret parameters. The geometry parameters are not
> recorded anywhere in the MBR. One can sometimes deduce them from comparing
> the LBA number with the CHS triple of a partition table address. But at
> latest if this guessing yields more than one valid result, a software has
> to choose or just make up two parameters of its own.
> Therefore everybody tries to use LBA adressing whenever possible.
>
> The partition table is not interpreted by isohdpfx.bin.
> This MBR code rather tries to do the right thing and asks the BIOS how
> it would translate LBA to C/H/S.
> But then - to my current theory - it confuses both and thus computes
> wrong numbers for head and sector in the correct cylinder.
>
>
> > The isohybrid tool (or the
> > equivalent code in xorriso) is using one CHS geometry, and it ends in
> > its MBR (h:64;s:32)
>
> It uses 64 heads/cyl and 32 sectors/head by default.
> It allows the user to choose other values by options -h and -s.
> If the effective cylinder size turns out to be less than 1/1024 of the
> image size, the cylinder count gets set to 1024.
>
> xorriso first tries to find larger cylinder sizes with 32 or 63
> sectors/head. I.e. at most 255 heads/cylinder and 63 sectors/head.
> Only if this does not suffice, it sets the cylinder count to 1023.
>
> But whatever the generating software does, the interpreting software
> is free to choose other parameters. That's why C/H/S is stupid.
>
>
> > While the image is less than 1GB, the physical device is close to 4GB,
> > so the BIOS is probably assuming a different geometry.
>
> It seems to assume a cylinder size of 63 * 32 * 512 = 1032192 bytes.
> 1024 of those cylinders are 1008 MiB. I have no idea from where it
> might get this info. Possibly it just makes it up.
>
>
> > BTW, many distros are still not setting the Head and Sector parameters
> > correctly for isohybrid, so they still use "64/32" while distributing
> > images of several GBs each.
>
> That's what utils/isohybrid.c does.
>
> After 8,422,686,720 bytes, even the range of 255/63 is exhausted.
>
>
> > I guess a word from hpa or mjg could help
>
> Yeah. I wonder what hpa thinks about my suspicion.
He has an explicit carbon copy, cc, of this mailinglist post.
> But Martin should be qualified too, to judge my findings and to produce
> a corrected isohdpfx.bin for testing, if he thinks that i am right.
Martin posted elsewhere in this thread "Thomas, you found the bug"
and provided a patch.
> ---------------------------------------------------------------------
>
> We still have to find out why David on the real old BIOS sees all zeros
> in the read block. Nevertheless there is hope for success on that BIOS
> only if the C/H/S addressing code of the MBR is free of bugs.
Contact David off-list, he did unsubscribe.
>
> Have a nice day :)
>
> Thomas
>
Groeten
Geert Stappers
--
Leven en laten leven
More information about the Syslinux
mailing list