diff options
author | Tom Caputi <[email protected]> | 2019-03-15 17:14:31 -0400 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2019-03-15 14:14:31 -0700 |
commit | ab7615d92c9bf4bdbbc6a675724b763d16f05280 (patch) | |
tree | 4a61231e1be8887feb8cf3ccdae070a016cc45b7 /man/man8 | |
parent | 2bbec1c910a24bf61c6f41e0762e50face4b8907 (diff) |
Multiple DVA Scrubbing Fix
Currently, there is an issue in the sequential scrub code which
prevents self healing from working in some cases. The scrub code
will split up all DVA copies of a bp and issue each of them
separately. The problem is that, since each of the DVAs is no
longer associated with the others, the self healing code doesn't
have the opportunity to repair problems that show up in one of the
DVAs with the data from the others.
This patch fixes this issue by ensuring that all IOs issued by the
sequential scrub code include all DVAs. Initially, only the first
DVA of each is attempted. If an issue arises, the IO is retried
with all available copies, giving the self healing code a chance
to correct the issue.
To test this change, this patch also adds the ability for zinject
to specify individual DVAs to inject read errors into. We then
add a new test case that utilizes this functionality to ensure
scrubs and self-healing reads can handle and transparently fix
issues with individual copies of blocks.
Reviewed-by: Brian Behlendorf <[email protected]>
Reviewed-by: Matt Ahrens <[email protected]>
Signed-off-by: Tom Caputi <[email protected]>
Closes #8453
Diffstat (limited to 'man/man8')
-rw-r--r-- | man/man8/zinject.8 | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/man/man8/zinject.8 b/man/man8/zinject.8 index e97db839b..f02e78ca2 100644 --- a/man/man8/zinject.8 +++ b/man/man8/zinject.8 @@ -85,13 +85,13 @@ Simulate a hardware failure that fails to honor a cache flush. .B "zinject \-p \fIfunction\fB \fIpool\fB Panic inside the specified function. .TP -.B "zinject \-t data [\-e \fIdevice_error\fB] [\-f \fIfrequency\fB] [\-l \fIlevel\fB] [\-r \fIrange\fB] [\-amq] \fIpath\fB" +.B "zinject \-t data [\-C \fIdvas\fB] [\-e \fIdevice_error\fB] [\-f \fIfrequency\fB] [\-l \fIlevel\fB] [\-r \fIrange\fB] [\-amq] \fIpath\fB" Force an error into the contents of a file. .TP -.B "zinject \-t dnode [\-e \fIdevice_error\fB] [\-f \fIfrequency\fB] [\-l \fIlevel\fB] [\-amq] \fIpath\fB" +.B "zinject \-t dnode [\-C \fIdvas\fB] [\-e \fIdevice_error\fB] [\-f \fIfrequency\fB] [\-l \fIlevel\fB] [\-amq] \fIpath\fB" Force an error into the metadnode for a file or directory. .TP -.B "zinject \-t \fImos_type\fB [\-e \fIdevice_error\fB] [\-f \fIfrequency\fB] [\-l \fIlevel\fB] [\-r \fIrange\fB] [\-amqu] \fIpool\fB" +.B "zinject \-t \fImos_type\fB [\-C \fIdvas\fB] [\-e \fIdevice_error\fB] [\-f \fIfrequency\fB] [\-l \fIlevel\fB] [\-r \fIrange\fB] [\-amqu] \fIpool\fB" Force an error into the MOS of a pool. .SH OPTIONS .TP @@ -102,6 +102,14 @@ Flush the ARC before injection. Force an error into the pool at this bookmark tuple. Each number is in hexadecimal, and only one block can be specified. .TP +.BI "\-C" " dvas" +Inject the given error only into specific DVAs. The mask should be +specified as a list of 0-indexed DVAs separated by commas (ex. '0,2'). This +option is not applicable to logical data errors such as +.BR "decompress" +and +.BR "decrypt" . +.TP .BI "\-d" " vdev" A vdev specified by path or GUID. .TP |