For an unknown reason, it seems our data.fs got corrupted last night. In the event.log I can see the following: ------ 2008-07-30T22:51:59 ERROR ZODB.Connection Couldn't load state for 0x086540 Traceback (most recent call last): File "C:\PloneExt\Zope\lib\python\ZODB\Connection.py", line 704, in setstate self._setstate(obj) File "C:\PloneExt\Zope\lib\python\ZODB\Connection.py", line 740, in _setstate p, serial = self._storage.load(obj._p_oid, self._version) File "C:\PloneExt\Zope\lib\python\ZODB\FileStorage\FileStorage.py", line 549, in load h = self._read_data_header(pos, oid) File "C:\PloneExt\Zope\lib\python\ZODB\FileStorage\format.py", line 193, in _read_data_header raise CorruptedDataError(oid, s, pos) CorruptedDataError: Error reading oid 0x086540. Found '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' at 10020462 ------ We tried to use the fsrecover.py utility but it gives us the following error when we run against the damaged data.fs: "input is not a file storage" Now is there anybody that knows how we could restore our data.fs because we have important data in it? Thanks in advance Remy
On Thu, Jul 31, 2008 at 10:48 PM, Remy Pinsonnault <remypinsonnault@gmail.com> wrote:
For an unknown reason, it seems our data.fs got corrupted last night. In the event.log I can see the following:
CorruptedDataError: Error reading oid 0x086540. Found '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' at 10020462
You have 2 pieces of info there, the oid and the file position. You could use fsdump to verify the oid and position, then truncate the file at that position. Short recipe (may be outdated a bit) of the procedure: http://kelpi.com/script/018315 I certainly have performed truncations like that in the past. -- Martijn Pieters
Thanks Martijn for your answer. I tried fsdump but it did not work I got a FileStorageFormatError... Is there any other way I can obtain the needed paramater (position) for the truncate function where the CorruptedDataError occured? Another question, is there a way of extracting all data or transaction between two dates? On Thu, Jul 31, 2008 at 4:21 PM, Martijn Pieters <mj@zopatista.com> wrote:
On Thu, Jul 31, 2008 at 10:48 PM, Remy Pinsonnault <remypinsonnault@gmail.com> wrote:
For an unknown reason, it seems our data.fs got corrupted last night. In the event.log I can see the following:
CorruptedDataError: Error reading oid 0x086540. Found
'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
at 10020462
You have 2 pieces of info there, the oid and the file position. You could use fsdump to verify the oid and position, then truncate the file at that position. Short recipe (may be outdated a bit) of the procedure:
http://kelpi.com/script/018315
I certainly have performed truncations like that in the past.
-- Martijn Pieters
On Fri, Aug 1, 2008 at 7:01 PM, Remy Pinsonnault <remypinsonnault@gmail.com> wrote:
I tried fsdump but it did not work I got a FileStorageFormatError...
You only get that error if a) the first four bytes of the file are not 'FS21', or b) the file is smaller than 4 bytes. Are you sure you were trying this on the corrupted Data.fs? If so, you may have a bigger problem on your hands.
Is there any other way I can obtain the needed paramater (position) for the truncate function where the CorruptedDataError occured?
The exception included the position: 10020462. I just advised you to double-check it.
Another question, is there a way of extracting all data or transaction between two dates?
Take a look at what fsdump.py does, it uses a FileIterator to list all transactions in the Data.fs. The returned objects (RecordIterators) represent the transactions and you can iterate over these to pull out all data associated with the transaction. Each transaction id is based on the timestamp (use ZODB.TimeStamp.TimeStamp to decode it) so it should be but a small job to extract everything between two given dates. See the sourcecode for fsdump.py and FileStorage.py in ZODB/FileStorage. -- Martijn Pieters
Remy Pinsonnault wrote at 2008-7-31 15:48 -0500:
For an unknown reason, it seems our data.fs got corrupted last night. In the event.log I can see the following: ------ 2008-07-30T22:51:59 ERROR ZODB.Connection Couldn't load state for 0x086540 Traceback (most recent call last): File "C:\PloneExt\Zope\lib\python\ZODB\Connection.py", line 704, in setstate self._setstate(obj) File "C:\PloneExt\Zope\lib\python\ZODB\Connection.py", line 740, in _setstate p, serial = self._storage.load(obj._p_oid, self._version) File "C:\PloneExt\Zope\lib\python\ZODB\FileStorage\FileStorage.py", line 549, in load h = self._read_data_header(pos, oid) File "C:\PloneExt\Zope\lib\python\ZODB\FileStorage\format.py", line 193, in _read_data_header raise CorruptedDataError(oid, s, pos) CorruptedDataError: Error reading oid 0x086540. Found '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' at 10020462
This almost surely indicates some problem with you hardware. Check it, be even more careful with backups, maybe replace doubtful components. "fsrecover" may help you to recover most of the data in your current storage file (unless your backup is not already sufficiently good to continue from this). -- Dieter
participants (3)
-
Dieter Maurer -
Martijn Pieters -
Remy Pinsonnault