sum('total_quota_mb'); // Kapazität, die du *maximal* noch als Quotas verteilen darfst $capacityLeftMb = max(0, $totalMb - $systemReserveTotalMb - $committedMb); // Für Eingabefelder konservativ das Minimum verwenden $remainingPoolMb = min($freeAfterReserveMb, $capacityLeftMb); return [ 'path' => $path, 'total_mb' => $totalMb, 'free_mb' => $freeMb, 'fixed_reserve_mb' => $fixedReserveMb, 'percent_reserve' => $percentReserve, 'percent_reserve_on_free_mb' => $percentReserveOnFreeMb, 'free_after_reserve_mb' => $freeAfterReserveMb, // ≈ 70 GB bei deinen Werten 'percent_reserve_on_total_mb' => $percentReserveOnTotalMb, 'system_reserve_total_mb' => $systemReserveTotalMb, 'committed_mb' => $committedMb, 'capacity_left_mb' => $capacityLeftMb, // Kapazitätsbremse 'remaining_pool_mb' => $remainingPoolMb, // MIN(free-basiert, total-basiert) ]; } /** Für UI: konservativer, gecachter Rest-Pool (in MiB) */ public function remainingPoolMb(): int { return Cache::remember('mailpool.remaining', 10, fn () => $this->stats()['remaining_pool_mb']); } /** Vorschlag für max. Eingabewert */ public function suggestMaxAllocMb(): int { return $this->remainingPoolMb(); } /** Prüfen, ob X MiB sauber in den Pool passen */ public function canAllocate(int $mb): bool { return $mb >= 0 && $mb <= $this->remainingPoolMb(); } }