/!\ Note: This is a SummerOfCode2005 project. Pawel (pjd) has reimplemented gjournal with hooks in the file system code so it can properly do file system journaling. See http://docs.freebsd.org/cgi/mid.cgi?20060619131101.GD1130 for details. This has effectively made the version of gjournal described here obsolete - please use the new version. This page is retained for historical purposes.

Here's the original gjournal_proposal. Many technical information and details of the plan can be found in it.

Gjournal is a layer in the GEOM hierarchy that consumes two lower-layer devices and produces one device. The two lower-layer devices are called data disk and journal disk. The data disk is self-sufficient and (eventually) contains verbatim data that's handled to the layer, so after the journal is disconnected it in itself can be used as a normal storage device. The journal disk contains linear records for every write request handled to the layer.

/!\ Note: Unfortunately, gjournal cannot replace a journaling filesystem. At least, a fsck is still needed on the journaled device/filesystem after a crash.

{i} 2005-09-01 final version is available at http://ivoras.sharanet.org/stuff/gjournal-beta3.tgz ! The only reason I'm calling it "beta" is that it didn't receive much testing yet. For all intents and purposes, this is the "release" version.

{i} 2005-08-14 feature-complete beta version is available at http://ivoras.sharanet.org/stuff/gjournal-beta.tgz - it is announced at current@ list. Be sure to read the README file!

{i} 2005-08-03 first public alpha version is available at http://ivoras.sharanet.org/stuff/gjournal.tgz - it's announced at hackers@ list.

{i} 2005-08-01 The work is progressing nicely, basic journaling works currently. The code needs to be cleaned up a lot (especially the parts using various locks) and a lot of features need to be implemented. Initial simple performance benchmarks show that it has the potential to be actually pretty fast.

The "speed-optimized" journal disk format for each IO write request (consisting of 1 data block) writes to the journal:

A record map is kept to keep track of which bits of information is stored where. Journal device is internally divided into two areas, one fills while other commits.

{i} The "space-optimized" format is similar to the previously described, but one descriptor block contains information about several records, for space efficiency. It has proven to be significantly slower because it requires constant seekeing to maintain it current.


Gjournal will provide a "stable" data journal. There will be two usage modes:

The kernel module is controlled similar to gmirror, gstripe, graid3 etc. - with the "geom journal" or "gjournal" utility. Some of the commands implemented are:

Some possible parameters that can be used in "label" command are:

Bits and pieces of information:

Tentative schedule

Serious work will begin somewhere around 2005-07-15, with first results probably available at 2005-08-15. Project finalization is expected sometime around 2005-09-01 (Google's rules. I'll probably continue working on it even after the date, but this is the date when it must be usable). Of course bughunting, being such an interesting sport, will continue probably forever :)

gjournal (last edited 2020-12-27T06:45:00+0000 by SashaVigole)