SKYHOUSE.dev Journal

Maintaining the Cloud Fortress

Every Media Backup Was Silently Off (And Two Would Have Eaten the Wrong Drive)

Why: While fixing the USB 2.0 slowdown earlier the same day, a routine check showed smartd dead. Pulling that thread revealed that no media drive on this machine had been backed up in roughly two months, and that two of the three backup scripts were primed to destroy the wrong disk.

This is the entry I least expected to write today. The USB fix was the job; this is what fell out of verifying it.

1. smartd had been dead since the reboot

systemctl showed smartmontools.service failed with status=16 — "Unable to register a device". My first read was that the by-id paths had gone stale, but they hadn't; every one still resolved correctly. The real cause was a startup race. Moving the DAS and the 10-port hub onto the USB-C port added another tier to USB enumeration, and smartd now started before the drives were registrable. It found one missing and, as documented in its own config header, exited entirely — one absent non-removable device kills monitoring for all of them.

Health across all seven came back clean: zero reallocated, pending, or offline-uncorrectable sectors anywhere. Three drives are past 3.5 years of power-on time (plex3 at 36.6k hours, plex3_backup at 38k, plex1 at 31k), which is exactly the age band where you want monitoring actually running.

2. All three media backups were commented out

Checking why plex1_backup held only 2.3 TB against plex1's 12 TB, the crontab gave it up immediately:

# DISABLED BY GEMINI - 0  3 * * * /home/plex/backup-plex3.sh
# DISABLED - plex2_backup (sdb) failing, pending replacement
#   30 3 * * * /home/plex/backup-plex2.sh
# RE-ENABLED 2026-06-04: plex1 stable on new SATA cable (pristine SMART...)
# DISABLED BY GEMINI - 30 4 * * * /home/plex/backup-plex1.sh   <-- still commented

Note the last two lines. On 2026-06-04 a note was written announcing that the plex1 backup had been re-enabled — and the cron line underneath it was never actually uncommented. The backup wasn't slow or failing; it simply had not run. The lesson worth carrying forward: a comment claiming a change was made is not evidence the change was made. Verify state, not annotations.

Net effect: apart from the arr config snapshots, nothing on this machine had been backed up since roughly early June.

3. Two scripts were aimed at the wrong disks

Before re-enabling anything, I read the scripts. Both backup-plex2.sh and backup-plex3.sh called robust_rsync.sh passing a hardcoded device node as its "mount this if the target is absent" argument. Device letters shuffle on every reboot and re-cable — and they had shuffled repeatedly today:

So "just uncomment the cron lines" would have been a data-destruction event, not a fix.

4. What replaced them

backup-plex3.sh rewritten in the shape of the already-hardened backup-plex1.sh:

backup-plex2.sh is neutralised — it now logs and exits 1 rather than carrying a loaded device reference, with a header explaining what to rebuild when a target drive exists.

backup-plex1.sh needed no changes: its 2026-06-02 rewrite already used a fixed-arg root wrapper with mount paths and no device nodes. It was only ever disabled.

5. Cron changes

6. A third thing that had quietly stopped

arr-config-backup.sh's cron was active the whole time, but its log shows it aborting every night since 2026-07-06: "/media/plex3_backup is not mounted — aborting so we don't write to the boot SSD." That guard did its job perfectly; the drive was simply absent (it was the fifth DAS bay that only enumerates at SuperSpeed — see the USB entry). With plex3_backup mounted again this self-heals at the next 03:30 run, and config-backups/ will be recreated.

7. Where things stand

The USB fault made the machine feel broken; these three faults made it quietly unprotected, which is worse. All of them were invisible because the things that report failure were themselves the things that had failed.

← Back to Admin Hub