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

  
 
  

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

NAME
     nbdkit-file-plugin - nbdkit file plugin

SYNOPSIS
      nbdkit file [file=]FILENAME
		  [fadvise=normal|random|sequential]
		  [reduce-memory-pressure=true]

      nbdkit file dir=DIRECTORY

      nbdkit file fd=FILE_DESCRIPTOR

      nbdkit file dirfd=FILE_DESCRIPTOR

DESCRIPTION
     "nbdkit-file-plugin" is a file serving plugin for nbdkit(1).

     It serves the named "FILENAME" over NBD.  Local block devices (eg.
     /dev/sda) may also be served.

     If you use the "dir" parameter the plugin works in a different mode where
     it serves files from the given "DIRECTORY".  The filename is chosen by the
     client sending an NBD export name.

     If you use the "fd" or "dirfd" parameter then you can pass the file de-
     scriptor of a single disk or a directory to the plugin, inherited from the
     parent process.  This can be useful where special permissions or capabili-
     ties are needed to open the file descriptor, or you want to run nbdkit in a
     sandboxed environment.

     The file is writable unless either the -r command line option, or nbd-
     kit-readonly-filter(1) is used.

PARAMETERS
     Exactly one of file, dir, fd or dirfd must be given.  This controls the
     mode of the plugin, either serving a single file, the files in a directory,
     a single file descriptor, or the files in the directory of the file de-
     scriptor.

     dir=DIRECTORY
	 (nbdkit aY 1.22, not Windows)

	 Serve all regular files and block devices located directly inside the
	 directory named "DIRECTORY", including those found by following sym-
	 bolic links.  Other special files in the directory (such as subdirecto-
	 ries, pipes, or Unix sockets) are ignored.

	 See "Serving multiple files and block devices" below.

     dirfd=FILE_DESCRIPTOR
	 (nbdkit aY 1.34, not Windows)

	 This is like the "dir=" option, but instead of specifying the directory
	 by name, the parent process should open the directory and pass this
	 file descriptor by inheritance to nbdkit.

	 See "Serving multiple files and block devices" below.

     fadvise=normal
     fadvise=random
     fadvise=sequential
	 (nbdkit aY 1.22, not Windows)

	 This optional flag hints to the kernel that you will access the file
	 normally, or in a random order, or sequentially.  The exact behaviour
	 depends on your operating system, but for Linux using "normal" causes
	 the kernel to read-ahead, "sequential" causes the kernel to read-ahead
	 twice as much as "normal", and "random" turns off read-ahead.	See also
	 posix_fadvise(2).

	 The default is "normal".

     fd=FILE_DESCRIPTOR
	 (nbdkit aY 1.34, not Windows)

	 The parameter is the number of a file descriptor.  Serve the file or
	 device already open on this file descriptor.  The file descriptor is
	 usually inherited from the parent process.

     [file=]FILENAME
	 Serve the file named "FILENAME".  A local block device name can also be
	 used here.  When this mode is used, the export name requested by the
	 client is ignored.

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

     [file=]\\.\C:
     [file=]\\.\Volume
     [file=]\\.\PhysicalDiskN
     [file=]\\.\CdRomN
	 (Windows only)

	 Serve the Windows volume specified by the device name.  See:
	 https://docs.microsoft.com/en-us/windows/win32/fileio/nam-
	 ing-a-file#win32-device-namespaces.

     reduce-memory-pressure=true
	 (nbdkit aY 1.22, not Windows)

	 If the file is very large and the plugin will read or write the whole
	 file, this can cause the file to be cached in memory (in the page cache
	 on Linux), causing other files and processes to be evicted, leading to
	 overall slow system performance and I/O storms.

	 If you know that the file will only be read/written once and will not
	 be needed afterwards (so keeping it in memory afterwards is pointless)
	 use "reduce-memory-pressure=true".  This causes reads and writes to
	 minimize use of the page cache.

	 The default is false, which uses the kernel's normal page cache strat-
	 egy.

	 See also "fadvise" above which can be used to hint the access pattern.

	 In nbdkit 1.22 - 1.44 this option was called "cache=none", but that
	 caused a lot of confusion for people used to qemu and kernel caching
	 modes, which are not related to this setting.

NOTES
   Serving multiple files and block devices
     Using "dir=DIRECTORY" (or "dirfd=DIRFD") you can serve all regular files
     and block devices located directly inside the directory named "DIRECTORY",
     including those found by following symbolic links.  Other special files in
     the directory (such as subdirectories, pipes, or Unix sockets) are ignored.

     When this mode is used, the file to be served is chosen by the export name
     passed by the client.  For security, when using directory mode, this plugin
     will not accept export names containing slash ("/").

     For example:

      $ ls -l /var/tmp/exports
      total 0
      -rw-r--r--. 1 rjones rjones 1048576 Dec 14 15:34 disk1
      -rw-r--r--. 1 rjones rjones 2097152 Dec 14 15:34 disk2
      lrwxrwxrwx. 1 rjones rjones	9 Dec 14 15:35 sda1 -> /dev/sda1
      $ nbdkit file dir=/var/tmp/exports

     will serve three exports called "disk1", "disk2" and "sda1".  The first two
     are regular files and the last is a block device.

     The NBD URIs of the three exports are:

     *	 "nbd://localhost/disk1"

     *	 "nbd://localhost/disk2"

     *	 "nbd://localhost/sda1"

     You can add or remove files or symbolic links from the directory while nbd-
     kit is running.

     To list exports, use nbdinfo(1) --list option, for example:

      $ nbdinfo --list nbd://localhost
      protocol: newstyle-fixed without TLS, using structured packets
      export="disk1":
	  export-size: 1048576 (1M)
	  uri: nbd://localhost:10809/disk1
      [etc]

     An NBD client can request a list of available exports using "NBD_OPT_LIST".
     For libnbd clients see nbd_opt_list(3).

     A client that requests the default export ("") will be rejected.  However,
     you can use nbdkit-exportname-filter(1) to adjust the default export as
     well as other transformations of export names.  For example to make
     /var/tmp/exports/disk1 be the default export:

      nbdkit file dir=/var/tmp/exports \
	     --filter=exportname default-export=disk1

   Optimizing for random or sequential access
     If you know in advance that the NBD client will access the file randomly or
     only sequentially then you can hint that to the kernel using:

      nbdkit file disk.img fadvise=random
      nbdkit file disk.img fadvise=sequential

     As described in the "PARAMETERS" section above, on Linux this disables or
     increases the amount of read-ahead that the kernel does.

   Files on tmpfs
     If you want to expose a file that resides on a file system known to have
     poor lseek(2) performance when searching for holes ("tmpfs" is known to be
     one such file system), you can use nbdkit-noextents-filter(1) to avoid the
     penalty of probing for holes.

   Plugin --dump-plugin output
     You can obtain extra information about how the file plugin was compiled by
     doing:

      nbdkit file --dump-plugin

     Some of the fields which may appear are listed below.  Note these are for
     information only and may be changed or removed at any time in the future.

     "file_block_size=yes"
	 If set, the plugin has support for getting the minimum and preferred
	 I/O size of block devices.

     "file_blkrotational=yes"
	 If set, the plugin has support for getting the rotational property of
	 block devices.

     "file_blksszget=yes"
     "file_blkzeroout=yes"
	 If both set, the plugin may be able to efficiently zero ranges of block
	 devices, where the driver and block device itself supports this.

     "file_blkdiscard=yes"
	 If set, the plugin may be able to efficiently trim ranges of block de-
	 vices, where the driver and block device itself supports this.

     "file_extents=yes"
	 If set, the plugin can read file extents.

     "file_falloc_fl_punch_hole=yes"
	 If set, the plugin may be able to punch holes (make sparse) files and
	 block devices.

     "file_falloc_fl_zero_range=yes"
	 If set, the plugin may be able to efficiently zero ranges of files and
	 block devices.

     "winfile=yes"
	 If present, this is the Windows version of the file plugin with reduced
	 functionality and some special Windows-only features, as noted in this
	 manual.

   Windows sparse files
     This plugin supports sparse files on Windows (with hole punching).  However
     for this to work the files must already have the sparse property, the plu-
     gin will not make existing files sparse.  Use the "fsutil sparse" command
     to control the sparseness property of files.

   Old "rdelay" and "wdelay" parameters.
     Before nbdkit supported filters (< 1.2) this plugin had extra parameters
     "rdelay" and "wdelay" to insert delays.  These parameters have been moved
     to nbdkit-delay-filter(1).  Modify the command line to add --filter=delay
     in order to use these parameters.

   Concatenating files
     To concatenate and export multiple files, use nbdkit-split-plugin(1).

DEBUG FLAG
     -D file.zero=1
	 This enables very verbose debugging of the NBD zero request.  This can
	 be used to tell if the file plugin is able to zero ranges in the file
	 or block device efficiently or not.

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

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

VERSION
     "nbdkit-file-plugin" first appeared in nbdkit 1.0.

SEE ALSO
     nbdkit(1), nbdkit-plugin(3), nbdkit-nfs-plugin(1), nbdkit-partitioning-plu-
     gin(1), nbdkit-split-plugin(1), nbdkit-tmpdisk-plugin(1), nbdkit-count-fil-
     ter(1), nbdkit-delay-filter(1), nbdkit-exportname-filter(1), nbd-
     kit-fua-filter(1), nbdkit-luks-filter(1), nbdkit-noextents-filter(1), nbd-
     kit-readonly-filter(1), nbdinfo(1).

AUTHORS
     Eric Blake

     Nir Soffer

     Richard W.M. Jones

COPYRIGHT
     Copyright Red Hat

LICENSE
     Redistribution and use in source and binary forms, with or without modifi-
     cation, 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 no-
	 tice, this list of conditions and the following disclaimer in the docu-
	 mentation 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 EX-
     PRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DIS-
     CLAIMED. IN NO EVENT SHALL RED HAT OR CONTRIBUTORS BE LIABLE FOR ANY DI-
     RECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SER-
     VICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
     CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABIL-
     ITY, 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 DAM-
     AGE.

nbdkit-1.46.2			   2026-08-30		   nbdkit-file-plugin(1)

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

home | help