What is the ext3 filesystem?

The ext3 filesystem, developed by RedHat extends the popular ext2
filesystem with the introduction of journaling.

What is a Journaling Filesystem?

A journaling filesystem keeps a journal or log of the changes that are
being made to the filesystem during disk writing that can be used to
rapidly reconstruct corruptions that may occur due to events such a
system crash or power outage. The level of journaling performed by the
file system can be configured to provide a number of levels of logging
depending on your needs and performance requirements.

What are the Advantages of a
Journaling Filesystem?

There are a number of advantages to using a journaling files system.

Both
the size and volume of data stored on disk drives has grown
exponentially over the years. The probelm with a non-journaled file
system is that following a crash the fsck (filesystem consistency
check) utility has to be run. fsck will scan the entire filesystem
validating all entries and making sure that blocks are allocated and
referenced correctly. If it finds a corrupt entry it will attempt to
fix the problem. The issues here are two-fold. Firstly, the fsck
utility will not always be able to repair damage and you will end up
with data in the lost+found directory. This is data that was
being used by an application but the system no longer knows where they
were reference from. The other problem is the issue of time. It can
take a very long time to complete the fsck process on a large file
system leading to unacceptable down time.

A journaled file system records information in a log area on a disk
(the journal and log do not need to be on the same device) during each
write. This is a essentially an "intent to commit" data to the
filesystem. The amount of information logged is configurable and ranges
from not logging anything, to logging what is known as the "metadata"
(i.e ownership, date stamp information etc), to logging the "metadata"
and the data blocks that are to be written to the file. Once the log is
updated the system then writes the actual data to the appropriate areas
of the filesystem and marks an entry in the log to say the data is
committed.

After a crash the filesystem can very quickly be brought back on-line
using the journal log reducing what could take minutes using fsck to
seconds with the added advantage that there is considerably less chance
of data loss or corruption.

What is a Journal Checkpoint?

When a file is accessed on the filesystem, the last snapshot
of that file is read from the disk into memory. The journal log is then
consulted to see if any uncommitted changes have been made to the file
since the data was last written to the file (essentially looking for an
"intention to commit" in the log entry as described above). At
particular points the filesystem will update file data on the disk from
the uncommited log entries and trim those entries from the log.
Committing operations from the log and synchronizing the log and its
associated filesystem is called a checkpoint.

What are the disadvantages of a
Journaled Filesystem?

Nothing in life is is free and ext3 and journaled filesystems are no
exception to the rule. The biggest draw back of journaling is in the
area of performance simply because more disk writes are required to
store information in the log. In practice, however, unless you are
running system where disk performance is absolutely critical the
performance difference will be negligable.

What Journaling Options are
Available with the ext3 filesystem?

The ext3 filesystem provides three options. These are as follows:

writeback - greater speed at the price of limited
data integrity. Allows old data to show up in files after a crash and
relies on kernel's standard writebacks to flush buffers.

ordered - that the data is consistent with the
file system; recently-written files will never show up with garbage
contents after a crash at the cost of some speed.

No, the ext3 journal log does not have to be on the same physical
device as the filesystem it is logging. On a RedHat Linux the journal
device can be specified using the journal_device=
option with the -journal-options
command line argument of the tune2fs utility.