====== ZFS - Troubleshooting - Data Recovery ======
Assume we have a 2 x 2 mirrored zpool:
sudo zpool create testpool mirror /dev/sdc /dev/sdd mirror /dev/sde /dev/sdf -f
sudo zpool status
pool: testpool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
testpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
sde ONLINE 0 0 0
sdf ONLINE 0 0 0
Now populate it with some data and check sum the data:
dd if=/dev/urandom of=/testpool/random.dat bs=1M count=4096
md5sum /testpool/random.dat
f0ca5a6e2718b8c98c2e0fdabd83d943 /testpool/random.dat
Now we simulate catastrophic data loss by overwriting one of the VDEV devices with zeros:
sudo dd if=/dev/zero of=/dev/sde bs=1M count=8192
And now initiate a scrub:
sudo zpool scrub testpool
And check the status:
sudo zpool status
pool: testpool
state: ONLINE
status: One or more devices has experienced an unrecoverable error. An
attempt was made to correct the error. Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
using 'zpool clear' or replace the device with 'zpool replace'.
see: http://zfsonlinux.org/msg/ZFS-8000-9P
scan: scrub in progress since Tue May 12 17:34:53 2015
244M scanned out of 1.91G at 61.0M/s, 0h0m to go
115M repaired, 12.46% done
config:
NAME STATE READ WRITE CKSUM
mypool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
sde ONLINE 0 0 948 (repairing)
sdf ONLINE 0 0 0
...now let us remove the drive from the pool:
sudo zpool detach testpool /dev/sde
..hot swap it out and add a new one back:
sudo zpool attach testpool /dev/sdf /dev/sde -f
..and initiate a scrub to repair the 2 x 2 mirror:
sudo zpool scrub testpool