architect/standards/8-operation/operation-cleanup.md

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 → Только вручную (критическая ситуация)

УРОВЕНЬ L0 — БЕЗОПАСНАЯ ОЧИСТКА

Критерии:
- Не влияет на работающие сервисы
- Не удаляет данные пользователя
- Не требует перезапуска
- Можно запускать автоматически

Освобождает: 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

Скрипт L0

#!/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

УРОВЕНЬ L1 — СРЕДНЯЯ ОЧИСТКА

Критерии:
- Может остановить неиспользуемые сервисы
- Требует подтверждения
- Удаляет неактивные данные (>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 дней Потеря истории

Скрипт L1

#!/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

УРОВЕНЬ L2 — ОПАСНАЯ ОЧИСТКА

Критерии:
- Удаляет production данные
- Может нарушить работу сервисов
- Требует двойного подтверждения
- Только при критической ситуации (disk >= 98%)

Освобождает: 10-20 GB

Что чистится

Категория Что Риск Восстановление
Docker volumes (used) Используемые volumes ⚠️ Потеря данных Из бэкапов БД
БД дампы Старые дампы ⚠️ Потеря recovery точек Нельзя восстановить
Production data Данные проектов 🔴 КРИТИЧНО Только если есть бэкап
Git history .git полностью 🔴 КРИТИЧНО Потеря истории
Active projects Целые проекты 🔴 КРИТИЧНО Только из git
Claude всё ~/.claude полностью 🔴 КРИТИЧНО Потеря всех сессий

Скрипт L2

#!/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)

Правило: 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