Proxmox Directory Storage: The Structure No One Explains
If you’ve ever found yourself confused why Proxmox is “hiding” your ISO files or not listing them in the GUI, you’re not alone. The behavior is not a bug—it’s by design, just very poorly documented.
This guide documents what Proxmox expects when using directory (dir
) storage types—especially on ZFS—so everything shows up and works cleanly.
🔍 The Hidden Directory Structure
When you point dir
storage to a path, Proxmox does not use that folder directly. Instead, it creates specific subdirectories inside that path depending on content type:
Content Type | Subdirectory | Notes |
---|---|---|
ISO images | template/iso/ |
For uploaded .iso files |
CT templates | template/cache/ |
For downloaded/uploaded LXC templates |
Backups | dump/ |
For VZDump backups |
Snippets | snippets/ |
For custom config/script injection |
✅ Correct Setup Example
1. Create a ZFS Dataset:
zfs create zfs-ssd/proxmox-data
This will be mounted at:
/zfs-ssd/proxmox-data/
2. Configure storage.cfg
:
dir: iso-storage
path /zfs-ssd/proxmox-data
content iso
dir: vztemplate-storage
path /zfs-ssd/proxmox-data
content vztmpl
dir: backup-storage
path /zfs-ssd/proxmox-data
content backup
dir: snippet-storage
path /zfs-ssd/proxmox-data
content snippets
🧠 Important Notes
- DO NOT try to flatten the structure (e.g. putting
.iso
files directly in/zfs-ssd/proxmox-data/iso/
). Proxmox will not see them. - You can upload files using SCP directly into the correct subfolder (
template/iso/
, etc.). - If you upload through the Proxmox GUI, it will place files in these subfolders automatically.
- This applies to all directory storage, whether on ZFS or not.
✅ End Result
When configured properly, the GUI will:
- ✅ Show all ISOs under
Datacenter → iso-storage
- ✅ List all LXC templates under
vztemplate-storage
- ✅ Let you restore and manage backups under
backup-storage
- ✅ Show custom snippets for injection and cloud-init configs
🏁 Conclusion
You don’t need to fight Proxmox. You just need to know where it’s looking.
This guide is now your definitive reference.
— from the PacketRealm Homelab Archives