# How to Enable Volume Journaling with ext4 Options for Data Durability in apple/container

> Enhance data durability with ext4 volume journaling in apple/container. Learn to enable journal modes ordered, writeback, or journal with optional size allocation using container volume create.

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

---

**Use `container volume create --opt journal=<mode>` to configure ext4 journaling modes (`ordered`, `writeback`, or `journal`) for persistent volumes, optionally appending a size like `:64m` to allocate a specific journal size.**

The apple/container CLI leverages the Linux ext4 file system for persistent volume storage. By default, volumes mount with `ordered` journaling, which only commits metadata. For applications requiring stronger data durability guarantees, you can explicitly enable volume journaling with ext4 options during volume creation to control the trade-off between safety and performance.

## Understanding ext4 Journaling Modes

According to the apple/container source code, the tool supports three distinct journaling modes defined in [`docs/command-reference.md`](https://github.com/apple/container/blob/main/docs/command-reference.md) (lines 886-891):

- **ordered** (default): Only metadata is journaled. Data is written to disk before its metadata is committed, providing a balance of safety and speed.
- **writeback**: Only metadata is journaled, with no guaranteed ordering between data and metadata writes. This offers the fastest performance but the weakest durability guarantees.
- **journal**: Both metadata and data are journaled. This provides the strongest durability guarantees but incurs the highest write amplification and performance overhead.

You can optionally append a journal size to any mode using the syntax `mode:size` (for example, `journal:64m`).

## Creating Volumes with Custom Journaling Options

To enable volume journaling with ext4 options, pass the `--opt` flag to the `container volume create` command. The key/value pair forwards directly to the underlying local volume driver, which applies the specified mode when mounting the ext4 file system.

As documented in [`docs/command-reference.md`](https://github.com/apple/container/blob/main/docs/command-reference.md) (lines 996-1004), the syntax is:

```bash
container volume create --opt journal=<mode>[:<size>] <volume_name>

```

### Basic Usage Examples

Create a volume with the default ordered journaling explicitly declared:

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

```

Create a volume with writeback journaling for maximum write performance:

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

```

Create a volume with full data journaling and a 64 MiB journal size:

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

```

Combine journaling options with size constraints:

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

```

Mount the volume in a container using standard syntax:

```bash
container run -v mydata_full:/var/lib/app/data myimage:latest

```

## How Volume Journaling Works Internally

When you execute `container volume create` with `--opt journal=...`, the CLI forwards the option to the local Docker volume driver. The driver then mounts the new volume with the ext4 file system, passing the chosen journaling mode to the kernel via the `-o journal=` mount option.

The kernel initializes the journal structures on the block device according to your specified mode. If you provide a size suffix (such as `:64m`), the driver allocates that specific amount of space for the journal; otherwise, the kernel selects a default journal size based on the volume capacity.

## Summary

- Use `container volume create --opt journal=<mode>` to configure ext4 journaling in apple/container.
- Choose between `ordered` (balanced), `writeback` (fastest), or `journal` (safest) modes.
- Append a size suffix (e.g., `:64m`) to control journal allocation explicitly.
- Configuration details appear in [`docs/command-reference.md`](https://github.com/apple/container/blob/main/docs/command-reference.md) at lines 886-891 and 996-1004.
- The option forwards to the kernel via the ext4 mount option `-o journal=`.

## Frequently Asked Questions

### What is the default ext4 journaling mode in apple/container?

The default mode is `ordered`, which journals only metadata while ensuring data is written to disk before its metadata is committed. This provides a reasonable balance between data safety and write performance without requiring explicit configuration.

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

No, the `--opt journal` parameter applies only during volume creation with `container volume create`. To change journaling modes on existing data, you must create a new volume with the desired options and migrate your data, as the journal mode is established when the ext4 file system is initially mounted.

### How does the `journal` mode impact performance compared to `ordered`?

The `journal` mode significantly increases write amplification because it logs both metadata and content data to the journal before committing to the main file system. This provides the strongest crash recovery guarantees but reduces write throughput compared to `ordered` mode, which only journals metadata.

### Where is the journaling option documented in the source code?

The official documentation resides in [`docs/command-reference.md`](https://github.com/apple/container/blob/main/docs/command-reference.md) at lines 886-891 (option definition) and lines 996-1004 (usage examples), which describe the supported modes (`ordered`, `writeback`, `journal`) and the optional size syntax.