Ответ
Эта проблема часто возникает из-за того, что файлы удалены, но ещё удерживаются запущенными процессами. Вот мой алгоритм действий:
-
Базовая диагностика:
- Сравниваю вывод
df -h(показывает занятое место с точки зрения файловой системы) иdu -sh /(показывает суммарный размер файлов). Еслиdfпоказывает мало свободного места, аdu— нет, значит место удерживают процессы.
- Сравниваю вывод
-
Поиск процессов, удерживающих удалённые файлы (deleted files):
lsof +L1 # Показать файлы со счётчиком ссылок <1 # Или более конкретно: lsof | grep -i deleted- Найденные процессы нужно аккуратно перезапустить (например,
systemctl restart nginx), чтобы ядро освободило дисковое пространство.
- Найденные процессы нужно аккуратно перезапустить (например,
-
Работа с логами и временными файлами:
- Проверяю и очищаю логи в
/var/log/(например, с помощьюlogrotateилиtruncate -s 0 /var/log/some.log). - Ищу большие файлы, которые могли быть созданы приложениями:
find / -type f -size +500M -exec ls -lh {} ; 2>/dev/null | head -20
- Проверяю и очищаю логи в
-
Проверка контейнеров и виртуализации:
- Если используется Docker:
docker system dfпокажет использование диска, аdocker system prune -aудалит неиспользуемые данные (осторожно!). - Проверяю томов и снимки (snapshots) LVM.
- Если используется Docker:
-
Синхронизация файловой системы:
- Иногда помогает принудительная запись кэшей:
sync. - В крайнем случае можно попробовать очистить кэш страниц ядра, но это временное решение и может снизить производительность:
echo 3 > /proc/sys/vm/drop_caches
- Иногда помогает принудительная запись кэшей: