Ein Bind Mount erlaubt es einem LXC-Container, auf einen bestimmten Ordner zuzugreifen, der sich auf dem Dateisystem des Proxmox Hosts befindet. Das ist ideal, um Daten, die du zentral auf deinem Host speichern möchtest (z.B. für Medienserver, Backups, Gameserver-Daten), für deine Container verfügbar zu machen, ohne sie in den Container selbst zu kopieren.
Warum Bind Mounts?
Effizienz: Daten werden nicht dupliziert, was Speicherplatz spart.
Performance: Direkter Zugriff auf Host-Dateisystemleistung.
Flexibilität: Host-Speicher kann zentral verwaltet werden (z.B. Backups vom Host aus).
Einfache Migration/Wiederherstellung: Wenn der Container neu erstellt oder verschoben wird, sind die Daten immer noch auf dem Host vorhanden.
Voraussetzungen
Proxmox VE Host: Dein Proxmox Server muss laufen und du benötigst SSH-Zugriff oder Zugriff auf das Webinterface.
LXC-Container: Der LXC-Container, in den der Speicher eingebunden werden soll, muss existieren.
Verfügbarer Speicher auf dem Host: Der Ordner/Speicher, den du einbinden möchtest, muss bereits auf deinem Proxmox Host existieren und zugänglich sein (z.B. ein lokaler Ordner, ein gemountetes NAS, eine gemountete externe Festplatte).
Schritt-für-Schritt-Anleitung
Wir gehen die Methode über das Proxmox Webinterface durch, da diese am häufigsten genutzt wird und am benutzerfreundlichsten ist. Die manuelle Bearbeitung der Konfigurationsdatei wird als Alternative erwähnt.
Schritt 1: Speicher auf dem Proxmox Host vorbereiten und überprüfen
Bevor du etwas im LXC einbindest, muss der Speicher auf deinem Proxmox Host verfügbar sein.
Mountpoint erstellen (falls nötig):
Wenn dein Speicher (z.B. ein NAS-Share oder eine externe Festplatte) noch keinen dedizierten Ordner auf deinem Proxmox Host hat, an dem er gemountet wird, erstelle diesen.
Verbinde dich per SSH mit deinem Proxmox Host.
Erstelle den Ordner, z.B. /mnt/meine-daten:
Bash
sudo mkdir -p /mnt/meine-daten
Speicher auf dem Host einbinden (mounten):
Wenn es sich um einen externen Speicher handelt (NAS, USB-Festplatte), muss dieser nun in den neu erstellten Ordner gemountet werden.
Temporäres Mounten (zum Testen):
Beispiel für ein NAS (SMB/CIFS):
Bash
sudo mount -t cifs //DEINE_NAS_IP/DEIN_SHARENAME /mnt/meine-daten -o username=DEIN_NAS_BENUTZERNAME,password=DEIN_NAS_PASSWORT,vers=3.0
Beispiel für ein NAS (NFS):
Bash
sudo mount -t nfs DEINE_NAS_IP:/DEIN_SHARENAME /mnt/meine-daten
Beispiel für eine lokale Partition (z.B. /dev/sdb1):
Bash
sudo mount /dev/sdb1 /mnt/meine-daten
Überprüfen des Mounts:
Bash
df -h /mnt/meine-daten
ls -la /mnt/meine-daten
Du solltest nun die Speicherauslastung und die Inhalte deines gemounteten Ordners sehen. Wenn das nicht der Fall ist oder Fehler auftreten, behebe zuerst das Mount-Problem auf dem Host.
Mount dauerhaft machen (empfohlen):
Damit der Speicher nach einem Neustart deines Proxmox Hosts automatisch gemountet wird, füge einen Eintrag in die /etc/fstab deines Proxmox Hosts hinzu.
Bearbeite die Datei:
Bash
sudo nano /etc/fstab
Füge am Ende der Datei eine Zeile entsprechend deinem Speichertyp hinzu:
Beispiel SMB/CIFS (NAS):
//DEINE_NAS_IP/DEIN_SHARENAME /mnt/meine-daten cifs credentials=/root/.smbcredentials,vers=3.0,iocharset=utf8,_netdev 0 0
(Ersetze Pfade und Zugangsdaten; _netdev ist wichtig für Netzwerk-Mounts.)
Beispiel NFS (NAS):
DEINE_NAS_IP:/DEIN_SHARENAME /mnt/meine-daten nfs defaults,_netdev 0 0
Beispiel lokale Partition:
/dev/sdb1 /mnt/meine-daten ext4 defaults 0 0
(Passe /dev/sdb1 und ext4 an dein System an.)
Speichern und schließen der Datei.
fstab testen:
Bash
sudo umount /mnt/meine-daten # Nur wenn es noch temporär gemountet ist
sudo mount -a
df -h /mnt/meine-daten # Prüfen, ob es wieder gemountet ist
Schritt 2: Bind Mount im LXC konfigurieren
Jetzt, da dein Speicher auf dem Host verfügbar ist, binden wir ihn in den LXC ein.
LXC Container stoppen:
Es ist ratsam, den LXC-Container zu stoppen, bevor du seine Konfiguration änderst.
Im Proxmox Webinterface: Wähle den LXC aus und klicke auf Stop.
Per SSH auf dem Proxmox Host:
Bash
pct stop <LXC_ID>
# Ersetze <LXC_ID> durch die tatsächliche ID deines Containers (z.B. 101)
Bind Mount hinzufügen (über Proxmox Webinterface - Empfohlen):
Wähle deinen LXC-Container im Proxmox Webinterface aus.
Gehe zum Tab Ressourcen.
Klicke auf Add und wähle Bind Mount.
Host path: Gib hier den vollständigen Pfad auf deinem Proxmox Host ein, der gemountet ist.
Beispiel: /mnt/meine-daten
Container path: Gib hier den vollständigen Pfad innerhalb deines LXC-Containers ein, wo der Host-Ordner erscheinen soll. Dies ist der Pfad, auf den die Anwendung im Container zugreifen wird.
Beispiel: /opt/meine-anwendung-daten (oder auch /mnt/meine-daten, wenn du denselben Pfadnamen im Container verwenden möchtest).
Options (Optional):
ReadOnly: Wenn die Anwendung im Container nur lesen und nicht schreiben soll, aktiviere dies.
ACL: Wenn du erweiterte Zugriffsrechte (ACLs) verwenden möchtest.
Mount Point Defaults: Standardmäßig aktiviert; oft in Ordnung.
No Backup: Wenn dieser Mountpunkt nicht in LXC-Backups eingeschlossen werden soll (oft gewünscht für große Datenmengen).
Klicke auf Add.
Bind Mount hinzufügen (manuell über Konfigurationsdatei - Alternative):
Verbinde dich per SSH mit deinem Proxmox Host.
Bearbeite die Konfigurationsdatei des LXC-Containers:
Bash
nano /etc/pve/lxc/<LXC_ID>.conf
Füge am Ende der Datei eine Zeile im Format mpX: ,mp= hinzu. X ist eine aufsteigende Zahl (0, 1, 2...).
mp0: /mnt/meine-daten,mp=/opt/meine-anwendung-daten
mp0: Der Mountpoint-Index (nimm den nächsten freien, z.B. wenn du schon mp0 hast, nimm mp1).
/mnt/meine-daten: Der Pfad auf deinem Proxmox Host.
mp=/opt/meine-anwendung-daten: Der Pfad im LXC-Container.
Speichere die Datei und beende den Editor.
Schritt 3: LXC Container starten und Berechtigungen anpassen
Nachdem der Bind Mount konfiguriert ist, kannst du den LXC starten und die Dateiberechtigungen anpassen.
LXC Container starten:
Im Proxmox Webinterface: Wähle den LXC aus und klicke auf Start.
Per SSH auf dem Proxmox Host:
Bash
pct start <LXC_ID>
Zugriff auf den LXC:
Verbinde dich per SSH mit deinem LXC-Container (nicht dem Proxmox Host!).
Überprüfen des Mounts im LXC:
Navigiere zu dem Pfad, den du als Container path angegeben hast (z.B. /opt/meine-anwendung-daten).
Bash
ls -la /opt/meine-anwendung-daten
df -h /opt/meine-anwendung-daten
Du solltest nun die Dateien und Verzeichnisse vom Host-Speicher sehen können.
Dateiberechtigungen im LXC anpassen:
Dies ist ein äußerst wichtiger Schritt, da der LXC standardmäßig nur die Berechtigungen des Benutzers sieht, unter dem der Ordner auf dem Host erstellt wurde (oft root). Die Anwendung im LXC läuft aber möglicherweise unter einem anderen Benutzer (z.B. www-data für einen Webserver, matrix-synapse für Synapse).
Finde den Benutzer/Gruppe deiner Anwendung: Schau in der Dokumentation deiner Anwendung nach, unter welchem Benutzer/Gruppe sie normalerweise läuft, oder prüfe den User= oder Group= Eintrag in der .service-Datei der Anwendung (z.B. /etc/systemd/system/meine-anwendung.service).
Du kannst auch ps aux | grep ausführen, um den laufenden Prozess zu sehen und den zugehörigen Benutzer zu identifizieren.
Passe die Berechtigungen an:
Bash
sudo chown -R <anwendungsbenutzer>:<anwendungsgruppe> /opt/meine-anwendung-daten
sudo chmod -R 755 /opt/meine-anwendung-daten # Oder 770, je nach Sicherheitsbedarf
Beispiel für den Matrix Synapse Fall:
Bash
sudo chown -R matrix-synapse:matrix-synapse /mnt/matrix-storage/media
sudo chmod -R 755 /mnt/matrix-storage/media
-R steht für rekursiv, d.h., alle Unterordner und Dateien erhalten die neuen Berechtigungen.
755 bedeutet: Besitzer (hier anwendungsbenutzer) darf lesen, schreiben, ausführen. Gruppe und andere dürfen lesen und ausführen. 770 wäre, wenn nur Besitzer und Gruppe schreiben dürfen. Wähle die passenden Rechte für deine Anwendung.
Anwendung im LXC neu starten:
Wenn deine Anwendung (z.B. Matrix Synapse) wegen fehlender Berechtigungen nicht gestartet ist, versuche sie nun neu zu starten.
Bash
sudo systemctl restart <dienstname>.service
sudo systemctl status <dienstname>.service
Deine Anwendung sollte nun auf den freigegebenen Speicher zugreifen können!
Diese ausführliche Anleitung sollte dir helfen, Speicher in jedem deiner LXC-Container erfolgreich einzubinden. Es ist ein mächtiges Feature von Proxmox!
Anleitung: Lokalen Speicher für unprivilegierte LXC-Container in Proxmox bereitstellen
Dieses Tutorial beschreibt, wie man eine direkt an den Proxmox-Host angeschlossene Festplatte als Speicher für einen unprivilegierten LXC-Container einrichtet und dabei die Berechtigungsprobleme durch UID/GID-Remapping löst.
Das Kernkonzept: UID-Remapping verstehen
Ein unprivilegierter Container darf aus Sicherheitsgründen nicht die echten Benutzer-IDs (UID) des Hosts verwenden. Proxmox leitet die UIDs des Containers auf einen höheren Zahlenbereich auf dem Host um.
Standard-Regel: Host-UID = Container-UID + 100000
Beispiel: Ein Prozess, der im Container als Benutzer 107 läuft, erscheint auf dem Proxmox-Host als Benutzer 100107.
Damit der Prozess im Container auf einen Ordner auf dem Host schreiben darf, muss dieser Ordner auf dem Host dem umgeleiteten Benutzer (100107) gehören.
Schritt-für-Schritt-Anleitung
Mount-Punkt erstellen:
Bash
mkdir -p /mnt/mein-speicher
fstab-Eintrag hinzufügen: Bearbeite die Datei /etc/fstab auf dem Host und füge eine Zeile für deine Festplatte hinzu (falls noch nicht geschehen). Finde die UUID der Festplatte mit ls -l /dev/disk/by-uuid/.
Code-Snippet
UUID=deine-uuid-hier /mnt/mein-speicher ext4 defaults 0 2
Mounten:
Bash
mount -a
2. Dediziertes Verzeichnis für den Container erstellen
Erstelle auf der frisch gemounteten Festplatte einen eigenen Ordner für die Daten des Containers.
Bash
mkdir /mnt/mein-speicher/container-daten
3. Berechtigungen anpassen (Der wichtigste Schritt)
Ermittle die UID und GID des Benutzers innerhalb des Containers, der den Speicher nutzen soll (in unserem Fall 107 und 110). Wende dann die Remapping-Regel an und ändere den Besitzer des Host-Verzeichnisses.
Besitzer ändern: Führe diesen Befehl auf dem Proxmox-Host aus.
Bash
chown -R 100107:100110 /mnt/mein-speicher/container-daten
-R (rekursiv) sorgt dafür, dass alle zukünftigen Dateien in diesem Ordner die richtigen Berechtigungen erben.
Konfigurationszeile:
Code-Snippet
mp0: /mnt/mein-speicher/container-daten,mp=/storage-im-container
/mnt/mein-speicher/container-daten: Der Ordner auf dem Host mit den korrekten Berechtigungen.
/storage-im-container: Der Pfad, unter dem der Speicher im Container erscheinen soll.