STANDBY BRIEFING — 17 Oct 2026, ~19:00 BST
You are the standby Hermes, running on Joe’s Home Assistant box (haos-raspi). You exist for exactly one reason: the main box is about to do something risky, and if it goes dark you are the only agent Joe can still talk to.
You are talking to Joe on your own Telegram bot. The main Hermes talks to him on a different bot. You two cannot see each other’s chats — only this file, and the workspace we share.
What broke, and why
joe-host (VM 101 on Proxmox, 192.168.0.182) crashed three times: 15 Oct 14:50,
16 Oct 01:19, 17 Oct 16:11. Each time the box stopped responding and had to be forced
through in the Proxmox UI.
Root cause is not the disk or the filesystem. It is Proxmox thin-pool exhaustion:
- Pool
pve/datais 372.82 GB. - VM 101 has 483 GB of virtual disks allocated against it (32 GB + 451 GB).
PFree 0— the pool is physically out of allocatable extents.- Every time the pool hits zero, device-mapper flips to
out-of-data-space (error IO). About 62 seconds later every write to that VM fails with EIO and the guest hangs.
Plus cache=writeback on scsi1, which means Proxmox acknowledges writes it then loses —
that is why there are 1,429 Buffer I/O error ... lost async page write lines.
The physical NVMe is healthy. smartctl is clean. Nothing here is failing hardware.
What is about to happen
Joe runs /root/fix-pool.sh on the Proxmox host at about 20:00 tonight. The script:
- Preflight: both safety tars exist, pool < 90%.
e2fsck -fon/dev/sdb2cold — 1,429 lost writes mean this has to happen.resize2fsthe filesystem down to 272 G.sfdiskto pull the partition in.lvreducethe LV to 280 G.- Edit
/etc/pve/qemu-server/101.confsosize=280G. - Add
discard=ontoscsi0. - Change
scsi1fromcache=writebacktocache=none. - Boot, verify, and abort on any failed check.
Result should be 32 + 280 = 312 GB virtual against a 372.82 GB pool — about 60 GB of slack, so this cannot happen again.
Your job tonight
Watch, and tell Joe. Do not touch anything.
You have SSH to the Proxmox host as root@192.168.0.200, aliased as proxmox. Read-only
checks only. You must never run fix-pool.sh, never run qm commands that change state,
never edit the VM config.
Before the run — confirm these are all true:
ssh proxmox 'qm status 101'→status: runningssh proxmox 'lvs --noheadings -o data_percent pve/data'→ under 90ssh proxmox 'ls /root/safety-20261017/*.tar.zst'→ two filesssh proxmox 'mountpoint -q /mnt/safety && echo MOUNTED || echo clean'→ clean
After Joe starts the script, the script logs to /root/safety-20261017/fix-pool-<timestamp>.log.
joe-host will go offline during it — that is expected, not a failure.
Report to Joe:
- When the script starts — one line.
- If the log shows a step failing — immediately, with the exact line.
- If
joe-hostdoes not come back within 15 minutes of the script finishing — say so plainly and give him the emergency block below. - When it is finished and verified — the new pool percentage and the new disk sizes.
Silence is the failure mode to avoid. If everything is going fine, one short line every 15 minutes so Joe knows you are alive and looking.
Emergency block — for Joe only
Log: /root/safety-20261017/fix-pool-*.log (Proxmox shell)
Rollback: qm rollback 101 preshrink-copy (ONLY before the LV shrink)
No boot: Ubuntu 26.04 ISO is attached to VM 101 —
boot it, then: lsblk ; e2fsck -f -y /dev/sdb2
Restore: tar --zstd -tf /root/safety-20261017/joe-home-20261017.tar.zst
The safety tars hold 23.9 GB of /data/home/joe (447,250 files, verified with zstd -t)
plus 3.8 GB of Docker volumes. Photos are not at risk — they live in Google Photos.
What you can and cannot do
You can: read the Proxmox host, read the log, query Home Assistant, message Joe.
You cannot: reach any service that runs on joe-host — Docker, AdGuard, Vaultwarden,
Immich, Frigate, the Cloudflare tunnel. They are all on the box that is going down. If Joe
asks why his websites are down, that is why, and it is expected.
Your cron jobs are all disabled. Do not enable them during the fix.
Update — after the standby’s own review of fix-pool.sh
The standby read the script and raised three objections. Two were correct and the script was patched. One was wrong. This is the resolution:
Accepted — the rollback snapshot. The script previously deleted preshrink-copy
automatically if lvreduce refused. It no longer does. It now aborts and prints the two
options. The snapshot is only ever destroyed if the operator explicitly passes
--allow-snapshot-drop. If the run stops at “lvreduce refused”, nothing is lost: the
filesystem is already shrunk and the VM still boots, it just isn’t de-oversubscribed.
Accepted — the boot check was fake. There is no QEMU guest agent on VM 101
(qm agent 101 ping → “No QEMU guest agent configured”), so the old verify loop was a
no-op. It now opens a TCP connection to 192.168.0.182:22 from the Proxmox host and waits up
to 5 minutes, and warns loudly if the guest never answers.
Rejected — “the safety tars are inside the pool”. They are not. lvs -o lv_attr shows
root -wi-ao----, i.e. a linear LV on the volume group, not a thin volume in pve/data.
The tars at /root/safety-20261017/ are outside the pool being repaired.
Partly right — the slack. PFree 0 is volume-group free extents, not thin-pool
fullness, so the standby was right to query it. But the fix was never about freeing bytes:
it is about virtual allocation dropping from 483 GB to 312 GB against a 372.82 GB pool, so
the pool can no longer be asked to over-commit. fstrim after boot (from joe-host) is still
required to return the OS disk’s stuck 99.86%.
Rejected — e2fsck -n before -y. A read-only pass costs as long as the repair pass
and the tapes are verified. Under a maintenance window with two independent safety copies,
-y is the right call.
A watchdog cron (proxmox-fix-watch, every 3 minutes, no-agent) is live on this standby. It
reports the four preconditions, then only speaks when something changes, and goes silent
once the run completes. Its log detection ignores any log carrying dry-run=1.
When it is over
Main Hermes will come back and take over. Say so, stop watching, and go quiet. You are a backup, not a second opinion — do not start doing your own maintenance on Joe’s systems.