Delete the Plex VM disks

Completes section 9 step 3. govc vm.destroy Plex removed the inventory
entry and the [NVME_1] Plex/ folder; datastore free space went
1,619.8 -> 1,756.1 GB (+136.3 GB). 10.100.0.24 / 10.50.0.31 and MACs
00:0c:29:4a:ef:3d / 00:0c:29:4a:ef:47 are now free for reuse.

Done on 2026-09-17 rather than the planned ~2026-10-15. Checking the
plan's own Veeam precondition inverted its assumption: the Backup VMs
job has EnableDeletedVmDataRetention set to False with Simple retention
of 7 restore points, so a VM removed from the job has its points pruned
as the remaining VMs roll the chain - Plex's are due to age out around
2026-09-24, about three weeks before the disks were scheduled for
deletion. Deleting while a good restore point still existed (2026-09-17
03:01, consistent) was safer than deleting later with none.

Recovery position is now: Veeam image restore until ~2026-09-24, then
only the pre-migration library DB at
/mnt/share/backups/plex-migration-2026-09-16/, which rebuilds a Plex
install but not the VM.

veeam.md gains the retention gotcha, since it applies to any future
decommission and the 30-day DeletedVmsDataRetentionPeriodDays value is
misleading while the toggle is off.

Also flags in esxi.md that its VM tables are incomplete: the host has 10
VMs, WW_DEV_VM / Rockwell_Win10 / TCBSD are absent, and DevVM is powered
off rather than on. Left the tables themselves alone as out of scope.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
dohertj2
2026-09-17 12:12:20 -04:00
parent 5a4da57457
commit 14cc4faa28
5 changed files with 33 additions and 15 deletions
+2 -2
View File
@@ -19,9 +19,9 @@ Credentials live inline in each component's `.md` file under its **Access** sect
## Components ## Components
- [TrueNAS Server](truenas.md) — NAS at 10.100.0.25 (management) / 10.50.0.x (storage), serves SMB and NFS - [TrueNAS Server](truenas.md) — NAS at 10.100.0.25 (management) / 10.50.0.x (storage), serves SMB and NFS
- [ESXi Host](esxi.md) — HP server at 10.2.0.12, ESXi 8.0.3, 8 VMs (6 powered on), access via `govc` only (not SSH). **Read esxi.md for credentials and connection details.** - [ESXi Host](esxi.md) — HP server at 10.2.0.12, ESXi 8.0.3, 10 VMs (6 powered on), access via `govc` only (not SSH). **Read esxi.md for credentials and connection details.**
- [Docker Server](docker.md) — Debian 13 at 10.100.0.35, Docker host for 21 containers (arr stack, Traefik, Semaphore/Ansible). **This is the local machine.** - [Docker Server](docker.md) — Debian 13 at 10.100.0.35, Docker host for 21 containers (arr stack, Traefik, Semaphore/Ansible). **This is the local machine.**
- [Plex Server](plex.md) — **container on the Docker host (10.100.0.35)** since 2026-09-16, Plex Media Server 1.43, NFS media from TrueNAS. Old Debian 11 VM decommissioned 2026-09-17 (powered off, disks retained until ~2026-10-15). - [Plex Server](plex.md) — **container on the Docker host (10.100.0.35)** since 2026-09-16, Plex Media Server 1.43, NFS media from TrueNAS. Old Debian 11 VM decommissioned and deleted 2026-09-17.
- [Home Assistant](ha.md) — HAOS at 10.100.0.40, HA 2026.2.2, 2,411 entities, smart home automation. API access only (no SSH). - [Home Assistant](ha.md) — HAOS at 10.100.0.40, HA 2026.2.2, 2,411 entities, smart home automation. API access only (no SSH).
- [Ignition Gateway](ignition.md) — Debian 11 at 10.100.0.90, Ignition 8.3.3 (Maker), SCADA/IIoT platform with PostgreSQL 13 - [Ignition Gateway](ignition.md) — Debian 11 at 10.100.0.90, Ignition 8.3.3 (Maker), SCADA/IIoT platform with PostgreSQL 13
- [Veeam Server](veeam.md) — Windows Server 2025 at 10.100.0.30, Veeam B&R 12.3, backup server. **Read veeam.md for credentials and connection details.** - [Veeam Server](veeam.md) — Windows Server 2025 at 10.100.0.30, Veeam B&R 12.3, backup server. **Read veeam.md for credentials and connection details.**
+4 -7
View File
@@ -60,6 +60,10 @@ All port groups: promiscuous mode=No, forged transmits=No, MAC changes=No.
## Virtual Machines ## Virtual Machines
> **Plex was deleted 2026-09-17** (migrated to a container on DOCKER; see [plex-docker-migration.md](plex-docker-migration.md) §9). Its former addresses 10.100.0.24 / 10.50.0.31 and MACs `00:0c:29:4a:ef:3d` / `00:0c:29:4a:ef:47` are released and free for reuse.
>
> **These tables are incomplete.** The host actually has 10 VMs; `WW_DEV_VM` (see [ww.md](ww.md)), `Rockwell_Win10` and `TCBSD` are not listed below, and `DevVM` is currently powered **off**, not on. Verify against `govc ls /ha-datacenter/vm` before relying on them.
### Powered On ### Powered On
| VM | Guest OS | CPU | RAM | LAN_100 IP | DATA_50 IP | Other IPs | | VM | Guest OS | CPU | RAM | LAN_100 IP | DATA_50 IP | Other IPs |
@@ -76,7 +80,6 @@ All port groups: promiscuous mode=No, forged transmits=No, MAC changes=No.
| VM | Guest OS | CPU | RAM | Port Groups | Notes | | VM | Guest OS | CPU | RAM | Port Groups | Notes |
|----|----------|-----|-----|-------------|-------| |----|----------|-----|-----|-------------|-------|
| DevServer | Win Server 2022 | 12 | 32GB | LAN_100 | — | | DevServer | Win Server 2022 | 12 | 32GB | LAN_100 | — |
| Plex | Debian 11 | 8 | 8GB | LAN_100, DATA_50 | **Decommissioned 2026-09-17** — migrated to a container on DOCKER. Disks retained for rollback until ~2026-10-15, then delete. See [plex-docker-migration.md](plex-docker-migration.md) §9. |
## Per-VM Network Detail ## Per-VM Network Detail
@@ -103,12 +106,6 @@ All port groups: promiscuous mode=No, forged transmits=No, MAC changes=No.
|-----|-----|------------|-----| |-----|-----|------------|-----|
| Adapter 2 | 00:0c:29:f3:f3:5b | LAN_100 | 10.100.0.40 | | Adapter 2 | 00:0c:29:f3:f3:5b | LAN_100 | 10.100.0.40 |
### Plex (decommissioned 2026-09-17, powered off)
| NIC | MAC | Port Group | Former IP |
|-----|-----|------------|-----|
| Adapter 1 | 00:0c:29:4a:ef:3d | LAN_100 | 10.100.0.24 (lease released) |
| Adapter 2 | 00:0c:29:4a:ef:47 | DATA_50 | 10.50.0.31 (lease released) |
### Ignition ### Ignition
| NIC | MAC | Port Group | IPs | | NIC | MAC | Port Group | IPs |
|-----|-----|------------|-----| |-----|-----|------------|-----|
+23 -4
View File
@@ -1,6 +1,6 @@
# Plex Migration: ESXi VM → Docker Container # Plex Migration: ESXi VM → Docker Container
**Status: EXECUTED 2026-09-16. DECOMMISSIONED 2026-09-17.** Decisions 1 & 2 ratified as Option A / Option A. Cutover completed with ~22 min of Plex downtime (transfer itself 5m38s). All verification in §8 passed except the two items needing a real client, noted there. §9 decommission steps 1, 2 and 4-7 are **done** (see the log at the end of §9); step 3 — deleting the VMDKs — is deliberately **deferred to ~2026-10-15**. **Status: EXECUTED 2026-09-16. DECOMMISSIONED 2026-09-17.** Decisions 1 & 2 ratified as Option A / Option A. Cutover completed with ~22 min of Plex downtime (transfer itself 5m38s). All verification in §8 passed except the two items needing a real client, noted there. §9 decommission is **complete** — all steps including 3 (VMDK deletion) were done on 2026-09-17. See the log at the end of §9.
**Created:** 2026-09-16 **Created:** 2026-09-16
**Source:** `plex` VM, 10.100.0.24, Debian 11 (EOL) **Source:** `plex` VM, 10.100.0.24, Debian 11 (EOL)
**Target:** `DOCKER` host, 10.100.0.35, Debian 13, containerised + Ansible-managed **Target:** `DOCKER` host, 10.100.0.35, Debian 13, containerised + Ansible-managed
@@ -555,7 +555,7 @@ the Traefik file-provider service and the UDM `PLEX` port-forward all resolve to
|---|---|---| |---|---|---|
| 1 | Veeam `Backup VMs` | Plex removed via `Remove-VBRJobObject`. **Veeam converts a removed include into an explicit `Exclude` rather than deleting the entry** — re-running the removal leaves it as `Exclude`. That is the same shape as the pre-existing `Deployarr` exclusion and is the expected end state, not a failure. | | 1 | Veeam `Backup VMs` | Plex removed via `Remove-VBRJobObject`. **Veeam converts a removed include into an explicit `Exclude` rather than deleting the entry** — re-running the removal leaves it as `Exclude`. That is the same shape as the pre-existing `Deployarr` exclusion and is the expected end state, not a failure. |
| 2 | Power off + snapshot | Guest shut down gracefully via `govc vm.power -s Plex` (VMware Tools `toolsOk`); confirmed `plexmediaserver` was still `inactive`/`disabled` first. Snapshot `pre-docker-migration 2026-09-16` then removed **while powered off** — safer consolidation than the plan's on-line ordering. Disk collapsed `Plex-000001.vmdk` → `Plex.vmdk`, `runtime.consolidationNeeded = false`. | | 2 | Power off + snapshot | Guest shut down gracefully via `govc vm.power -s Plex` (VMware Tools `toolsOk`); confirmed `plexmediaserver` was still `inactive`/`disabled` first. Snapshot `pre-docker-migration 2026-09-16` then removed **while powered off** — safer consolidation than the plan's on-line ordering. Disk collapsed `Plex-000001.vmdk` → `Plex.vmdk`, `runtime.consolidationNeeded = false`. |
| 3 | Delete VMDKs | **Deferred to ~2026-10-15**, per plan. | | 3 | Delete VMDKs | **Done 2026-09-17**, ahead of the planned ~2026-10-15 — see "Early deletion" below. `govc vm.destroy Plex` removed the inventory entry and the `[NVME_1] Plex/` folder; datastore free space went 1,619.8 → 1,756.1 GB (+136.3 GB). |
| 4 | Guacamole "Plex SSH" | Deleted via the Guacamole API (connection id 3, `HTTP 204`). **The `guacamole` role is create-only** (`when: item.name not in guac_existing_names`), so it cannot remove a connection — the entry was also deleted from `roles/guacamole/defaults/main.yml` so a rebuild does not recreate it. | | 4 | Guacamole "Plex SSH" | Deleted via the Guacamole API (connection id 3, `HTTP 204`). **The `guacamole` role is create-only** (`when: item.name not in guac_existing_names`), so it cannot remove a connection — the entry was also deleted from `roles/guacamole/defaults/main.yml` so a rebuild does not recreate it. |
| 5 | Addresses | Neither MAC had a Unifi fixed reservation, so `.24`/`10.50.0.31` were plain leases; both clients (`00:0c:29:4a:ef:3d`, `00:0c:29:4a:ef:47`) were forgotten via `cmd/stamgr`. | | 5 | Addresses | Neither MAC had a Unifi fixed reservation, so `.24`/`10.50.0.31` were plain leases; both clients (`00:0c:29:4a:ef:3d`, `00:0c:29:4a:ef:47`) were forgotten via `cmd/stamgr`. |
| 6 | Docs | [plex.md](plex.md), [CLAUDE.md](CLAUDE.md), [esxi.md](esxi.md), [veeam.md](veeam.md). `docker.md` already listed `plex`. ESXi port-group counts corrected LAN_100 7→6 and DATA_50 4→3, verified by counting NICs on powered-on VMs. | | 6 | Docs | [plex.md](plex.md), [CLAUDE.md](CLAUDE.md), [esxi.md](esxi.md), [veeam.md](veeam.md). `docker.md` already listed `plex`. ESXi port-group counts corrected LAN_100 7→6 and DATA_50 4→3, verified by counting NICs on powered-on VMs. |
@@ -569,8 +569,27 @@ the Traefik file-provider service and the UDM `PLEX` port-forward all resolve to
> `unknown tokenizer: collating`. That is the stock binary lacking Plex's custom collation on the FTS virtual tables, **not** > `unknown tokenizer: collating`. That is the stock binary lacking Plex's custom collation on the FTS virtual tables, **not**
> corruption — use `Plex SQLite` for a real whole-DB check. Ordinary table queries work fine with stock `sqlite3`. > corruption — use `Plex SQLite` for a real whole-DB check. Ordinary table queries work fine with stock `sqlite3`.
**Before deleting the VMDKs**, confirm no Veeam restore point is still needed, then: ### Early deletion of the VMDKs — 2026-09-17
`govc vm.destroy Plex` (removes the VM and its `[NVME_1] Plex/` folder).
The disks were destroyed the same day rather than at the planned ~2026-10-15. Checking the Veeam precondition first turned
up something that inverted the plan's assumption and is worth recording:
- A **consistent, uncorrupted restore point exists at 2026-09-17 03:01**, captured after the cutover and before Plex was
removed from the job that morning. The chain runs 2026-09-05 → 2026-09-17 with a Full on 2026-09-12.
- But the `Backup VMs` job has **`EnableDeletedVmDataRetention: False`** with Simple retention of 7 restore points. A VM
removed from the job stops generating points, so its data is pruned as the remaining VMs roll the chain — Plex's points
are expected to disappear around **2026-09-24**.
So the plan's "keep the disks until mid-October as the rollback" was resting on a Veeam safety net that expires roughly
three weeks *earlier* than the disks were due to be deleted. Deleting on 2026-09-17, while a good restore point still
existed, was strictly safer than deleting on 2026-10-15 with none.
**Current recovery position:** no VM to restore. Until ~2026-09-24 a Veeam image restore is possible; after that the only
artifact is the pre-migration library DB at `/mnt/share/backups/plex-migration-2026-09-16/`, which rebuilds a Plex install
(libraries, watch history, `MachineIdentifier` via `Preferences.xml`) but not the VM.
**If a longer-lived VM-level copy is ever wanted for another decommission**, export the restore point to a standalone full
backup *before* removing the VM from its job — job retention does not protect it otherwise.
--- ---
+2 -2
View File
@@ -1,8 +1,8 @@
# Plex Media Server # Plex Media Server
> **Migrated to Docker 2026-09-16; old VM decommissioned 2026-09-17.** Plex ran on a dedicated Debian 11 VM at 10.100.0.24 until that OS reached LTS EOL (2026-08-31). It now runs as a container on the [Docker host](docker.md). > **Migrated to Docker 2026-09-16; old VM deleted 2026-09-17.** Plex ran on a dedicated Debian 11 VM at 10.100.0.24 until that OS reached LTS EOL (2026-08-31). It now runs as a container on the [Docker host](docker.md).
> >
> The old VM is **powered off** with its disks intact (`[NVME_1] Plex/Plex.vmdk`, 128 GB) and is scheduled for deletion ~2026-10-15. Until then, rollback is: power the VM on, `sudo systemctl enable --now plexmediaserver`, and repoint the UDM `PLEX` port-forward to 10.100.0.24. Its `.24`/`10.50.0.31` leases have been released and it is no longer in the Veeam `Backup VMs` job. A verified copy of the pre-migration library DB is at `/mnt/share/backups/plex-migration-2026-09-16/`. Full procedure: [plex-docker-migration.md](plex-docker-migration.md). > The old VM has been **destroyed** — `govc vm.destroy Plex` removed the inventory entry and the `[NVME_1] Plex/` folder, reclaiming 136 GB. There is no VM to roll back to. The surviving artifacts are the Veeam restore points in the `Backup VMs` chain (newest 2026-09-17 03:01, **expiring ~2026-09-24** — the job has `EnableDeletedVmDataRetention: False`) and the pre-migration library DB at `/mnt/share/backups/plex-migration-2026-09-16/`. After that date, recovery means a fresh Plex install restored from that DB, not a VM restore. Full procedure: [plex-docker-migration.md](plex-docker-migration.md).
## Access ## Access
+2
View File
@@ -57,6 +57,8 @@
**Backup VMs** includes: Ignition, HA, DOCKER. Deployarr and Plex are explicitly excluded (Plex removed 2026-09-17 on decommission; Veeam converts a removed include into an explicit exclude rather than dropping the entry, so the tombstone is expected). `/opt/plex` is now covered by the DOCKER VM backup. **Backup VMs** includes: Ignition, HA, DOCKER. Deployarr and Plex are explicitly excluded (Plex removed 2026-09-17 on decommission; Veeam converts a removed include into an explicit exclude rather than dropping the entry, so the tombstone is expected). `/opt/plex` is now covered by the DOCKER VM backup.
> **Retention gotcha:** this job has `EnableDeletedVmDataRetention: False` with Simple retention of 7 restore points. A VM removed from the job stops generating restore points and its existing data is pruned as the remaining VMs roll the chain — it is **not** kept for `DeletedVmsDataRetentionPeriodDays` (30), because that setting is disabled. Plex's points (newest 2026-09-17 03:01) are expected to age out around **2026-09-24**. Before decommissioning any VM, export its restore point to a standalone full backup if a long-lived image copy is wanted.
**Backup WW_DEV_VM** includes: WW_DEV_VM (Wonderware dev VM, ~256 GB increments). **Backup WW_DEV_VM** includes: WW_DEV_VM (Wonderware dev VM, ~256 GB increments).
### SMB Mappings ### SMB Mappings