1nbdkit(1) NBDKIT nbdkit(1)
2
3
4
6 nbdkit - toolkit for creating Network Block Device (NBD) servers
7
9 nbdkit [-4|--ipv4-only] [-6|--ipv6-only]
10 [-D|--debug PLUGIN|FILTER|nbdkit.FLAG=N]
11 [--exit-with-parent] [-e|--exportname EXPORTNAME]
12 [--filter=FILTER ...] [-f|--foreground]
13 [-g|--group GROUP] [-i|--ipaddr IPADDR]
14 [--log=stderr|syslog|null] [--mask-handshake=MASK]
15 [-n|--newstyle] [--no-sr] [-o|--oldstyle]
16 [-P|--pidfile PIDFILE] [-p|--port PORT]
17 [-r|--readonly] [--run 'COMMAND ARGS ...']
18 [--selinux-label=LABEL] [-s|--single] [--swap]
19 [-t|--threads THREADS] [--tls=off|on|require]
20 [--tls-certificates=/path/to/certificates]
21 [--tls-psk=/path/to/pskfile] [--tls-verify-peer]
22 [-U|--unix SOCKET|-] [-u|--user USER]
23 [-v|--verbose] [--vsock]
24 PLUGIN [[KEY=]VALUE [KEY=VALUE [...]]]
25
26 nbdkit --dump-config
27
28 nbdkit PLUGIN --dump-plugin
29
30 nbdkit --help
31
32 nbdkit [-V|--version]
33
35 Network Block Device (NBD) is a network protocol for accessing block
36 devices over the network. Block devices are hard disks and things that
37 behave like hard disks such as disk images and virtual machines.
38
39 nbdkit is both a toolkit for creating NBD servers from “unconventional”
40 sources, and the name of an NBD server. nbdkit ships with many plugins
41 for performing common tasks like serving local files.
42
43 Plugins and filters
44 nbdkit is different from other NBD servers because you can easily
45 create new Network Block Device sources by writing a few glue
46 functions, possibly in C, or perhaps in a high level language like Perl
47 or Python. The liberal licensing of nbdkit is meant to allow you to
48 link nbdkit with proprietary libraries or to include nbdkit in
49 proprietary code.
50
51 If you want to write your own nbdkit plugin you should read
52 nbdkit-plugin(3).
53
54 nbdkit also has a concept of filters which can be layered on top of
55 plugins. Several filters are provided with nbdkit and if you want to
56 write your own you should read nbdkit-filter(3).
57
59 Basic file serving
60 • Serve file disk.img on port 10809 using nbdkit-file-plugin(1), and
61 connect to it using guestfish(1):
62
63 nbdkit file disk.img
64 guestfish --rw --format=raw -a nbd://localhost
65
66 • Serve file disk.img on port 10809, requiring clients to use
67 encrypted (TLS) connections:
68
69 nbdkit --tls=require file disk.img
70
71 Other nbdkit plugins
72 • Create a small disk containing test patterns using
73 nbdkit-data-plugin(1):
74
75 nbdkit data ' ( 0x55 0xAA )*2048 '
76
77 • Forward an NBD connection to a remote server over HTTPS or SSH
78 using nbdkit-curl-plugin(1) or nbdkit-ssh-plugin(1):
79
80 nbdkit -r curl https://example.com/disk.img
81
82 nbdkit ssh host=example.com /var/tmp/disk.img
83
84 • Create a sparse 1 terabyte RAM disk using nbdkit-memory-plugin(1)
85 and use it as a loop device (nbdkit-loop(1)):
86
87 nbdkit memory 1T
88 nbd-client localhost /dev/nbd0
89
90 • Create a floppy disk image containing files from a local directory
91 using nbdkit-floppy-plugin(1):
92
93 nbdkit floppy dir/
94
95 Combining plugins and filters
96 • Serve only the first partition from compressed disk image
97 disk.img.xz, combining nbdkit-partition-filter(1),
98 nbdkit-xz-filter(1) and nbdkit-file-plugin(1).
99
100 nbdkit --filter=partition --filter=xz file disk.img.xz partition=1
101
102 To understand this command line:
103
104 plugin name and plugin parameter
105 │
106 ┌───────┴──────┐
107 │ │
108 nbdkit --filter=partition --filter=xz file disk.img.xz partition=1
109 │ │ │
110 └──────────────┴────┬─────────────────────┘
111 │
112 filters and filter parameter
113
114 • Create a scratch, empty nbdkit device and inject errors and delays,
115 for testing clients, using nbdkit-memory-plugin(1),
116 nbdkit-error-filter(1) and nbdkit-delay-filter(1):
117
118 nbdkit --filter=error --filter=delay memory 100M \
119 error-rate=10% rdelay=1 wdelay=1
120
121 Writing plugins in shell script
122 • Write a simple, custom plugin in shell script using
123 nbdkit-sh-plugin(3):
124
125 nbdkit sh - <<'EOF'
126 case "$1" in
127 get_size) echo 1M ;;
128 pread) dd if=/dev/zero count=$3 iflag=count_bytes ;;
129 *) exit 2 ;;
130 esac
131 EOF
132
133 • The same example as above can be written entirely on the command
134 line using nbdkit-eval-plugin(1):
135
136 nbdkit eval get_size='echo 1M' \
137 pread='dd if=/dev/zero count=$3 iflag=count_bytes'
138
139 Display information
140 Display information about nbdkit or a specific plugin:
141
142 nbdkit --help
143 nbdkit --version
144 nbdkit --dump-config
145 nbdkit example1 --help
146 nbdkit example1 --dump-plugin
147
149 --help
150 Display brief command line usage information and exit.
151
152 -4
153 --ipv4-only
154 -6
155 --ipv6-only
156 When a non-numeric argument is passed to the -i option (such as a
157 Fully Qualified Domain Name, or a host name from "/etc/hosts"),
158 restrict the name resolution to IPv4 or IPv6 addresses.
159
160 When the -i option is omitted, listen on only the IPv4 or IPv6
161 address of all interfaces (0.0.0.0 or "::", respectively).
162
163 When both -4 and -6 options are present on the command line, the
164 last one takes effect.
165
166 -D PLUGIN.FLAG=N
167 -D FILTER.FLAG=N
168 --debug PLUGIN.FLAG=N
169 --debug FILTER.FLAG=N
170 Set the plugin or filter Debug Flag called "FLAG" to the integer
171 value "N". See "Debug Flags" in nbdkit-plugin(3).
172
173 -D nbdkit.FLAG=N
174 --debug nbdkit.FLAG=N
175 (nbdkit ≥ 1.18)
176
177 Set the nbdkit server Debug Flag called "FLAG" to the integer value
178 "N". See "SERVER DEBUG FLAGS" below.
179
180 --dump-config
181 Dump out the compile-time configuration values and exit. See
182 nbdkit-probing(1).
183
184 --dump-plugin
185 Dump out information about the plugin and exit. See
186 nbdkit-probing(1).
187
188 --exit-with-parent
189 If the parent process exits, we exit. This can be used to avoid
190 complicated cleanup or orphaned nbdkit processes. There are some
191 important caveats with this, see "EXIT WITH PARENT" in
192 nbdkit-captive(1).
193
194 An alternative to this is "CAPTIVE NBDKIT" in nbdkit-captive(1).
195
196 This option implies --foreground.
197
198 -e EXPORTNAME
199 --export=EXPORTNAME
200 --export-name=EXPORTNAME
201 --exportname=EXPORTNAME
202 Set a preferred exportname to expose in the shell environment
203 created during --run. The use of this option without --run has no
204 effect. This option does not change what nbdkit advertises as a
205 server, but can aid in writing a captive client that wants to
206 access particular content from a plugin that differentiates content
207 based on the client's choice of export name.
208
209 If not set, the --run environment is set to access the default
210 exportname "" (empty string).
211
212 --filter=FILTER
213 Add a filter before the plugin. This option may be given one or
214 more times to stack filters in front of the plugin. They are
215 processed in the order they appear on the command line. See
216 "FILTERS" and nbdkit-filter(3).
217
218 -f
219 --foreground
220 --no-fork
221 Don't fork into the background.
222
223 -g GROUP
224 --group=GROUP
225 Change group to "GROUP" after starting up. A group name or numeric
226 group ID can be used.
227
228 The server needs sufficient permissions to be able to do this.
229 Normally this would mean starting the server up as root.
230
231 See also -u.
232
233 -i IPADDR
234 --ip-addr=IPADDR
235 --ipaddr=IPADDR
236 Listen on the specified interface. The default is to listen on all
237 interfaces. See also -4, -6, and -p.
238
239 --log=stderr
240 --log=syslog
241 --log=null
242 Send error messages to standard error (--log=stderr), or to the
243 system log (--log=syslog), or discard them completely (--log=null,
244 not recommended for normal use).
245
246 The default is to send error messages to stderr, unless nbdkit
247 forks into the background in which case they are sent to syslog.
248
249 For more details see "LOGGING" in nbdkit-service(1).
250
251 --mask-handshake=MASK
252 This option can be used to mask off particular global features
253 which are advertised during new-style handshake (defaulting to all
254 supported bits set). See nbdkit-protocol(1).
255
256 -n
257 --new-style
258 --newstyle
259 Use the newstyle NBD protocol. This is the default in nbdkit ≥
260 1.3. In earlier versions the default was oldstyle. See
261 nbdkit-protocol(1).
262
263 --no-sr
264 Do not advertise structured replies. A client must request
265 structured replies to take advantage of block status and potential
266 sparse reads; however, as structured reads are not a mandatory part
267 of the newstyle NBD protocol, this option can be used to debug
268 client fallbacks for dealing with older servers. See
269 nbdkit-protocol(1).
270
271 -o
272 --old-style
273 --oldstyle
274 Use the oldstyle NBD protocol. This was the default in nbdkit ≤
275 1.2, but now the default is newstyle. Note this is incompatible
276 with newer features such as export names and TLS. See
277 nbdkit-protocol(1).
278
279 -P PIDFILE
280 --pid-file=PIDFILE
281 --pidfile=PIDFILE
282 Write "PIDFILE" (containing the process ID of the server) after
283 nbdkit becomes ready to accept connections.
284
285 If the file already exists, it is overwritten. nbdkit does not
286 delete the file when it exits.
287
288 -p PORT
289 --port=PORT
290 Change the TCP/IP port number on which nbdkit serves requests. The
291 default is 10809. See also -i.
292
293 -r
294 --read-only
295 --readonly
296 The export will be read-only. If a client writes, then it will get
297 an error.
298
299 Note that some plugins inherently don't support writes. With those
300 plugins the -r option is added implicitly.
301
302 nbdkit-cow-filter(1) can be placed over read-only plugins to
303 provide copy-on-write (or "snapshot") functionality. If you are
304 using qemu as a client then it also supports snapshots.
305
306 --run 'COMMAND ARGS ...'
307 Run nbdkit as a captive subprocess of the command. When the
308 command exits, nbdkit is killed. See "CAPTIVE NBDKIT" in
309 nbdkit-captive(1).
310
311 Note that the command is executed by /bin/sh. On some platforms
312 like Debian this might not be a full-featured shell.
313
314 This option implies --foreground.
315
316 In nbdkit ≤ 1.34 you normally had to add -U -, otherwise nbdkit
317 would use a TCP/IP port which was not what you wanted. In nbdkit ≥
318 1.36, using --run implies -U -. If you want the old behaviour of
319 nbdkit then you must use the --port option explicitly.
320
321 --selinux-label=SOCKET-LABEL
322 Apply the SELinux label "SOCKET-LABEL" to the nbdkit listening
323 socket.
324
325 The common — perhaps only — use of this option is to allow libvirt
326 guests which are using SELinux and sVirt confinement to access
327 nbdkit Unix domain sockets. The example below shows how to do
328 this. Note that the socket and filesystem labels are different.
329
330 nbdkit -U /tmp/sock --selinux-label=system_u:object_r:svirt_socket_t:s0 ...
331 chcon system_u:object_r:svirt_image_t:s0 /tmp/sock
332
333 -s
334 --single
335 --stdin
336 Don't fork. Handle a single NBD connection on stdin/stdout. After
337 stdin closes, the server exits.
338
339 You can use this option to run nbdkit from inetd or similar
340 superservers; or just for testing; or if you want to run nbdkit in
341 a non-conventional way. Note that if you want to run nbdkit from
342 systemd, then it may be better to use "SOCKET ACTIVATION" in
343 nbdkit-service(1) instead of this option.
344
345 This option implies --foreground.
346
347 --swap
348 (nbdkit ≥ 1.18)
349
350 Specifies that the NBD device will be used as swap space loop
351 mounted on the same machine which is running nbdkit. To avoid
352 deadlocks this locks the whole nbdkit process into memory using
353 mlockall(2). This may require additional permissions, such as
354 starting the server as root or raising the "RLIMIT_MEMLOCK"
355 (ulimit(1) -l) limit on the process.
356
357 -t THREADS
358 --threads=THREADS
359 Set the number of threads to be used per connection, which in turn
360 controls the number of outstanding requests that can be processed
361 at once. Only matters for plugins with thread_model=parallel
362 (where it defaults to 16). To force serialized behavior (useful if
363 the client is not prepared for out-of-order responses), set this to
364 1.
365
366 --tls=off
367 --tls=on
368 --tls=require
369 Disable, enable or require TLS (authentication and encryption
370 support). See nbdkit-tls(1).
371
372 --tls-certificates=/path/to/certificates
373 Set the path to the TLS certificates directory. If not specified,
374 some built-in paths are checked. See nbdkit-tls(1) for more
375 details.
376
377 --tls-psk=/path/to/pskfile
378 Set the path to the pre-shared keys (PSK) file. If used, this
379 overrides certificate authentication. There is no built-in path.
380 See nbdkit-tls(1) for more details.
381
382 --tls-verify-peer
383 Enables TLS client certificate verification. The default is not to
384 check the client's certificate.
385
386 -U SOCKET
387 --unix=SOCKET
388 -U -
389 --unix -
390 Accept connections on the Unix domain socket "SOCKET" (which is a
391 path).
392
393 nbdkit creates this socket, but it will probably have incorrect
394 permissions (too permissive). If it is a problem that some
395 unauthorized user could connect to this socket between the time
396 that nbdkit starts up and the authorized user connects, then put
397 the socket into a directory that has restrictive permissions.
398
399 nbdkit does not delete the socket file when it exits. The caller
400 should delete the socket file after use (else if you try to start
401 nbdkit up again you will get an "Address already in use" error).
402
403 If the socket name is - then nbdkit generates a randomly named
404 private socket. This is implied by the --run option. See also
405 "CAPTIVE NBDKIT" in nbdkit-captive(1).
406
407 -u USER
408 --user=USER
409 Change user to "USER" after starting up. A user name or numeric
410 user ID can be used.
411
412 The server needs sufficient permissions to be able to do this.
413 Normally this would mean starting the server up as root.
414
415 See also -g.
416
417 -v
418 --verbose
419 Enable verbose messages.
420
421 It's a good idea to use -f as well so the process does not fork
422 into the background (but not required).
423
424 -V
425 --version
426 Print the version number of nbdkit and exit.
427
428 The --dump-config option provides separate major and minor numbers
429 and may be easier to parse from shell scripts.
430
431 --vsock
432 (nbdkit ≥ 1.16)
433
434 Use the AF_VSOCK protocol (instead of TCP/IP). You must use this
435 in conjunction with -p/--port. See "AF_VSOCK" in
436 nbdkit-service(1).
437
439 You can give the full path to the plugin, like this:
440
441 nbdkit $libdir/nbdkit/plugins/nbdkit-file-plugin.so [...]
442
443 but it is usually more convenient to use this equivalent syntax:
444
445 nbdkit file [...]
446
447 $libdir is set at compile time. To print it out, do:
448
449 nbdkit --dump-config
450
452 After specifying the plugin name you can (optionally, it depends on the
453 plugin) give plugin configuration on the command line in the form of
454 "key=value". For example:
455
456 nbdkit file file=disk.img
457
458 To list all the options supported by a plugin, do:
459
460 nbdkit --help file
461
462 To dump information about a plugin, do:
463
464 nbdkit file --dump-plugin
465
466 Magic parameters
467 Some plugins declare a special "magic config key". This is a key which
468 is assumed if no "key=" part is present. For example:
469
470 nbdkit file disk.img
471
472 is assumed to be "file=disk.img" because the file plugin declares
473 "file" as its magic config key. There can be ambiguity in the parsing
474 of magic config keys if the value might look like a "key=value". If
475 there could be ambiguity then modify the value, eg. by prefixing it
476 with "./"
477
478 There is also a special exception for plugins which do not declare a
479 magic config key, but where the first plugin argument does not contain
480 an '=' character: it is assumed to be "script=value". This is used by
481 scripting language plugins:
482
483 nbdkit perl foo.pl [args...]
484
485 has the same meaning as:
486
487 nbdkit perl script=foo.pl [args...]
488
489 Shebang scripts
490 You can use "#!" to run nbdkit plugins written in most scripting
491 languages. The file should be executable. For example:
492
493 #!/usr/sbin/nbdkit perl
494 sub open {
495 # etc
496 }
497
498 (see nbdkit-perl-plugin(3) for a full example).
499
501 As well as enabling or disabling debugging in the server using
502 --verbose you can control extra debugging in the server using the
503 -D nbdkit.* flags listed in this section. Note these flags are an
504 internal implementation detail of the server and may be changed or
505 removed at any time in the future.
506
507 -D nbdkit.backend.controlpath=0
508 -D nbdkit.backend.controlpath=1
509 -D nbdkit.backend.datapath=0
510 -D nbdkit.backend.datapath=1
511 These flags control the verbosity of nbdkit backend debugging
512 messages (the ones which show every request processed by the
513 server). The default for both settings is 1 (normal debugging) but
514 you can set them to 0 to suppress these messages.
515
516 -D nbdkit.backend.datapath=0 is the more useful setting which lets
517 you suppress messages about pread, pwrite, zero, trim, etc.
518 commands. When transferring large amounts of data these messages
519 are numerous and not usually very interesting.
520
521 -D nbdkit.backend.controlpath=0 suppresses the non-datapath
522 commands (config, open, close, can_write, etc.)
523
524 -D nbdkit.environ=1
525 Print nbdkit's environment variables in the debug output at start
526 up. This is insecure because environment variables may contain
527 both sensitive and user-controlled information, so it should not be
528 used routinely. But it is useful for tracking down problems
529 related to environment variables.
530
531 -D nbdkit.tls.log=N
532 Enable TLS logging. "N" can be in the range 0 (no logging) to 99.
533 See gnutls_global_set_log_level(3).
534
535 -D nbdkit.tls.session=1
536 Print additional information about the TLS session, such as the
537 type of authentication and encryption, and client certificate
538 information.
539
541 nbdkit responds to the following signals:
542
543 "SIGINT"
544 "SIGQUIT"
545 "SIGTERM"
546 The server exits cleanly.
547
548 "SIGPIPE"
549 This signal is ignored.
550
552 "LISTEN_FDS"
553 "LISTEN_PID"
554 If present in the environment when nbdkit starts up, these trigger
555 "SOCKET ACTIVATION" in nbdkit-service(1).
556
558 Other topics
559 nbdkit-captive(1) — Run nbdkit under another process and have it
560 reliably cleaned up.
561
562 nbdkit-client(1) — How to mount NBD filesystems on a client machine.
563
564 nbdkit-loop(1) — Use nbdkit with the Linux kernel client to create loop
565 devices and loop mounts.
566
567 nbdkit-probing(1) — How to probe for nbdkit configuration and plugins.
568
569 nbdkit-protocol(1) — Which parts of the NBD protocol nbdkit supports.
570
571 nbdkit-security(1) — Lists past security issues in nbdkit.
572
573 nbdkit-service(1) — Running nbdkit as a service, and systemd socket
574 activation.
575
576 nbdkit-tls(1) — Authentication and encryption of NBD connections
577 (sometimes incorrectly called "SSL").
578
579 Plugins
580 nbdkit-blkio-plugin(1), nbdkit-cdi-plugin(1), nbdkit-curl-plugin(1),
581 nbdkit-data-plugin(1), nbdkit-eval-plugin(1),
582 nbdkit-example1-plugin(1), nbdkit-example2-plugin(1),
583 nbdkit-example3-plugin(1), nbdkit-example4-plugin(1),
584 nbdkit-file-plugin(1), nbdkit-floppy-plugin(1), nbdkit-full-plugin(1),
585 nbdkit-guestfs-plugin(1), nbdkit-info-plugin(1), nbdkit-iso-plugin(1),
586 nbdkit-libvirt-plugin(1), nbdkit-linuxdisk-plugin(1),
587 nbdkit-memory-plugin(1), nbdkit-nbd-plugin(1), nbdkit-null-plugin(1),
588 nbdkit-ondemand-plugin(1), nbdkit-ones-plugin(1),
589 nbdkit-partitioning-plugin(1), nbdkit-pattern-plugin(1),
590 nbdkit-random-plugin(1), nbdkit-S3-plugin(1),
591 nbdkit-sparse-random-plugin(1), nbdkit-split-plugin(1),
592 nbdkit-ssh-plugin(1), nbdkit-tmpdisk-plugin(1),
593 nbdkit-torrent-plugin(1), nbdkit-vddk-plugin(1), nbdkit-zero-plugin(1)
594 ; nbdkit-cc-plugin(3), nbdkit-golang-plugin(3), nbdkit-lua-plugin(3),
595 nbdkit-ocaml-plugin(3), nbdkit-perl-plugin(3), nbdkit-python-plugin(3),
596 nbdkit-ruby-plugin(3), nbdkit-rust-plugin(3), nbdkit-sh-plugin(3),
597 nbdkit-tcl-plugin(3) .
598
599 Filters
600 nbdkit-blocksize-filter(1), nbdkit-blocksize-policy-filter(1),
601 nbdkit-cache-filter(1), nbdkit-cacheextents-filter(1),
602 nbdkit-checkwrite-filter(1), nbdkit-cow-filter(1),
603 nbdkit-ddrescue-filter(1), nbdkit-delay-filter(1),
604 nbdkit-error-filter(1), nbdkit-exitlast-filter(1),
605 nbdkit-exitwhen-filter(1), nbdkit-exportname-filter(1),
606 nbdkit-ext2-filter(1), nbdkit-extentlist-filter(1),
607 nbdkit-evil-filter(1), nbdkit-fua-filter(1), nbdkit-gzip-filter(1),
608 nbdkit-ip-filter(1), nbdkit-limit-filter(1), nbdkit-log-filter(1),
609 nbdkit-luks-filter(1), nbdkit-multi-conn-filter(1),
610 nbdkit-nocache-filter(1), nbdkit-noextents-filter(1),
611 nbdkit-nofilter-filter(1), nbdkit-noparallel-filter(1),
612 nbdkit-nozero-filter(1), nbdkit-offset-filter(1),
613 nbdkit-partition-filter(1), nbdkit-pause-filter(1),
614 nbdkit-protect-filter(1), nbdkit-qcow2dec-filter(1),
615 nbdkit-rate-filter(1), nbdkit-readahead-filter(1),
616 nbdkit-retry-filter(1), nbdkit-retry-request-filter(1),
617 nbdkit-scan-filter(1), nbdkit-stats-filter(1), nbdkit-swab-filter(1),
618 nbdkit-tar-filter(1), nbdkit-tls-fallback-filter(1),
619 nbdkit-truncate-filter(1), nbdkit-xz-filter(1) .
620
621 For developers
622 nbdkit-plugin(3), nbdkit-filter(3).
623
624 Writing plugins in other programming languages
625 nbdkit-cc-plugin(3), nbdkit-golang-plugin(3), nbdkit-lua-plugin(3),
626 nbdkit-ocaml-plugin(3), nbdkit-perl-plugin(3), nbdkit-python-plugin(3),
627 nbdkit-ruby-plugin(3), nbdkit-rust-plugin(3), nbdkit-sh-plugin(3),
628 nbdkit-tcl-plugin(3) .
629
630 Release notes for previous releases of nbdkit
631 nbdkit-release-notes-1.36(1), nbdkit-release-notes-1.34(1),
632 nbdkit-release-notes-1.32(1), nbdkit-release-notes-1.30(1),
633 nbdkit-release-notes-1.28(1), nbdkit-release-notes-1.26(1),
634 nbdkit-release-notes-1.24(1), nbdkit-release-notes-1.22(1),
635 nbdkit-release-notes-1.20(1), nbdkit-release-notes-1.18(1),
636 nbdkit-release-notes-1.16(1), nbdkit-release-notes-1.14(1),
637 nbdkit-release-notes-1.12(1), nbdkit-release-notes-1.10(1),
638 nbdkit-release-notes-1.8(1), nbdkit-release-notes-1.6(1),
639 nbdkit-release-notes-1.4(1).
640
641 NBD clients
642 guestfish(1), libnbd(3), nbd-client(1), nbdcopy(1), nbdfuse(1),
643 nbdinfo(1), nbdsh(1), qemu(1).
644
645 nbdkit links
646 http://gitlab.com/nbdkit/nbdkit — Source code.
647
648 Other NBD servers
649 qemu-nbd(1), nbd-server(1), https://github.com/bignaux/lwNBD,
650 https://bitbucket.org/hirofuchi/xnbd.
651
652 Documentation for the NBD protocol
653 https://github.com/NetworkBlockDevice/nbd/blob/master/doc/proto.md,
654 https://nbd.sourceforge.io/.
655
656 Similar protocols
657 https://en.wikipedia.org/wiki/iSCSI,
658 https://en.wikipedia.org/wiki/ATA_over_Ethernet,
659 https://en.wikipedia.org/wiki/Fibre_Channel_over_Ethernet.
660
661 Other manual pages of interest
662 gnutls_priority_init(3), qemu-img(1), psktool(1), systemd.socket(5).
663
665 Eric Blake
666
667 Laszlo Ersek
668
669 Richard W.M. Jones
670
671 Yann E. MORIN
672
673 Nikolaus Rath
674
675 François Revol
676
677 Nir Soffer
678
679 Alan Somers
680
681 Pino Toscano
682
684 Copyright Red Hat
685
687 Redistribution and use in source and binary forms, with or without
688 modification, are permitted provided that the following conditions are
689 met:
690
691 • Redistributions of source code must retain the above copyright
692 notice, this list of conditions and the following disclaimer.
693
694 • Redistributions in binary form must reproduce the above copyright
695 notice, this list of conditions and the following disclaimer in the
696 documentation and/or other materials provided with the
697 distribution.
698
699 • Neither the name of Red Hat nor the names of its contributors may
700 be used to endorse or promote products derived from this software
701 without specific prior written permission.
702
703 THIS SOFTWARE IS PROVIDED BY RED HAT AND CONTRIBUTORS ''AS IS'' AND ANY
704 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
705 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
706 PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RED HAT OR CONTRIBUTORS BE
707 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
708 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
709 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
710 BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
711 WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
712 OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
713 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
714
715
716
717nbdkit-1.36.2 2023-11-26 nbdkit(1)