Retaining undelete data on ext3

Bodo Thiesen bothie at gmx.de
Sun Oct 8 17:40:12 UTC 2006


Theodore Tso <tytso at mit.edu> wrote:

> Actually, you can't --- that's the problem.  Until the changes are
> committed, which means that the changes represented in the filesystem
> are self-consistent and in a transaction which has been committed to
> the journal, you can't start restoring the information in the indirect
> block.

I don't see the problem here. Ok, I must admit not to know the code very 
much, especially the journaling part, I only know the non journaling 
on-disk structures.

But just considering:

We are talking about commiting transactions or not committing transactions. 
Assume we have a big file, and ind block I1, dind block D1 and tind block T 
must be changed to be self-consistent. Ok, no problem, we store the original 
contents of this three blocks in memory, and then update (i.e. zero out) some 
parts. In the next transaction, we need to change I2, D2 and T. If I1 != I2, 
we restore I1 in this transaction - it's no longer needed, remember the old 
content of I2 and log the changes for I2 in the journal. Same applies to D2 
vs. D1. If I1 and I2 (or D1 and D2 resp.) are the same, they are just updated 
leaving the in memory copy of the original data alone. So, I don't see the 
point why we would need to force the data to disk. Is the system crashes, I1 
will just be written several times instead just one time. But after the whole 
log has been replayed, the file system is consistent again. The only 
missfeature is now, that the in memory copy of the original versions of the 
blocks will be lost, but my proposal from very long time fixes that as well by 
just storing the updates in other places then the original version which 
retain unmodified.

Regards, Bodo




More information about the Ext3-users mailing list