nbdkit 1.24 was released on Thursday. It’s our flexible, fast network block device with loads of features. nbdkit-data-plugin, a plugin that lets you create test patterns from the command line gained some interesting new functionality:
$ nbdkit data ' ( 0x55 0xAA )*2048 '
This command worked before as a way to create a repeating test pattern in a disk image. A new feature is you can write a shell script snippet to generate the pattern instead:
$ nbdkit data ' <( while :; do printf "%04x" $((i++)); done ) [:2048] '
This command will create a pattern of characters “0 0 0 0 0 0 0 1 0 0 0 2 0 0 0 3 …” (truncated to 2048 bytes). We could turn that into a block device and display the contents:
# nbd-client localhost /dev/nbd0 # blockdev --getsize64 /dev/nbd0 2048 # dd if=/dev/nbd0 | hexdump -C | head 4+0 records in 4+0 records out 2048 bytes (2.0 kB, 2.0 KiB) copied, 0.000167082 s, 12.3 MB/s 00000000 30 30 30 30 30 30 30 31 30 30 30 32 30 30 30 33 |0000000100020003| 00000010 30 30 30 34 30 30 30 35 30 30 30 36 30 30 30 37 |0004000500060007| 00000020 30 30 30 38 30 30 30 39 30 30 30 61 30 30 30 62 |00080009000a000b| 00000030 30 30 30 63 30 30 30 64 30 30 30 65 30 30 30 66 |000c000d000e000f| 00000040 30 30 31 30 30 30 31 31 30 30 31 32 30 30 31 33 |0010001100120013| 00000050 30 30 31 34 30 30 31 35 30 30 31 36 30 30 31 37 |0014001500160017| 00000060 30 30 31 38 30 30 31 39 30 30 31 61 30 30 31 62 |00180019001a001b| 00000070 30 30 31 63 30 30 31 64 30 30 31 65 30 30 31 66 |001c001d001e001f| 00000080 30 30 32 30 30 30 32 31 30 30 32 32 30 30 32 33 |0020002100220023| 00000090 30 30 32 34 30 30 32 35 30 30 32 36 30 30 32 37 |0024002500260027| # nbd-client -d /dev/nbd0 # killall nbdkit
The data plugin also lets you read from files which is useful for making disks with random initial data. For example here’s how to create a disk with 16 identical sectors of random data (notice how /dev/random is read in, truncated to 512 bytes, and then 16 copies are made):
$ nbdkit data ' </dev/urandom[:512]*16 '
The plugin can also create sparse disks. You can do this just by moving the current offset using “@”:
$ nbdkit data ' @32768 1 ' --run 'nbdinfo --map "$uri"'0 32768 3 hole,zero
32768 1 0 allocated
We use this plugin quite extensively when testing libnbd.
Pingback: nbdkit 1.24 & libnbd 1.6, new copying tool | Richard WM Jones