Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 2 Aug 2016 16:35:23 +0300
From:      Andriy Gapon <avg@FreeBSD.org>
To:        "freebsd-hackers@freebsd.org" <freebsd-hackers@FreeBSD.org>
Subject:   on BIOS problems with disks larger than 2 TB
Message-ID:  <6cec427b-4df1-50f0-3014-a96e5f8210f5@FreeBSD.org>

next in thread | raw e-mail | index | archive | help

There are some BIOSes out there that do not properly support disks
larger than 2TB and cause boot problems if there is any data required
for boot at offsets larger than 2 TB (TiB, rather).

The most typical victim is the ZFS boot if a boot pool includes disk
areas beyond 2TB, because a kernel, or zfsloader or any configuration
files required by the loader may end up in those "inaccessible" areas.

It's obvious why 2TiB is a magic value here:
2^32 * 512 = 2^41 = 2 * 2^40
So the problem seems to happen when an LBA is treated as a 32-bit
integer (unsigned).

I happen to own one of affected systems and I have done some more
investigation.  As far as I can see, the only actual problem in my case
is that a disk size in 512b sectors is reported modulo 2^32 by INT 13h
AH=48h.  If I "fix up" the parameter, then everything else (i.e. actual
data reads) seems to work just fine after that.

I suspect that a large subclass of other problematic systems may have
exactly the same problem.

Does anyone have an idea about how we could auto-detect and and
auto-correct that problem?
Would that be worth the trouble at all?  Given the gradual de-orbiting
of BIOS systems.


-- 
Andriy Gapon



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6cec427b-4df1-50f0-3014-a96e5f8210f5>