Date: Wed, 3 Jan 1996 13:46:49 -0700 (MST) From: Terry Lambert <terry@lambert.org> To: joerg_wunsch@uriah.heep.sax.de Cc: freebsd-hackers@FreeBSD.ORG Subject: Re: HELP!!! THIS IS AN EMERGENCY (fwd) Message-ID: <199601032046.NAA15501@phaeton.artisoft.com> In-Reply-To: <199601030846.JAA19346@uriah.heep.sax.de> from "J Wunsch" at Jan 3, 96 09:46:12 am
next in thread | previous in thread | raw e-mail | index | archive | help
> > > problem. This system gets most of its real stuff over NFS so a small disk > > > was used. I was careful to get both Boot partitions under the 500M limit. > > > > Right. See above. > > > > The 500M limit comes from the BSD inability to talk to the controller > > using an LBA adressing mechanism. The BSD *does* see the OnTrack and > > do the 64 sector offsetting. > > BSD does not have a 500 MB limit. It can speak whatever the hardware > allows for, this is c<=65535, h<=15, s<=255. For disks that are used > in a BIOS environment as well, the `s' limit is 63 however. This > would still account for 65536*16*31 = 32505856 blocks, or 15872 MB. c = 10 bits = 2^10 = 1024. Not 65536. The missing 6 bits that you added in are 1024 * 2^5 and 2^n = 32 for h = 0..31 (your n is too small by one bit). The INT 21 interface is very specifically c:10/h:6/s:8. Or 8Gig for a maxed out 24 bit value. But since IDE is and extension of ISA, you get 2^16 * 512 or 33M. Then cluster addressing is used in the INT 21 interface to shove it up; the limit there become 2G for the mak cluster size of 32k. DOS claims to operate with a cluster size of 64k, but the max transfer on a write with a 16 bit count is 64k, and they steal a write of 0 to mean a file truncation instead of a full 64k, so it is only feasable to do a single atomic 2^n transfer for n<=15, not n<=16. Thus DOS partitions are limited to 2G at the FAT/INT 21 cluster addressing interface. Hence the 4 partition limit in the DOS partition table. And, indeed, 2^16 * 512 * 16 (4 bits) == 536870912 (500M). The BSD limit I was speaking of is imposed by the second stage boot loader using the INT 13 interface on an INT 13 interface without an understanding of EIDE (or better, ATA-2) LBA mechanisms. It must be able to load the kernel, which may require accessing any sector in the 'a' slice. Additionally, if BAD144 bad block remapping is enabled, it must be able to access the bad block table, meaning you must put all of the BSD partition under the 1024 cylinder limit so that the bad block table (which I maintain should be located after slice 'a' so it can be expanded into slice 'b', stealing from your swap, as necessary) can be accessed by BIOS. Terry Lambert terry@lambert.org --- Any opinions in this posting are my own and not those of my present or previous employers.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199601032046.NAA15501>