Skip to content

docs(infrastructure): media hardlink layout + tier-named ZFS pools; align VMID scheme#70

Merged
JacobPEvans-personal merged 1 commit into
mainfrom
docs/media-storage-patterns
Jun 12, 2026
Merged

docs(infrastructure): media hardlink layout + tier-named ZFS pools; align VMID scheme#70
JacobPEvans-personal merged 1 commit into
mainfrom
docs/media-storage-patterns

Conversation

@JacobPEvans-personal

Copy link
Copy Markdown
Member

Summary

Documents two reusable homelab storage patterns and brings the VMID page up to the locked spec.

New pages

  • infrastructure/media-storage-hardlinks — the single-filesystem media layout: why two datasets (downloads + media) structurally fail (EXDEV kills hardlinks → silent copy fallback → every seeded item duplicated → download quota fills → torrent client dies), and the TRaSH-guides fix: one dataset bind-mounted at /data with torrents/{movies,tv} + media/{movies,tv}, recordsize=1M, shared group + setgid, plus the resilience ladder (systemd Restart=on-failure, *arr min-free-space, >85% capacity alerts, start-on-boot) and 5× good-steward seeding (free in disk because seed == library).
  • infrastructure/zfs-pool-naming — tier-named pools (rpool boot / bulk HDD raidz / fast flash). Pool names encode only the performance tier — never node, RAID level, or drive count — so dataset paths are identical on every node and replicas line up by construction.

Updated pages

  • infrastructure/vmid-network-tiers — corrected digit order to [Tier][Sub][Crit][Instance][OS][Env], OS family digits (4 = LXC, 3 = Docker, …), env values 0–4, worked example 703040; new deterministic-MAC DHCP reservation section (locally-administered 02: + hostname-digest MAC → controller reservation → DNS A record owns the address; {mac, reserved_ip} flow through the IaC inventory contract).
  • infrastructure/media-stack — storage-layout section + cross-link card.
  • docs.json — nav entries for both new pages.

Validation

  • jq empty docs.json — pass
  • mint broken-links — no broken links
  • scripts/validate-mermaid.sh — pass (canonical init directive count still 1)

Public-pattern page only — placeholder CIDR shapes, no real addresses, nodes referenced generically.

🤖 Generated with Claude Code

…lign VMID scheme

Add two portable-pattern pages: the single-filesystem media storage
layout (two-dataset EXDEV/duplication/quota-death-spiral anti-pattern,
one /data dataset with torrents/ + media/ subtrees, shared group +
setgid, min-free/auto-restart/capacity-alert resilience, 5x seeding)
and the tier-named ZFS pool convention (rpool/bulk/fast — names encode
the storage tier, never node/RAID/drive-count, so dataset paths are
node-agnostic and replicas line up by construction).

Align the VMID positional scheme with the locked spec: digit order
[Tier][Sub][Crit][Instance][OS][Env], OS family digits (4 = LXC),
env 0-4, worked example 703040. Document the deterministic-MAC DHCP
reservation pattern (02: + hostname digest -> reservation -> DNS A
record; {mac, reserved_ip} flow through the IaC inventory contract).
Cross-link the media stack page to the storage layout.

Assisted-by: Claude:claude-opus-4-8
@JacobPEvans-personal JacobPEvans-personal merged commit 5d45280 into main Jun 12, 2026
4 checks passed
@JacobPEvans-personal JacobPEvans-personal deleted the docs/media-storage-patterns branch June 12, 2026 02:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant