2026 Mac Mesh Shared Build Pool:
Festplatten-Wasserstand, DerivedData-Bereinigung und 3-Schicht-Cache-Runbook

Festplatten-Wasserstand · DerivedData / CocoaPods / Gradle · 3 Artefakt-Schichten · 6-Schritt-Runbook · Hard-Thresholds

2026 Mac Mesh Shared Build Pool Festplatten-Wasserstand und DerivedData-Governance

Betrieb, Mobile-Plattform und Tech Leads mit vertraglichen Disk-SLOs für gemeinsame Mac-Build-Pools sehen freitags oft dieselben Alarme: Runner online, Jobs mit „No space left“; DerivedData füllt das System-Volume; CocoaPods- und Gradle-Global-Caches ohne Owner; Artefakte bleiben nach rsync lokal. Zuerst wer welches Problem hat bei Mac-Mesh-Multi-Tenant-Rotation ohne messbare Wasserstände und schichtweise Rücknahme. Dann Fazit: L1 DerivedData / L2 Abhängigkeits-Caches / L3 CI-Artefakte plus 6-Schritt-Runbook — auditierbare Routine statt Feuerwehr. Enthalten: 5 versteckte Kosten, Strategietabelle, Skriptfelder, 6 Schritte, 3 Hard-Thresholds, FAQ. Querverweise: Seat-Locks, Golden-Image-Checkliste, rsync und Objektspeicher, 3-Pool-SLO-Matrix, and Git-Worktree-Isolation.

01

Fünf versteckte Kosten, bevor der Shared-Build-Pool die Platte füllt

In Mac-Mesh-Tickets 2026 ist Disk selten nur „100 GB fehlen“. Ohne Vertrag zwischen Tenant-Rotation, Cache-Lokalität und Artefakt-Lebenszyklen zeigt APFS freien Platz — Xcode scheitert beim Schreiben temporärer Dateien.

  1. 01

    DerivedData ohne Grenze: Mehrere Repos teilen ~/Library/Developer/Xcode/DerivedData; Index und ModuleCache vermischen sich über Branches; ein clean löscht den ModuleCache des Nachbarn — zufällige Link-Fehler statt „Disk voll“.

  2. 02

    CocoaPods/Gradle-Global-Cache ohne TTL: ~/Library/Caches/CocoaPods and ~/.gradle/caches wachsen stetig; alte Tarballs nach Pod-Upgrade bleiben; Worktree-Mehrbranch Parallelität verstärkt Contention.

  3. 03

    Artefakte „hochgeladen, lokal geblieben“: Objektspeicher OK, aber $CI_ARTIFACTS_DIR ohne Retention; rsync-Abschluss-Hook fehlt — IPA/dSYM fressen die Platte.

  4. 04

    APFS-Snapshots vs. „verfügbar“: Lokale Snapshots täuschen df; echte Schreibkapazität bricht bei Compile-Peaks. waterline_used_pct pro Volume/Schicht fehlt.

  5. 05

    Cleanup vs. Seat-Lock: Verzeichnis-Sweep vor Lease-Ende oder Konflikt mit Seat-Lock-TTL, — „Platte leer, Build rot“.

Lieferumfang: 3-Schicht-Verzeichnisdict, warn/hard-Doppelwasserstand, LRU bei Lease-Ende, wöchentliche Golden-Image-Drift-Prüfung getrennt. Ohne das kein „beliebiges monorepo parallel“ auf Shared Pools. Nächster Abschnitt: drei Cleanup-Philosophien — kein „Freitag ssh rm -rf für alle“.

02

Tabelle: manuelle Sweeps vs. Wasserstand-Daemon vs. Golden-Image-Reset

Disk-Governance ist nicht „härter putzen“. Balance Build-Hit-Rate, auditierbare Bereinigung, Tenant-Isolation. Tabelle im Change-Review: pro Schicht (L1/L2/L3) nur eine Default-Strategie.

StrategieL1 DerivedDataL2 Pods/GradleL3 ArtifactsGeeignet fürHauptrisiko
Manuelles CronWochenend-rm globalGelegentliches pod-cache-prunefind nach AlterKleine Teams, wenig ParallelitätNachbar-Löschungen, kein Audit
Wasserstand-DaemonLRU pro Workspace-HashEvict bei Kapazität48h nach rsync-ErfolgShared-Pool-DefaultMetriken und Lock-Vertrag nötig
Image-ResetSnapshot-Rollback leertMit Image erneuertVolume-ErsatzDrift außer Kontrolle, Compliance-SnapshotsCold-Start-Compile-Verlangsamung

Grundregel: Shared Pools default „Wasserstand-Daemon“; Image-Reset nur quartalsweise mit der Golden-Image-Drift-Checkliste, nicht tägliches LRU.

Wenn Dedicated-Pools und Shared-Rotation koexistieren, brauchen L1-Cache-Keys einen Pool-Typ-Tag, sonst evictiert Shared-Sweep die Dedicated-Lokalität.

Drei-Schicht-Verzeichnislayout (Runbook-Anhang)

L1: /var/mesh/cache/deriveddata/{workspace_hash}, gebunden via Xcode DERIVED_DATA_DIR. L2: /var/mesh/cache/cocoapods, /var/mesh/cache/gradle—kein Zurückschreiben in User-Home-Global-Caches. L3: /var/mesh/artifacts/{job_id}—nach Upload nur Checksum-Sidecar. Monitoring meldet layer_*_bytes pro Schicht statt vages „/ partition 85%“.

03

6-Schritt-Runbook: vom Wasserstand-Skript zur Drei-Schicht-Auto-Rücknahme

Diese 6 Schritte setzen Mac-Mesh-Labels und Seat acquire/release voraus. Reihenfolge nicht überspringen: Wasserstände ohne Metriken sind blinde Löschungen.

  1. 01

    Drei-Schicht-Dictionary und Pfade einfrieren: L1/L2/L3-Wurzeln und warn (82%)/hard (92%) in Repo mesh-disk-policy.yaml, Standard-Mounts registrieren in der Image-Checkliste.

  2. 02

    disk-waterline-Probe deployen: alle 60s Volume-Nutzung und Schicht-Bytes; Export Prometheus/OpenTelemetry; bei hard drain und fail-fast neue Jobs.

  3. 03

    DerivedData isolieren: CI setzt DERIVED_DATA_DIR auf Workspace-Hash-Bucket; Lease-Ende LRU — nie globales DerivedData sweepen.

  4. 04

    L2-Abhängigkeits-Cache evict: pod cache clean kapazitätsgetrieben; GRADLE_USER_HOME unter mesh; max-cache-size begrenzen.

  5. 05

    Artefakte und rsync-Hooks: Objektspeicher-Multipart-Complete-Callback löscht lokales L3; Fehl-Retries 7 Tage — Felder wie im Artefakt-Runbook.

  6. 06

    Wöchentlicher Check und Drill: Golden-Image-Checksums, Job-Reject bei 90% simulieren, Cleanup-Audit loggen; bei Burst-Overflow zuerst L3 leeren, dann interruptible Jobs.

Minimalfelder disk-waterline-Probe
hostname
pool_type
volume_mount
waterline_used_pct
waterline_warn_threshold
waterline_hard_threshold
layer_l1_deriveddata_bytes
layer_l2_cocoapods_bytes
layer_l2_gradle_bytes
layer_l3_artifacts_bytes
seat_lease_id
last_cleanup_ts_unix
cleanup_evicted_bytes_1h
disk_waterline_hard_stop

Hinweis: Probe-Output erste Grafana-Zeile, nicht nur OS-Alerts. cleanup_evicted_bytes_1h mit erfolgreichen Builds — echte Bereinigung vs. „weniger Builds, Disk sieht besser aus“.

04

Symptom-Matrix: zuerst Schicht oder Pool?

Disk-Alerts überlappen oft Queue-SLO -Symptome. Tabelle: Kapazität, Cache-Keys oder Artefakt-Stau vor Sweep-Umfang.

Symptomlayer_* dominantWahrscheinliche UrsacheErste Maßnahme
Nur Xcode-Schritt scheitertL1 highDerivedData-Cross-Talk oder Index-KorruptionBucket per Workspace-Hash leeren
Gemischter Android/iOS-Pool langsamL2 highPods/Gradle nie evictedL2-Kapazitätsobergrenze straffen
Upload OK, Disk vollL3 highrsync-Hook nicht gebundenObjektspeicher-Callback ergänzen
df OK, Schreiben scheitertSnapshotsAPFS local SnapshotsSnapshot-Retention reduzieren + Probe

Warnung: Kein volume-level rm -rf bei Seat-Lock. Cleanup-Skripte: seat_lease_id leer oder Lease abgelaufen, sonst ModuleCache im Compile löschen.

Füllt L1 innerhalb 24h nach Bucket-Clear wieder, prüfen: Worktree-Isolation — mehrere volle DerivedData-Bäume auf einem Knoten, bevor mehr Disk gekauft wird.

05

Drei Hard-Thresholds und zitierbare Ops-Parameter

Feldkompromisse aus 16GB/24GB-Shared-Pools. An Change-Tickets als externe SLO-Anhänge; Dedicated kann warn um 5 Punkte senken für stabileren Index-Hot-Cache.

  • Doppel-Wasserstand: waterline_warn_threshold=82 löst L3→L2→L1-Evict-Reihenfolge; waterline_hard_threshold=92 lehnt neue Jobs ab, disk_waterline_hard_stop=1.
  • L1 max. Verweildauer: Shared Pool pro Workspace-Bucket 14 Tage oder 32GB, was zuerst eintritt; Dedicated bis 28 Tage mit Dedicated-Tag.
  • L3 lokale Retention: löschen innerhalb 48 Stunden nach rsync/Upload; Fehl-Queue 7 Tage, dann Alert und Objekte im Objektspeicher prüfen.

Bei 512GB-System-Volumes mit ~60% für mesh: L2 gesamt 80GB (je 40GB Soft-Cap CocoaPods/Gradle), L3 pro Job 12GB (inkl. dSYM). „Nur Wochenend-Cron“ oder „alle SSH-löschen Cache“ ohne Audit-Felder und Seat-Verträge — Nachbar-Löschungen, Cold-Starts, halbgeschriebene Artefakte in Release-Woche. Für iOS/Android-CI und Disk-SLOs auf vertragsfähiger Cloud-Mac-Mini-Kapazität ist VpsMesh Mac Mini Cloud-Miete meist die bessere Wahl (DSGVO-taugliche Audit-Pfade). Siehe Preisseite, Hilfezentrum und Bestellseite.

FAQ

Die drei häufigsten Leserfragen

Standard: Workspace-Hash-Buckets mit Seat-Lease; Lease-Ende LRU. Mehrbranch: Worktree-Isolation article; kein unbegrenztes globales ~/Library/Developer/Xcode/DerivedData.

Runner fail-fast, disk_waterline_hard_stop melden; Scheduler routet oder Burst. Seat-Semantik in der Seat-Lock-Artikel.

Ja. Disk-Cleanup nur Runtime-Müll; ersetzt nicht die Snapshot-Drift-Checkliste. Onboarding im Hilfezentrum; Pläne auf der Preisseite.