Storage Architecture
Purpose
This page documents the physical disks, Proxmox storage pools, logical-volume layout, filesystem mounts, and intended storage roles within the Bytek homelab.
The storage architecture separates:
- Proxmox and application operating-system disks.
- Large user and application data.
- Local Proxmox backups.
- Temporary snapshots and rollback points.
The main design goal is to prevent application data, operating-system disks, and backups from competing for the same physical storage role.
Storage Overview
| Storage Tier | Approximate Capacity | Proxmox Storage | Primary Purpose |
|---|---|---|---|
| System NVMe | 1 TB | local-lvm |
Operating systems and infrastructure services |
| User-data NVMe | 4 TB | user-data |
Large application and user-data disks |
| Backup HDD | 4 TB | pve-backup |
Proxmox VZDump backups |
Physical Disk Inventory
| Linux Device | Approximate Usable Size | Device Type | Current Role |
|---|---|---|---|
/dev/nvme1n1 |
931.5 GiB | NVMe SSD | Proxmox operating system and local-lvm |
/dev/nvme0n1 |
3.6 TiB | NVMe SSD | user-data LVM-thin storage |
/dev/sda |
3.6 TiB | WDC HDD | Dedicated Proxmox backup storage |
Linux device names such as /dev/sda can change between boots or hardware changes.
Permanent references should use:
- Filesystem UUIDs for mounted filesystems.
/dev/disk/by-id/paths for physical-device operations.- Proxmox storage IDs for normal VM and backup management.
System NVMe
Physical Device
| Setting | Value |
|---|---|
| Linux device | /dev/nvme1n1 |
| Approximate capacity | 931.5 GiB |
| Partition table | GPT |
| Primary volume group | pve |
Partition Layout
| Partition | Approximate Size | Purpose |
|---|---|---|
/dev/nvme1n1p1 |
1007 KiB | Boot support partition |
/dev/nvme1n1p2 |
1 GiB | EFI system partition |
/dev/nvme1n1p3 |
930.5 GiB | Proxmox LVM physical volume |
Logical Volumes
| Logical Volume | Approximate Size | Purpose |
|---|---|---|
pve-root |
96 GiB | Proxmox root filesystem |
pve-swap |
8 GiB | Proxmox swap |
pve-data |
794.3 GiB | Proxmox LVM-thin pool |
Proxmox Storage
The pve-data thin pool appears in Proxmox as:
- Storage ID:
local-lvm - Storage type: LVM-thin
Intended Use
The system NVMe stores:
- Proxmox VE.
- Infrastructure VM and LXC operating-system disks.
- Application operating-system disks.
- EFI disks.
- Small configuration volumes.
- Temporary Proxmox snapshots.
- Docker application configuration stored inside service VMs.
Current Workloads
The system NVMe currently stores operating-system disks for services such as:
- WireGuard.
- Pi-hole.
- Uptime Kuma.
- Traefik.
- Authentik.
- Nextcloud.
- Vikunja.
- BookStack.
Storage Policy
Use local-lvm for:
- VM and LXC operating-system disks.
- Infrastructure services.
- Small persistent application datasets.
- VM configuration disks.
- Temporary snapshots.
Avoid using local-lvm for:
- Large Nextcloud user libraries.
- Large Plex media libraries.
- Large game-server libraries.
- Backup archives.
- Long-term media collections.
User-Data NVMe
Physical Device
| Setting | Value |
|---|---|
| Linux device | /dev/nvme0n1 |
| Approximate capacity | 3.6 TiB |
| Device purpose | Large application and user data |
| LVM volume group | lvm1 |
| Thin pool | data |
LVM-Thin Layout
The user-data NVMe contains:
lvm1-data_tmetalvm1-data_tdatalvm1-data
These components represent:
- Thin-pool metadata.
- Thin-pool data.
- The visible LVM-thin pool.
Proxmox Storage
The thin pool appears in Proxmox as:
- Storage ID:
user-data - Storage type: LVM-thin
- Volume group:
lvm1 - Thin pool:
data - Configured chunk size: 256 KiB
Intended Use
The user-data NVMe stores:
- Nextcloud user files.
- Large application-data disks.
- Future game-server data.
- Future media-storage testing.
- Other user-generated content.
Current Major Workload
Nextcloud has a separate virtual data disk on user-data.
| Setting | Value |
|---|---|
| Nominal virtual-disk size | 500 GB |
| Guest filesystem | ext4 |
| Guest mount point | /mnt/nextcloud-data |
| Nextcloud data directory | /mnt/nextcloud-data/ncdata |
The Nextcloud operating system remains on local-lvm, while user files remain on user-data.
This separation makes it easier to:
- Expand the user-data disk.
- Monitor data growth.
- Keep the operating-system disk smaller.
- Apply different backup decisions to application and data disks.
- Migrate data disks independently in the future.
Thin Provisioning
The local-lvm and user-data storage pools use LVM-thin provisioning.
A thin-provisioned virtual disk does not immediately consume its full nominal capacity.
For example, a 500 GB virtual disk initially consumes only the physical blocks that have actually been written.
Important Consequence
The sum of all nominal virtual-disk sizes may exceed the physical capacity of the thin pool.
This is safe only when actual usage is monitored.
If the thin pool reaches full physical allocation, affected VMs may experience:
- Write failures.
- Filesystem corruption.
- Application outages.
- Database failures.
- Guest crashes.
Thin-Pool Monitoring
Review Proxmox storage usage using:
pvesm status
Review LVM-thin usage using:
lvs -a -o vg_name,lv_name,segtype,lv_attr,lv_size,data_percent,metadata_percent
Monitor both:
- Data percent
- Metadata percent
Suggested operational thresholds:
| Utilization | Response |
|---|---|
| Below 70 percent | Normal monitoring |
| 70 to 84 percent | Review growth and available capacity |
| 85 percent or higher | Immediate capacity planning |
| Near 100 percent | Critical risk of storage failure |
These thresholds are operational recommendations and should be adjusted based on growth rate and workload importance.
Backup HDD
Physical Device
| Setting | Value |
|---|---|
| Linux device | /dev/sda |
| Partition | /dev/sda1 |
| Approximate usable capacity | 3.6 TiB |
| Filesystem | ext4 |
| Partition table | GPT |
| Stable WWN | 0x5000cca097c44d7e |
Permanent Mount
| Setting | Value |
|---|---|
| Mount point | /mnt/pve/pve-backup |
| Proxmox storage ID | pve-backup |
| Proxmox content type | VZDump backup files |
| Mount method | Filesystem UUID through /etc/fstab |
The filesystem UUID is used instead of /dev/sda1 because Linux device letters can change.
Mount Options
The backup filesystem uses:
- Read-write mounting.
noatimeto reduce unnecessary metadata writes.
Mount-Point Protection
The Proxmox storage uses mount-point validation.
This prevents Proxmox from treating the empty directory /mnt/pve/pve-backup as valid storage when the HDD is not mounted.
Without this protection, a failed HDD mount could cause backups to be written to the Proxmox root filesystem.
That could fill the root filesystem and disrupt the hypervisor.
Backup-HDD Intended Use
The backup HDD stores:
- Scheduled VM backups.
- Scheduled LXC backups.
- Manual baseline backups.
- Upgrade rollback backups.
- Restore-test source archives.
The backup HDD must remain dedicated to backups.
Prohibited Backup-HDD Uses
Do not use the backup HDD for:
- Active VM disks.
- Active LXC root filesystems.
- Nextcloud user files.
- Plex media.
- Steam game-server data.
- Docker application data.
- Download staging.
- General file storage.
- Temporary application caches.
Mixing active workloads with backups would:
- Increase disk contention.
- Increase wear.
- Reduce available retention.
- Expand the failure impact.
- Make recovery planning less predictable.
Storage Placement Rules
| Workload | Preferred Storage |
|---|---|
| Infrastructure OS disk | local-lvm |
| Application OS disk | local-lvm |
| Nextcloud user data | user-data |
| Vikunja database and files | Current VM OS disk unless growth requires separation |
| BookStack database and files | Current VM OS disk unless growth requires separation |
| Plex configuration and metadata | local-lvm or a dedicated application disk |
| Plex media | Future dedicated media storage |
| Game-server executable files | Dedicated game-server disk or user-data |
| Game world and save data | user-data with backup enabled |
| Proxmox backup archives | pve-backup |
| Short-term snapshots | Same thin pool as the source disk |
Future Plex Storage
The RTX 2060 Plex VM should not use the backup HDD for media.
Recommended placement:
- Plex operating system on
local-lvm. - Plex configuration and metadata on NVMe-backed storage.
- Plex transcode directory on temporary fast storage.
- Movies and television content on future dedicated media storage.
- Music content on future shared media storage if Navidrome is deployed.
A temporary media disk may be created on user-data for initial testing.
Long-term media storage should ideally use:
- A dedicated HDD.
- A mirrored HDD pair.
- A dedicated storage pool.
- A NAS or storage server.
Media capacity planning must account for continued Nextcloud growth on user-data.
Future Game-Server Storage
A dedicated game-server VM should use:
- Operating-system disk on
local-lvm. - Game data or world-save disk on
user-data. - Backup enabled for unique save data.
- Application-level save backups where supported.
Steam-installed server binaries can usually be downloaded again.
Unique game-world data, configuration files, allowlists, bans, and mods require backup.
Storage Expansion Principles
Before adding physical storage, decide whether the new disk is intended for:
- Operating-system workloads.
- Application data.
- Media.
- Backups.
- Redundancy.
- Offsite synchronization.
Avoid adding unrelated physical disks into an existing unmirrored LVM volume group merely to increase capacity.
Safer future expansion patterns include:
- Create a new independent Proxmox storage pool.
- Move selected VM disks to the new pool.
- Replace a smaller disk with a larger disk.
- Add mirrored storage for critical data.
- Add a dedicated media-storage pool.
- Add a dedicated Proxmox Backup Server.
- Add an encrypted offsite backup target.
Failure-Domain Considerations
System NVMe Failure
Expected impact:
- Proxmox root filesystem may be lost.
- Infrastructure VM and LXC operating-system disks may be lost.
- The user-data NVMe and backup HDD may remain physically intact.
Recovery would require:
- Proxmox reinstallation or system-disk restoration.
- Reconnection of existing storage.
- VM and LXC restoration from
pve-backup.
User-Data NVMe Failure
Expected impact:
- Nextcloud user-data disk may be lost.
- Other large application-data disks may be lost.
- VM operating-system disks on
local-lvmmay continue working. - Backups on the HDD may remain available.
Backup HDD Failure
Expected impact:
- Live services continue running.
- New backup jobs fail.
- Existing local recovery points are lost.
- There is no current offsite replacement copy.
Complete Host Failure
Expected impact:
- All running services become unavailable.
- The internal backup HDD may be inaccessible until moved or the host is repaired.
- A severe electrical or physical event could affect all three storage devices.
This is the primary reason a future offsite or separate-host backup is required.
Snapshot Policy
Proxmox snapshots are used as short-term rollback points.
Recommended snapshot use cases:
- Before a major operating-system upgrade.
- Before changing Authentik integration.
- Before changing Traefik routing or middleware.
- Before changing a Docker stack.
- Before database migrations.
- Before a major application upgrade.
- Before enabling GPU passthrough.
Snapshots are not backups because:
- Snapshots remain on the same storage.
- A physical disk failure destroys the snapshot with the live disk.
- Long-lived snapshots consume thin-pool capacity.
- Snapshot growth can create unexpected storage pressure.
Delete unnecessary snapshots after the associated change has been validated.
Avoid snapshots with RAM unless restoring the exact running state is required.
Storage Validation
Confirm Proxmox Storage
Use:
pvesm status
Expected storage IDs include:
locallocal-lvmuser-datapve-backup
Confirm Backup Mount
Use:
findmnt /mnt/pve/pve-backup
The source should be /dev/sda1.
Confirm Backup Capacity
Use:
df -h /mnt/pve/pve-backup
Confirm Physical Devices
Use:
lsblk -e7 -o NAME,PATH,SIZE,TYPE,FSTYPE,PTTYPE,MOUNTPOINTS,MODEL,SERIAL,WWN
Confirm Thin-Pool Utilization
Use:
lvs -a -o vg_name,lv_name,segtype,lv_attr,lv_size,data_percent,metadata_percent
Confirm Storage Configuration
Use:
cat /etc/pve/storage.cfg
Do not store credentials or secrets in the documentation when recording command output.
Disk-Health Monitoring
The backup HDD should be monitored using SMART.
Stable backup-HDD identifier:
/dev/disk/by-id/wwn-0x5000cca097c44d7e
Useful checks:
smartctl -H /dev/disk/by-id/wwn-0x5000cca097c44d7esmartctl -A /dev/disk/by-id/wwn-0x5000cca097c44d7esmartctl -x /dev/disk/by-id/wwn-0x5000cca097c44d7e
Important attributes include:
- Reallocated sector count.
- Current pending sector count.
- Offline uncorrectable sector count.
- UDMA CRC error count.
- Temperature.
- Power-on hours.
- SMART error log.
Pending or uncorrectable sectors require immediate review.
NVMe health should also be reviewed periodically using the appropriate NVMe SMART tools.
Capacity Review Checklist
Perform a storage review when:
- Nextcloud user data grows significantly.
- Plex media is introduced.
- A game-server data disk is created.
- Backup retention consumes unexpected space.
- Thin-pool utilization exceeds 70 percent.
- Snapshot count increases.
- A disk reports SMART warnings.
- Another physical disk is being considered.
Review:
- Physical free capacity.
- Thin-pool data utilization.
- Thin-pool metadata utilization.
- Snapshot count.
- Backup-HDD free space.
- Nextcloud data growth.
- Media-storage requirements.
- Restore-capacity requirements.
- Backup-retention effectiveness.
Current Limitations
The current storage architecture does not provide disk redundancy.
The system NVMe, user-data NVMe, and backup HDD are independent single devices.
The architecture protects against some logical failures through backups, but does not provide uninterrupted operation after a physical disk failure.
The local backup HDD is in the same:
- Physical server.
- Building.
- Power environment.
- Administrative security boundary.
Future priorities include:
- Dedicated media storage.
- A third backup copy.
- Offsite encrypted backups.
- Separate Proxmox Backup Server hardware.
- Storage redundancy for critical user data.
Document Control
- Owner: Bryan Gagne-Plante
- Last verified: YYYY-MM-DD
- System storage: 1 TB NVMe on
local-lvm - Application-data storage: 4 TB NVMe on
user-data - Backup storage: 4 TB HDD on
pve-backup - Storage redundancy: None
- Offsite backup: Not configured
- Recovery tested: Partial
- Known limitations: Single-device storage tiers and one physical host