Bestimmte Verzeichnisse innerhalb einer Jail können in "externe" (Datasets) ausgelagert werden. Dadurch werden diese Daten unabhängig vom Jail gespeichert. Ziel ist es, ähnlich wie bei Docker, so wenig wie möglich vom Jail selbst abhängig zu sein. Sollte die Jail aus irgendeinem Grund beschädigt oder gelöscht werden, ist man so in der Lage, die vorherige Konfiguration und die Daten mit minimalem Aufwand wiederherzustellen. Außerdem können diese Verzeichnisse dann effizient und regelmäßig per Snapshot gesichert werden, was auch weitere Backups vereinfacht. Ganz zu schweigen von Umzügen oder Migrationen.
Letzte Aktualisierung:
work
/usr/local/bastille/data/JAILNAME
, welches auf den ZFS Pool data
in das Dataset bastille_data/JAILNAME
verweist/usr/local/bastille/jails/JAILNAME/root/mnt/data
123
Wichtig: Da hier mit ZFS gearbeitet wird, gibt es eine Unterscheidung zwischen dem Pool, bzw. Dataset und dem eigentlichen Verzeichnis, in dem das Dataset eingebunden wird. Wie hier beschrieben,
work
im Verzeichnis bastille
und data
im Verzeichnis bastille_data
abgelegt. Dieser Pool bietet vielleicht wesentlich mehr Speicherplatz. Das ist sehr praktisch bei großen Datenhalden wie Bildern oder Dateifreigaben, die im Jail direkt einfach nix verloren haben. Auch nur lesend falls benötigt.Damit diese unterschiedlichen Pools aber nicht immer wieder zu Verwirrungen führen, werden diese Dataset in dem Bastille Verzeichnis /usr/local/bastille/
gebündelt.
Damit sieht das komplette Bild folgendermaßen aus:
─ work/bastille -> /usr/local/bastille/
─ data/bastille_data -> /usr/local/bastille/data
└── /usr/local/bastille/jails # Jail Verzeichnis
└── JAILNAME # Jail Name
└── root # Root des Jails, das / im Jail
└── /usr/local/bastille/data # Jail Datenverzeichnis
└── JAILNAME # Jail Name
└── conf # Konfigurationen, z.B. /mnt/conf
└── data # Jail Daten, z.B. /mnt/data
└── db # Datenbanken, z.B. /var/db/pgsql
└── ... # usw
Aber wie kommt das zusammen? Ganz einfach über NullFS. NullFS legt quasi den Inhalt von Verzeichnis A in Verzeichnis B, auch über Jailgrenzen hinweg. z.B. /usr/local/bastille/data/JAILNAME/data
liegt dann in der Jail unter /mnt/data
. Sehr praktisch! Ein wichtiger Faktor sind jedoch die richtigen Berechtigungen. Wenn es in der Jail einen Benutzer USER
mit der ID 123
gibt, der entsprechende Zugriffsrechte auf ein Verzeichnis hat, dann MUSS das Verzeichnis außerhalb des Jails die gleichen Rechte haben. Glücklicherweise reicht dafür die Benutzer-ID aus, es muss also nicht jedes Mal der entsprechende Benutzername im FreeBSD-Server angelegt werden.
Alles was hier ausgeführt nachfolgend wird, passiert auf dem FreeBSD Server. NICHT innerhalb des Jails!
Zuerst wird das Basisverzeichnis work/bastille_data
erstellt und in /usr/local/bastille/data/
mit zfs create -o /usr/local/bastille/data data/bastille_data
eingebunden. Das Verzeichnis /usr/local/bastille/data/JAILNAME/data
wird dann einfach mit dem Befehl zfs create -p work/bastille_data/JAILNAME/data
angelegt. Das übergeordnete Verzeichnis /usr/local/bastille/data/JAILNAME
wird durch den Parameter -p
dabei ebenfalls automatisch mit angelegt.
Die Syntax lautet:zfs create -p POOLNAME/bastille/JAILNAME/data
chmod -R ID:ID /usr/local/bastille/data/JAILNAME/data
Wichtig! Da die Zielverzeichnisse oft noch nicht in der Jail existieren, müssen diese vorher angelegt werden. Einige der Verzeichnisse werden erst bei der Installation der Pakete angelegt, was aber zu spät ist. Denn während der Installation wird der Inhalt (z.B. Konfigurationsdateien) in das Zielverzeichnis kopiert.
TrueNAS / Jails / JAILNAME / Mount Points / Actions / Add
data:
└── Source: QUELLPFAD # z.B. /mnt/tank/jails_data/gitea/data
└── Destination: ZIELPFAD # z.B. /mnt/tank/iocage/jails/gitea/root/var/db/gitea
Damit zeigt im Jail GITEA das Verzeichnis /var/db/gitea
auf das eigentlich extern liegende Verzeichnis /mnt/tank/jails_data/gitea/data
.
Alles klar? Gut!
Das Jail muss jedesmal mit bastille restart JAILNAME
neu gestartet werden, damit die neuen Pfade eingebunden werden.
Voilá
Wenn Du diese Inhalte für wertvoll und nützlich findest, dann freue ich mich über eine Rückmeldung per Matrix, folge mir doch auf Mastodon oder hinterlasse hier einen Kommentar.