-
Notifications
You must be signed in to change notification settings - Fork 0
Cluster Prefix
Experimental feature.
cluster_prefixis new and considered experimental. Try it on non-production storage first, and read the Important notes and caveats before relying on it.
cluster_prefix lets several independent Proxmox VE clusters use the same
JovianDSS pool at the same time without seeing or interfering with each
other's virtual disks.
By default, every Proxmox cluster connected to a pool sees all the volumes in
that pool. Two clusters that both have a VM 100 would each create a volume
called vm-100-disk-0, and each cluster would then see the other's disk as a
stray, unrecognised volume — with a real risk that deleting a VM on one cluster
removes a disk belonging to the other. cluster_prefix solves this by giving
each cluster its own private namespace inside the shared pool.
When you set cluster_prefix pveA on a storage, the plugin quietly prepends
pveA_ to every volume name it creates on JovianDSS, and hides any volume that
does not carry that prefix.
Without cluster_prefix
|
With cluster_prefix pveA
|
|
|---|---|---|
| Name shown in Proxmox | vm-100-disk-0 |
vm-100-disk-0 (unchanged) |
| Name stored on JovianDSS | v_vm-100-disk-0 |
v_pveA_vm-100-disk-0 |
| Volumes visible to this storage | all volumes in the pool | only volumes starting with pveA_
|
The prefix is completely invisible inside Proxmox — it never appears in the web
UI, in qm/pct config, or in volume IDs like jdss-Pool-0:vm-100-disk-0. It
only exists in the volume names on the JovianDSS side, where it keeps each
cluster's data in its own lane.
cluster_prefix isolates volume names. It does not, on its own, isolate
the iSCSI targets used to attach those volumes.
iSCSI target names are built from the VM ID only:
<target_prefix>:vm-<vmid>-<index>
The cluster prefix is not part of the target name. So if two clusters share a
pool, both have a VM 100, and both use the same target_prefix, they will
both try to create and manage the same target IQN
(iqn.2025-04.proxmox.joviandss.iscsi:vm-100-0). They will fight over that
target — attaching each other's LUNs, tearing down each other's targets, and
producing intermittent attach failures.
Therefore, when multiple clusters share one pool, you must give each cluster
both a unique cluster_prefix and a unique target_prefix.
| Setting | Isolates | Required for shared pool? |
|---|---|---|
cluster_prefix |
Volume names (what each cluster can see) | Yes |
target_prefix |
iSCSI target IQNs | Yes |
A simple, readable convention is to embed the cluster identifier in both:
cluster_prefix pveA
target_prefix iqn.2025-04.proxmox.joviandss.pvea:
-
Plugin version: Open-E JovianDSS Proxmox plugin with
cluster_prefixsupport (v0.11.5 or later). -
Allowed characters: the prefix must start with a letter and contain only
letters and digits — no
_, no-, no dots.- Valid:
pveA,cluster01,prod,siteB - Invalid:
pve-a(hyphen),cluster_01(underscore),01cluster(starts with a digit)
- Valid:
-
Keep it short. The prefix is added to every volume name; a short tag such
as
pveAors1is plenty. -
It is fixed (immutable).
cluster_prefixcan only be set when the storage is created. It cannot be changed afterwards — see Changing or removing the prefix.
Set cluster_prefix when you add the storage:
pvesm add joviandss jdss-Pool-0 \
--pool_name Pool-0 \
--user_name admin \
--user_password <rest-api-password> \
--control_addresses 192.168.28.100 \
--data_addresses 192.168.29.100 \
--cluster_prefix pveA \
--shared 1The resulting /etc/pve/storage.cfg entry:
joviandss: jdss-Pool-0
pool_name Pool-0
cluster_prefix pveA
control_addresses 192.168.28.100
data_addresses 192.168.29.100
shared 1
...
From this point on, this storage only ever sees volumes whose JovianDSS names
start with pveA_, and every disk it creates gets that prefix automatically.
Note: because
cluster_prefixis a fixed property, it must be present in the very firstpvesm addcommand. You cannot add it later withpvesm set.
Two clusters, Cluster A and Cluster B, both use the JovianDSS pool
Pool-0. Each is given a unique cluster prefix and a unique target prefix.
On Cluster A:
pvesm add joviandss jdss-Pool-0 \
--pool_name Pool-0 \
--user_name admin \
--user_password <rest-api-password> \
--control_addresses 192.168.28.100 \
--data_addresses 192.168.29.100 \
--cluster_prefix pveA \
--target_prefix iqn.2025-04.proxmox.joviandss.pvea: \
--shared 1On Cluster B:
pvesm add joviandss jdss-Pool-0 \
--pool_name Pool-0 \
--user_name admin \
--user_password <rest-api-password> \
--control_addresses 192.168.28.100 \
--data_addresses 192.168.29.100 \
--cluster_prefix pveB \
--target_prefix iqn.2025-04.proxmox.joviandss.pveb: \
--shared 1Now suppose each cluster creates a VM 100 with one disk, and Cluster B also has a VM 200. On JovianDSS the pool contains:
v_pveA_vm-100-disk-0 ← Cluster A, VM 100 (target iqn...pvea:vm-100-0)
v_pveB_vm-100-disk-0 ← Cluster B, VM 100 (target iqn...pveb:vm-100-0)
v_pveB_vm-200-disk-0 ← Cluster B, VM 200 (target iqn...pveb:vm-200-0)
- Cluster A's storage lists only
vm-100-disk-0. - Cluster B's storage lists only
vm-100-disk-0andvm-200-disk-0. - The two
vm-100disks never collide: different volume names and different target IQNs.
Neither cluster can see, attach, or delete the other's volumes.
List what the storage sees from each cluster:
pvesm list jdss-Pool-0You should see only this cluster's own disks, with normal unprefixed names
(jdss-Pool-0:vm-100-disk-0).
To confirm the prefix is being applied on the storage side, inspect the volume
names on JovianDSS (web UI → the pool's volumes, or the JovianDSS CLI). Every
volume created by Cluster A should be named v_pveA_..., and by Cluster B
v_pveB_....
To confirm targets are isolated, check the target IQNs on JovianDSS — they
should carry each cluster's target_prefix.
cluster_prefix is fixed: it cannot be changed or removed on a storage that
already exists. Changing it would instantly hide every volume created under the
old prefix (the storage would no longer recognise them), leaving them orphaned
on JovianDSS.
If you must change it:
- Migrate or back up all VMs/CTs off the storage.
- Remove the storage definition (
pvesm remove jdss-Pool-0) — this does not delete the data on JovianDSS, only the Proxmox configuration. - Re-create it with the new prefix.
(Renaming the underlying volumes on JovianDSS to match a new prefix is also possible but is a manual, advanced operation.)
If you add cluster_prefix to a pool that already contains volumes created
without a prefix, those legacy volumes (v_vm-...) will no longer be
visible to the prefixed storage, because their names don't start with the
prefix. Plan the prefix before putting data in a shared pool, or migrate legacy
volumes first.
cluster_prefix prevents accidental cross-cluster interference; it is not a
security feature. Any cluster with the JovianDSS REST credentials and a matching
configuration could still reach the data. For network-level protection of the
iSCSI traffic, use CHAP authentication.
Use the same cluster_prefix on every node of a single cluster (it lives in
storage.cfg, which Proxmox replicates across the cluster automatically, so this
happens naturally). Use a different prefix on each separate cluster.
A cluster sees no volumes after enabling cluster_prefix
The pool's existing volumes were created without the prefix, so they don't match. This is expected — see Existing (unprefixed) volumes become invisible above. Newly created disks will appear normally.
Intermittent iSCSI attach failures / a VM disk attaches on the wrong cluster
The two clusters are sharing the same target_prefix. Give each cluster a unique
target_prefix (see the warning above).
Because target_prefix is editable, you can correct it with pvesm set, but
existing targets created under the old prefix should be torn down first by
stopping the affected VMs.
pvesm set jdss-Pool-0 --cluster_prefix ... is rejected
cluster_prefix is fixed and cannot be changed on an existing storage. Re-create
the storage definition with the desired prefix (see Changing or removing the
prefix).
- CHAP Authentication — securing the iSCSI transport
- Plugin configuration — full property reference
-
docs/design/cluster-prefix-design.md— internal design and implementation details (for developers)