migration: mark executed 2026-08-01, record deviations from the written procedure
This commit is contained in:
+38
-2
@@ -1,5 +1,35 @@
|
||||
# Plex Migration — Windows → Linux, nothing lost
|
||||
|
||||
> ## ✅ EXECUTED 2026-08-01 — M0 through M4 complete in one day
|
||||
>
|
||||
> Plex is live on Linux with its original identity (`eb69ec8a…`), watch state
|
||||
> intact, direct play verified with a real session. In soak (M5). This file is
|
||||
> now the **record of the procedure**; deviations that a future re-run must
|
||||
> know about:
|
||||
>
|
||||
> 1. **VACUUM is mandatory after the remap.** The no-backslash gate greps the
|
||||
> raw DB file and hits deleted rows lingering on SQLite **free pages**.
|
||||
> Plain sqlite3/python cannot open the DB (custom `icu_root` collation —
|
||||
> do NOT fake it); run VACUUM with **Plex's own SQLite** via
|
||||
> `docker run --entrypoint`.
|
||||
> 2. **Expect phantom rows from dead eras.** 1,715 backslash rows survived
|
||||
> the remap legitimately: Sync+ cache from old D:/E:/G: drive letters
|
||||
> (+ orphan `media_items`), 6 rows for a dead `\\tesla` NAS, and 115 UNC
|
||||
> blobs in `download_queue_items.decision_result`. All deleted; 3 real
|
||||
> theme-music paths re-pathed. The remap itself was correct — these
|
||||
> predate the current library roots.
|
||||
> 3. **Verify staged copies with `rsync -an --delete --stats`** (0 transferred
|
||||
> / 0 deleted), never `du -sb` equality — directory apparent sizes differ
|
||||
> across filesystems.
|
||||
> 4. **First boot needs `systemctl start --no-block`** in cloud-init runcmd —
|
||||
> `enable` alone misses the boot it runs in (fixed in `user-data`).
|
||||
> 5. Post-go-live, the Plex image pin was **reversed** (Mike, 2026-08-02):
|
||||
> `:latest` + watchtower daily 05:00 with ntfy. Watchtower needs
|
||||
> `DOCKER_API_VERSION=1.44` against Engine 29.
|
||||
>
|
||||
> Cleanup 2026-08-02: staging dir + `.pre-remap`/`.pre-syncfix` sidecars
|
||||
> deleted. Rollback net = NAS `media_pc` backup + Plex's scheduled DB backups.
|
||||
|
||||
Supersedes the earlier "forward-only, fresh Plex" decision. That call was made
|
||||
before the library was measured. At **27 TB, 25,148 video items and 337 GB of
|
||||
already-generated preview cache**, rebuilding fresh costs one to three weeks of
|
||||
@@ -200,6 +230,11 @@ paths remain, that the counts moved 1:1, that the "Dr. Korval" tag and the
|
||||
four Liaden book summaries are **untouched**, and finally stats 200 random
|
||||
remapped paths against the real filesystem.
|
||||
|
||||
**As executed:** the no-backslash gate additionally required deleting phantom
|
||||
Sync+ cache rows from dead drive-letter eras, 6 dead `\\tesla` rows and 115
|
||||
`download_queue_items` UNC blobs, then **VACUUM with Plex's own SQLite**
|
||||
(see the banner at the top) before the raw-file grep came back clean.
|
||||
|
||||
No claim token. The server already has its identity. The compose bind-mounts
|
||||
`/srv/data/plex-media` over `.../Plex Media Server/Media`, so the migrated
|
||||
thumbnails are in place from the first start.
|
||||
@@ -236,5 +271,6 @@ decision, not a cleanup step.
|
||||
Before M3 step 3 (the format), `D:` is intact and everything is reversible on
|
||||
the data side — Windows itself is gone after M1, but a reinstall from the USB
|
||||
takes ~20 minutes and every copy still exists. After the format, the NAS
|
||||
`media_pc` backup is the recovery source: it outlives every step here, and
|
||||
`migrate-db.sh` leaves a `.pre-remap` copy beside every database it touches.
|
||||
`media_pc` backup is the recovery source: it outlives every step here.
|
||||
(The on-box `.pre-remap`/`.pre-syncfix` sidecars were deleted 2026-08-02
|
||||
after the soak-start all-clear.)
|
||||
|
||||
Reference in New Issue
Block a user