$filterdir/nbdkit-error-filter.so
The filter.
Use "nbdkit --dump-config" to find the location of $filterdir.
Inject errors for testing clients
nbdkit --filter=error
PLUGIN
[{error=EPERM | EIO | ENOMEM | EINVAL | ENOSPC | ESHUTDOWN}]
[{error-rate=10% | 0.1 | 1:10}]
[error-file=/tmp/inject]
[error-pread= ...]
[error-pread-rate= ...]
[error-pread-file= ...]
[error-pwrite= ...]
[error-pwrite-rate= ...]
[error-pwrite-file= ...]
[error-trim= ...]
[error-trim-rate= ...]
[error-trim-file= ...]
[error-zero= ...]
[error-zero-rate= ...]
[error-zero-file= ...]
[error-extents= ...]
[error-extents-rate= ...]
[error-extents-file= ...]
[error-cache= ...]
[error-cache-rate= ...]
[error-cache-file= ...]
"nbdkit-error-filter" is an nbdkit filter that injects random errors into replies from the server. This is used for testing that NBD clients can handle errors.
All parameters are optional, but you should usually specify one of the "error-rate" or "error-*-rate" parameters, otherwise this filter will do nothing.
nbdkit-evil-filter(1) is a related filter that injects data corruption instead of errors. nbdkit-readonly-filter(1) is another filter which can change a plugin from read-write to read-only (and vice versa).
Inject a low rate of errors randomly into the connection:
nbdkit --filter=error file disk.img error-rate=1%
Reading, trimming, cache and extents (block status) requests will be successful, but all writes and zeroing will return "No space left on device":
nbdkit --filter=error file disk.img \error=ENOSPC \error-pwrite-rate=100% \error-zero-rate=100%
(see also nbdkit-readonly-filter(1)).
To make all connections fail hard 60 seconds after the server is started, use:
rm -f /tmp/injectnbdkit --filter=error file disk.img \error-rate=100% \error-file=/tmp/injectsleep 60; touch /tmp/inject
error=EPERM|EIO|ENOMEM|EINVAL|ENOSPC|ESHUTDOWNWhen a random error is injected, you can select which one from the range of possible NBD errors (the NBD protocol only supports a limited range of error codes).
This parameter is optional and the default is "EIO" ("Input/output error").
error-rate=N%error-rate=0..1error-rate=N:MThe rate of injected errors per NBD request. This can be expressed as a percentage between "0%" and "100%", or as a probability between 0 and 1, or as a ratio like "1:10". If "0%" or 0 is used then no errors are ever injected, and if "100%" or 1 is used then all requests return errors.
This parameter is optional and the default is "0%". Unless you set this, the filter will do nothing.
error-file=FILENAMEErrors will only be injected when FILENAME exists. (Note you must also specify the "error-rate").
You can use this for fine-grained control over when to inject errors, for example if you want to trigger an error at an exact moment during a test, arrange for this file to be created at the appropriate time. Or conversely to test error recovery in a client, create the file initially, and then delete it to check the client can recover.
This parameter is optional.
error-pread, error-pread-rate, error-pread-file.Same as "error", "error-rate" and "error-file" but only apply the settings to NBD pread requests.
error-pwrite, error-pwrite-rate, error-pwrite-file.Same as "error", "error-rate" and "error-file" but only apply the settings to NBD pwrite requests.
error-trim, error-trim-rate, error-trim-file.Same as "error", "error-rate" and "error-file" but only apply the settings to NBD trim requests.
error-zero, error-zero-rate, error-zero-file.Same as "error", "error-rate" and "error-file" but only apply the settings to NBD zero requests.
error-extents, error-extents-rate, error-extents-file.(nbdkit ≥ 1.12)
Same as "error", "error-rate" and "error-file" but only apply the settings to NBD block status requests to read extents.
error-cache, error-cache-rate, error-cache-file.(nbdkit ≥ 1.14)
Same as "error", "error-rate" and "error-file" but only apply the settings to NBD cache requests.
If you are looking at the debugging output (using "nbdkit -f -v") references to the name of this filter show up as "error-inject:", and such lines indicate that the filter is not altering output, for example:
nbdkit: file.9: debug: error-inject: pread count=1024 offset=0 flags=0x0
Conversely, references to the string "error:" occur when the nbdkit_error(3) API was used, including when this filter injects an error, as in:
nbdkit: file.4: error: injecting ENOSPC error into pwrite
$filterdir/nbdkit-error-filter.so
The filter.
Use "nbdkit --dump-config" to find the location of $filterdir.
"nbdkit-error-filter" first appeared in nbdkit 1.6.
4 releases since Debian 10 (Buster); the text changed 3 times.