4 min read

LVM Thin Pools in Proxmox


Proxmox supports two flavors of LVM storage: regular LVM and LVM Thin. They behave very differently and the distinction matters. This covers LVM Thin specifically — what it’s for, how to set it up, and where it fits alongside ZFS.


LVM vs LVM Thin

Regular LVM allocates storage up front. Create a 50GB VM disk on a regular LVM volume group, and 50GB is reserved immediately — whether the VM uses 2GB or 48GB of it.

LVM Thin (thin provisioning) allocates on write. Create a 50GB VM disk on a thin pool, and the pool only consumes space as the VM actually writes data to disk. This means you can technically provision more total disk space across VMs than you have physical storage — a practice called over-provisioning.

Over-provisioning example: A 500GB thin pool could host 10 VMs each with 100GB virtual disks (1TB total provisioned). As long as those VMs don’t collectively write more than 500GB, it works fine. The risk is that if they do, writes start failing.

Over-provisioning sounds reckless, but in practice most VMs don’t use their full allocated space. It’s a useful tool for lab environments and development setups where you want flexibility without carving up storage rigidly upfront.

Over-provisioning visualized: ten 100 GB virtual disks (1 TB provisioned) backed by a 500 GB physical thin pool with about 300 GB actually written — fine until collective writes exceed the physical 500 GB


ZFS or LVM Thin?

Both support Proxmox snapshots efficiently. The main differences:

LVM Thin:

  • Lower overhead — no ARC cache consuming RAM
  • Works well on systems with limited memory (4-8GB)
  • No built-in checksumming or data integrity verification
  • Simpler to reason about for straightforward VM storage

ZFS:

  • Checksumming and silent corruption detection
  • Better snapshot semantics (COW at the dataset level)
  • Higher memory requirements
  • More features overall, more complexity

For a dedicated homelab node with plenty of RAM, ZFS is usually better. For a low-RAM box or when you want dead-simple storage, LVM Thin is a solid choice.


Setting up LVM Thin in Proxmox

Step 1: Create a Volume Group

First, create an LVM Volume Group (VG) from one or more physical disks. In the Proxmox UI:

  1. Go to your node → Disks → LVM
  2. Click Create: Volume Group
  3. Select the disk(s) to include
  4. Name the VG (e.g., vg-local)

Or via CLI:

Terminal window
# Initialize the disk as a physical volume
pvcreate /dev/disk/by-id/ata-YourDisk-SerialNumber
# Create a volume group from it
vgcreate vg-local /dev/disk/by-id/ata-YourDisk-SerialNumber

Step 2: Create the Thin Pool

In the Proxmox UI:

  1. Go to your node → Disks → LVM-Thin
  2. Click Create: Thinpool
  3. Select the Volume Group you just created
  4. Set the size — leave some headroom (85-90% of VG size is reasonable)
  5. Name it (e.g., data)

Via CLI:

Terminal window
# Create a thin pool using 90% of the VG
lvcreate -l 90%VG --thinpool data vg-local

lvcreate will warn you about chunk size and zeroing on large pools — informational, not a problem:

Terminal output of lvcreate creating an 18 TB thin pool, with warnings about chunk size and pool zeroing followed by the volume created confirmation

Step 3: Add to Proxmox storage

This happens automatically if you created the thin pool through the Proxmox UI. If you used CLI:

Terminal window
pvesm add lvmthin local-lvm \
--vgname vg-local \
--thinpool data \
--content rootdir,images

It’ll appear in Proxmox storage and be selectable when creating VMs and containers:

Proxmox Datacenter storage view showing the new thin pool listed as LVM-Thin storage alongside the default local storages

(Screenshots are from an older Proxmox release — newer versions restyle these dialogs, but the fields and the workflow are the same.)


Combining multiple disks

If you want to span the LVM VG across multiple disks for more capacity:

Terminal window
# Add more disks to an existing VG
pvcreate /dev/disk/by-id/ata-AnotherDisk-SerialNumber
vgextend vg-local /dev/disk/by-id/ata-AnotherDisk-SerialNumber

Note: LVM by itself doesn’t provide redundancy. If either disk fails, you lose data. For redundancy with LVM, you’d need RAID underneath (mdadm) before LVM, or just use ZFS with mirroring instead.


Managing thin pools

Terminal window
# Check VG usage
vgs
# Check thin pool usage (including over-provisioning)
lvs
# More detailed view
lvdisplay vg-local/data

Watch the Data% field in lvs. If a thin pool fills completely, new writes will fail. Set up monitoring or alerts before you over-provision aggressively.


Snapshots

LVM Thin snapshots work well in Proxmox. When you snapshot a VM in the Proxmox UI, it creates an LVM thin snapshot underneath — space-efficient and fast. This is one of the main reasons to use LVM Thin over regular LVM for VM storage.

Regular LVM snapshots are a different mechanism and much less efficient. Don’t confuse the two.


Related: ZFS storage in Proxmox — for when you want checksumming and more robust data integrity at the cost of more RAM.