Jump to content

Journaling 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 Tweedie from Red Hat. JBD is filesystem-independent. ext3, ext4 and OCFS2 are known to use JBD.[1][2]

JBD exists in two versions, JBD and JBD2. JBD was created with ext3 in 1998.[3] JBD2 was forked from JBD in 2006 with ext4, with the goal of supporting a 64-bit (as opposed to 32-bit-only in JBD) block number. As a result, the maximum volume size in ext4 is increased to 1 EiB compared to 16 TiB in ext3 (assuming 4 KiB blocks).[4] JBD2 is backward-compatible. OCFS2 starting from Linux 2.6.28 uses JBD2.[5] The old JBD was removed with the dedicated ext3 driver in Linux 4.3 (2015).[6]

JBD structures

[edit]

Atomic handle

[edit]

An atomic handle is 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.[2]

Transaction

[edit]

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:[2]

  • 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.

Recovery

[edit]

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

Sources

[edit]
  1. ^ "The Linux Journalling API". The Linux Kernel documentation.
  2. ^ a b c d Kedar Sovani (June 20, 2006). "Linux: The Journaling Block Device". KernelTrap. Archived from the original on 2007-09-26.
  3. ^ Stephen C. Tweedie (May 1998). "Journaling the Linux ext2fs Filesystem" (PDF). Proceedings of the 4th Annual LinuxExpo, Durham, NC. Retrieved 2007-06-23.
  4. ^ Mingming Cao (9 August 2006). "Forking ext4 filesystem and JBD2" (Mailing list). Linux kernel mailing list.
  5. ^ "Linux 2.6.28". kernelnewbies.org. 2008.
  6. ^ Corbet, Jonathan. "rm -r fs/ext3". LWN.net.