From 81d22c5dafe7343d9d5dd940631a0e224d8d980c Mon Sep 17 00:00:00 2001 From: Julien Lutran Date: Mon, 31 Aug 2026 10:16:13 +0200 Subject: [PATCH] nas+nuc: cold boot verified; record what clearing the metadata errors took MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both hosts were powered off and brought back from a cold start, which is the first real test of everything built on 2026-08-30. nas: both pools imported from /etc/zfs/zpool.cache, all instances autostarted, NFS exports republished, 0 failed units. nuc: /dev/dri present with 0 i915 warnings (booted with the display unplugged), NFS auto-remounted, VAAPI transcode at 9.5x realtime. Records the ordering that actually cleared tank's inherited :<0x0> and <0x3d>: a scrub alone found 0 errors and repaired 0B but left them, and a plain `zpool clear` afterwards did not drop them — ZFS flushes the persistent error log on a scrub run *after* the clear. That matters beyond tidiness, because while those entries stand `zpool status -x` reports the pool unhealthy forever and zpool-health.sh cannot signal anything new. Two kiosk corrections, both from observed behaviour: - the Pioneer DAC being switched off is the most likely cause of "video, no sound" — asound.conf pins the ALSA default to it by card name, so `default` fails to open outright and mpv falls back to null silently. Adds the one-line aplay check. - hotplugging the display makes cage exit once and Restart=on-failure recovers it ~5s later. Do NOT restart it by hand; check ActiveEnterTimestamp against the hotplug time first. Also flags that the OS mirror is still untested with a disk physically unplugged — it is a guess until then. Co-Authored-By: Claude Opus 5 (1M context) --- nas/nas-install.md | 39 +++++++++++++++++++++++++++++++++------ nuc/jellyfin-client.md | 17 +++++++++++++++++ 2 files changed, 50 insertions(+), 6 deletions(-) diff --git a/nas/nas-install.md b/nas/nas-install.md index 77d42ab..37d8fc8 100644 --- a/nas/nas-install.md +++ b/nas/nas-install.md @@ -416,7 +416,30 @@ instances depend on that host surviving. Once `tank` has run a week on SATA with **zero** pool suspensions and no CRC errors, the `usb4t-dropouts` gate is cleared — record that in -[ks2/plan.md](../ks2/plan.md). +[ks2/plan.md](../ks2/plan.md). Day 1 was clean (2026-08-31). + +### Clearing the inherited `` errors — order matters + +The pool imported carrying `:<0x0>` and `:<0x3d>` from +the 2026-08-29 USB dropout. A scrub found **0 errors and repaired 0B**, +yet the entries stayed, and a plain `zpool clear` afterwards did not drop +them either. ZFS flushes its persistent error log on a scrub that runs +**after** the clear — so the working order is: + +```sh +zpool clear tank +zpool scrub tank # this is the run that flushes the log +``` + +Result 2026-08-31: `scrub repaired 0B in 02:34:24 with 0 errors`, +`errors: No known data errors`, `all pools are healthy`. They were +artefacts of interrupted writes, not corruption — matching the +[2026-08-28 incident](../nuc/usb4t-dropouts.md). + +⚠️ This matters for monitoring, not just tidiness: while those entries +stand, `zpool status -x` reports the pool unhealthy permanently, so +`zpool-health.sh` sits in the alarm state and **cannot signal a new +problem**. Clear them before trusting the watchdog. ## 6. Incus @@ -804,11 +827,15 @@ trace can be recut against the meter's series afterwards. - [x] IPMI **left unplugged by decision** (2026-08-30) — no BMC on the LAN, therefore no out-of-band console either -- [ ] `cat /proc/mdstat` — all three arrays `[UU]`; GRUB written to **both** - ESPs (`efibootmgr -v` shows two entries), - and boot tested with one disk unplugged -- [ ] `zpool status` healthy for `incus` and `tank`; weekly scrubs - scheduled; both import cleanly after a reboot (`cachefile` set) +- [x] `cat /proc/mdstat` — all three arrays `[UU]`; GRUB written to + **both** ESPs, both mounted, `debian` + `debian-b` boot entries + present (verified across a cold boot 2026-08-31) +- [ ] boot still untested with **one disk physically unplugged** — the + mirror is a guess until that is done +- [x] `zpool status` healthy for `incus` and `tank`; weekly scrubs + scheduled; **cold boot verified 2026-08-31** — both pools imported + from `/etc/zfs/zpool.cache`, all instances autostarted, NFS exports + republished, 0 failed units - [ ] **7 days with zero pool suspensions and zero CRC errors** — the gate that closes [usb4t-dropouts.md](../nuc/usb4t-dropouts.md) - [x] `smartd` monitoring all 3 disks; `zpool-health.sh -t` mail diff --git a/nuc/jellyfin-client.md b/nuc/jellyfin-client.md index bcd640b..45a7c1c 100644 --- a/nuc/jellyfin-client.md +++ b/nuc/jellyfin-client.md @@ -447,6 +447,23 @@ incus exec jellyfin-client -- udevadm info /dev/input/event0 # udev db visibl visible (#2); check `run-udev.mount` is active. - **Video OK, no sound; JMP log shows `AO: [null]`** → ALSA default broken (#3); check `/etc/asound.conf` and the card name in `aplay -l`. + **Most common cause: the Pioneer DAC is simply switched off.** + `/etc/asound.conf` pins the default to it *by card name* (`Device`), so + with the amp off the name does not exist and `default` fails to open — + mpv then falls back to null silently: picture, no sound, no error. + One-line check before blaming anything else: + ```sh + incus exec jellyfin-client -- su -s /bin/bash kiosk -c 'aplay -D default -d 1 /usr/share/sounds/alsa/Front_Center.wav' + ``` + `audio open error: No such device` = amp is off. Power it on; no + restart needed, JMP opens the device per playback. +- **Display hotplugged after boot → cage exits once, then recovers by + itself.** If the kiosk started with no outputs, plugging the HDMI in + makes cage fail (`Failed with result 'exit-code'`); the unit's + `Restart=on-failure` / `RestartSec=5` restarts it ~5 s later, this time + with the display present. **Do not restart it by hand** — check + `systemctl show jellyfin-kiosk -p ActiveEnterTimestamp` first and only + intervene if the timestamp predates the hotplug. Verified 2026-08-31. - **Keyboard plugged in after boot isn't seen** — the host udev db is live through the bind, but udev hotplug *events* don't cross the container's network namespace, so cage only enumerates at startup. Re-plugging the