← Назад к вопросам
Как можно очистить место на диске, не убивая процесс?
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
- Всегда выполняйте анализ перед очисткой - используйте
du,ncdu,lsof - Настройте мониторинг дискового пространства с алертами при достижении 80-90%
- Внедрите logrotate для автоматического управления логами
- Используйте tmpfs для временных файлов в памяти
- Рассмотрите символические ссылки для переноса больших директорий на другие диски
- Регулярно архивируйте старые данные в объектные хранилища (S3, etc.)
- Настройте квоты дисков (disk quotas) для пользователей
Критические моменты
- Никогда не очищайте
/proc,/sys,/dev- это виртуальные файловые системы - Проверяйте, какие процессы используют файлы перед их удалением/очисткой
- Используйте
truncateвместоrmдля файлов, которые все еще открыты процессами - Всегда имейте бэкапы перед массовой очисткой
Эти методы позволяют эффективно управлять дисковым пространством в production-средах без необходимости останавливать критически важные процессы, что особенно важно для высоконагруженных систем с минимальным временем простоя.