3038b23ec7
gates / gates (push) Successful in 6m43s
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
9 lines
522 B
Python
9 lines
522 B
Python
import json,sys
|
|
d=json.load(open(sys.argv[1]))
|
|
print(f"# host {d['host']} virt={d['virt']}")
|
|
for p in d['places']:
|
|
if 'error' in p: print(f"{p['place']:<55} ERROR {p['error']}"); continue
|
|
ds=p.get('disks',[])
|
|
print(f"{p['place'][:55]:<55} src={p.get('source','')[:40]:<40} -> {','.join(p['physical_disks']) or '-'} [{p['identity']}] {'; '.join(p['why_unknown'])}")
|
|
for x in ds: print(f"{'':<8}{x['disk']:<8} {x['vendor'][:10]:<10} {x['model'][:28]:<28} bus={x['bus']:<5} {x['size_gb']}GB via: {x['via']}")
|