Сервер: Как проверить свободное место, inode и удалённые открытые файлы

Ошибка No space left on device в Linux не всегда означает, что на диске закончились гигабайты. Создание новых файлов также может прекратиться из-за исчерпания inode — структур файловой системы, в которых хранится информация о файлах и каталогах.

Ещё одна возможная причина — удалённый файл продолжает оставаться открытым работающим процессом. В этом случае файл уже не виден в каталоге, но всё ещё занимает место на диске.

Типичные сообщения об ошибке:

При создании файла:

No space left on device

При выполнении SQL-запроса:

Can't create/write to file '/var/tmp/#sql_***_*.MAI' (Errcode: 28 "No space left on device")

В системном журнале:

imjournal: fopen() failed: No space left on device

Быстрая диагностика

Сначала проверьте файловую систему, на которой расположен проблемный каталог. Например, если ошибка связана с /var/tmp:

# Свободное и занятое дисковое пространство
df -hT /var/tmp

# Использование inode
df -ih /var/tmp

# Удалённые файлы, которые всё ещё открыты процессами
sudo lsof +L1

Если проблемный каталог неизвестен, выведите информацию обо всех смонтированных файловых системах:

df -hT
df -ih

Обратите внимание на колонки:

  • Use% — процент занятого дискового пространства;
  • IUse% — процент использованных inode;
  • Mounted on — точка монтирования файловой системы.

Если закончилось место на диске

Найдите каталоги, которые занимают больше всего места. Параметр -x запрещает переход на другие файловые системы:

sudo du -xhd1 / 2>/dev/null | sort -h

Затем последовательно уточняйте проблемный путь:

sudo du -xhd1 /var 2>/dev/null | sort -h
sudo du -xhd1 /var/lib 2>/dev/null | sort -h
sudo du -xhd1 /var/log 2>/dev/null | sort -h

На сервере чаще всего разрастаются журналы, резервные копии, кэши, временные файлы, почтовые очереди, файлы баз данных, образы, контейнеры и тома Docker.

Не удаляйте незнакомые файлы только потому, что они занимают много места. Сначала определите, какой программе они принадлежат и можно ли безопасно выполнить очистку.

Если закончились inode

Если свободное место есть, но значение IUse% близко к 100%, файловая система исчерпала доступные inode. Обычно это происходит из-за большого количества небольших файлов.

Найдите каталоги, использующие больше всего inode:

sudo du --inodes -x -d1 / 2>/dev/null | sort -n

Параметр --inodes поддерживается GNU Coreutils. В минимальных системах на базе BusyBox он может отсутствовать.

Затем углубитесь в найденный каталог:

sudo du --inodes -x -d1 /var 2>/dev/null | sort -n
sudo du --inodes -x -d1 /var/lib 2>/dev/null | sort -n
sudo du --inodes -x -d1 /var/www 2>/dev/null | sort -n

Частые причины нехватки inode:

  • файлы PHP-сессий;
  • кэш CMS или приложения;
  • временные файлы;
  • почтовые сообщения и очереди;
  • миллионы миниатюр изображений;
  • неправильно настроенная ротация журналов;
  • файлы очередей и незавершённых заданий.

После очистки повторите проверку:

df -ih

Если показания df и du не совпадают

Команда du подсчитывает файлы, доступные через файловую систему. Команда df показывает фактически занятые блоки. Поэтому после удаления большого журнала du может показывать свободное место, а df — по-прежнему заполненный диск.

Причиной может быть процесс, который продолжает удерживать удалённый файл:

sudo lsof +L1

В выводе найдите процесс и путь к удалённому файлу. Для окончательного освобождения места обычно требуется корректно перезапустить соответствующий сервис.

# Примеры. Перезапускайте только сервис,
# который действительно удерживает удалённый файл.

sudo systemctl restart nginx
sudo systemctl restart php-fpm

Если удалить файлы нельзя

Возможные решения:

  • увеличить файловую систему;
  • перенести логи, кэш или данные на другой раздел;
  • настроить ротацию и срок хранения журналов;
  • настроить автоматическую очистку временных файлов и сессий;
  • добавить мониторинг свободного места и inode.

Простого увеличения виртуального диска может быть недостаточно: иногда дополнительно требуется расширить раздел, LVM-том и файловую систему. Конкретный порядок зависит от разметки диска и используемой файловой системы — например, ext4 или XFS.

up: Просмотров: 2.4k
Материал помог? Оценка помогает находить устаревшие и спорные решения.

Комментарии

0

Нашли ошибку или хотите дополнить материал?

Комментариев пока нет.Можно первым дополнить материал или сообщить об ошибке.
Telegram