ИИ / Автоматизация 28 апреля 2026 г.

2026: исчерпание диска OpenClaw, ротация JSONL и purgeable‑место APFS на Mac mini ProxyMac

Инженерная команда ProxyMac 28 апреля 2026 г. ~12 мин чтения

Команды, которые катают OpenClaw на арендованных Mac mini M4 в Гонконге, Японии, Корее, Сингапуре и США, иногда попадают в жестокий режим: инструменты MCP таймаутятся, агенты зацикливаются на рестарте, а top показывает простаивающий CPU. Причина зачастую бытовая — давление на диск. У Apple Silicon конечные квоты NVMe; бесконечные JSONL‑диагностики (см. гайд по логированию), слои контейнеров и хвосты Xcode DerivedData могут сжать эффективное свободное место ниже 5 ГБ, после чего APFS с трудом выделяет экстенты для мелких записей, а дочерние процессы возвращают ENOSPC без вежливого баннера. Здесь — как это всплывает внутри OpenClaw, как читать df против «Дисковой утилиты», как проектировать ротацию, дружественную launchd, и как повесить алерты рядом с health‑пробами и плейбуками восстановления шлюза.

Ночные инциденты проясняются, если в тикет положить четыре артефакта: скрин «Дисковой утилиты», вывод df -h по тому Data, размер самого жирного JSONL и график IOPS, если он есть. Без этого квадрата поддержка гадает между «капризной LLM» и «забитым SSD». Ниже — как превратить эти данные в решение: оставить, сжать, вынести в холодное хранилище или увеличить арендуемый объём.

Как ENOSPC проявляется внутри OpenClaw раньше, чем графики диска закричат

OpenClaw оркестрирует десятки короткоживущих процессов: MCP‑серверы дописывают JSON‑объекты, модели эмбеддинга кэшируют шард под ~/Library, а дампы падают в Console, если TCC не прошёл. Когда write(2) возвращает «нет места», Node может бросить исключение до сброса stderr — на дашборде «инструмент недоступен», а не «том полон». Всегда добавляйте дисковые проверки, если гоняете симптомы из деплой‑траблшутинга, которые всплывают только после многочасовых прогонов.

  • Симптом A: подпроцесс MCP выходит с кодом 1 и пустыми логами.
  • Симптом B: LaunchAgent шлюза перезапускается каждые 45–90 с без crash‑репортов.
  • Симптом C: «Дисковая утилита» всё ещё показывает «50 ГБ свободно», а df -h не согласен — снимки APFS врут вежливо.

Когда несколько агентов пишут в один каталог, гонки усиливают шум: файл растёт, пока другой процесс пытается ротировать, и оба на мгновение падают. Разводите пути по командам или средам, чтобы снизить коллизии.

Свободное место APFS, purgeable‑байты и почему Docker или Xcode взрываются тихо

APFS занимает свободное место у purgeable‑кэшей — деривативы фото, локальные снимки Time Machine, file provider placeholders. Под давлением ФС возвращает терабайты; до этого df может показывать 92 % заполнения, пока Finder дышит шире. Запустите tmutil listlocalsnapshots / и сравните с diskutil apfs listVolumeGroups. Рантаймы контейнеров кладут overlayFS на Data‑том; удаление неиспользуемых образов часто возвращает 18–40 ГБ на CI‑тяжёлых хостах. Закладывайте минимум 15 ГБ постоянного запаса под OpenClaw и кэши моделей — уже плотнее начинаются гонки при ночном уплотнении cron.

Не делайте chmod 777 наугад. Освобождение места через permissive ACL ломает гарантии из документации по секретам.

Команды с DLP иногда перехватывают крупные записи: симптом похож на ENOSPC, хотя это policy. Сверяйте endpoint‑логи, прежде чем сносить легитимные кэши.

Паттерн ротации JSONL, который дружит с launchd

Считайте JSONL как логи nginx: крутите, когда файлы пересекают 150 МБ, храните 7 дневных сжатых архивов и выгружайте холодные строки в объектное хранилище, если комплаенс позволяет. На macOS для простых путей хватает newsyslog; для per‑user агентов оберните логгер OpenClaw небольшим bash‑сторожем с mv app.log app-$(date +%s).log до порога. Не цепляйтесь за внешний logrotate без вендоринга — сдвиг Gatekeeper уже ломал команды, копировавшие Linux‑Ansible один в один. Согласуйте ротацию с git‑конфигами из версионирования конфигурации.

Таблица симптомов: с языка оператора к фактам диска

Загадочный симптомДисковый сигналНемедленная команда
«Модель зависла через шесть часов»Том пересёк 95 % заполненияdf -h /System/Volumes/Data
«Агент постоянно рестартит»Нельзя дописать JSONLls -lh ~/Library/Logs/OpenClaw/*.jsonl
«Загрузки исчезли»Purgeable резко вернулиПервая помощь «Дисковой утилиты» + прореживание снимков

Шестишаговый дисковый triage до переустановки OpenClaw

  1. Снимок реальности: приложите df, diskutil info и tmutil listlocalsnapshots в один тикет.
  2. Найти тяжёлые деревья: du -hd1 ~ с фокусом на Logs, Library и рабочие каталоги.
  3. Ротировать JSONL по схеме выше; убедитесь, что job launchd всё ещё стартует.
  4. Очистить старые снимки после подтверждения бэкапов вне коробки.
  5. Перезапустить OpenClaw последовательностью launchctl kickstart из восстановления шлюза.
  6. Добавить дисковые алерты рядом с uptime‑пингами — срабатывать, если свободные байты падают ниже 20 ГБ пять минут подряд.
Совет по пропускной способности: когда дисковые I/O насыщены, латентность MCP похожа на потерю сети — сверьтесь с настройкой параллелизма, прежде чем гнаться за фантомными WAN‑проблемами.

Планирование ёмкости: гигабайты в решения оператора

SSD на 512 ГБ кажется бесконечным, пока три команды не делят один мини: сорок гигабайт под цепочки Xcode, шестьдесят под кэш моделей, девяносто под ночные артефакты интеграции — и вдруг на выходных ноль свободных байт. Бюджетируйте каждую полосу нагрузки явно — минимум 80 ГБ под интерактивных разработчиков, 40 ГБ под CI‑перелив на APFS‑томах, которые можно снимать отдельно, и 25 ГБ нераспределённого буфера под рост метаданных APFS. Если 85 % заполнения держится больше шести часов, переводите трафик агентов по схемам из фейловера провайдера, пока чистите логи, а не после коллапса MCP.

SMB‑шары с того же мини наследуют тот же дисковый пул — не складывайте многомегабайтные PSD в общую папку, где лежит JSONL, без согласованной ретенции. Для регуляторных экспортов архивируйте на внешние тома только после security review; иначе оставайтесь на зашифрованных sparsebundle на внутреннем SSD с задокументированным TTL. Каждое решение про гигабайт живите рядом с GitOps‑репо из версионирования конфигурации, чтобы финансы видели, зачем нужен следующий тариф.

Снимки диска — как указатели веток: прекрасны, если понимаете их, катастрофичны, если игнорируете. Совмещайте тома Time Machine ежечасно / ежедневно / еженедельно с лёгкой ZFS‑подобной ретенцией только после того, как докажете малые дельты снимков на фоне churn JSONL; иначе опирайтесь на плоские ротируемые файлы плюс холодный экспорт. Документируйте, кто подписывает удаление архивов — без цепочки владения аудиторы решат, что вы уничтожили доказательства при первом росте давления. Печатайте хвост diskutil apfs list в журнал инцидента, чтобы ночная смена не гадала UUID контейнеров.

FAQ

Стоит ли отключать unified logging? Снижайте уровни подсистем вместо удаления /var/db/diagnostics.

Мешает ли оптимизация хранилища iCloud рабочим каталогам OpenClaw? Да — оптимизация «Рабочий стол / Документы» может тормозить записи; исключите каталоги агентов.

А RAM‑диск кэши? Полезны для эфемерных сборок на M4, но размеры должны быть ограничены — фиксируйте потолки в ранбуках рядом со статьями справки.

Почему арендованный Mac mini ProxyMac остаётся реалистичной платформой для дискоёмких агентов

Арендованные Mac mini M4 дают быстрые SSD с предсказуемым износом против перегруженных гипервизоров; вы поднимаете регионы HK / JP / KR / SG / US без отгрузки железа и держите APFS‑снимки в линии с комплаенс‑удержанием. Сочетайте дисциплину диска с прозрачными ценами, ведите операторов через справочный центр, а отладку GUI оставьте на VNC, когда очистка через Finder быстрее SSH.

Держите агентов онлайн с запасом

HK / JP / KR / SG / US · Mac mini под JSONL