zpool remove not working for metadata special devices
Andriy Gapon
avg at FreeBSD.org
Mon Jan 18 13:03:42 UTC 2021
On 2021-01-18 14:53, Andriy Gapon wrote:
> On 2020-12-28 05:04, John Delisle wrote:
>> To experiment, I've completed this same procedure using Ubuntu 20.10 (on
>> the same "hardware", both are identically configured VMs in Azure) .
>>
>> The steps above work fine with ZFS on Ubuntu, and I can successfully remove
>> both data vdev mirrors and the special vdev mirror. This makes me think my
>> syntax is correct at least.. but for whatever reason the exact same
>> procedure fails on FreeBSD (both removing a mirror and removing the special
>> mirror fail with the same error on FreeBSD).
>
> I don't think that you did anything wrong and the syntax is certainly
> correct. I can reproduce the problem as well.
> Note that if you insert a reboot between the add special and the remove,
> then the latter works fine, at least it does for me.
>
> It looks like there is an issue with recording of spa_min_ashift
> internal parameter when a special device is first added.
>
Actually, just creating a pool can create the min/max ashift discrepancy.
fbsd12# zpool create tank mirror vtbd1 vtbd2
fbsd12# dtrace -n 'spa_close:entry /pid == $target/ { this->spa =
args[0]; printf("min = %d, max = %d\n", this->spa->spa_min_ashift,
this->spa->spa_max_ashift); }' -c 'zpool status tank'
dtrace: description 'spa_close:entry ' matched 1 probe
pool: tank
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
vtbd1 ONLINE 0 0 0
vtbd2 ONLINE 0 0 0
errors: No known data errors
dtrace: pid 737 has exited
CPU ID FUNCTION:NAME
1 66818 spa_close:entry min = 9, max = 12
1 66818 spa_close:entry min = 9, max = 12
Both devices have 4K logical block size, so *the* ashift is 12.
But somehow spa_min_ashift got set to 9.
--
Andriy Gapon
More information about the freebsd-fs
mailing list