88 Storage Debugging

Storage ist eine der komplexesten und gleichzeitig fragilsten Ebenen im Container-Stack. Fehler in dieser Schicht äußern sich häufig indirekt: Anwendungen reagieren träge, schreiben nicht, starten nicht oder zeigen ungewöhnliche Race-Conditions. Podman – als daemonlose Engine – macht Storage-Diagnose einerseits transparenter, weil keine Daemon-Intermediärschicht existiert, andererseits aber auch detailreicher, weil der Kernel direkt sichtbar wird. Dieses Kapitel beschreibt die Mechanismen des Podman-Storage-Subsystems, typische Fehlerbilder und Schritte zur Analyse.

88.1 Fundament: OverlayFS und Container-Layer

Container-Storage basiert fast immer auf OverlayFS. Das Konzept ist simpel: ein read-only Image-Layer und ein beschreibbarer Upper-Layer bilden zur Laufzeit ein gemeinsames, virtuelles Dateisystem.

Podman legt die Layer standardmäßig hier ab:

Prinzipieller Aufbau:

Wird eine Datei verändert, landet sie im Upper-Layer; Löschungen werden als „Whiteouts“ repräsentiert.

88.2 Identifikation der Storage-Layer

Die Storage-Daten eines Containers sind über podman inspect sichtbar:

podman inspect --format '{{.GraphDriver.Data}}' <container>

Ergebnis:

Diese Pfade dienen als Einstiegspunkt für tiefere Analysen.

88.3 Typische Fehlerbilder im Storage

88.3.1 1. „Permission denied“ trotz korrekter UNIX-Berechtigungen

Häufig fragt man sich: Warum kann der Container nicht schreiben, obwohl Permissions sauber gesetzt sind?

Ursache oft:

Diagnose:

ls -lZ <volume-path>

Fehlt das container_file_t, wird SELinux die Operation blockieren.

88.3.2 2. Kaputte Overlay-Layer

Probleme zeigen sich durch:

OverlayFS kann bei abrupten Host-Reboots oder vollgelaufenen Partitionen beschädigt werden.

Erkennung:

journalctl -k | grep overlay

Typische Meldungen:

overlayfs: upper fs missing
overlayfs: failed to read xattrs

Lösung: Container recreaten; bei hartnäckigen Fehlern: gesamten Overlay-Bereich bereinigen.

88.3.3 3. Volume-Shadowing

Ein Denkfehler: Wenn ein Pfad sowohl im Image existiert als auch als Volume gemountet wird, „verschwindet“ der Image-Inhalt.

Beispiel:

VOLUME /data
...
podman run -v data:/data app

Der Mount überschreibt den Image-Pfad vollständig.

Diagnose:

podman diff

Wenn Image-Inhalt “verloren” wirkt: wahrscheinlich überschrieben durch ein Volume.

88.3.4 4. Vollgelaufene Partitionen

OverlayFS teilt sich Speicher mit dem Host. Ist /var oder $HOME voll, verhält sich der Container unberechenbar.

Diagnose:

df -h
du -sh /var/lib/containers/storage

88.3.5 5. „No space left on device“ trotz freiem Platz

OverlayFS meldet ENOSPC, sobald:

Inodes prüfen:

df -i

xattrs prüfen (experimentell):

getfattr -d <file>

88.3.6 6. Leasing-Probleme bei NFS-Backends

Container-Volumes auf NFS sind ein häufiger Fehlerauslöser – insbesondere bei schreibintensiven Anwendungen.

Symptome:

Diagnose:

dmesg | grep nfs

Bei Datenbanken im Container ist NFS generell nicht zu empfehlen.

88.4 Debugging des Upper-Layers

Der Upper-Layer spiegelt alle Laufzeitänderungen wider. Er ist der wichtigste Ort für Storage-Diagnosen.

88.4.1 Upper-Layer inspizieren

podman inspect --format '{{.GraphDriver.Data.UpperDir}}' <container>

Diesen Pfad kann man direkt betrachten – mit Vorsicht.

Ziele:

Whiteouts sind entscheidend für Diff-Analysen:

find <upper-layer> -name ".wh.*"

Sie zeigen entfernte Dateien an.

88.5 Maneuvering zwischen Layers: LowerDir verstehen

LowerDir enthält die Image-Inhalte. Manchmal ist relevant zu sehen, ob eine Datei aus dem Image kommt oder vom Container verändert wurde.

Beispiel:

grep -R test.conf $(podman inspect --format '{{.GraphDriver.Data.LowerDir}}' <container>)

Wenn etwas “unerklärlich auftaucht”, liegt es oft im Image-Layer, nicht im Container-Layer.

88.6 Volume-Debugging

Volumes sind persistent – und damit fehleranfälliger.

88.6.1 Auflistung

podman volume ls

88.6.2 Inspektion

podman volume inspect <volume>

Gibt:

88.6.3 Inhalte betrachten

Volumes liegen typischerweise unter:

Wenn Anwendungen “keine Daten speichern”, ist das häufigste Problem:

88.7 Storage-Namespaces und Rootless-Besonderheiten

Rootless Storage basiert auf FUSE OverlayFS oder kernelbasierten User-Namespace-Funktionen. Typische Probleme:

88.7.1 1. FUSE-Overlay instabil oder langsam

Symptome:

Diagnose:

mount | grep fuse

88.7.2 2. UID/GID-Mapping-Probleme

Rootless Container mappen ihre IDs aus dem Host, z. B.:

100000–165536

Wenn Dateien auf dem Host außerhalb dieses Range liegen, sind sie für den Container nicht beschreibbar.

Diagnose:

ls -ln /pfad
grep <user> /etc/subuid

88.7.3 3. Rootless-Pods und SELinux

In rootless Umgebungen kann SELinux in manchen Distributionen eingeschränkt wirken – das betrifft Volumes.

88.8 Debugging von Copy-on-Write-Problemen

Wenn Anwendungen unerwartet langsam sind, liegt es häufig am CoW-Verhalten des OverlayFS.

Symptome:

Messung:

iostat -xz 2

Oder containerbezogen:

podman stats

Wenn das Root-Filesystem zu sehr belastet ist, empfiehlt es sich, Volumes statt UpperDir zu nutzen.

88.9 Werkzeuge für tiefere Storage-Diagnosen

Typisches Flowchart zur Diagnose:

88.10 Best Practices für Storage-Stabilität


Storage Debugging in Podman verlangt ein gutes Verständnis von OverlayFS, Namespace-Isolation, Volume-Handling und Kernel-Interaktionen. Wer diese Mechanismen kennt, kann nahezu jede Fehlerquelle identifizieren — egal ob sie aus Applikationsverhalten, Hostkonfiguration oder Storage-Limits entsteht.