Archive for January 23rd, 2012
We did a minor kernel update on a large storage machine here today which runs FreeBSD 8.2 and to our surprise it failed to boot at the loader with “ZFS: i/o error – all block copies unavailable”.
After some digging we discovered that this was likely due to the fact that the BIOS only enumerates the first 12 disks and this machine has more than that in the root zpool which was a striped raidz2 volume. This in turn means that the bootcode cant complete and hence the machine can’t boot.
Our solution was to migrate the root fs off the raidz2 volume and to a mirrored volume which was on two disks which where accessible from the BIOS.
To do this we created a new zfs pool manually, copied the data using zfs send … | zfs restore .. then fixed the cache file by importing the pools with the following commands from a mfsbsd cdrom.
zpool import -R /mnt -o cachefile=/boot/zfs/zpool.cache tank zpool import -R /mnt2 -o cachefile=/boot/zfs/zpool.cache tank2 cp /boot/zfs/zpool.cache /mnt/boot/zfs/zpool.cache zpool set bootfs=tank/root tank
It would of course be nice if zfs warned or even prevented this.