On 10/07/2011 11:02 AM, James Lee wrote: > Hello, > > I had a pool made from a single LUN, which I'll call c4t0d0 for the > purposes of this email. We replaced it with another LUN, c4t1d0, to > grow the pool size. Now c4t1d0 is hosed and I'd like to see about > recovering whatever data we can from the original LUN, c4t0d0. > > I can still see the ZFS labels on t0 with zdb [1], but it is not > available for importing (even with zpool import -D). Are there any > tools available for me to tweak the metadata on the old LUN so that I > can import it? Is there anything else I can try? > > I am using Solaris 10 U9, and before anyone says anything, our SAN guys > don't really understand ZFS or else I would have made the pool redundant > in the first place.
I found an old post by Jeff Bonwick with some code that does EXACTLY what I was looking for [1]. I had to update the 'label_write' function to support the newer ZFS interfaces: > /* > * Write a label block with a ZBT checksum. > */ > static void > label_write(int fd, uint64_t offset, uint64_t size, void *buf) > { > zio_eck_t *zbt, zbt_orig; > zio_cksum_t zc; > > zbt = (zio_eck_t *)((char *)buf + size) - 1; > zbt_orig = *zbt; > > ZIO_SET_CHECKSUM(&zbt->zec_cksum, offset, 0, 0, 0); > > zio_checksum_SHA256(buf, size, &zc); > zbt->zec_cksum = zc; > > VERIFY(pwrite64(fd, buf, size, offset) == size); > > *zbt = zbt_orig; > } Then I compiled it against the illumos headers...something like: > /usr/sfw/bin/gcc -I illumos-gate/usr/src/uts/common/fs/zfs -o labelfix > labelfix.c illumos-gate/usr/src/uts/common/fs/zfs/sha256.c assfail.o -lzfs > -lnvpair -lmd And finally ran the resulting binary against the old LUN: > # zpool import > # ./labelfix /dev/rdsk/c4t60000970000192602845533030373032d0s0 > # zpool import > pool: idmtestdb2 > id: 10473782060848894552 > state: DEGRADED > action: The pool can be imported despite missing or damaged devices. The > fault tolerance of the pool may be compromised if imported. > config: > > idmtestdb2 DEGRADED > replacing-0 DEGRADED > c4t60000970000192602845533030373032d0 ONLINE > c4t60000970000192602845533030363743d0 UNAVAIL cannot open > # zpool import idmtestdb2 > # zpool detach idmtestdb2 18335497050081682816 > # zpool status idmtestdb2 > pool: idmtestdb2 > state: ONLINE > scrub: none requested > config: > > NAME STATE READ WRITE CKSUM > idmtestdb2 ONLINE 0 0 0 > c4t60000970000192602845533030373032d0 ONLINE 0 0 0 > > errors: No known data errors Thank you Jeff! [1] http://thread.gmane.org/gmane.os.solaris.opensolaris.zfs/15796/focus=15929 _______________________________________________ zfs-discuss mailing list zfs-discuss@opensolaris.org http://mail.opensolaris.org/mailman/listinfo/zfs-discuss