type: standard
aspect: operation
title: "Стандарт уровней очистки диска"
version: 1.0.0
date: 2026-02-19
status: active
Версия: 1.0.0
Дата: 2025-12-30
Статус: active
L0 → Автоматическая (monitor при disk >= 90%)
L1 → С подтверждением (вручную или при disk >= 95%)
L2 → Только вручную (критическая ситуация)
Критерии:
- Не влияет на работающие сервисы
- Не удаляет данные пользователя
- Не требует перезапуска
- Можно запускать автоматически
Освобождает: 100-500 MB обычно
| Категория | Что | Возраст | Команда |
|---|---|---|---|
| Временные файлы | /tmp/* | >7 дней | find /tmp -type f -mtime +7 -delete |
| APT кэш | /var/cache/apt/archives/*.deb | любой | apt-get clean |
| PIP кэш | ~/.cache/pip/* | любой | rm -rf ~/.cache/pip/* |
| NPM кэш | ~/.npm/_cacache/* | любой | npm cache clean --force |
| Docker dangling | Несвязанные images | любой | docker image prune -f |
| Docker volumes | Несвязанные volumes | любой | docker volume prune -f |
| Journald | systemd журналы | >500M | journalctl --vacuum-size=500M |
| Логи ротированные | /var/log/.gz, .1 | >7 дней | find /var/log -name "*.gz" -mtime +7 -delete |
| Claude логи | .logs/* | >7 дней | find .logs -name "*.log" -mtime +7 -delete |
| Claude session cache | /tmp/claude-* | >3 дня | find /tmp -name "claude-*" -mtime +3 -delete |
#!/bin/bash
# infra/scripts/cleanup-L0.sh
echo "=== L0: Безопасная очистка ==="
# /tmp старше 7 дней
find /tmp -type f -mtime +7 -delete 2>/dev/null
echo "✓ Очищен /tmp"
# APT
apt-get clean -y >/dev/null 2>&1
echo "✓ Очищен APT cache"
# PIP
rm -rf ~/.cache/pip/* 2>/dev/null
echo "✓ Очищен PIP cache"
# Docker (только dangling)
docker image prune -f >/dev/null 2>&1
docker volume prune -f >/dev/null 2>&1
echo "✓ Очищен Docker (dangling)"
# Journald
journalctl --vacuum-size=500M >/dev/null 2>&1
echo "✓ Очищен journald"
# Логи ротированные
find /var/log -name "*.gz" -mtime +7 -delete 2>/dev/null
find /var/log -name "*.1" -mtime +7 -exec truncate -s 0 {} \; 2>/dev/null
echo "✓ Очищены старые логи"
# Claude логи
find $WORKSPACE/.logs -name "*.log" -mtime +7 -delete 2>/dev/null
echo "✓ Очищены Claude логи"
# Claude temp
find /tmp -name "claude-*" -mtime +3 -delete 2>/dev/null
echo "✓ Очищен Claude temp"
df -h / | tail -1
Критерии:
- Может остановить неиспользуемые сервисы
- Требует подтверждения
- Удаляет неактивные данные (>30 дней)
- Может потребовать docker pull
Освобождает: 3-8 GB обычно
| Категория | Что | Возраст | Риск |
|---|---|---|---|
| Docker images (all) | Все неиспользуемые | любой | Потребуется pull |
| Snap packages | Неиспользуемые snap | любой | Только если не используется |
| Старые бэкапы | $INFRA/backups/* | >30 дней | Потеря старых версий |
| venv неактивных | */venv в старых проектах | >60 дней | Потребуется rebuild |
| node_modules | */node_modules в старых | >60 дней | Потребуется npm install |
| Claude history | ~/.claude/projects/*.jsonl | >60 дней | Потеря старых сессий |
| Git objects | .git/objects (gc) | любой | Сжатие репозитория |
| Логи активные | /var/log/*.log | >30 дней | Потеря истории |
#!/bin/bash
# infra/scripts/cleanup-L1.sh
echo "=== L1: Средняя очистка ==="
echo "⚠️ ВНИМАНИЕ: удаляет неиспользуемые данные"
read -p "Продолжить? (yes/no): " confirm
[ "$confirm" != "yes" ] && exit 1
# Docker (агрессивно)
echo "Очистка Docker images..."
docker system prune -a --volumes -f
echo "✓ Docker очищен"
# Snap (если установлен и не используется)
if command -v snap >/dev/null 2>&1; then
snap_count=$(snap list 2>/dev/null | wc -l)
if [ "$snap_count" -le 2 ]; then
echo "Удаление snapd (не используется)..."
apt purge snapd -y >/dev/null 2>&1
rm -rf /var/lib/snapd
echo "✓ Snapd удалён (освобождено ~1.2GB)"
else
echo "⊘ Snapd используется, пропускаем"
fi
fi
# Старые бэкапы
echo "Удаление бэкапов старше 30 дней..."
find $INFRA/backups -type f -mtime +30 -delete 2>/dev/null
echo "✓ Старые бэкапы удалены"
# venv в неактивных проектах
echo "Удаление старых venv..."
find $WORKSPACE/projects -name "venv" -type d -mtime +60 -exec rm -rf {} \; 2>/dev/null
echo "✓ Старые venv удалены"
# node_modules в неактивных
echo "Удаление старых node_modules..."
find $WORKSPACE -name "node_modules" -type d -mtime +60 -exec rm -rf {} \; 2>/dev/null
echo "✓ Старые node_modules удалены"
# Claude history старше 60 дней
echo "Архивация старых Claude сессий..."
find ~/.claude/projects -name "*.jsonl" -mtime +60 -exec gzip {} \; 2>/dev/null
echo "✓ Старые сессии сжаты"
# Git gc
echo "Сжатие git репозиториев..."
cd $WORKSPACE && git gc --aggressive >/dev/null 2>&1
echo "✓ Git objects сжаты"
# Активные логи
echo "Ротация активных логов..."
find /var/log -name "*.log" -size +100M -exec truncate -s 50M {} \; 2>/dev/null
echo "✓ Большие логи усечены"
df -h / | tail -1
Критерии:
- Удаляет production данные
- Может нарушить работу сервисов
- Требует двойного подтверждения
- Только при критической ситуации (disk >= 98%)
Освобождает: 10-20 GB
| Категория | Что | Риск | Восстановление |
|---|---|---|---|
| Docker volumes (used) | Используемые volumes | ⚠️ Потеря данных | Из бэкапов БД |
| БД дампы | Старые дампы | ⚠️ Потеря recovery точек | Нельзя восстановить |
| Production data | Данные проектов | 🔴 КРИТИЧНО | Только если есть бэкап |
| Git history | .git полностью | 🔴 КРИТИЧНО | Потеря истории |
| Active projects | Целые проекты | 🔴 КРИТИЧНО | Только из git |
| Claude всё | ~/.claude полностью | 🔴 КРИТИЧНО | Потеря всех сессий |
#!/bin/bash
# infra/scripts/cleanup-L2.sh
echo "=== L2: ОПАСНАЯ ОЧИСТКА ==="
echo "🔴 ВНИМАНИЕ: УДАЛЯЕТ PRODUCTION ДАННЫЕ"
echo "🔴 ИСПОЛЬЗУЙТЕ ТОЛЬКО В КРИТИЧЕСКОЙ СИТУАЦИИ"
echo ""
read -p "ВЫ УВЕРЕНЫ? Введите 'DELETE ALL DATA': " confirm
[ "$confirm" != "DELETE ALL DATA" ] && exit 1
echo ""
echo "Последний шанс отменить..."
sleep 3
# Docker volumes (используемые)
echo "Удаление Docker volumes..."
docker volume rm $(docker volume ls -q) -f 2>/dev/null
echo "✓ Docker volumes удалены"
# Старые БД дампы
echo "Удаление старых дампов БД..."
find /var/backups -name "*.sql.gz" -delete 2>/dev/null
echo "✓ Дампы удалены"
# Архивы проектов старше 90 дней
echo "Удаление архивов проектов..."
find $WORKSPACE/projects -name "archive" -type d -exec rm -rf {} \; 2>/dev/null
echo "✓ Архивы удалены"
# Claude сессии (ВСЕ)
echo "Удаление всех Claude сессий..."
rm -rf ~/.claude/projects/*.jsonl 2>/dev/null
echo "✓ Сессии удалены"
# Git objects (агрессивно)
echo "Удаление старых git объектов..."
cd $WORKSPACE && git reflog expire --expire=now --all
git gc --prune=now --aggressive
echo "✓ Git очищен"
df -h / | tail -1
Правило: Monitor запускает ТОЛЬКО L0 при disk >= 90%
Алгоритм:
if disk >= 98%:
→ Алерт критический
→ НЕ запускать автоочистку (слишком опасно)
→ Требовать ручное вмешательство
elif disk >= 95%:
→ Запустить L0
→ Если не помогло → алерт с предложением L1
elif disk >= 90%:
→ Запустить L0
→ Если помогло → всё ОК
→ Если не помогло → алерт с рекомендацией L1
else:
→ Ничего не делать
Конфиг:
# system/monitor/config.yaml
infra:
disk:
warning: 80
critical: 90
emergency: 98
auto_cleanup: true # Включить автоочистку
auto_cleanup_level: L0 # Только безопасная
auto_cleanup_confirm_L1: false # L1 требует подтверждения
# L0 — безопасная (в любое время)
bash infra/scripts/cleanup-L0.sh
# L1 — средняя (с подтверждением)
bash infra/scripts/cleanup-L1.sh
# L2 — опасная (только критическая ситуация)
bash infra/scripts/cleanup-L2.sh
# Что занимает место (top 20)
du -sh /* 2>/dev/null | sort -h | tail -20
du -sh /var/* 2>/dev/null | sort -h | tail -20
du -sh /opt/* 2>/dev/null | sort -h | tail -20
# Docker размеры
docker system df
# Логи
du -sh /var/log/*
# Бэкапы
du -sh $INFRA/backups/*
# Claude
du -sh ~/.claude/*
Версия: 1.0.0