# 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:

<div id="bkmrk-proxmox-and-applicat" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- Proxmox and application operating-system disks.
- Large user and application data.
- Local Proxmox backups.
- Temporary snapshots and rollback points.

</div>The main design goal is to prevent application data, operating-system disks, and backups from competing for the same physical storage role.

<div id="bkmrk-" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">---

</div>## Storage Overview

<div id="bkmrk-storage-tier-approxi" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;"><div aria-expanded="false" class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" data-stable-ignore="true" data-tabster="{"restorer":{"type":1}}" role="presentation" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Storage Tier</th><th>Approximate Capacity</th><th>Proxmox Storage</th><th>Primary Purpose</th></tr><tr><td>System NVMe</td><td>1 TB</td><td>`local-lvm`</td><td>Operating systems and infrastructure services</td></tr><tr><td>User-data NVMe</td><td>4 TB</td><td>`user-data`</td><td>Large application and user-data disks</td></tr><tr><td>Backup HDD</td><td>4 TB</td><td>`pve-backup`</td><td>Proxmox VZDump backups</td></tr></tbody></table>

</div></div>---

</div>## Physical Disk Inventory

<div id="bkmrk-linux-device-approxi" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;"><div aria-expanded="false" class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" data-stable-ignore="true" data-tabster="{"restorer":{"type":1}}" role="presentation" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Linux Device</th><th>Approximate Usable Size</th><th>Device Type</th><th>Current Role</th></tr><tr><td>`/dev/nvme1n1`</td><td>931.5 GiB</td><td>NVMe SSD</td><td>Proxmox operating system and `local-lvm`</td></tr><tr><td>`/dev/nvme0n1`</td><td>3.6 TiB</td><td>NVMe SSD</td><td>`user-data` LVM-thin storage</td></tr><tr><td>`/dev/sda`</td><td>3.6 TiB</td><td>WDC HDD</td><td>Dedicated Proxmox backup storage</td></tr></tbody></table>

</div></div></div>Linux device names such as `/dev/sda` can change between boots or hardware changes.

Permanent references should use:

<div id="bkmrk-filesystem-uuids-for" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- Filesystem UUIDs for mounted filesystems.
- `/dev/disk/by-id/` paths for physical-device operations.
- Proxmox storage IDs for normal VM and backup management.

---

</div>## System NVMe

### Physical Device

<div id="bkmrk-setting-value-linux-" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;"><div aria-expanded="false" class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" data-stable-ignore="true" data-tabster="{"restorer":{"type":1}}" role="presentation" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Setting</th><th>Value</th></tr><tr><td>Linux device</td><td>`/dev/nvme1n1`</td></tr><tr><td>Approximate capacity</td><td>931.5 GiB</td></tr><tr><td>Partition table</td><td>GPT</td></tr><tr><td>Primary volume group</td><td>`pve`</td></tr></tbody></table>

</div></div></div>### Partition Layout

<div id="bkmrk-partition-approximat" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;"><div aria-expanded="false" class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" data-stable-ignore="true" data-tabster="{"restorer":{"type":1}}" role="presentation" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Partition</th><th>Approximate Size</th><th>Purpose</th></tr><tr><td>`/dev/nvme1n1p1`</td><td>1007 KiB</td><td>Boot support partition</td></tr><tr><td>`/dev/nvme1n1p2`</td><td>1 GiB</td><td>EFI system partition</td></tr><tr><td>`/dev/nvme1n1p3`</td><td>930.5 GiB</td><td>Proxmox LVM physical volume</td></tr></tbody></table>

</div></div></div>### Logical Volumes

<div id="bkmrk-logical-volume-appro" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;"><div aria-expanded="false" class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" data-stable-ignore="true" data-tabster="{"restorer":{"type":1}}" role="presentation" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Logical Volume</th><th>Approximate Size</th><th>Purpose</th></tr><tr><td>`pve-root`</td><td>96 GiB</td><td>Proxmox root filesystem</td></tr><tr><td>`pve-swap`</td><td>8 GiB</td><td>Proxmox swap</td></tr><tr><td>`pve-data`</td><td>794.3 GiB</td><td>Proxmox LVM-thin pool</td></tr></tbody></table>

</div></div></div>### Proxmox Storage

The `pve-data` thin pool appears in Proxmox as:

<div id="bkmrk-storage-id%3A-local-lv" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- **Storage ID:** `local-lvm`
- **Storage type:** LVM-thin

</div>### Intended Use

The system NVMe stores:

<div id="bkmrk-proxmox-ve.-infrastr" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- 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.

</div>### Current Workloads

The system NVMe currently stores operating-system disks for services such as:

<div id="bkmrk-wireguard.-pi-hole.-" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- WireGuard.
- Pi-hole.
- Uptime Kuma.
- Traefik.
- Authentik.
- Nextcloud.
- Vikunja.
- BookStack.

</div>### Storage Policy

Use `local-lvm` for:

<div id="bkmrk-vm-and-lxc-operating" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- VM and LXC operating-system disks.
- Infrastructure services.
- Small persistent application datasets.
- VM configuration disks.
- Temporary snapshots.

</div>Avoid using `local-lvm` for:

<div id="bkmrk-large-nextcloud-user" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- Large Nextcloud user libraries.
- Large Plex media libraries.
- Large game-server libraries.
- Backup archives.
- Long-term media collections.

---

</div>## User-Data NVMe

### Physical Device

<div id="bkmrk-setting-value-linux--1" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;"><div aria-expanded="false" class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" data-stable-ignore="true" data-tabster="{"restorer":{"type":1}}" role="presentation" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Setting</th><th>Value</th></tr><tr><td>Linux device</td><td>`/dev/nvme0n1`</td></tr><tr><td>Approximate capacity</td><td>3.6 TiB</td></tr><tr><td>Device purpose</td><td>Large application and user data</td></tr><tr><td>LVM volume group</td><td>`lvm1`</td></tr><tr><td>Thin pool</td><td>`data`</td></tr></tbody></table>

</div></div></div>### LVM-Thin Layout

The user-data NVMe contains:

<div id="bkmrk-lvm1-data_tmeta-lvm1" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- `lvm1-data_tmeta`
- `lvm1-data_tdata`
- `lvm1-data`

</div>These components represent:

<div id="bkmrk-thin-pool-metadata.-" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- Thin-pool metadata.
- Thin-pool data.
- The visible LVM-thin pool.

</div>### Proxmox Storage

The thin pool appears in Proxmox as:

<div id="bkmrk-storage-id%3A-user-dat" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- **Storage ID:** `user-data`
- **Storage type:** LVM-thin
- **Volume group:** `lvm1`
- **Thin pool:** `data`
- **Configured chunk size:** 256 KiB

</div>### Intended Use

The user-data NVMe stores:

<div id="bkmrk-nextcloud-user-files" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- Nextcloud user files.
- Large application-data disks.
- Future game-server data.
- Future media-storage testing.
- Other user-generated content.

</div>### Current Major Workload

Nextcloud has a separate virtual data disk on `user-data`.

<div id="bkmrk-setting-value-nomina" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;"><div aria-expanded="false" class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" data-stable-ignore="true" data-tabster="{"restorer":{"type":1}}" role="presentation" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Setting</th><th>Value</th></tr><tr><td>Nominal virtual-disk size</td><td>500 GB</td></tr><tr><td>Guest filesystem</td><td>ext4</td></tr><tr><td>Guest mount point</td><td>`/mnt/nextcloud-data`</td></tr><tr><td>Nextcloud data directory</td><td>`/mnt/nextcloud-data/ncdata`</td></tr></tbody></table>

</div></div></div>The Nextcloud operating system remains on `local-lvm`, while user files remain on `user-data`.

This separation makes it easier to:

<div id="bkmrk-expand-the-user-data" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- 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.

---

</div>## 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:

<div id="bkmrk-write-failures.-file" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- Write failures.
- Filesystem corruption.
- Application outages.
- Database failures.
- Guest crashes.

---

</div>## 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:

<div id="bkmrk-data-percent-metadat" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- **Data percent**
- **Metadata percent**

</div>Suggested operational thresholds:

<div id="bkmrk-utilization-response" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;"><div aria-expanded="false" class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" data-stable-ignore="true" data-tabster="{"restorer":{"type":1}}" role="presentation" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Utilization</th><th>Response</th></tr><tr><td>Below 70 percent</td><td>Normal monitoring</td></tr><tr><td>70 to 84 percent</td><td>Review growth and available capacity</td></tr><tr><td>85 percent or higher</td><td>Immediate capacity planning</td></tr><tr><td>Near 100 percent</td><td>Critical risk of storage failure</td></tr></tbody></table>

</div></div></div>These thresholds are operational recommendations and should be adjusted based on growth rate and workload importance.

<div id="bkmrk--1" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">---

</div>## Backup HDD

### Physical Device

<div id="bkmrk-setting-value-linux--2" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;"><div aria-expanded="false" class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" data-stable-ignore="true" data-tabster="{"restorer":{"type":1}}" role="presentation" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Setting</th><th>Value</th></tr><tr><td>Linux device</td><td>`/dev/sda`</td></tr><tr><td>Partition</td><td>`/dev/sda1`</td></tr><tr><td>Approximate usable capacity</td><td>3.6 TiB</td></tr><tr><td>Filesystem</td><td>ext4</td></tr><tr><td>Partition table</td><td>GPT</td></tr><tr><td>Stable WWN</td><td>`0x5000cca097c44d7e`</td></tr></tbody></table>

</div></div></div>### Permanent Mount

<div id="bkmrk-setting-value-mount-" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;"><div aria-expanded="false" class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" data-stable-ignore="true" data-tabster="{"restorer":{"type":1}}" role="presentation" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Setting</th><th>Value</th></tr><tr><td>Mount point</td><td>`/mnt/pve/pve-backup`</td></tr><tr><td>Proxmox storage ID</td><td>`pve-backup`</td></tr><tr><td>Proxmox content type</td><td>VZDump backup files</td></tr><tr><td>Mount method</td><td>Filesystem UUID through `/etc/fstab`</td></tr></tbody></table>

</div></div></div>The filesystem UUID is used instead of `/dev/sda1` because Linux device letters can change.

### Mount Options

The backup filesystem uses:

<div id="bkmrk-read-write-mounting." style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- Read-write mounting.
- `noatime` to reduce unnecessary metadata writes.

</div>### 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.

<div id="bkmrk--2" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">---

</div>## Backup-HDD Intended Use

The backup HDD stores:

<div id="bkmrk-scheduled-vm-backups" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- Scheduled VM backups.
- Scheduled LXC backups.
- Manual baseline backups.
- Upgrade rollback backups.
- Restore-test source archives.

</div>The backup HDD must remain dedicated to backups.

<div id="bkmrk--3" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">---

</div>## Prohibited Backup-HDD Uses

Do not use the backup HDD for:

<div id="bkmrk-active-vm-disks.-act" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- 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.

</div>Mixing active workloads with backups would:

<div id="bkmrk-increase-disk-conten" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- Increase disk contention.
- Increase wear.
- Reduce available retention.
- Expand the failure impact.
- Make recovery planning less predictable.

---

</div>## Storage Placement Rules

<div id="bkmrk-workload-preferred-s" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;"><div aria-expanded="false" class="___5wvz9a0 ftgm304 f1oy3dpc fm6nont f48hbct" data-stable-ignore="true" data-tabster="{"restorer":{"type":1}}" role="presentation" tabindex="0"><div class="___1dmoc29 f10pi13n ftgm304 f1enuhaj fdclmfp f1nbblvp fat0sn4 f1ov4xf1 fekwl8i f1lmfglv f1oz7aqm f1abmfm4 f1w619qj f16h0jq8"><table class="___1vyiefv f1ddd56o f16vktn6 f1ahpp82 f11qra4b f1uinfot fibjyge fvueend f9yszdx f1fu4s3n f3l3pb3 f10ghnd0 f8fmt76 fjvbh62 f1qrqxae f1vw5qpk fc02sbz fxawf59 fymf513 f1aoyrul f1el8yx3 f1pymoxg f1ofu761 fe6itr f7coize f1794535 f1o0pw0q fbjjl9v fk1v6el f16pyhcb f1ixlhx9 f12zef0i flu5r5u f19haqzy f1owmcxx f1oddm8q f1004tna fcoaxci fh0ee9u f15v23i2 f1dmj53 f1r1gcv9 f14z1veh ffufd3x f1ypplot f1660cg"><tbody><tr><th>Workload</th><th>Preferred Storage</th></tr><tr><td>Infrastructure OS disk</td><td>`local-lvm`</td></tr><tr><td>Application OS disk</td><td>`local-lvm`</td></tr><tr><td>Nextcloud user data</td><td>`user-data`</td></tr><tr><td>Vikunja database and files</td><td>Current VM OS disk unless growth requires separation</td></tr><tr><td>BookStack database and files</td><td>Current VM OS disk unless growth requires separation</td></tr><tr><td>Plex configuration and metadata</td><td>`local-lvm` or a dedicated application disk</td></tr><tr><td>Plex media</td><td>Future dedicated media storage</td></tr><tr><td>Game-server executable files</td><td>Dedicated game-server disk or `user-data`</td></tr><tr><td>Game world and save data</td><td>`user-data` with backup enabled</td></tr><tr><td>Proxmox backup archives</td><td>`pve-backup`</td></tr><tr><td>Short-term snapshots</td><td>Same thin pool as the source disk</td></tr></tbody></table>

</div></div>---

</div>## Future Plex Storage

The RTX 2060 Plex VM should not use the backup HDD for media.

Recommended placement:

<div id="bkmrk-plex-operating-syste" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- 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.

</div>A temporary media disk may be created on `user-data` for initial testing.

Long-term media storage should ideally use:

<div id="bkmrk-a-dedicated-hdd.-a-m" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- A dedicated HDD.
- A mirrored HDD pair.
- A dedicated storage pool.
- A NAS or storage server.

</div>Media capacity planning must account for continued Nextcloud growth on `user-data`.

<div id="bkmrk--4" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">---

</div>## Future Game-Server Storage

A dedicated game-server VM should use:

<div id="bkmrk-operating-system-dis" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- 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.

</div>Steam-installed server binaries can usually be downloaded again.

Unique game-world data, configuration files, allowlists, bans, and mods require backup.

<div id="bkmrk--5" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">---

</div>## Storage Expansion Principles

Before adding physical storage, decide whether the new disk is intended for:

<div id="bkmrk-operating-system-wor" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- Operating-system workloads.
- Application data.
- Media.
- Backups.
- Redundancy.
- Offsite synchronization.

</div>Avoid adding unrelated physical disks into an existing unmirrored LVM volume group merely to increase capacity.

Safer future expansion patterns include:

<div id="bkmrk-create-a-new-indepen" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">1. Create a new independent Proxmox storage pool.
2. Move selected VM disks to the new pool.
3. Replace a smaller disk with a larger disk.
4. Add mirrored storage for critical data.
5. Add a dedicated media-storage pool.
6. Add a dedicated Proxmox Backup Server.
7. Add an encrypted offsite backup target.

---

</div>## Failure-Domain Considerations

### System NVMe Failure

Expected impact:

<div id="bkmrk-proxmox-root-filesys" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- 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.

</div>Recovery would require:

<div id="bkmrk-proxmox-reinstallati" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- Proxmox reinstallation or system-disk restoration.
- Reconnection of existing storage.
- VM and LXC restoration from `pve-backup`.

</div>### User-Data NVMe Failure

Expected impact:

<div id="bkmrk-nextcloud-user-data-" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- Nextcloud user-data disk may be lost.
- Other large application-data disks may be lost.
- VM operating-system disks on `local-lvm` may continue working.
- Backups on the HDD may remain available.

</div>### Backup HDD Failure

Expected impact:

<div id="bkmrk-live-services-contin" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- Live services continue running.
- New backup jobs fail.
- Existing local recovery points are lost.
- There is no current offsite replacement copy.

</div>### Complete Host Failure

Expected impact:

<div id="bkmrk-all-running-services" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- 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.

</div>This is the primary reason a future offsite or separate-host backup is required.

<div id="bkmrk--6" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">---

</div>## Snapshot Policy

Proxmox snapshots are used as short-term rollback points.

Recommended snapshot use cases:

<div id="bkmrk-before-a-major-opera" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- 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.

</div>Snapshots are not backups because:

<div id="bkmrk-snapshots-remain-on-" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- 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.

</div>Delete unnecessary snapshots after the associated change has been validated.

Avoid snapshots with RAM unless restoring the exact running state is required.

<div id="bkmrk--7" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">---

</div>## Storage Validation

### Confirm Proxmox Storage

Use:

`pvesm status`

Expected storage IDs include:

<div id="bkmrk-local-local-lvm-user" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- `local`
- `local-lvm`
- `user-data`
- `pve-backup`

</div>### 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.

<div id="bkmrk--8" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">---

</div>## Disk-Health Monitoring

The backup HDD should be monitored using SMART.

Stable backup-HDD identifier:

`/dev/disk/by-id/wwn-0x5000cca097c44d7e`

Useful checks:

<div id="bkmrk-smartctl--h-%2Fdev%2Fdis" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- `smartctl -H /dev/disk/by-id/wwn-0x5000cca097c44d7e`
- `smartctl -A /dev/disk/by-id/wwn-0x5000cca097c44d7e`
- `smartctl -x /dev/disk/by-id/wwn-0x5000cca097c44d7e`

</div>Important attributes include:

<div id="bkmrk-reallocated-sector-c" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- Reallocated sector count.
- Current pending sector count.
- Offline uncorrectable sector count.
- UDMA CRC error count.
- Temperature.
- Power-on hours.
- SMART error log.

</div>Pending or uncorrectable sectors require immediate review.

NVMe health should also be reviewed periodically using the appropriate NVMe SMART tools.

<div id="bkmrk--9" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">---

</div>## Capacity Review Checklist

Perform a storage review when:

<div id="bkmrk-nextcloud-user-data--1" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- 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.

</div>Review:

<div id="bkmrk-physical-free-capaci" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">1. Physical free capacity.
2. Thin-pool data utilization.
3. Thin-pool metadata utilization.
4. Snapshot count.
5. Backup-HDD free space.
6. Nextcloud data growth.
7. Media-storage requirements.
8. Restore-capacity requirements.
9. Backup-retention effectiveness.

---

</div>## 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:

<div id="bkmrk-physical-server.-bui" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- Physical server.
- Building.
- Power environment.
- Administrative security boundary.

</div>Future priorities include:

<div id="bkmrk-dedicated-media-stor" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- Dedicated media storage.
- A third backup copy.
- Offsite encrypted backups.
- Separate Proxmox Backup Server hardware.
- Storage redundancy for critical user data.

---

</div>## Document Control

<div id="bkmrk-owner%3A-bryan-gagne-p" style="font-family: 'Segoe UI'; font-size: 14px; font-style: normal; font-weight: 400; line-height: 20px;">- **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

</div>