[virt-tools-list] ANNOUNCE: nbdkit 1.12 - an NBD server toolkit with stable plugin API and permissive license

Richard W.M. Jones rjones at redhat.com
Wed Apr 10 13:05:57 UTC 2019

I’m pleased to announce the next stable release of nbdkit.  This
release concentrates on numerous feature enhancements - see the
release notes below.

NBD — Network Block Device — is a protocol for accessing Block Devices
(hard disks and disk-like things) over a Network.  nbdkit is a toolkit
for creating NBD servers.

The key features are:

 * 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,
   [new!] Rust, shell script or Tcl.
 * Filters can be stacked in front of plugins to transform the output.

    Clone source: https://github.com/libguestfs/nbdkit
Download tarball: http://download.libguestfs.org/nbdkit/1.12-stable/
 Other downloads: http://download.libguestfs.org/nbdkit/
 Fedora packages: https://koji.fedoraproject.org/koji/packageinfo?packageID=16469

Release notes:

New ‘ssh’ plugin which lets you turn any disk image on a remote Unix
server accessible by ssh into an NBD source.

New ‘rate’ filter for bandwidth-limiting connections.  Either single
connections or the whole server can be bandwidth-limited, and the
limit can be dynamically changed at runtime.

New ‘readahead’ filter improves performance when reading sequentially
from plugins with a high request overhead like curl.

New ‘linuxdisk’ plugin lets you create complete ext2, ext3 or ext4
filesystems in a GPT partitioned disk image, from a local directory.
This can be attached to existing Linux VMs or used to create new ones
from scratch.

New ‘noextents’ filter can make sparse disks appear fully allocated.

Plugins can now be written in the Rust programming language.

The old ‘xz’ plugin has been removed.  Use ‘nbdkit --filter=xz file
file.xz’ as a replacement.  This filter can be placed on top of other
plugins such as curl (for decompressing a remote web URL).

NBD_CMD_BLOCK_STATUS has been implemented allowing clients to query
which parts of the disk are allocated, holes or zeroes.  Plugins and
filters have been extended to supply this information in many cases.
This required adding minimal support for NBD protocol Structured
Replies, NBD_CMD_FLAG_REQ_ONE and NBD_CMD_FLAG_DF.  (Thanks to Eric
Blake for extensive help with this one.)

The ‘vddk’ plugin has been updated to VDDK 6.7, but now also works
back as far as VDDK 5.1.1.  It supports extents, flush and FUA.  Also
added: new flags single-link and unbuffered.  (Thanks to Martin

The line "All rights reserved." was removed from the license, with the
agreement of all nbdkit contributors.  Note this does not change the

‘nbdkit_error’ errors are printed in red when writing to the terminal,
making them much easier to see.

‘nbdkit_parse_size’ rejects negative values, eg. ‘nbdkit memory size=-100’
(Nikolay Ivanets).

The ‘curl’ plugin now supports cookies, password auth and proxies.  It
can also limit URLs to whitelisted protocols.  This makes it broadly
feature equivalent to and a replacement for the qemu curl block

The ‘partitioning’ plugin can now create MBR logical partitions.
Previously it only supported 4 MBR primary partitions and if you
wanted more than that you had to use GPT.

The ‘partition’ filter also supports MBR logical partitions.

The ‘python’ plugin creates plugins which are compatible with
Python >= 3.7.

Tests are now run under MALLOC_CHECK_=1 and MALLOC_PERTURB_=<random>.
This causes some tests to crash (silently) because of a shutdown race
which needs to be fixed.

Test shell scripts now have a generic ‘requires’ function to skip
tests if features are not present.

C99 type ‘bool’ is now used in most places where appropriate.

The protocol and connections code in the server has been split up
because the single file had grown very large.  (Thanks to Eric Blake
for helping with protocol issues).


Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
Fedora Windows cross-compiler. Compile Windows programs, test, and
build Windows installers. Over 100 libraries supported.

More information about the virt-tools-list mailing list