Proxmox

Add LVM-Thin Storage to Proxmox on a New Disk

A new disk becomes a PV, VG and thin pool before PVE registers it as guest storage.
A new disk becomes a PV, VG and thin pool before PVE registers it as guest storage.
A verified unused disk becomes a physical volume and vg_guests2 volume group. Its data thin pool is registered as Proxmox storage guests2 for guest disks, with free VG space kept separately.
A new disk becomes a PV, VG and thin pool before PVE registers it as guest storage.Original Boxvirt conceptual diagram. Documentation and illustrative calculations; no operational test results. View full size ↗

To add LVM-Thin storage to Proxmox, identify an unused physical disk, initialize it as an LVM physical volume, create a separate volume group and thin pool, then register that pool as an lvmthin storage entry. Creating the pool and making it available to Proxmox are separate operations.

This walkthrough uses one new, disposable disk on a standalone lab host. It does not extend local-lvm, repartition the boot disk, migrate existing guests or add disk redundancy. If the disk contains anything you need, stop before initialization.

Validation: commands were checked against the PVE storage manual 9.2.13 and Debian trixie LVM documentation on November 9, 2026. They have not been executed for this article. Record the installed PVE and LVM versions and test the procedure on an authorized lab before using important data.

Plan four names and a physical capacity limit

An LVM physical volume (PV) contributes storage to a volume group (VG). The VG contains a thin pool; Proxmox allocates guest volumes from that pool. The Proxmox storage ID is another name pointing to the VG and pool.

LayerIllustrative valueWhat to verify
DiskA new disk with at least 250 GiB usable capacityPhysical serial, by-id path and absence of existing uses
VGvg_guests2Name is not already in use
Thin pooldata in vg_guests2200 GiB data area; room also needed for metadata and LVM overhead
Proxmox storage IDguests2Unique entry with content images,rootdir
Placement testOne new 8 GiB disk on a disposable VMNew volume ID must begin with guests2:

These capacities are chosen examples. LVM’s 200G size here means 200 GiB; a disk advertised as 250 GB is smaller than 250 GiB. Read the actual capacity instead of copying the marketing label. Leaving VG space unallocated gives you options for planned pool or metadata growth. It does not configure automatic extension.

If you need an ISO library or backup archive destination, choose a suitable file-storage backend instead. The storage comparison explains why an LVM-Thin pool is for guest images and container data.

1. Identify the disk before writing anything

Use the PVE host shell as an administrator for the host commands below. First inspect the current device and storage inventory:

lsblk -e 7 -o NAME,PATH,SIZE,TYPE,FSTYPE,MOUNTPOINTS,MODEL,SERIAL
pvs -o pv_name,vg_name,pv_size,pv_free
vgs -o vg_name,vg_size,vg_free
lvs -a -o vg_name,lv_name,lv_size,segtype
pvesm status

Trace the disk supplying /, the existing VGs and pools, and any device already assigned to a guest. A disk without a mounted filesystem can still hold VM data, an inactive pool or a passthrough device. Compare the physical label and installation inventory with the reported model, capacity and serial. If that relationship is unclear, stop.

Set the following variable to the verified whole-disk by-id path, not a -part1 partition. The placeholder intentionally names no real disk:

new_disk=/dev/disk/by-id/REPLACE_WITH_VERIFIED_NEW_DISK_ID
readlink -f "$new_disk"
lsblk -o NAME,PATH,SIZE,TYPE,FSTYPE,MOUNTPOINTS,MODEL,SERIAL "$new_disk"
wipefs --no-act "$new_disk"

The wipefs manual defines --no-act as a read-only inspection. No detected signature is not proof that a disk has no useful data. Check for child partitions and existing uses as well. An unexpected signature, PV, partition or ownership record is a reason to investigate, rather than to add a force flag.

Keep independent backups of existing guests, a record of current storage configuration, and host console access before storage maintenance. A backup stored only on the disk being changed will not help if that disk is overwritten.

2. Create a new VG and a thin pool

The following commands initialize the selected disk and write LVM metadata. Proceed only after identifying it as a disposable, unused lab disk. Recheck the variable in the same shell; do not substitute /dev/sdb from an example.

pvcreate "$new_disk"
vgcreate vg_guests2 "$new_disk"
vgs vg_guests2 -o vg_name,vg_size,vg_free

Run each command separately and inspect its result before continuing. An existing-signature warning, unexpected VG name or insufficient capacity is a stop condition. Do not suppress confirmations or use force options to make the example fit a different disk.

Now create the 200 GiB pool:

lvcreate --type thin-pool --name data --size 200G vg_guests2
lvs -a vg_guests2 -o lv_name,lv_size,segtype,data_percent,metadata_percent
vgs vg_guests2 -o vg_name,vg_size,vg_free

The upstream LVM thin-pool manual documents this creation form and automatic metadata sizing. The data LV and metadata need physical extents; the VG’s remaining free space will therefore be less than the disk capacity minus exactly 200 GiB. Do not promise an exact remainder before inspecting the result.

Confirm data has the thin-pool segment type, and that both data and metadata usage are reported for the active pool. Do not format the pool with mkfs or mount it as a normal directory. Proxmox will allocate thin volumes inside it.

3. Register the existing pool in Proxmox

The PVE storage manager documents pvesm add and the backend-specific options. On the standalone host in this example:

pvesm add lvmthin guests2 --vgname vg_guests2 --thinpool data --content images,rootdir
pvesm status
pvesm scan lvmthin vg_guests2

Check that guests2 appears as active lvmthin storage and that the pool scan identifies data. In the GUI, the equivalent registration is Datacenter → Storage → Add → LVM-Thin, selecting the existing VG and thin pool. Use one registration method. Adding two IDs for the same pool does not create two independent stores and can alias the same volumes.

The content values mean VM disk images (images) and container volumes (rootdir). They do not enable ISO uploads or backup archives. If a file upload dialog does not offer guests2, that is expected.

The LVM-Thin backend documentation describes the pool as local storage. This article’s standalone configuration must not be copied unchanged to a cluster: restrict an entry to the node owning the disk and review placement and migration dependencies. Marking a local pool “shared” does not make it accessible on other nodes.

4. Prove that a guest volume lands on this pool

Use a disposable VM whose ID you have verified. Record its current disks, then add a new 8 GiB disk through VM → Hardware → Add → Hard Disk, selecting guests2. Do not replace its boot disk or reuse an occupied disk slot.

Inspect the VM configuration in the GUI or with qm config followed by your actual test VM ID. The new disk’s volume reference should start with guests2:. Inspect the pool’s content view and run:

pvesm list guests2
lvs -a vg_guests2 -o lv_name,lv_size,segtype,pool_lv,data_percent,metadata_percent

The corresponding thin LV should belong to the data pool. Together, the VM configuration, Proxmox volume list and LVM relationship establish placement. A successful “add storage” task alone does not establish that relationship. Guest-side formatting and application recovery are separate checks; follow the Linux VM setup for a complete new guest.

The 8 GiB virtual size is a promise to the guest, not an immediate 8 GiB physical write. Small initial Data% usage is consistent with thin provisioning. It is not a reason to allocate unlimited guest disks.

5. Monitor two pool limits and the growth reserve

Record Data%, Meta% and VG free extents before useful data arrives. The LVM manual treats data and metadata exhaustion as different failure paths; both require monitoring and a response before writes can exhaust the pool.

Three separate quantities matter:

QuantityQuestion it answers
Sum of guest virtual sizesHow much capacity have you promised?
Pool data and metadata usageHow much of each physical pool resource is used now?
Unallocated VG extentsWhat room is available for a planned extension?

Set alerts using your observed growth rate and maintenance response time. There is no measured universal safe percentage in this example. Free VG extents alone do not prove autoextension is enabled: LVM requires suitable threshold settings and pool monitoring. That configuration is outside this new-pool procedure.

Snapshots keep referenced blocks alive. Discard requires cooperation from the guest, virtual disk and storage stack; deleting a guest file alone does not prove pool space was returned. Keep a backup outside this disk and test recovery before treating it as a production destination.

Troubleshoot the layer that failed

SymptomInspect before changing anything
VG exists but no pool is listedlvs segment type and the exact VG/pool names
Pool exists but PVE has no storage entryWhether registration succeeded; avoid creating another pool
Storage entry is inactiveVG activation, actual node ownership and configured names
ISO uploads are unavailableExpected backend content restriction; use file storage
Guest disk went to another storeVM configuration and selected target; adding a pool does not move existing disks
Usage keeps rising after snapshots or file deletionRemaining references, discard path and actual Data%/Meta%

If creation stops midway, preserve the command output and inspect the state before repeating steps. Re-running initialization is not a repair strategy. Before any guest uses the pool, a mistaken registration can be disabled while you investigate. Once volumes exist, leave the underlying PV/VG/pool intact until every guest reference is accounted for and its data is independently backed up or moved and verified. There is no generic safe deletion sequence for a partially understood storage layout.

Finish the lab by checking a guest reboot and an isolated restore from an independent backup. Record the exact software versions, disk identity, volume IDs and pool usage. Those observations are still pending for this draft.

Sources

If an existing guest needs more room on its current disk, use the VM disk and ext4 growth procedure instead of assuming that this new pool enlarges that guest.

KEEP EXPLORING

Related guides