|
Description
|
With the following vdev configuration:
mirror [DTL: 4-now]
diskA offline [DTL: offlinetime-now]
replacing [DTL: 4-replacetime]
diskB old [DTL: none]
diskC new [DTL: 4-replacetime]
it does reads from B, writes to C, everything seems OK.
But if then you then online A, it tries to read from A, and write to B &
C. Of course the data on diskA is not correct, so it gets checksum
errors and retries the reads from diskB. The end result is we read
everything from A and B, and write everything to A and C. Since A is
being hit with 2x the I/O (everything is read and then written), this
causes a 50% slowdown. But the behavior should still be correct.
The root cause is likely that both mirror children (A and replacing)
have DTLs that cover a large range, we consider them equal and just
"happen" to try A first. However, we know that the replacing vdev has
the correct data (on B), so we should just read from there.
|