Journaled block device

From Wikipedia, the free encyclopedia

JBD, or journaling block device, is a generic block device journaling layer in the Linux kernel written by Stephen C. Tweedie from Red Hat.

Contents

[edit] Overview

JBD provides an abstract interface that can be used by any file systems to provide journaling. Up to date, only ext3 and ext4 are known to use JBD.

[edit] JBD structures

[edit] Atomic handle

An atomic handle as basically a collection of all the low-level changes that occur during a single high-level atomic update to the file system. The atomic handle guarantees that the high-level update either happens or not, because the actual changes to the file system are flushed only after logging the atomic handle in the journal.

[edit] Transaction

For the sake of efficiency and performance, JBD groups several atomic handles into a single transaction, which is written to the journal after a fixed amount of time elapses or there is no free space left on the journal to fit it.

The transaction has several states:

  • Running - it means that the transaction is still live and can accept more handles
  • Locked - not accepting new handles, but the existing ones are still unfinished
  • Flush - the transaction is complete and is being written to the journal
  • Commit - the transaction is written to the journal and now the changes are being applied to the file system
  • Finished - the transaction has been fully written to the journal and the block device. It can be deleted from the journal.

[edit] Recovery

Based on the transaction states, the JBD is able to determine which transactions need to be replayed (or reapplied) to the file system.

[edit] Sources