Ответ
Освобождение места без остановки процессов — частая задача при работе с лог-файлами, временными данными или при переполнении диска в production-среде. Вот проверенные методы:
1. Очистка или ротация лог-файлов: Если процесс пишет в файл и держит его дескриптор открытым, можно очистить содержимое файла, не удаляя его (inode останется тем же).
# Способ 1: Использование утилиты truncate
sudo truncate -s 0 /var/log/application.log
# Способ 2: Перенаправление пустого вывода (более распространенный)
sudo sh -c '> /var/log/application.log'
# Или
sudo : > /var/log/application.log
После этих операций файл будет пустым, но процесс продолжит писать в него.
2. Настройка logrotate (правильный, долгосрочный подход):
Утилита logrotate автоматически ротирует, сжимает и удаляет старые логи. Конфигурация обычно в /etc/logrotate.d/.
Пример конфига /etc/logrotate.d/myapp:
/var/log/myapp/*.log {
daily # Ротировать ежедневно
rotate 30 # Хранить 30 архивных копий
compress # Сжимать архивы (gzip)
delaycompress # Сжимать не сразу, а со следующей ротацией
missingok # Не выдавать ошибку, если файл отсутствует
notifempty # Не ротировать пустые файлы
create 0644 appuser appgroup # Создать новый файл с указанными правами
sharedscripts # Скрипты postrotate выполняются один раз для всех логов
postrotate # Действие после ротации
# Отправка сигнала приложению на reopen лог-файлов (например, для nginx, app-серверов)
/usr/bin/killall -HUP myapp_process 2> /dev/null || true
endscript
}
3. Поиск и удаление ненужных больших файлов:
# Найти файлы больше 100МБ
sudo find / -type f -size +100M -exec ls -lh {} ; 2>/dev/null | head -20
# Удалить старые файлы в директории /tmp
sudo find /tmp -type f -mtime +7 -delete
# Анализ использования диска по директориям
sudo du -sh /var/* | sort -hr
4. Очистка кэша пакетного менеджера:
# Для apt (Debian/Ubuntu)
sudo apt clean # Очищает все кэшированные .deb пакеты
sudo apt autoclean # Удаляет устаревшие кэшированные пакеты
# Для yum/dnf (RHEL/CentOS/Fedora)
sudo yum clean all
# или
sudo dnf clean all
Важное предостережение: Перед массовым удалением всегда проверяйте, что удаляете, особенно в корневой файловой системе. Остановка процесса — иногда более безопасный вариант, если есть возможность его быстрого перезапуска (например, через systemd).