Provided by: nbdkit_1.42.2-1ubuntu1_amd64 bug

NAME

       nbdkit-evil-filter - add random data corruption to reads

SYNOPSIS

        nbdkit --filter=evil PLUGIN [PLUGIN-ARGS...]
               evil=[cosmic-rays|stuck-bits|stuck-wires]
               [evil-probability=PROB] [evil-stuck-probability=PROB]
               [evil-seed=SEED]

DESCRIPTION

       nbdkit-evil-filter is a Byzantine filter for nbdkit(1) that randomly corrupts data when reading from the
       underlying plugin.  This can be used for testing filesystem checksums.  Note that it does not change
       write operations, so the underlying plugin contains the correct data.

       nbdkit-error-filter(1) is a related filter that injects hard errors into the NBD protocol.

       This filter has several modes, controlled using the "evil=..."  parameter.  These are:

       "evil=cosmic-rays"
           Bits  are  flipped  at random when reading data.  The probability that a bit is flipped is controlled
           using the "evil-probability" parameter, defaulting to 1e-8 (on average 1 in every  100  million  bits
           read is flipped).

       "evil=stuck-bits"
           This is the default mode.

           Fixed  bits  in  the  backing  file are stuck randomly high or low.  The "evil-probability" parameter
           controls the expected probability that a particular bit is stuck, defaulting in this mode to 1e-8  (1
           in  100  million).  "evil-stuck-probability" controls the probability that a stuck bit is read as its
           stuck value or its correct value, defaulting to 100% (always read as a stuck bit).

       "evil=stuck-wires"
           This is similar to "stuck-bits" but instead of simulating bad backing data, it simulates stuck  wires
           along  the  data path (eg. in a register).  The difference is that when reading, the stuck bit always
           happens at the same position in the packet of data being read, regardless of where on the  underlying
           disk  it is being read from.  "evil-probability" controls the probability of a stuck wire, defaulting
           in this mode to 1e-6 (1 in 1 million).  "evil-stuck-probability"  controls  the  probability  that  a
           stuck bit is read as its stuck value or its correct value, defaulting to 100% (always read as a stuck
           bit).

EXAMPLES

       Add some stuck bits to the backing file at random:

        nbdkit --filter=evil file disk.img

       Cosmic rays will flip (on average) one in every 100 million bits copied from the backing file over NBD:

        nbdkit --filter=evil file disk.img evil=cosmic-rays \
               --run 'nbdcopy $uri output.img'

NOTES

   Extents
       Plugins  can  be  sparse.   This filter only corrupts bits in non-sparse parts of the backing disk and it
       leaves sparse regions unchanged (which is realistic behaviour).  If  you  wish  to  use  this  filter  to
       corrupt sparse regions, then combine this filter with nbdkit-noextents-filter(1).  For example:

        nbdkit --filter=evil --filter=noextents memory 1G

   Probability limited to [ 1e-12 .. 1/8 ]
       The  current  implementation limits probabilities to the range [ 1e-12 .. 1/8 ].  Values below this range
       are treated the same as 0%.  Values above this range are treated the same as 100%.

PARAMETERS

       evil=cosmic-rays
       evil=stuck-bits
       evil=stuck-wires
           Select the mode of evil.  See the "DESCRIPTION" above.  The default is "stuck-bits".

       evil-probability=N
       evil-probability=N:M
       evil-probability=N%
           Set the probability for the mode.  You can either use a floating point number between 0  and  1,  eg.
           "evil-probability=0.001"   or  "evil-probability=1e-6".   Or  you  can  write  it  as  N  in  M,  eg.
           "evil-probability=1:1000000"  or  "evil-probability=3.33:100000".   Or  you  can  write  this  as   a
           percentage, eg. "evil-probability=1%".

           The default probability depends on the mode.

       evil-seed=SEED
           To  make runs repeatable, use this to set a seed for the random number generator.  Note that runs are
           repeatable only if you use the same version of nbdkit, since in future we may change the algorithm.

           The default is to choose a seed at random.

       evil-stuck-probability=N
       evil-stuck-probability=N:M
       evil-stuck-probability=N%
           For the "stuck-*" modes, the probability that when reading a stuck bit you will read the stuck bit or
           the correct value.  This defaults to 1 (ie. 100%) which means the bit is always stuck.  Setting it to
           0.5 for example will mean that half the time the bit appears stuck and half  the  time  you  see  the
           correct value.

FILES

       $filterdir/nbdkit-evil-filter.so
           The filter.

           Use "nbdkit --dump-config" to find the location of $filterdir.

VERSION

       "nbdkit-evil-filter" first appeared in nbdkit 1.36.

SEE ALSO

       nbdkit(1),  nbdkit-filter(3), nbdkit-delay-filter(1), nbdkit-noextents-filter(1), nbdkit-error-filter(1),
       nbdkit_parse_probability(3).

AUTHORS

       Richard W.M. Jones

COPYRIGHT

       Copyright Red Hat

LICENSE

       Redistribution and use in source and binary forms, with or without modification, are  permitted  provided
       that the following conditions are met:

       •   Redistributions  of  source  code must retain the above copyright notice, this list of conditions and
           the following disclaimer.

       •   Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
           the following disclaimer in the documentation and/or other materials provided with the distribution.

       •   Neither the name of Red Hat nor the names of its contributors may  be  used  to  endorse  or  promote
           products derived from this software without specific prior written permission.

       THIS  SOFTWARE  IS  PROVIDED BY RED HAT AND CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
       INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND  FITNESS  FOR  A  PARTICULAR
       PURPOSE  ARE  DISCLAIMED.  IN  NO EVENT SHALL RED HAT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
       INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  PROCUREMENT  OF
       SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
       ON  ANY  THEORY  OF  LIABILITY,  WHETHER  IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
       OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
       DAMAGE.

nbdkit-1.42.2                                      2025-04-02                              nbdkit-evil-filter(1)