Files
esh-pfi-infrastructure/servers/esh-pve-nas/README.md
T
vh b84f8a996f docs(esh): record the 2-node cluster, and that a dark tile is pvestatd
Two findings from chasing node `pve` showing dark in the UI.

esh-pve and esh-pve-nas are a 2-node cluster (esh-pve-cluster, expected
votes 2, quorum 2, no qdevice). This was undocumented, and last night's
migration rebooted one of the members without accounting for it. Nothing
broke -- quorum is intact and both nodes report the same ring id -- but
that was luck. Rebooting either node drops the survivor below quorum and
makes its /etc/pve read-only until the partner returns. It matters for
the pending confirmation reboot and the 225-package upgrade, both of
which take a node down.

The dark tile itself was NOT last night's doing. pvestatd SEGV'd on
2026-05-28 and had been dead 82 days; the journal has nothing between
that crash and the restart today. It is only the reporting daemon, so
the node stayed quorate and healthy with all services active and all
three guests running the whole time -- the UI simply had nothing telling
it the node was alive. Fourth SEGV in that unit's history, so treat a
recurrence as expected and consider a watchdog: nothing alerts on it,
and the sole symptom is cosmetic enough to go unnoticed for months.
2026-08-18 06:43:02 -07:00

103 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# esh-pve-nas
Second Proxmox VE host at the ESH home lab (`esh-nas-pve.esteban.net`), dedicated to NAS / storage duty.
## Network
- **LAN IP:** 10.0.50.55
- **FQDN:** `esh-nas-pve.esteban.net`
- **Web UI:** `https://10.0.50.55:8006`
- **SSH:** `root@esh-pve-nas` (key auth)
Media services on this box sit at `10.0.50.56` (Plex) and `10.0.50.57` (Jellyfin) — references to `esh-nas-pve` in the homepage config point at those addresses.
## Hardware
- **CPU:** Intel Xeon W-1250 @ 3.30 GHz
- **RAM:** 125.6 GB
- **Kernel:** `6.8.12-13-pve` (Proxmox 8.x)
- **Storage: root is `nvme/ROOT/pve-1` on the mirrored NVMe pool** since the
2026-08-18 migration. The USB Disk-on-Module (7.3 GB, `ID_BUS=usb`, NORELSYS
1081) still holds the ESP and `/boot`, but is **out of the runtime I/O path** —
a USB bus reset no longer drops root from under a running hypervisor. Runbook:
[`docs/runbooks/esh-pve-nas-boot-migration.md`](../../docs/runbooks/esh-pve-nas-boot-migration.md).
DOM LVM layout:
| LV | size | role |
|---|---|---|
| `pve-root` | 6.04 G | ext4 — **the rollback**, intact and unmounted, keeps its own kernel + initrd |
| `pve-boot` | 512 M | ext4 — `/boot`, carved out of swap |
| `pve-swap` | 256 M | swap, shrunk to make room |
`/boot` stays ext4 on the DOM on purpose: GRUB cannot read the `nvme` pool,
which has `encryption`, `large_dnode` and `zstd_compress` enabled.
⚠ **Device letters are not stable** — the DOM was `sdq` before the reboot and
`sdl` after. `fstab` uses `/dev/pve/*` and UUIDs; never write a rule against a
bare `sdX` on this host.
⚠ **There is no auto-fallback if a boot fails.** grubenv lives on an LVM LV,
which GRUB can read but not write, so `grub-reboot`'s one-shot degrades to a
sticky default (verified 2026-08-18: `next_entry` survived the boot that
consumed it). Steady state is `saved_entry=pve-zfs-root` with no `next_entry`.
A failed boot needs the console — and this box has **no IPMI, no BMC, no serial
console**. Recovery is selecting `Proxmox VE - ROLLBACK: ext4 root on the USB
DOM` at the GRUB menu.
- ⚠ **Never set the ZFS cachefile on one pool.** `zpool set cachefile=…` flips the
host from import-by-scan to import-by-cache; a cache holding only `nvme` leaves
`ssd` and `tank` unimported at boot, which empties every CT 103 export. Set it on
all three or none.
- **Pools:** `nvme` (2× 931 GB NVMe mirror — 32 G used, 867 G free, holds every guest
rootfs), `ssd` (4× 894 GB Intel SATA, 2 mirrors — 1.42 T free), `tank`
(12× 14.6 TB raidz2 ×2 — 40 T of 175 T). Plus NFS `/mnt/pve/tank-vmbu` for VM backups.
- ⚠⚠ **THIS HOST IS HALF OF A 2-NODE PROXMOX CLUSTER** — `esh-pve-cluster`, nodes
`pve` (esh-pve, 10.0.250.35, nodeid 1) and `esh-nas-pve` (this host, nodeid 2).
`Expected votes: 2`, `Quorum: 2`, no qdevice. **Taking either node down drops the
survivor below quorum and makes its `/etc/pve` read-only** — guests keep running,
but no config change, no VM start/stop, no storage edit works until the partner
returns. This was undocumented and nearly bit the 2026-08-18 migration, which
rebooted this node without accounting for it. Before any planned reboot of either
node, either accept the read-only window on the survivor or set
`pvecm expected 1` on it for the duration. Discovered 2026-08-18.
- ⚠ **CT 103 `esh-nas` (10.0.50.50) runs on THIS host and serves `hard` NFS.**
Never reboot this host casually — quiesce the clients first. Measured from the
server on 2026-08-18 (`ss -tn '( sport = :2049 )'` inside CT 103), there are
**five** clients, not the two long documented here:
| client | mounts | opts |
|---|---|---|
| esh-docker-vm `10.0.50.45` | `/mnt/books`, `/mnt/backup` | **hard** — quiesce |
| esh-pve `10.0.250.35` | `/mnt/pve/esh-nas`, `/mnt/pve/tank-vmbu` | **hard** — quiesce |
| esh-vm-db `10.0.50.60` | `/mnt/backup` | **hard** — no ssh; reach it via `qm guest exec 101` on esh-pve |
| vm-esh-nas `10.0.50.154` | — | is VM 104 *on this host*; stops with it |
| nh3-dev `10.100.10.50` | `/mnt/books` | soft,ro — safe, errors rather than blocks |
**Ask the server who its clients are; don't trust this table.** It rots. `ss` on
CT 103 is ground truth, and that is how the three undocumented clients surfaced.
Playbooks: `esh-cutover-1-quiesce-docker-vm.yaml`,
`esh-cutover-2-quiesce-esh-pve.yaml`, `esh-cutover-5-restore-docker-vm.yaml`.
> **Root-fs pressure:** 77% of a 5.9 GB root (1.3 GB free) after the 2026-08-17
> mitigation. Still not enough for the pending upgrade — **225 packages, 161
> carrying `deb12uN`/security bumps, including a ~250 MB signed kernel that lands
> in `/boot`.** ⚠ **Migrate first, patch after:** unpacking that into 1.3 GB of
> headroom risks wedging dpkg on a hypervisor running five guests. The host is on
> `pve-manager/8.4.11` vs esh-pve's 8.4.14 for exactly this reason.
## What it runs
Media + storage-adjacent workloads for the ESH site. Not yet catalogued here; `qm list` / `pct list` on the host is authoritative.
The `ESH-FileBot` entry in homepage (`10.0.50.70`, labeled "Restic Backup Target and File Sync — esh-nas-pve") is a workload running here — mentioned in the backup project as a possible additional restic endpoint; confirm role before integrating into the fleet plan.
## Refresh state
```bash
scripts/refresh-server-info.sh esh-pve-nas
```
## Placement rule
Hypervisor for ESH storage/media VMs. Non-PFI scope.