ANNOUNCE: nbdkit 1.18 - high performance NBD server

Richard W.M. Jones rjones at
Thu Feb 27 16:05:06 UTC 2020

I'm pleased to announce the release of nbdkit 1.18, a high performance
plugin-based Network Block Device (NBD) server.

Key features of nbdkit:

 * Multithreaded NBD server written in C with good performance.
 * Minimal dependencies for the basic server.
 * Liberal license (BSD) allows nbdkit to be linked to proprietary
   libraries or included in proprietary code.
 * Well-documented, simple plugin API with a stable ABI guarantee.
   Lets you export “unconventional” block devices easily.
 * You can write plugins in C, Lua, Perl, Python, OCaml, Ruby, Rust,
   shell script or Tcl.
 * Filters can be stacked in front of plugins to transform the output.



Release notes (

       These are the release notes for nbdkit stable release 1.18.  This
       describes the major changes since 1.16.

       nbdkit 1.18.0 was released on 27th February 2020.

       There were no security issues found.  All past security issues and
       information about how to report new ones can be found in

       New nbdkit-eval-plugin(1) lets you write a plugin entirely on a single
       command line.  It is similar to nbdkit-sh-plugin(3).

       nbdkit-ext2-plugin(1) is deprecated and will be removed in the next
       release after this one (nbdkit 1.20).  As a replacement use
       nbdkit-ext2-filter(1) like this:

        nbdkit --filter=ext2 file fs.img ext2file=/disks/disk.raw

       nbdkit-python-plugin(3) now offers a version 2 API which avoids copying
       the data buffer, improving performance.  The original protocol (now
       retrospectively called version 1) is still supported for backwards
       compatibility.  The version 1 protocol was also enhanced to support the
       buffer protocol for the pread method, and memoryview for pwrite,
       improving performance by reducing copies (Nir Soffer).

       The Python plugin now prints readable stack traces when an exception is
       thrown (Nir Soffer).

       New methods implemented in the Python plugin: cache, can_cache,
       can_zero, can_fast_zero, can_multi_conn, can_fua.

       In nbdkit-curl-plugin(1), new options "cainfo" and "capath" (Wiktor

       nbdkit-split-plugin(1) now supports extents (Eric Blake).

       In nbdkit-vddk-plugin(1), "file=" is now a magic config key, meaning it
       can be omitted in most circumstances (Eric Blake).

       The VDDK plugin now no longer needs $LD_LIBRARY_PATH to be set.  The
       correct library load path is automatically inferred from the "libdir"
       parameter (Eric Blake).

       Verbose messages about calls to VDDK functions Read and Write can now
       be suppressed by setting -D vddk.datapath=0.

       New nbdkit-ext2-filter(1), which replaces the deprecated
       nbdkit-ext2-plugin.  This filter allows you to read and write files
       inside ext2, ext3 or ext4 filesystems.  The new filter has the same
       features as the plugin, and one enhancement: optionally the name of the
       file to serve can be picked from the client-supplied exportname.  The
       old plugin will be removed in nbdkit 1.20 (Eric Blake).

       New nbdkit-extentlist-filter(1) lets you specify a static list of
       extents from a file which can be placed on top of plugins which don't
       export extent information.

       New nbdkit-ip-filter(1) lets you allow and deny incoming connections by
       client IP address, similar to TCP wrappers or a firewall.

       New nbdkit-nofilter-filter(1) is a null filter, used for testing.

       The stats filter now collects time elapsed per operation, per operation
       and total rates, and adds stats for the flush method.  The output is
       shown in human sizes making it easier to understand.  (Nir Soffer).

       New --swap option which allows nbdkit to be safely used to serve swap
       space to the same machine.

       Debug flags (-D) can now be applied to the server core (using
       -D nbdkit.*).  Underscores in debug flags can now be replaced by dots,
       allowing a kind of namespacing.  Debug flags which are not consumed now
       no longer give an error, so you can use them without needing to detect
       if the plugin supports them.  New server debug flags
       -D nbdkit.backend.controlpath=0 and -D nbdkit.backend.datapath=0 were
       added to suppress some very verbose messages when verbose mode is

       There is a new ".get_ready" method which is called after
       ".config_complete" and before the server forks or changes directory.
       It is the last chance to do any global preparation that is needed to
       serve connections.  Plugins have previously done this work in
       ".config_complete", but by splitting this into a new method it makes
       the API clearer.  (Note that existing plugins may continue to use
       ".config_complete" for this work if they prefer.)

       There is a new ".preconnect" method available which is called just
       after the client makes a connection but before any NBD negotiation or
       TLS authentication is done.  It can be used for early whitelisting or
       rate limiting of connections, and in particular is used by the new

   Bug fixes
       In nbdkit-curl-plugin(1), "CURLINFO_CONTENT_LENGTH_DOWNLOAD_T" is used
       (if available) so that file sizes up to 63 bits should now work on all
       platforms (Pino Toscano and Adrian Ambrożewicz).

       nbdkit is now compatible with OCaml 4.10.

       nbdkit-memory-plugin(1) now supports "size=0" (Eric Blake).

       Plugins which were actually added in nbdkit 1.0.0 are now documented as
       such properly.

       Improved methods for probing plugins and filters are documented in

       Old plugins from nbdkit 1.0, 1.2, 1.8 and 1.12 are now bundled with the
       nbdkit sources and tested to try to ensure that they do not
       accidentally regress.  Note these are included as binary blobs.  See
       tests/old-plugins/README for more information about this, including how
       to delete these tests.

       Various tests, especially ones which rely on timeouts, have been made
       more stable so they should not fail on slow or overloaded machines.

       Many tests now use libnbd and nbdsh (instead of libguestfs and
       guestfish) as the test client.  This should improve the performance of
       the tests for most people.

       The --vsock option (added in nbdkit 1.16) can now be tested if the host
       is running Linux ≥ 5.6 (Stefano Garzarella).

       You can use "./configure --disable-nbd-plugin" to completely disable
       the NBD plugin.

       The automake feature "subdir-objects" is no longer used, which may
       improve compatibility on platforms with ancient and buggy automake
       (RHEL 7 being one such platform).

       The explicit connection parameter passed around many functions in the
       server is now fetched from thread-local storage.

       The server no longer calls the finalize method if prepare fails.  Also
       failing to reopen the plugin from nbdkit-retry-filter(1) no longer
       hangs (Eric Blake).

       "git.orderfile" was enhanced to make patches easier to read (Eric

       Internal calls to methods like get_size, can_write will now no longer
       produce debug messages if the data is simply being returned from the
       internal cache (but calls into the plugin are still logged).


       Authors of nbdkit 1.18:

       Adrian Ambrożewicz
           (1 commit)

       Eric Blake
           (30 commits)

       Wiktor Gołgowski
           (1 commit)

       Richard W.M. Jones
           (130 commits)

       Nir Soffer
           (11 commits)

       Pino Toscano
           (1 commit)

Richard Jones, Virtualization Group, Red Hat
Read my programming and virtualization blog:
virt-builder quickly builds VMs from scratch

More information about the virt-tools-list mailing list