ZFS recovery after power failure

Michael DeMan freebsd at deman.com
Wed Dec 22 16:31:21 UTC 2010


Hi Sergey,

I am curious on the details of how you did this in case I ever need to do it in the future.


I presume what you did was...

A) grab the uberblocks off of each disk to text files using dd or something?

B) find the most recent uberblocks (they should be round robin, with incrementing transaction group numbers so fairly easy to analyze)?

C) you cleared out the most recent two uberblocks on each disk by making their transaction group (uint64_t ub_txg) to zero or something, using dd again?

D) Did you also have to recalculate the checksum (uint64_t ub_guid_sum), or were you able to just leave it as-is and ZFS was okay, and then subsequently just wrote out a new/valid uber block to that position in the array as new transactions began after you were able to get the pool remounted?

Thanks,

- Mike


On Dec 19, 2010, at 7:13 AM, Sergey Gavrilov wrote:

> I've destroyed 2 latest uberblocks and imported pool. It's ok now.
> Your command don't work for me as is, but all tgx nubmers of all labels are
> the same and equal 666999 now.
> Think it's already useless information.
> So I saved those uberblocks. I can provide them if you need.
> 
> 2010/12/19 Pawel Jakub Dawidek <pjd at freebsd.org>
> 
>> On Sat, Dec 18, 2010 at 11:21:52AM +0300, Sergey Gavrilov wrote:
>>> zpool import -F pool2 ok, but
>>> zpool status -xv
>>>  pool: pool2
>>> state: FAULTED
>>> status: The pool metadata is corrupted and the pool cannot be opened.
>>> action: Destroy and re-create the pool from a backup source.
>>>   see: http://www.sun.com/msg/ZFS-8000-72
>>> scrub: none requested
>>> config:
>>> 
>>>    NAME        STATE     READ WRITE CKSUM
>>>    pool2       FAULTED      0     0     1  corrupted data
>>>      raidz2    ONLINE       0     0     6
>>>        da9     ONLINE       0     0     0
>>>        da10    ONLINE       0     0     0
>>>        da11    ONLINE       0     0     0
>>>        da12    ONLINE       0     0     0
>>>        da13    ONLINE       0     0     0
>>>        da14    ONLINE       0     0     0
>>>        da15    ONLINE       0     0     0
>>>        da16    ONLINE       0     0     0
>>> 
>>> zpool clear pool2
>>> cannot clear errors for pool2: I/O error
>>> 
>>> Is there any way to recovery data or portion of data at least.
>> 
>> Could you provide output of:
>> 
>>       # apply "zdb -l /dev/da%1 | egrep '(^LABEL|txg=|)'" `jot 8 9`
>> 
>> --
>> Pawel Jakub Dawidek                       http://www.wheelsystems.com
>> pjd at FreeBSD.org                           http://www.FreeBSD.org
>> FreeBSD committer                         Am I Evil? Yes, I Am!
>> 
> 
> 
> 
> -- 
> Best regards,
> Sergey Gavrilov
> _______________________________________________
> freebsd-fs at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-fs
> To unsubscribe, send any mail to "freebsd-fs-unsubscribe at freebsd.org"



More information about the freebsd-fs mailing list