Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
nbdkit-ondemand-plugin(1)	    NBDKIT	     nbdkit-ondemand-plugin(1)

NAME
       nbdkit-ondemand-plugin -	create filesystems on demand

SYNOPSIS
	nbdkit ondemand	dir=EXPORTSDIR [size=]SIZE [wait=true] [share=true]
			{ [type=ext4|xfs|vfat|...] [label=LABEL]
			  | command=COMMAND [VAR=VALUE ...] }

DESCRIPTION
       This is a plugin	for nbdkit(1) which creates persistent filesystems on
       demand.	Clients	may simply connect to the server, requesting a
       particular export name, and a new filesystem is created if it does not
       exist already.  Clients can also	disconnect and reconnect with the same
       export name and the same	filesystem will	still be available.
       Filesystems are stored in a directory on	the server, so they persist
       over server restarts.

       By default each export is locked	while it is in use by a	client,
       preventing two clients from accessing the same filesystem (which	would
       cause corruption).

       Similar plugins include nbdkit-file-plugin(1) which can serve a
       predefined set of exports (clients cannot create	more),
       nbdkit-tmpdisk-plugin(1)	which creates a	fresh temporary	filesystem for
       each client, and	nbdkit-linuxdisk-plugin(1) which exports a single
       filesystem from a local directory on the	server.

   Export names
       When a new export name is requested by a	client,	a sparse file of the
       same name is created in "dir=EXPORTSDIR"	on the server.	The file will
       be formatted with mkfs(8).  The size of the file	is currently fixed by
       the "size=SIZE" parameter, but we intend	to make	this
       client-configurable in future.  The filesystem type and label may also
       be specified, otherwise "ext4" and no label is used.

       Export names must be  "NAME_MAX"	(usually 255) bytes in length and must
       not contain certain characters including	"." at the start, and "/".
       There may be other limitations added in future.	Client requests	which
       do not obey these restrictions are rejected.  As	a special case,	export
       name "" is mapped to the	file name default.

   Security considerations
       You should only use this	in an environment where	you trust all your
       clients,	since clients can use this plugin to consume arbitrary amounts
       of disk space by	creating unlimited exports.  It	is therefore best to
       take steps to limit where clients can connect from using
       nbdkit-ip-filter(1), firewalls, or TLS client certificates.

   The command parameter
       Instead of running mkfs you can run an arbitrary	command	or shell
       script to create	the disk.

       The other parameters to the plugin are turned into shell	variables
       passed to the command.  For example "type" becomes the shell variable
       $type, etc.  Any	parameters you want can	be passed to the plugin	and
       will be turned into shell variables (not	only "type" and	"label")
       making this a very flexible method to create filesystems	and disks of
       all kinds.

       Two special variables are also passed to	the shell script fragment:

       $disk
	   The absolute	path of	the disk file.	This is	partially controlled
	   by the client so you	should quote it	carefully.  This file is not
	   pre-created,	the command must create	it for example using:

	    truncate -s	$size "$disk"

       $size
	   The virtual size in bytes.  This is the "size" parameter, converted
	   to bytes.  Note the final size served to the	client is whatever
	   disk	size "command" creates.

   Dead	client detection
       Clients which "go away" without disconnecting (such as clients which
       reboot) may cause exports to remain locked when they are	no longer
       used.  Practically this can cause problems such as the same client
       being unable to reconnect after a reboot.  To avoid this	you should
       enable keepalives to detect dead	clients.  Use the nbdkit --keepalive
       option, or for more fine-grained	control	see the	discussion of
       keepalives in nbdkit-service(1).

EXAMPLE
       Run the server like this:

	mkdir /var/tmp/exports
	nbdkit ondemand	dir=/var/tmp/exports 1G

       Clients can connect and create 1G ext4 filesystems on demand using
       commands	such as	these (note the	different export names):

	nbd-client server /dev/nbd0 -N export1
	mount /dev/nbd0	/mnt

	guestfish --format=raw -a nbd://localhost/export2 -m /dev/sda

	qemu-img info nbd:localhost:10809:exportname=export2

       On the server you would see two filesystems created:

	$ ls -l	/var/tmp/exports
	-rw-rw-r--. 1 rjones rjones 1073741824 Aug 13 21:40 export1
	-rw-rw-r--. 1 rjones rjones 1073741824 Aug 13 21:40 export2

       The plugin does not clean these up.  If they are	no longer needed then
       the server admin	should delete them (or use a tmp cleaner).

PARAMETERS
       command='COMMAND'
	   Instead of running mkfs(8) to create	the initial filesystem,	run
	   "COMMAND" (a	shell script fragment which usually must be quoted to
	   protect it from the shell).	See "The command parameter" above.

       dir=EXPORTSDIR
	   The directory where filesystems are saved.  When first using	this
	   plugin you should point this	to an empty directory.	When clients
	   connect, filesystems	are created here.

	   This	parameter is required.

       label=LABEL
	   Select the filesystem label.	 The default is	not set.

       share=true
	   If set, the export is not locked.  Two or more clients may connect
	   to the same export.	This usually results in	filesystem corruption
	   (if using a regular filesystem like ext4), so you have to use some
	   other means to guarantee exclusive access or	to ensure sharing is
	   safe.

       [size=]SIZE
	   Specify the virtual size of all of the filesystems.

	   If using "command", this is only a suggested	size.  The actual size
	   of the resulting disk will be the size of the disk created by
	   "command".

	   This	parameter is required.

	   "size=" prefix may be omitted in most cases.	 See "Magic
	   parameters" in nbdkit(1).

       type=FS
	   Select the filesystem type.	The default is "ext4".	Most
	   non-networked, non-cluster filesystem types supported by the
	   mkfs(8) command can be used here.

       wait=true
	   If set, if two clients try to connect at the	same time to the same
	   export then the second client will wait for the first to
	   disconnect.	The default behaviour is to reject the second client
	   with	the error message:

	    filesystem is locked by another client

	   This	setting	is sometimes useful if you are making repeated
	   connections and at the network level	the first connection does not
	   fully disconnect before the next connection starts.	This can also
	   happen as a side-effect of using "guestfish --ro" which opens two
	   NBD connections in quick succession.

	   If "share=true" then	locking	is not used and	the "wait" parameter
	   has no effect.

FILES
       $plugindir/nbdkit-ondemand-plugin.so
	   The plugin.

	   Use "nbdkit --dump-config" to find the location of $plugindir.

VERSION
       "nbdkit-ondemand-plugin"	first appeared in nbdkit 1.22.

SEE ALSO
       nbdkit(1), nbdkit-plugin(3), nbdkit-file-plugin(1),
       nbdkit-ip-filter(1), nbdkit-limit-filter(1),
       nbdkit-linuxdisk-plugin(1), nbdkit-memory-plugin(1),
       nbdkit-tmpdisk-plugin(1), nbdkit-service(1), nbdkit-tls(1), mkfs(8),
       mke2fs(8).

AUTHORS
       Richard W.M. Jones

COPYRIGHT
       Copyright Red Hat

LICENSE
       Redistribution and use in source	and binary forms, with or without
       modification, are permitted provided that the following conditions are
       met:

          Redistributions of source code must retain the above	copyright
	   notice, this	list of	conditions and the following disclaimer.

          Redistributions in binary form must reproduce the above copyright
	   notice, this	list of	conditions and the following disclaimer	in the
	   documentation and/or	other materials	provided with the
	   distribution.

          Neither the name of Red Hat nor the names of	its contributors may
	   be used to endorse or promote products derived from this software
	   without specific prior written permission.

       THIS SOFTWARE IS	PROVIDED BY RED	HAT AND	CONTRIBUTORS ''AS IS'' AND ANY
       EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
       IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
       PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RED HAT OR CONTRIBUTORS BE
       LIABLE FOR ANY DIRECT, INDIRECT,	INCIDENTAL, SPECIAL, EXEMPLARY,	OR
       CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
       SUBSTITUTE GOODS	OR SERVICES; LOSS OF USE, DATA,	OR PROFITS; OR
       BUSINESS	INTERRUPTION) HOWEVER CAUSED AND ON ANY	THEORY OF LIABILITY,
       WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
       OTHERWISE) ARISING IN ANY WAY OUT OF THE	USE OF THIS SOFTWARE, EVEN IF
       ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

nbdkit-1.46.0			  2026-03-04	     nbdkit-ondemand-plugin(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=nbdkit-ondemand-plugin&sektion=1&manpath=FreeBSD+Ports+15.0.quarterly>

home | help