diff --git a/CLAUDE.md b/CLAUDE.md index f3dc47a..4806c5a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -19,9 +19,9 @@ Credentials live inline in each component's `.md` file under its **Access** sect ## Components - [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.** -- [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). - [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.** diff --git a/esxi.md b/esxi.md index 4ab554b..aa02464 100644 --- a/esxi.md +++ b/esxi.md @@ -60,6 +60,10 @@ All port groups: promiscuous mode=No, forged transmits=No, MAC changes=No. ## 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 | 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 | |----|----------|-----|-----|-------------|-------| | 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 @@ -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 | -### 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 | NIC | MAC | Port Group | IPs | |-----|-----|------------|-----| diff --git a/plex-docker-migration.md b/plex-docker-migration.md index 26579ab..51fc988 100644 --- a/plex-docker-migration.md +++ b/plex-docker-migration.md @@ -1,6 +1,6 @@ # 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 **Source:** `plex` VM, 10.100.0.24, Debian 11 (EOL) **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. | | 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. | | 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. | @@ -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** > 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: -`govc vm.destroy Plex` (removes the VM and its `[NVME_1] Plex/` folder). +### Early deletion of the VMDKs — 2026-09-17 + +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. --- diff --git a/plex.md b/plex.md index 59f303f..f18120e 100644 --- a/plex.md +++ b/plex.md @@ -1,8 +1,8 @@ # 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 diff --git a/veeam.md b/veeam.md index 380990c..fcf8f77 100644 --- a/veeam.md +++ b/veeam.md @@ -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. +> **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). ### SMB Mappings