← Назад к вопросам

Как можно очистить место на диске, не убивая процесс?

2.0 Middle🔥 192 комментариев
#Linux и администрирование

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Стратегия очистки дискового пространства без остановки процессов

Для безопасной очистки места на диске без завершения процессов существует несколько стратегий, которые я применяю в своей практике DevOps/SRE Engineer.

Основные подходы к очистке

1. Анализ использования диска

Прежде всего, необходимо определить, какие файлы/директории занимают больше всего места:

# Анализ использования дискового пространства
du -sh /* 2>/dev/null | sort -rh | head -20

# Более детальный анализ с исключением монтирований
du -xh / --max-depth=1 2>/dev/null | sort -rh | head -20

# Использование ncdu для интерактивного анализа
ncdu / --exclude /proc --exclude /sys --exclude /dev

2. Очистка временных файлов и кэшей

Системные временные файлы:

# Очистка /tmp (удаление файлов старше N дней)
find /tmp -type f -atime +7 -delete

# Очистка systemd journal
journalctl --vacuum-time=7d
journalctl --vacuum-size=500M

# Очистка кэша пакетов
apt-get clean  # для Debian/Ubuntu
yum clean all  # для RHEL/CentOS
dnf clean all  # для Fedora/RHEL8+

Кэши приложений:

# Docker очистка
docker system prune -af --volumes

# Очистка кэша yum/dnf
yum clean all --enablerepo='*'

# Очистка кэша pip
rm -rf ~/.cache/pip

3. Работа с лог-файлами

Ротация и сжатие логов:

# Использование logrotate (стандартный подход)
logrotate -f /etc/logrotate.conf

# Ручное управление большими лог-файлами
find /var/log -name "*.log" -type f -size +100M -exec truncate -s 0 {} \;

# Сжатие старых логов
find /var/log -name "*.log.*" -type f -mtime +30 -exec gzip {} \;

4. Управление файлами с открытыми дескрипторами

Критически важный аспект - обработка файлов, которые все еще открыты процессами:

# Поиск удаленных файлов с открытыми дескрипторами
lsof +L1 | grep deleted

# Освобождение места через truncate для открытых файлов
# (Для лог-файлов, которые все еще пишутся)
truncate -s 0 /path/to/large/logfile.log

# Альтернативный метод - очистка через /proc
# Найти PID процесса и дескриптор файла
ls -la /proc/[PID]/fd/ | grep deleted

Продвинутые техники

Уменьшение размера файлов на лету

# Для баз данных - создание дампа с последующим восстановлением
mysqldump -u user -p database | gzip > backup.sql.gz
# После чего можно удалить старые файлы БД

# Для виртуальных машин и дисков - сжатие qcow2
qemu-img convert -c -O qcow2 original.qcow2 compressed.qcow2

Очистка с использованием null вместо удаления

# Для файлов, которые нельзя удалить, но нужно освободить место
: > /path/to/large/file
# или
cat /dev/null > /path/to/large/file

Автоматизация и мониторинг

Создание скрипта для регулярной очистки:

#!/bin/bash
# cleanup_script.sh
LOG_FILE="/var/log/cleanup.log"

{
    echo "=== Начало очистки $(date) ==="
    
    # Очистка временных файлов
    find /tmp -type f -mtime +3 -delete 2>/dev/null
    
    # Очистка кэша пакетов
    if command -v apt-get &> /dev/null; then
        apt-get clean
    fi
    
    # Очистка логов
    find /var/log -name "*.gz" -mtime +30 -delete
    find /var/log -name "*.log.*" -mtime +7 -delete
    
    echo "=== Очистка завершена $(date) ==="
} >> "$LOG_FILE" 2>&1

Рекомендации и best practices

  1. Всегда выполняйте анализ перед очисткой - используйте du, ncdu, lsof
  2. Настройте мониторинг дискового пространства с алертами при достижении 80-90%
  3. Внедрите logrotate для автоматического управления логами
  4. Используйте tmpfs для временных файлов в памяти
  5. Рассмотрите символические ссылки для переноса больших директорий на другие диски
  6. Регулярно архивируйте старые данные в объектные хранилища (S3, etc.)
  7. Настройте квоты дисков (disk quotas) для пользователей

Критические моменты

  • Никогда не очищайте /proc, /sys, /dev - это виртуальные файловые системы
  • Проверяйте, какие процессы используют файлы перед их удалением/очисткой
  • Используйте truncate вместо rm для файлов, которые все еще открыты процессами
  • Всегда имейте бэкапы перед массовой очисткой

Эти методы позволяют эффективно управлять дисковым пространством в production-средах без необходимости останавливать критически важные процессы, что особенно важно для высоконагруженных систем с минимальным временем простоя.

Как можно очистить место на диске, не убивая процесс? | PrepBro