NAME
nbdsh - network block device (NBD) shell
SYNOPSIS
$ nbdshWelcome to nbdsh, the shell for interacting withNetwork Block Device (NBD) servers.The ‘nbd’ module has already been imported and thereis an open NBD handle called ‘h’.nbd> h.connect_command(["nbdkit", "-s", "memory", "1G"])nbd> h.get_size()1073741824nbd> buf = b"hello, world"nbd> h.pwrite(buf, 0)nbd> exit()
DESCRIPTION
nbdsh is a Python-based interactive shell for accessing Network Block Device (NBD) servers.
For documentation about the libnbd API please open the shell and type:
help(nbd)
For an introduction to using libnbd from Python see libnbd-python(3).
EXAMPLES
There are other example scripts in the libnbd source repository under sh/examples or see https://gitlab.com/nbdkit/libnbd/tree/master/sh/examples.
Print the size of an NBD export
The -u option connects to an NBD URI. The -c option lets you execute single Python statements from the command line. Combining these two options lets you print the size in bytes of an NBD export:
$ nbdsh -u nbd://localhost -c 'print(h.get_size())'1073741824
Hexdump the boot sector of an NBD export
Using -c - you can feed a whole Python program to the standard input of nbdsh:
nbdsh -c - <<'EOF'from subprocess import *h.connect_uri("nbd://localhost")bootsect = h.pread(512, 0)p = Popen("hexdump -C", shell=True, stdin=PIPE)p.stdin.write(bootsect)EOF
nbddump(1) is another tool for hexdumping NBD exports.
Overwrite part of the disk with a pattern
Overwrite 2048 bytes, starting at offset 1024 (hex 0x400), with the repeating binary pattern 01010101 10101010. (This operation is destructive!)
$ nbdkit memory 4096$ nbdsh -u nbd://localhost -c 'h.pwrite(b"\x55\xAA" * 1024, 0x400)'$ nbddump nbd://localhost0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │················│☆0400: 55 aa 55 aa 55 aa 55 aa 55 aa 55 aa 55 aa 55 aa │U·U·U·U·U·U·U·U·│☆0c00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │················│☆0ff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │················│$ killall nbdkit
The -c parameter contains a Python expression which builds a bytearray containing the two byte pattern repeated 1024 times (length 2048 bytes), and calls the Python binding of nbd_pwrite(3). The second parameter is the offset to start writing from. For information about nbdkit, see nbdkit(1) and nbdkit-memory-plugin(1).
OPTIONS
- -h
- --help
-
Display brief command line help and exit.
- --base-allocation
-
Request the use of the "base:allocation" meta context, which is the most common context used with nbd_block_status_64(3). This is equivalent to calling
"h.set_meta_context(nbd.CONTEXT_BASE_ALLOCATION)"in the shell prior to connecting, and works even when combined with"--uri"(while attempting the same with"-c"would be too late).
- -c 'COMMAND ...'
- --command 'COMMAND ...'
-
Instead of starting an interactive shell, run a command. This option can be specified multiple times in order to run multiple commands.
- -c -
- --command -
-
Read standard input and execute it as a command.
- -n
-
Do not create the implicit handle
"h".
- --opt-mode
-
Request that option mode be enabled, which gives fine-grained control over option negotiation after initially contacting the server but prior to actually using the export. This is equivalent to calling
"h.set_opt_mode(True)"in the shell prior to connecting, and works even when combined with"--uri"(while attempting the same with"-c"would be too late).
- -u URI
- --uri URI
-
Connect to the given NBD URI. This is equivalent to the
"h.connect_uri(URI)"command in the shell.Note that the connection is created prior to processing any
"-c"commands, which prevents the use of configuration commands such as"h.add_meta_context("NAME")"from the command line when mixed with this option. The options"--opt-mode"and"--base-allocation"can be used to make this situation easier to manage.
- -v
- --verbose
-
Enable verbose libnbd messages. This has the same effect as setting the environment variable
"LIBNBD_DEBUG=1"
- -V
- --version
-
Display the package name and version and exit.
SEE ALSO
libnbd(3), libnbd-python(3), libnbd-security(3), nbdcopy(1), nbddiscard(1), nbddump(1), nbdfuse(1), nbdinfo(1), nbdublk(1), nbdzero(1), qemu-img(1), nbdkit(1).
AUTHORS
Richard W.M. Jones
COPYRIGHT
Copyright Red Hat
LICENSE
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA