Re: ReiserFS data corruption in very simple configuration

Mike Fedyk
2001-10-01T03:38:22Z

Hi,

On Wed, Sep 26, 2001 at 03:43:11PM +0100, Stephen C. Tweedie wrote:
> On Tue, Sep 25, 2001 at 01:13:04PM -0700, Mike Fedyk wrote:
> > If you have data journaling, does that mean there is a possability of
> > recovering a complete file -before- it was written? i.e:
>
> > echo a > test;
> > sync;
> > cat picture.tif > test
> > (writing in progress, only partially in journal)
> > power off
>
> > Will "a" be in test upon recovery?
>
> If you are using full data journaling (ext3's "journal" data mode) or
> the default "ordered" data mode, then no, you never see such
> behaviour.
>

At this point, it looks like I'm going to get a partial picture.tif in test
after recovery...

> In the ordered mode, it achieves this precisely because it is keeping
> a record of which blocks have been committed (or, more accurately,
> which *deleted* blocks have had the delete committed). If you do a
> "cat > file", then before the new data is written, the file gets
> truncated and all its old data blocks deleted. ext3 will then refuse
> to reuse those blocks until the delete has been committed, so if we
> crash and end up rolling back the delete transaction, we'll never see
> new data blocks in the old file.
>

Now, it looks like I'll end up with "a" in test...

>From what you're describing, it looks like the contents of test after a
truncate won't be overwritten by another transaction until the deletion of
those blocks has made it to disk... So, while in ordered, or journal mode,
I'd end up with "a" in test, but with writeback mode there is no such
guarantee.

Am I missing something?

Are there any known cases where ext3 will not be able to recover pervious
data when a write wasn't able to complete?

> Cheers,
> Stephen

Mike