Ответ
В Linux и Unix-подобных системах свободное дисковое пространство — не единственное условие для создания файла. С точки зрения DevOps и администрирования, основные причины следующие:
-
Исчерпание inodes (
df -i): Файловая система хранит метаданные каждого файла (имя, права, расположение данных) в структуре inode. Их количество фиксировано при создании ФС. Если inodes закончились, новые файлы создавать нельзя, даже при свободном месте. Частая проблема с файловыми системами, содержащими огромное количество мелких файлов (кэши, лог-файлы, Docker-образы). -
Дисковые квоты пользователя/группы: Администратор мог установить лимиты на дисковое пространство (
quota) или количество файлов (inode quota) для конкретного пользователя. Проверить можно командойquota -vs. -
Отсутствие прав на запись: У процесса, пытающегося создать файл, нет прав
wна целевую директорию. -
Read-only файловая система: ФС могла быть примонтирована в режиме
roиз-за ошибок ядра или преднамеренно (например, для безопасности). Проверяется черезmount | grep <точка_монтирования>. -
Файл открыт удаляющим процессом: Если файл был удален (
rm), но какой-то процесс продолжает держать его дескриптор открытым, место на диске не освободится для системы, пока процесс не закроет файл.dfпокажет, что место занято. Найти такие файлы можно черезlsof +L1.
Диагностика для DevOps-инженера:
# 1. Проверяем свободное место И inodes
$ df -h /var; df -i /var
# 2. Проверяем квоты для текущего пользователя
$ quota -vs
# 3. Ищем "зависшие" удаленные файлы
$ lsof +L1 | grep -i deleted
# 4. Проверяем права на директорию
$ ls -ld /path/to/directory