zededa:eve-volume-provisioning
This is an old revision of the document!
Table of Contents
EVE-OS App Volumes: Does maxsize Fully Provision the Disk?
Companion page to EVE-OS / ZEDEDA Application Volumes — covers what actually happens on the persist backend when you set a Max Size larger than the image, e.g. an 8 GB image with maxsize set to 100 GB.
Short answer
- ext4 persist (qcow2 volumes): thin-provisioned. Setting a 100 GB
maxsizeon an 8 GB image does not immediately consume 100 GB of physical/persistspace. - ZFS persist (zvols): not confirmed. zvols are not thin-provisioned the same way qcow2 is by default — this needs verification against EVE's volumemgr behavior before relying on it for capacity planning.
ext4 persist — qcow2 thin provisioning
qcow2 is a sparse container format. When EVE creates/resizes a drive's backing qcow2 file to a given maxsize:
- The file gets a virtual size equal to
maxsize(e.g. 100 GiB). - Actual bytes written to
/persiststart at roughly the size of the data copied in from the image (~8 GB) and grow only as the guest writes new data into the unused headroom. qemu-img infoon the file would showvirtual size: 100 GiBbut a much smallerdisk size:until the guest actually fills it in.- This is default qcow2 behavior — it changes only if preallocation is explicitly forced to
metadata,falloc, orfull, which is not something exposed via the ZEDEDA GUI/Terraformmaxsize/preservefields covered in the companion page.
ZFS persist — zvols (open question)
- A zvol created with
zfs create -V 100G pool/volreserves (refreservation) that space on the pool by default, unless created sparse with the-sflag. - Whether EVE's volumemgr creates app-instance zvols sparse or with reservation is not confirmed from available docs/source at the time of writing.
- If zvols are created non-sparse, a 100 GB
maxsizeon a ZFS-persist node would reserve the full 100 GB against the pool immediately, unlike the ext4/qcow2 case above. - Action item: verify directly against a test node (
zfs get volsize,refreservation,used <pool>/<vol>after deploying a drive with headroom) before sizing decisions are made on any ZFS-persist deployment (e.g. Quvia nodes running raid1/raid5/raid6 persist).
Why this matters even when thin-provisioned
- Admission control: the controller/EVE typically checks available persist capacity before allowing a deploy — it needs to believe the full
maxsize*could* fit, even though actual usage will be much smaller initially. A deploy can fail a capacity check on a pool that doesn't have 100 GB free, even though real usage would only be ~8 GB. - Guest visibility: regardless of host-side provisioning, the guest only sees/uses its original partition size until
growpart/resize2fs(or the Windows equivalent) is run inside the guest — see the companion page's guest-side step.
Related
- EVE-OS / ZEDEDA Application Volumes — drive types, maxsize/preserve/allow_storage_resize, deploy and grow steps.
- EVE-OS Partitioning / ZFS page (persist backend, RAID levels, ZFS overhead) — physical-layer capacity planning; this page covers the logical/per-drive layer above it.
zededa/eve-volume-provisioning.1783346786.txt.gz · Last modified: by mc
