Nathaniel Filardo
2009-Jul-21 01:13 UTC
[zfs-discuss] zpool import is trying to tell me something...
I recently had an X86 system (running Nexenta Elatte, if that matters -- b101
kernel, I think) suffer hardware failure and refuse to boot. I''ve
migrated the disks into a SPARC system (b115) in an attempt to bring the data
back online while I see about repairing the former system. However,
I''m having some trouble with the import process:
hydra# zpool import
pool: tank
id: 12156936533394213216
state: UNAVAIL
status: The pool is formatted using an older on-disk version.
action: The pool cannot be imported due to damaged devices or data.
config:
tank UNAVAIL insufficient replicas
raidz1 UNAVAIL corrupted data
c3t11d0s0 ONLINE
c3t10d0s0 ONLINE
c3t8d0s0 ONLINE
c3t9d0s0 ONLINE
hydra# /usr/lib/zfs/availdevs -p
...
pool name="tank" id="12156936533394213216"
poolversion="14" used="0" size="0"
replacementsize="0" readbytes="0" writebytes="0"
readoperations="0" writeoperations="0"
readerrors="0" writeerrors="0" checksumerrors="0"
devicestate="VDEV_STATE_CANT_OPEN"
devicestatus="VDEV_AUX_NO_REPLICAS"
poolstate="POOL_STATE_ACTIVE"
poolstatus="ZPOOL_STATUS_VERSION_OLDER"
...
Somebody is trying to tell me something, but I''m not receiving. All
four disks (there were only ever four in the array, since creation until the
present) appear present, are readable (via dd if=...), have sane looking
uberblock arrays, and give more or less sane looking answers to "zdb -l
/dev/dsk/..."; the whole output of the latter is a bit much to paste here
but I can if somebody thinks it would be useful. zdb with no arguments also
enumerates the pool in the list and looks saneish.
Other zdb commands apparently do not work, hopefully due to the same root cause.
hydra# zdb -d tank
zdb: can''t open tank: Invalid argument
I really wish I could zdb -c -c right now and at least assess whether or not the
data remains on the platters. :)
If it matters, the pool was not exported from the X86 system prior to migration,
since I didn''t think I''d need to the last time I powered the
machine off.
What am I doing wrong?
Thanks much in advance.
--nwf;
--
This message posted from opensolaris.org
Nathaniel Filardo
2009-Jul-22 15:27 UTC
[zfs-discuss] zpool import is trying to tell me something...
Maybe I should have posted the zdb -l output. Having seen another thread which
suggests that I might be looking at the most recent txg being damaged, I went to
get my pool''s txg counter:
hydra# zdb -l /dev/dsk/c3t10d0s0 | grep txg
txg=10168474
txg=10168474
txg=6324561
txg=6324561
All of the disks are like this (indeed, the only thing that differs about their
zdb -l output is their own guids, as expected). Staring at reams of od -x
output, it appears that I have txgs 10168494 through 10168621 in L0 and L1. L2
and L3 appear to have not been updated in some time! L0 and L1 are both
"version=14" and have a hostname field.... L2 and L3 are both
"version=3" and do not. All four labels appear to describe the same
array (guids and devices and all). The uberblocks in L2 and L3 seem to contain
txgs 6319346 through 6319473. That''s uh... "funny".
A little bit of dtrace and time travel back to vdev.c as of snv_115 later, I
find that the immediate cause is that vdev_raidz_open is yielding an asize of
1280262012928 but that
when vdev_open called vdev_raidz_open, it thought the asize was 1280272498688.
(Thus vdev_open and vdev_root_open return EINVAL, and the import fails.) That
is, the array is actually one megabyte smaller than it thought... which works
out to 256K per disk, which is exactly the size of a label pair and might
explain why L2 and L3 are stale.
Help?
--
This message posted from opensolaris.org