zpool remove not working for metadata special devices

Andriy Gapon avg at FreeBSD.org
Mon Jan 18 12:53:50 UTC 2021


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.

> On Sun, Dec 27, 2020 at 6:55 PM John Delisle <jdelisle at gmail.com> wrote:
> 
>> I have a pool of mirrors, and added a mirrored special device.  Although
>> documentation suggests it should be removable, I cannot get zpool to do so.
>>
>> All top-level vdevs are mirrors, and all have the same sector size and
>> ashift.  No raidz.
>>
>> ## Current 12.2 p2
>> root at jmdtest:/ # freebsd-version
>> 12.2-RELEASE-p2
>>
>> ## Disk info
>> root at jmdtest:/ # diskinfo /dev/da[2-9] /dev/da[0-9][0-9]
>> /dev/da2        512     274877906944    536870912       4096    0
>> 33418   255     63
>> /dev/da3        512     274877906944    536870912       4096    0
>> 33418   255     63
>> /dev/da4        512     274877906944    536870912       4096    0
>> 33418   255     63
>> /dev/da5        512     274877906944    536870912       4096    0
>> 33418   255     63
>> /dev/da6        512     274877906944    536870912       4096    0
>> 33418   255     63
>> /dev/da7        512     274877906944    536870912       4096    0
>> 33418   255     63
>> /dev/da8        512     274877906944    536870912       4096    0
>> 33418   255     63
>> /dev/da9        512     274877906944    536870912       4096    0
>> 33418   255     63
>> /dev/da10       512     274877906944    536870912       4096    0
>> 33418   255     63
>> /dev/da11       512     274877906944    536870912       4096    0
>> 33418   255     63
>> /dev/da12       512     68719476736     134217728       4096    0
>> 8354    255     63
>> /dev/da13       512     68719476736     134217728       4096    0
>> 8354    255     63
>>
>>
>> ## Create the pool:
>> zpool create nebula mirror da2 da3 mirror da4 da5 mirror da6 da7 mirror
>> da8 da9 mirror da10 da11
>>
>> ## Add the special mirror
>> zpool add nebula special mirror da12 da13
>>
>> ## zpool status
>> root at jmdtest:/ # zpool list -v nebula
>> NAME         SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP
>>  HEALTH  ALTROOT
>> nebula      1.30T  2.57G  1.30T        -         -     0%     0%  1.00x
>>  ONLINE  -
>>   mirror     254G   492M   254G        -         -     0%  0.18%
>>     da2         -      -      -        -         -      -      -
>>     da3         -      -      -        -         -      -      -
>>   mirror     254G   501M   254G        -         -     0%  0.19%
>>     da4         -      -      -        -         -      -      -
>>     da5         -      -      -        -         -      -      -
>>   mirror     254G   596M   253G        -         -     0%  0.22%
>>     da6         -      -      -        -         -      -      -
>>     da7         -      -      -        -         -      -      -
>>   mirror     254G   481M   254G        -         -     0%  0.18%
>>     da8         -      -      -        -         -      -      -
>>     da9         -      -      -        -         -      -      -
>>   mirror     254G   561M   253G        -         -     0%  0.21%
>>     da10        -      -      -        -         -      -      -
>>     da11        -      -      -        -         -      -      -
>> special         -      -      -         -      -      -
>>   mirror    63.5G  2.62M  63.5G        -         -     0%  0.00%
>>     da12        -      -      -        -         -      -      -
>>     da13        -      -      -        -         -      -      -
>> root at jmdtest:/ #
>>
>> ## Remove the special mirror
>> root at jmdtest:/ # zpool remove nebula mirror-5
>> cannot remove mirror-5: invalid config; all top-level vdevs must have the
>> same sector size and not be raidz.
>>
>> ## All mirrors, and all the same ashift:
>> root at jmdtest:/ # zdb -C | grep -e child -e ashift
>>     vdev_children: 6
>>         children[0]:
>>             ashift: 12
>>             children[0]:
>>             children[1]:
>>         children[1]:
>>             ashift: 12
>>             children[0]:
>>             children[1]:
>>         children[2]:
>>             ashift: 12
>>             children[0]:
>>             children[1]:
>>         children[3]:
>>             ashift: 12
>>             children[0]:
>>             children[1]:
>>         children[4]:
>>             ashift: 12
>>             children[0]:
>>             children[1]:
>>         children[5]:
>>             ashift: 12
>>             children[0]:
>>             children[1]:
>> root at jmdtest:/ #
>>
>> What am I doing wrong?


-- 
Andriy Gapon


More information about the freebsd-fs mailing list