# ADR 2 — Root filesystem<no value>

<!-- Generated by website/sync-docs.py from docs/adr/0002-root-filesystem.md. Edit that file, not this one. -->

Status: accepted

## Context

`fedora-bootc` ships an empty `/usr/lib/bootc/install/`, so the root filesystem
type is undecided. Every tool that installs the image needs it:
`bootc-image-builder` fails with `missing required info: DefaultRootFs`.

xfs was the first choice — it is what the CoreOS and RHEL lineage use for
container hosts, it handles the many-small-files pattern of an overlay image
store well, and it grows online.

Building the image with xfs failed on the target host:

```
XFS (loop0p4): Superblock has unknown incompatible features (0xc0) enabled.
XFS (loop0p4): Filesystem cannot be safely mounted by this kernel.
```

`xfsprogs` on Fedora 44 creates filesystems using features that kernels older
than 6.10 refuse to mount. `bootc-image-builder` mounts the root filesystem on
the *build host* to populate it, so the build fails there — Proxmox 8 runs
Debian 12 with kernel 6.8.

Note what this is not: the resulting disk would have booted correctly, since
the VM runs a current Fedora kernel. The image simply could not be produced.

## Decision

Declare `root-fs-type = "ext4"` in `/usr/lib/bootc/install/00-corium.toml`.

The type is declared in the image rather than passed as `--rootfs` on the build
command line, so the image stays self-describing and every installer agrees
without being told.

## Consequences

The image builds on any host with a kernel in service, which includes the
homelab Proxmox and CI runners people actually have. ext4 grows online with
`resize2fs`, so resizing a node's disk still works.

For a Kubernetes node, the practical difference between ext4 and xfs does not
justify restricting who can build the image.
