Sandbox-Optionen aus der systemd-Unit entfernen
Als Dienst schlug jeder Snapshot mit "cfs-lock 'storage-data' error: got lock request timeout" fehl, waehrend derselbe Aufruf in der Shell funktionierte. Ursache war ProtectSystem=full in unserer eigenen Unit: das haengt /etc im Namespace des Dienstes schreibgeschuetzt ein. pvesh fuehrt die Proxmox-API im eigenen Prozess aus, der Snapshot-Task ist also ein Kindprozess von pvesnap und erbt diese Einschraenkung. pmxcfs legt seine Sperren aber als Verzeichnisse unter /etc/pve/priv/lock/ an - das mkdir scheitert, Proxmox wiederholt es erfolglos und meldet am Ende einen Lock-Timeout statt eines Rechtefehlers. ProtectHome=yes war aus demselben Grund schaedlich: es blendet /root aus, womit die SSH-Schluessel fuer die uebrigen Cluster-Nodes fehlen. * Unit enthaelt keine Sandbox-Optionen mehr, mit Kommentar, warum nicht. * Neu: pvesnap/preflight.py prueft root-Rechte, Schreibzugriff auf /etc/pve und Sichtbarkeit von /root. Der Dienst schreibt das beim Start ins Journal, "pvesnap check" zeigt es ebenfalls an - damit faellt so etwas sofort auf, statt sich als Lock-Timeout zu tarnen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
e26d966a8b
commit
1be13ad294
@@ -281,8 +281,30 @@ pvesnap geht damit so um:
|
||||
* Mit `pause_between = 10s` lässt sich zusätzlich Druck vom Storage nehmen, wenn
|
||||
viele VMs auf demselben Storage liegen.
|
||||
|
||||
Hält die Sperre dauerhaft, liegt die Ursache außerhalb von pvesnap. Diese
|
||||
Kommandos helfen beim Eingrenzen:
|
||||
### Der Dienst scheitert, von Hand geht es
|
||||
|
||||
Scheitert **jeder** Lauf des Dienstes am Storage-Lock, während derselbe Befehl
|
||||
in der Shell funktioniert, liegt es an der Umgebung des Dienstes — nicht am
|
||||
Storage. `pvesh` führt die Proxmox-API im eigenen Prozess aus, der Snapshot-Task
|
||||
ist also ein *Kindprozess von pvesnap* und erbt alles, was in der systemd-Unit
|
||||
eingeschränkt wurde.
|
||||
|
||||
Der Klassiker ist `ProtectSystem=` in der Unit: das hängt `/etc` schreibgeschützt
|
||||
ein, und pmxcfs legt seine Sperren als Verzeichnisse unter `/etc/pve/priv/lock/`
|
||||
an. Das `mkdir` scheitert, Proxmox wiederholt es erfolglos — und meldet am Ende
|
||||
einen Lock-Timeout statt eines Rechtefehlers. Prüfen:
|
||||
|
||||
```bash
|
||||
systemctl show pvesnap -p ProtectSystem -p ProtectHome -p PrivateTmp -p ReadOnlyPaths
|
||||
pvesnap check # meldet so etwas von sich aus
|
||||
```
|
||||
|
||||
Alle drei müssen leer bzw. `no` sein. Die mitgelieferte Unit enthält deshalb
|
||||
bewusst **keine** Sandbox-Optionen.
|
||||
|
||||
### Wenn die Sperre wirklich belegt ist
|
||||
|
||||
Diese Kommandos helfen beim Eingrenzen:
|
||||
|
||||
```bash
|
||||
pvesm status # ist das Storage online und erreichbar?
|
||||
|
||||
Reference in New Issue
Block a user