# How to Configure Container Volumes with ext4 Journaling Modes: Ordered, Writeback, and Journal

> Configure ext4 journaling modes ordered, writeback, and journal for container volumes using the `--opt journal=<mode>` flag for optimal performance and durability. Learn how to set these essential volume options.

- Repository: [Apple/container](https://github.com/apple/container)
- Tags: how-to-guide
- Published: 2026-06-13

---

**Use the `--opt journal=<mode>` flag when creating volumes with the `local` driver to configure ext4 journaling as `ordered`, `writeback`, or `journal` according to your durability and performance requirements.**

The `apple/container` project provides granular control over filesystem behavior through the `local` volume driver. When you configure volumes with ext4 journaling modes, you can tune the balance between data integrity and write performance using driver-specific options passed at creation time. The `journal` option maps directly to the kernel's ext4 journaling settings, allowing you to specify metadata handling and data ordering guarantees.

## Understanding ext4 Journaling Modes

The ext4 filesystem supports three distinct journaling strategies that control how metadata and file data are committed to disk. According to the command reference documentation in [`docs/command-reference.md`](https://github.com/apple/container/blob/main/docs/command-reference.md), the **journal** option accepts three modes:

### Ordered Mode (Default)

Only metadata is journaled, but file data is flushed to disk **before** its metadata is committed. This provides a safety-performance balance and matches the kernel's default behavior. Use this for general-purpose containers where data integrity is important but you still want decent performance.

### Writeback Mode

Only metadata is journaled; data ordering relative to metadata is **not** guaranteed. This is the fastest mode but provides the least safety. Use this for temporary scratch space or scenarios where maximum throughput outweighs the risk of data loss on crash.

### Journal Mode

Both metadata **and** file data are journaled. This is the safest mode but introduces the most write amplification. Use this for highly critical data that must survive power loss at the cost of speed.

## Configuring Volumes with Ext4 Journaling Modes

To configure ext4 journaling modes, use the `container volume create` command with the `--opt` flag. The `local` driver accepts the `journal` option to specify the journaling mode.

Create a volume with **ordered** journaling (the default, shown for clarity):

```bash
container volume create --opt journal=ordered myorderedvol

```

Create a volume with **writeback** journaling for maximum performance:

```bash
container volume create --opt journal=writeback myfastvol

```

Create a volume with full **journal** mode for maximum data protection:

```bash
container volume create --opt journal=journal mysecurevol

```

Mount the newly-created volume in a container:

```bash
container run -v myorderedvol:/data alpine ls /data

```

## Specifying Journal Size

You can append a size suffix to the journal option to override the kernel's default allocation. The format is `journal=<mode>:<size>`, where size accepts **K**, **M**, **G**, **T**, or **P** suffixes.

Create a writeback volume with an explicit 64 MiB journal:

```bash
container volume create --opt journal=writeback:64m myfastvol

```

Create a secure volume with a 10 GiB volume size and full journaling:

```bash
container volume create \
   --opt journal=journal \
   --opt size=10g \
   mysecurevol

```

## Implementation Reference

The journaling configuration is implemented in the `local` volume driver as documented in [`docs/command-reference.md`](https://github.com/apple/container/blob/main/docs/command-reference.md). The **Driver Options** section (lines 887-894) defines the `journal` parameter and lists the supported modes (`ordered`, `writeback`, `journal`). Concrete examples appear in the **Examples** section (lines 995-1004), demonstrating the syntax for each journaling mode including the optional size suffix.

## Summary

- The `local` volume driver in `apple/container` supports ext4 journaling configuration via the `--opt journal=<mode>` flag
- Three modes are available: `ordered` (balanced safety/performance), `writeback` (fastest), and `journal` (safest)
- Optional journal size can be specified with the syntax `journal=<mode>:<size>` using standard size suffixes (K, M, G, T, P)
- Configuration details are documented in [`docs/command-reference.md`](https://github.com/apple/container/blob/main/docs/command-reference.md) at lines 887-894 and 995-1004

## Frequently Asked Questions

### What is the default ext4 journaling mode when creating a container volume?

The default mode is `ordered`, which journals only metadata while ensuring file data is flushed to disk before metadata commits. This matches the kernel's standard behavior and provides a good balance between data integrity and performance without requiring explicit configuration.

### Can I change the journaling mode on an existing volume?

No, the journaling mode is set at volume creation time using `container volume create`. Once the ext4 filesystem is created on the volume, you cannot change the journaling mode without reformatting the underlying filesystem.

### How do I specify the journal size when creating a volume?

Append the desired size to the journal option using the format `--opt journal=<mode>:<size>`. For example, `--opt journal=ordered:128m` creates an ordered journal with 128 MiB allocated. Valid suffixes include **K**, **M**, **G**, **T**, and **P**.

### Which journaling mode should I use for database containers?

Use `ordered` (default) for databases requiring a balance of durability and performance, or `journal` for maximum data protection. Avoid `writeback` for database workloads unless you have specific application-level crash recovery mechanisms, as it risks data corruption on system failure.