Re: create zpool from zvols?

From: John Doherty <bsdlists_at_jld3.net>
Date: Fri, 25 Mar 2022 13:49:38 UTC
Thanks for the super-quick response. I guess I'll just use plain files 
then. I don't really want to use the zpools for anything, I just want an 
easy way to experiment with and demonstrate zpool create commands.

FWIW, the tunable does allow the "zpool create" command to work:

[root@ibex] # sysctl vfs.zfs.vol.recursive
vfs.zfs.vol.recursive: 1
[root@ibex] # zpool create ztest mirror /dev/zvol/zroot/zv{0,1}
[root@ibex] # zpool status ztest
   pool: ztest
  state: ONLINE
config:

	NAME                STATE     READ WRITE CKSUM
	ztest               ONLINE       0     0     0
	  mirror-0          ONLINE       0     0     0
	    zvol/zroot/zv0  ONLINE       0     0     0
	    zvol/zroot/zv1  ONLINE       0     0     0

errors: No known data errors

On Fri 2022-03-25 07:41 AM MDT -0600, <rincebrain@gmail.com> wrote:

> https://reviews.freebsd.org/D4998 added a knob to allow you to do this 
> even
> though it sometimes deadlocks, which is why it's off by default.
>
> It's a FreeBSD-only tunable.
>
> That tunable is still there in the post-OpenZFS FreeBSD, too, though 
> it's
> labeled "Allow zpools to use zvols as vdevs (DANGEROUS)", so it seems
> likely that it still can cause undesirable outcomes.
>
> - Rich
>
>
>
> On Fri, Mar 25, 2022 at 9:34 AM John Doherty <bsdlists@jld3.net> 
> wrote:
>
>> Hello, I am using ZFS on FreeBSD 13.0-RELEASE-p8. For experimentation
>> and demonstration, I would like to create zpools using zvols as the
>> underlying block devices.
>>
>> For example, I have these:
>>
>> [root@ibex] # zfs list -r -t volume zroot | grep zv
>> zroot/zv0              8.25G   832G       56K  -
>> zroot/zv1              8.25G   832G       56K  -
>>
>> This seems as if it would do what I want:
>>
>> [root@ibex] # zpool create -n ztest mirror /dev/zvol/zroot/zv{0,1}
>> would create 'ztest' with the following layout:
>>
>>         ztest
>>           mirror
>>             zvol/zroot/zv0
>>             zvol/zroot/zv1
>>
>> But when I try to actually do it, it doesn't work:
>>
>> [root@ibex] # zpool create ztest mirror /dev/zvol/zroot/zv{0,1}
>> cannot create 'ztest': no such pool or dataset
>>
>> FWIW, doing something similar on OmniOS works fine:
>>
>> [root@orca] # uname -srvp
>> SunOS 5.11 omnios-r151040-852962cae3 i386
>> [root@orca] # zfs create -V 2G rpool/zv0
>> [root@orca] # zfs create -V 2G rpool/zv1
>> [root@orca] # zpool create ztest mirror /dev/zvol/dsk/rpool/zv{0,1}
>> [root@orca] # zpool status ztest
>>    pool: ztest
>>   state: ONLINE
>>    scan: none requested
>> config:
>>
>>          NAME                         STATE     READ WRITE CKSUM
>>          ztest                        ONLINE       0     0     0
>>            mirror-0                   ONLINE       0     0     0
>>              /dev/zvol/dsk/rpool/zv0  ONLINE       0     0     0
>>              /dev/zvol/dsk/rpool/zv1  ONLINE       0     0     0
>>
>> errors: No known data errors
>>
>> I thought I had done this in the past. Am I doing something wrong? Am 
>> I
>> misremembering and this never worked?
>>
>> Using files created with truncate(1) rather zvols seems to work fine 
>> so
>> maybe that's what I did before. Not sure, it's been a long time since 
>> I
>> wanted to do something like this.
>>
>> Thanks for any enlightenment.