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