Re: FreeBSD boot from root pool larger than 1Tb/cannot read MOS/all block copies unavailable

From: Stefan Esser <se_at_FreeBSD.org>
Date: Wed, 27 Apr 2022 08:20:59 UTC
Am 27.04.22 um 02:10 schrieb Charles Sprickman:>> On Apr 26, 2022, at 10:10 AM,
Eugene M. Zheganin <eugene@zhegan.in> wrote:
>>
>> Hello,
>>
>> recently I found another server that was running 12.x and became unbootable because of the famous "cannot read MOS/all block copies unavailable/etc" gptzfsboot message which can be randomly displayed when boot blocks migrate beyond 1st Tb on a large root pool.
> 
> Is this documented somewhere? I’m pretty sure I have a number of servers that fit this description. How do boot blocks “migrate”?

Boot blocks on PCs are traditionally stored in the first few sectors
of the boot disk. But those are only used to load a loader that knows
about the actual file system format used, and the loader still relies
on BIOS functions to access the boot file system where the kernel
resides.

BIOS limits have hurt PC users over the years, and those limits have
always been only slightly increased, just enough to support common
disk sizes at the respective point time:

	https://tldp.org/HOWTO/Large-Disk-HOWTO-4.html

With UFS the kernel was typically loaded from the "a" partition, which
commonly was small and placed first on the disk. With ZFS you can have
a small boot pool (or base system pool) in a partition completely within
the range covered by the BIOS to create a somewhat similar layout. Else
ZFS may place parts of the kernel anywhere on a pool that may be much
larger than the BIOS call can address.

This is not a FreeBSD limit, it is a limit of the technology provided
by the PC platform and the functionality provided by the PC BIOS.

Regards, STefan