Files
felhom.eu/REPORT-storage-identity-2026-10-15.md
T
admin 3038b23ec7
gates / gates (push) Successful in 6m43s
Storage that knows its physical disks: design draft 16 + spike; R-1074..R-1079; STATUS D10
Spike (read-only probe, tools/physdisk_probe.py): the agent-side walk (partition -> disk, dm/LVM
slaves, loop -> backing file) names the right physical disk for one-disk boxes, two disks, two
partitions of one disk and a pass-through USB bridge; inside a VM (Tester 1) every disk is "unknown".
Today's agent lists whole disks only and calls an empty partition table "data-bearing"; the
controller's Tier-2 "different disk" is st_dev. sys_drive is a folder of mp0 (backup=1), so the
design gives one-disk boxes a separate internal data place outside the whole-guest copy instead.
Draft only; waits on the operator's rulings D1-D6 (16 section 12). 07 section 6.1's stale mp1 cell
corrected. Register 163 -> 169. Scratch loop disk and Tester 1 scratch disk removed.

Claude-Session: https://claude.ai/code/session_012qRErfCoiTkvDK9N5XHbzb
2026-10-15 20:08:08 +02:00

5.5 KiB

REPORT — storage that knows its physical disks: design draft + spike (2026-10-15)

Written in ASD-STE100 Simplified Technical English. Baselines read 19:50: felhom.eu 340804f9af, felhom-controller 83392064ae, felhom-agent d2053e7d47. Read first: 03-host-agent.md, 04-control-plane-authorization.md, 07-backup-architecture.md §6 and §7.5, 15-media-library.md, 02-controller-module-map.md, the agent's /disks code and classifier, the controller's drive model and Tier-2 choice, the installer's step_grows. Design: documentation/architecture/16-storage-physical-identity.md (DRAFT). Evidence: documentation/audits/storage-identity-2026-10-15/.

What waits on you

Answer six questions: 16-storage-physical-identity.md §12 (STATUS D10). My picks: D1 (a), D2 (a), D3 (a), D4 (a), D5 (a), D6 (a). If you do nothing: one-disk boxes keep refusing media apps, and boxes in a VM keep counting same-disk copies as second copies. Nothing is built until you answer.

1. Did the agent-side method name the right physical disk? (Part B)

Case Right?
1 One disk (N100, demo-hp): every system place → the one SSD yes
2 Two disks: system vs enrolled drive (demo-hp, N100) yes
3 Two partitions of one disk (a scratch loop disk) yes — after one fix in my probe
4a USB bridge that passes the identity (N100's backup drive) yes
4b USB bridge that hides the serial not measured — no device (R-1077)
5 / 6 Inside a VM: same host disk vs a different host disk both „unknown" — correct
7 Network share „network, unknown" by rule (no live share mounted today)

VM cases in one sentence: inside a VM all virtual disks look the same, so the agent can only say „unknown".

2. The design in eight lines

  1. Every storage place gets physical_disks and identity: proven | unknown, with a reason.
  2. The agent computes it from /sys and udev; the controller only asks. The hub gets it in the report.
  3. A disk's key is bus + model + serial; a vendor-less WWN is not trusted.
  4. Tier-2 counts as a second copy only on proven different disks. Otherwise the page says „only one copy", in plain words.
  5. A one-disk box gets an internal data place on the system disk, outside the whole-box copy. Media apps then install with no extra step.
  6. Films never go into sys_drive: it is inside every whole-box copy.
  7. A partition can be a storage place. The classifier judges the partition. Only the installer makes partitions.
  8. A VM box is always „unknown". The OMV guide says: a second disk must be a different physical disk.

3. The decisions (my pick first)

  • D1 same-disk second copy: do not make it; say „only one copy".
  • D2 unknown disks: never count them; the copy is still made.
  • D3 installer: mp0 70/130/250 GiB, reserve max(16 GiB, 10 %), the rest is the internal place (512 GB disk → ≈ 152 GiB, 1 TB → ≈ 438, 2 TB → ≈ 1,266).
  • D4 old one-disk boxes: a plain sentence; the internal place only by a signed operator job.
  • D5 partitions: the installer only this round.
  • D6 NAS films (R-1071): a separate decision; this design makes it easier, not harder.

4. What the build task will change

  • Agent: place identity in /disks and in the hub report; a „same disk?" call; partitions as candidates; the loop step.
  • Controller: Tier-2 and the one-copy notice ask the agent; the sentences move to i18n (informal voice); the install refusal in words; the internal place registered as the default drive.
  • Installer: step_grows with the new rule; the internal LV, mounted on the host like a drive.
  • Hub: store and show the two new fields.
  • Guides and website: the OMV guide's second-disk line; the backup explanation page.

5. Claims in the brief that were wrong

  • „That volume is the guest's mp1 /mnt/sys_drive" — wrong. There is no mp1. sys_drive is a folder of mp0 (/var/lib/felhom, backup=1), next to Docker (all three boxes; 07 §7.5.1). This is why films must not go there.
  • „The installer … data volume" — partly wrong: the installer computes the size; the agent grows mp0.
  • „The classifier must judge the partition, not refuse the whole disk because it has a partition table" — today it does not refuse: it marks the whole disk „data-bearing" and offers only „initialize" (wipe all, customer-confirmed). An empty partition is never offered (measured).
  • „Tier-2 = a mirror on the second drive" — incomplete: there is also a state-only fallback onto sys_drive (tier2.go:157-178).
  • R-1068's „probable way through — attaching sys_drive" — it would work in code, but it puts films into every whole-box copy. The design rejects it.

6. Commits, register, STATUS

  • One commit to felhom.eu (design, evidence, rows, STATUS, this report).
  • Doc fix without a row: 07-backup-architecture.md §6.1 still named mp1; corrected (the document contradicted live source).
  • Register: 163 → 169. Opened 6 (R-1074 to R-1079), closed 0. Updated R-1068 (now waits on D3/D4).
  • STATUS: line D10 in „Waiting on you — decide".
  • Boxes put back: the scratch loop disk on demo-hp and the scratch virtual disk on Tester 1 are removed; nothing that held data was written; DooPlex and ep0 not touched. My first loop try left the loop device for about one minute (a missing tool); I removed it at once.
  • No product code changed. No changelog entry: this repo has changelogs only for hub, scripts, website and marketing.
  • unproven.py: unchanged (35 of 55 not walked).