The ext3cow file system is a time-shifting file system implemented
with copy-on-write (COW) and based on the very
popular ext2/ext3 file system.
Phew! Now what does all that
mean? Basically, it's a functionally enhanced version of ext3 that
allows one to take
a snapshot of one's file system, with one second granularity, freezing the
way the file system looked at given point-in-time. One may then travel
back through time, if you will, and be presented with a read-only
image of the file system. No special mounting, or '.' directories.
Just type a name or directory followed by the special '@' character and a time. For example:

The second cat, reads the current
version of the file, while the first cat, reads the file foo.txt as it appeared at Thu Jul 10 09:58:04 2003.
The syntax for the time variable is the number of
seconds passed since the Epoch (00:00:00 UTC, January 1, 1970). This
may seem a little weird to use, but we believe
any fancier date syntax should be parsed by a shell or shell macro and
not by the file system. This is on
our ToDo List.
Of course, this works for more than just text files; images, databases,
and binaries, ext3cow does it all.
There are quite a few advantages to system like this, including data
availability and reliability, a consistent image for backup, a checkpoint
for restoring the state of a file system, a source for data mining, and
a way to provide tamper resistant storage.
So, what are the trade-offs for such a system?
For every version of a file that exists, an inode
must exist to reference it. Therefore, there's a slight increase in metadata
overhead of about 5%. Of course this percentage
varies with snapshot frequency and the
number of files modified between snapshots. If you never take
a snapshot, then there's no increase in metadata.
Further, no data is every thrown away, so there's higher data block
usage. Results
on the average increase in data block usage have yet to be reported,
but because of the copy-on-write policy, only the blocks that have
changed between snapshots are written to disk. In this way, versions
of the same file may share data blocks between snapshots minimizing
the data footprint.
Other features include being able to change into a directory in the past
and read it's contents as it appeared at a point-in-time, making
symbolic links to files in the past, and the ability to diff versions of file.