This is an old revision of the document!


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.

:!: All information present on this page is ephemeral and unfinished. The end result of the project might be implemented in a totally different way.

The current plan for the journal disk format is that for several IO write requests (consisting of N data blocks total) this is written to the journal:

  • 1 “descriptor” block, containing information such as disk offsets and sizes for the requests
  • N verbatim data blocks

A list of descriptors for “live records” (those that need to be commited to data disk) is kept in memory to speed up journal replay and enable to mask-out old records that are overwritten by new ones (actual format in which the data is kept may or may not resemble a list :) ). This list is not written to journal but can be reconstructed from descriptor blocks if needed.

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

  • “regular” journaling, with records committed to data disk when the journal gets full
  • “copy-on-write” (or “delayed-commit”) mode

It's planned to make a userland control utility similar to those of gmirror, gstripe, graid3 etc. Some of the commands planned are:

  • gjournal create mydevice /dev/data_disk /dev/journal_disk
  • gjournal destroy mydevice
  • gjournal unjournal mydevice (temporarily stop journaling)
  • gjournal rejournal mydevice (start journaling again)
  • gjournal commit mydevice (force a journal commit)

Some possible parameters that can be used are:

  • -m journal|cow - make a regular journal (default) or COW journal
  • -o speed|space - optimize journaling for speed or space taken on the journal device (optional implementation)

Bits and pieces of information:

  • Gjournal will enforce that both data disk and journal disk have same-sized sectors. This size will be advertized as the gjournal device sector size

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-15. Of course bughunting, being such an interesting sport, will continue probably forever :)

  • gjournal.1119982611.txt.gz
  • Last modified: 2005/06/28 18:16
  • by IvanVoras