Ответ
Свободное место для данных — не единственный лимит. Вот основные причины:
-
Исчерпаны inodes. Каждый файл, директория или символьная ссылка занимает один inode. Если их нет, создать новый объект нельзя.
- Проверка:
df -i - Решение: Удалить множество мелких файлов или увеличить количество inodes при создании ФС (опция
-Nвmkfs).
- Проверка:
-
Дисковые квоты (quota) для пользователя/группы. Лимит может быть исчерпан, даже если в системе есть место.
- Проверка:
quota -vsилиrepquota -a
- Проверка:
-
Недостаточно места в конкретном слое OverlayFS. Частая проблема в Docker/контейнерах. Верхний writable-слой (обычно thin pool) может быть заполнен, хотя нижний read-only образ имеет свободное место.
- Проверка в Docker:
docker system df -v
- Проверка в Docker:
-
Права доступа. Отсутствие прав на запись (
w) в целевой директории.- Проверка:
ls -ld /path/to/dirиid
- Проверка:
-
Файловая система в режиме «только для чтения» (read-only). Может произойти из-за ошибок ФС или преднамеренной настройки.
- Проверка: В выводе
mountилиcat /proc/mounts.
- Проверка: В выводе
-
Жёсткая ссылка на удалённый файл. Если на файл осталась жёсткая ссылка, место не освободится.
Алгоритм диагностики:
# 1. Проверить inodes
$ df -i /
# 2. Проверить квоты
$ quota -vs
# 3. Проверить права
$ ls -ld /target/path
# 4. Проверить, не заполнен ли отдельный слой (актуально для контейнеров)
$ docker ps -q | xargs docker inspect --format='{{.Id}} {{.GraphDriver.Data.WorkDir}}' | head -1
# 5. Проверить, не в read-only ли ФС
$ findmnt -n -o OPTIONS / | grep ro