After upgrading a file server to FreeBSD 12.2 this last week we ran into an interesting issue where the boot loader immediately errored with the following message:
ZFS: can only boot from disk, mirror, raidz1, raidz2, and raidz3 vdevs vdev_init_from-nvlist: 5
It seemed to be a similar issue to this: https://reviews.freebsd.org/D20319 but not quite the same.
On reading more I ran across an article that described an issue where a ZFS array which formerly had ZIL (ZFS intenet log) disks but were removed left “hole” entries which the boot loader couldn’t handle.
Sure enough, that is what had happened on this array:
>>>> zdb -h zroot |grep zil 2015-04-14.16:05:14 zpool create -f -m /mnt zroot raidz2 /dev/gpt/root0.nop /dev/gpt/root1.nop /dev/gpt/root2.nop /dev/gpt/root3.nop /dev/gpt/root4.nop /dev/gpt/root5.nop log /dev/gpt/zil0.nop /dev/gpt/zil1.nop 2017-02-04.22:15:24 zpool remove zroot gpt/zil0 2017-02-04.22:15:35 zpool remove zroot gpt/zil1
You can see the ‘hole’ entry via this as well at the bottom:
>>> zdb -C
zroot:
version: 5000
name: 'zroot'
state: 0
txg: 38108897
pool_guid: 10082749584082723291
hostid: 780332240
hostname: 'xxxxxxxxxx'
com.delphix:has_per_vdev_zaps
hole_array[0]: 1
vdev_children: 2
vdev_tree:
type: 'root'
id: 0
guid: 10082749584082723291
children[0]:
type: 'raidz'
id: 0
guid: 3591333108397056969
nparity: 2
metaslab_array: 36
metaslab_shift: 37
ashift: 12
asize: 48009336324096
is_log: 0
create_txg: 4
com.delphix:vdev_zap_top: 416
children[0]:
type: 'disk'
id: 0
guid: 2053196431247621779
path: '/dev/gpt/root0'
phys_path: 'id1,enc@n3061686369656d30/type@0/slot@1/elmdesc@Slot_00/p2'
whole_disk: 1
DTL: 53
create_txg: 4
com.delphix:vdev_zap_leaf: 52
children[1]:
type: 'disk'
id: 1
guid: 14128656964775907171
path: '/dev/gpt/root1'
phys_path: 'id1,enc@n3061686369656d30/type@0/slot@2/elmdesc@Slot_01/p2'
whole_disk: 1
DTL: 48
create_txg: 4
com.delphix:vdev_zap_leaf: 44
children[2]:
type: 'disk'
id: 2
guid: 6203050471626383213
path: '/dev/gpt/root2'
phys_path: 'id1,enc@n3061686369656d30/type@0/slot@3/elmdesc@Slot_02/p2'
whole_disk: 1
DTL: 50
create_txg: 4
com.delphix:vdev_zap_leaf: 49
children[3]:
type: 'disk'
id: 3
guid: 16517585206204717828
path: '/dev/gpt/root3'
phys_path: 'id1,enc@n3061686369656d30/type@0/slot@4/elmdesc@Slot_03/p2'
whole_disk: 1
DTL: 54
create_txg: 4
com.delphix:vdev_zap_leaf: 51
children[4]:
type: 'disk'
id: 4
guid: 4119283768170704307
path: '/dev/gpt/root4'
phys_path: 'id1,enc@n3061686369656d30/type@0/slot@5/elmdesc@Slot_04/p2'
whole_disk: 1
DTL: 57
create_txg: 4
com.delphix:vdev_zap_leaf: 55
children[5]:
type: 'disk'
id: 5
guid: 11827461088804713021
path: '/dev/gpt/root5'
phys_path: 'id1,enc@n3061686369656d30/type@0/slot@6/elmdesc@Slot_05/p2'
whole_disk: 1
DTL: 56
create_txg: 4
com.delphix:vdev_zap_leaf: 41
children[1]:
type: 'hole'
id: 1
guid: 0
metaslab_array: 0
metaslab_shift: 24
ashift: 9
asize: 0
is_log: 0
is_hole: 1
features_for_read:
com.delphix:hole_birth
com.delphix:embedded_data
So it seems there is an issue with FreeBSD 12.2’s /boot/loader.
The solution was to roll back the /boot/loader file from 12.1, and make sure the boot block was using 11.2 /boot/gptzfsboot — newer than that other errors were thrown.
We’ll work on getting this setup and reproducible on a VM so we can open a PR on this soon, but in the mean time hopefully this helps someone!

Call 1-828-376-0458 to Work With Professionals Who Truly Understand FreeBSD
A-Team Systems is a proud supporter of the FreeBSD Foundation and many of our administrators are direct project contributors.