Welcome back to another post! In today’s post, we’re diving deep into Proxmox storage. Our servers are up and running, the network is dialed in, and now it’s time to tackle one of the most important foundations before we start actually building things: storage.
Understanding Storage Levels in Proxmox
Proxmox manages storage on two levels, just like it handles networking:
Node level — where you work directly with the physical disks, creating and formatting storage types like ZFS pools, LVM groups, or directory storage. These are local to the node unless you explicitly share them.
Datacenter level — a centralized management layer where you map existing storage and define how it should be used (for VM images, ISOs, backups, etc.). You can also manage permissions and decide whether storage is shared across multiple nodes or stays local.
A quick way to remember it:
- Node level is about what’s physically available.
- Datacenter level is about how it’s used, and who can use it.
File System vs. Storage Type
Before diving in, let’s clear up an important difference.
A file system is how data is stored and organized on disk (like ext4, XFS, ZFS, BTRFS).
A storage type in Proxmox is how Proxmox interacts with that storage — defining how VMs, backups, and ISOs are managed on it. It’s the _structure_ or _interface_, not the format itself.
Storage Types at the Node Level
Let’s break down the main storage types you’ll see when working on the node:
Directory: A directory is simply a folder on a mounted file system (like ext4 or XFS) that you can use to store VM disks, ISOs, or backups as files. It’s simple and flexible.
LVM: LVM (Logical Volume Manager) creates logical volumes from physical disks. It performs well but lacks features like thin provisioning or snapshots.
LVM Thin: This is a more advanced form of LVM that supports thin provisioning and snapshots, making it great for VM storage.
ZFS: ZFS is a beast — it’s both a file system and a volume manager, with built-in features like snapshots, compression, and data integrity. If you want advanced storage, ZFS is the way to go.
Walking Through Storage Creation
Let’s go hands-on with setting up each type.
LVM
To create an LVM in Proxmox:
- Select the disk
- Click Create Volume Group
- Choose the disk, name the volume (for example, `lvm_test`), and check the Add storage box if you want it mapped to the datacenter automatically.
That’s it — Proxmox will carve out the logical volume from your physical disk.
LVM Thin
Same process, but you’ll click Create Thin Pool.
Thin provisioning means you can “promise” your VMs more disk than you physically have — but they only consume what they actually use. For example, if you allocate 5TB to five VMs, they’ll only use up real space as they write data, rather than reserving all 5TB up front.
One thing to note: LVM Thin usually takes a bit longer to create than regular LVM. That’s normal, so don’t sweat it.
Directory
A directory storage is easy to set up:
- Click Create Directory
- Choose the file system (ext4 is fine for most; XFS is good for larger backup storage)
- Name it (like `dir_test`)
- Add it to the datacenter if you want
The flexibility of directories is awesome, since they can store VMs, backups, ISOs, templates, and more.
ZFS
ZFS has more options than other types:
- Click Create ZFS
- Pick the RAID level (I cover those more in my previous TrueNAS videos if you want a deep dive)
- Choose compression (I usually go with `lz4` since it’s lightweight and fast)
- Set the ashift value depending on your disk (12 is typical for 4K drives)
- Pick your disks
- Add to datacenter if you want
Remember: if you add it to the datacenter right away, Proxmox will treat it as block storage — meaning it can only store VM disks and container volumes. If you want to use it as file-level storage (like a directory), uncheck the box, create the dataset, then manually add it later as a directory.
Proxmox ZFS as File-Level Storage
If you set up ZFS without checking “Add storage,” you can later mount the dataset as a directory.
- Run `zfs list` in the shell to see the mount point
- Go to the datacenter’s Storage section
- Click Add → Directory
- Use that ZFS mount point
- Enable all the content types you want
This way you get the best of both worlds — all of ZFS’s integrity features, plus file-level storage for things like ISOs and backups.
Heads up, though: if you mount a ZFS dataset this way, Proxmox won’t be able to take **Proxmox-managed snapshots** of the VMs stored there, so weigh that carefully.
Storage at the Datacenter Level
Now let’s talk about the datacenter level.
Here, you don’t actually create storage — you map it. You either:
- bring in storage that you created on a node
- or import external storage (like NFS, SMB, Ceph, iSCSI, etc.)
For each storage, you can specify:
- what types of content it can hold (VM disks, ISOs, backups, etc.)
- whether it’s shared across multiple nodes
- whether to enable it
- and, for block storage, if deletion at the datacenter level should wipe the actual volume on the node
If you have multiple nodes, this centralized approach saves you from managing storage individually on each node.
Final Thoughts
Alright guys — that’s it! Our servers are humming, our networking is solid, and now our storage is configured and ready for action. Next up, we’re going to start building out core services, beginning with our DNS server, and exploring how DNS fits into the lab.
If you enjoy this kind of content don’t forget to subscribe, and—as always—stay geeking. Peace!