e7db2d3588
This driver can be loaded as an overlay on top of a real block device, and can then be used to generate block-level failures for certain transfer requests. Specifically, a rule-based system allows the user to introduce (overt and silent) data corruption and errors. It exposes itself through /dev/fbd, and a file system can be mounted on top of it. The new fbdctl(8) tool can be used to control the driver; see ``man fbdctl'' for details. It also comes with a test set, located in test/fbdtest.
109 lines
5.3 KiB
Groff
109 lines
5.3 KiB
Groff
.TH FBDCTL 8
|
|
.SH NAME
|
|
fbdctl \- Faulty Block Device rule management interface
|
|
.SH SYNOPSIS
|
|
\fBfbdctl\fR \fBadd\fR [\fB-d\fR \fIdevice\fR]
|
|
[\fB-a\fR \fIstart\fR[\fB-\fR\fIend\fR]] [\fB-s\fR \fIskip\fR]
|
|
[\fB-c\fR \fIcount\fR] [\fB-rw\fR] \fIaction\fR [\fIparams\fR]
|
|
.PP
|
|
\fBfbdctl\fR \fBdel\fR [\fB-d\fR \fIdevice\fR] \fIrulenum\fR
|
|
.PP
|
|
\fBfbdctl\fR \fBlist\fR [\fB-d\fR \fIdevice\fR]
|
|
.SH DESCRIPTION
|
|
The Faulty Block Device (FBD) driver is an interposing block device driver
|
|
which can simulate certain disk-level I/O corruption and errors, based on a
|
|
user-provided set of rules. The \fBfbdctl\fR tool allows one to add, delete,
|
|
and list rules on a running FBD driver instance.
|
|
.PP
|
|
The \fBadd\fR subcommand adds a new rule, which will perform a predefined
|
|
faulty action on a disk transfer when triggered. See the ACTIONS subsection
|
|
below. The \fBdel\fR subcommands deletes an existing rule, based on its rule
|
|
number. All currently active rules and their corresponding rule numbers can be
|
|
viewed with the \fBlist\fR subcommand.
|
|
.SH OPTIONS
|
|
.TP 10
|
|
\fB-d\fR \fIdevice\fR
|
|
By default, \fBfbdctl\fR operates on \fB/dev/fbd\fR. With this option, one can
|
|
specify a different device node. This is useful when using multiple FBD
|
|
instances at the same time. The user would have to create extra device nodes
|
|
first in that case.
|
|
.TP 10
|
|
\fB-a\fR [\fIstart\fR[\fB-\fR\fIend\fR]]
|
|
When adding a rule, this option specifies the disk address range for which the
|
|
rule triggers. That is, the rule will trigger when an I/O operation overlaps
|
|
with the given range. Both \fIstart\fR and \fIend\fR are expected to be
|
|
hexadecimal numbers, without a "0x" prefix. The \fIend\fR address is exclusive.
|
|
If no \fIend\fR address is given, the rule will affect the disk from the
|
|
starting address to the disk end. If this option is not provided at all,
|
|
the rule will affect the entire disk.
|
|
.TP 10
|
|
\fB-s\fR \fIskip\fR
|
|
This option makes the new rule refrain from triggering for the given number
|
|
of times it matches. The \fIskip\fR value must be a positive decimal number.
|
|
If this option is omitted, the value is set to zero, meaning the rule will
|
|
start triggering immediately.
|
|
.TP 10
|
|
\fB-c\fR \fIcount\fR
|
|
This option makes the new rule trigger for this many I/O operations when
|
|
matched, after which it will be removed automatically. The \fIcount\fR value
|
|
must be a positive decimal number. If this option is omitted, or a value of
|
|
zero is given, the rule is permanent and will not be removed automatically.
|
|
.TP 10
|
|
\fB-r\fR, \fB-w\fR
|
|
These options allow one to make the new rule trigger on read or write
|
|
operations only. By default, or when both are specified, the new rule will
|
|
trigger for both read and write I/O operations.
|
|
.SH ACTIONS
|
|
The following actions are supported. They are executed when the rule matches
|
|
for a transfer request, and is triggered as a result. Note that the exact
|
|
meaning of the rule's disk address range (as given by the \fB-a\fR option)
|
|
depends on the action type.
|
|
.TP 10
|
|
\fBcorrupt\fR [\fBzero\fR|\fBpersist\fR|\fBrandom\fR]
|
|
In the part of the transfer that matches the disk address range given for the
|
|
rule (i.e., the intersection of the rule range and the transfer range), the
|
|
data will be corrupted. The following corruption policies are supported: the
|
|
data is set to \fBzero\fR, it is \fBpersist\fRently set to the same garbage
|
|
data for the same disk locations, or it is set to different \fBrandom\fR data
|
|
in every transfer.
|
|
.TP 10
|
|
\fBerror\fR [\fBOK\fR|\fBEIO\fR]
|
|
Only the part of the transfer up to the start of the rule's disk address range
|
|
will be performed, after which the given error code is returned. The \fBOK\fR
|
|
code effectively simulates an end-of-disk condition, whereas the \fBEIO\fR code
|
|
simulates generic disk-level I/O failure.
|
|
.TP 10
|
|
\fBmisdir\fR \fIstart\fR\fB-\fR\fIend\fR \fIalign\fR
|
|
Transfer requests that match this rule, will be \fBmisdirected\fR in their
|
|
entirety, to a random location in the given address range, and with the given
|
|
disk byte alignment within that range. The \fIstart\fR and \fIend\fR parameters
|
|
are specified just like the \fB-a\fR option, although the \fIend\fR parameter
|
|
is compulsory here (since the driver does not know the disk end). The
|
|
\fIalign\fR value must be a positive nonzero decimal number, and should be a
|
|
multiple of the medium sector size; a typical value would be 4096.
|
|
.TP 10
|
|
\fBlost\fR
|
|
Transfer requests that match this rule, will be \fBlost\fR in their entirety.
|
|
That is, they will not actually be performed, and yet report successful
|
|
completion.
|
|
.TP 10
|
|
\fBtorn\fR \fIlead\fR
|
|
Transfer requests that match this rule, will be \fBtorn\fR: only the first
|
|
\fIlead\fR bytes of the transfer request will actually be performed, and yet
|
|
completion of the full transfer is reported. The \fIlead\fR value must be a
|
|
positive nonzero decimal number. A \fBtorn\fR action with a \fIlead\fR value of
|
|
zero would be the same as the \fBlost\fR action.
|
|
.SH EXAMPLES
|
|
.TP 10
|
|
.B fbdctl add -a 2000-3000 corrupt zero
|
|
# Zero out the 4096 bytes starting from disk address 0x2000 in any transfer
|
|
that involves any of those bytes.
|
|
.TP 10
|
|
.B fbdctl add -s 9 -c 1 -r error EIO
|
|
# Fail the tenth read request with an I/O error.
|
|
.TP 10
|
|
.B fbdctl add -a A0000-B0000 -w misdir D0000-E0000 4096
|
|
# Misdirect write requests that overlap with the first range, to fall somewhere
|
|
in the second range, at 4K-block-granular alignment.
|
|
.SH AUTHOR
|
|
David van Moolenbroek <david@minix3.org>
|