← Назад к вопросам

Как диагностировать причину No space left on device в Linux

2.0 Middle🔥 161 комментариев
#Linux и администрирование

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Диагностика причины "No space left on device" в Linux

Ошибка "No space left on device" (нет свободного места на устройстве) в Linux может возникать не только из-за заполнения дискового пространства, но и по другим причинам, связанным с ограничениями файловой системы. Для эффективной диагностики необходимо последовательно проверить несколько ключевых факторов.

Основные причины и методы проверки

1. Заполнение доступного дискового пространства

Первым шагом всегда является проверка использования дискового пространства с помощью команды df.

df -h

Эта команда покажет использование пространства на всех mounted файловых системах в удобном человеко-читаемом формате (GB, MB). Если процент использования (Use%) близок к 100%, причина очевидна. Однако, df может показывать свободное место даже при ошибке, если проблема связана с inodes.

2. Заполнение количества inodes

Каждая файлова система имеет фиксированное количество inodes (структур данных, хранящих информацию о файлах). Если создано слишком много файлов (особенно мелких), может быть заполнен лимит inodes, даже при наличии свободного дискового пространства. Для проверки используйте:

df -i

Команда покажет использование inodes аналогично df -h. Если IUse% равен или близок 100%, необходимо удалить лишние файлы.

3. Ограничения для пользователя или процесса (Quotas)

В системах могут быть настроены дисковые квоты (quotas) для пользователей или групп, ограничивающие объем данных или количество inodes. Для проверки квот текущего пользователя:

quota -v

Если квоты активны и пользователь их превысил, это вызовет ошибку "No space left on device" даже при наличии общего свободного места на диске.

4. Заполнение пространства в tmpfs

Временные файловые системы tmpfs (например, /dev/shm, /run) хранятся в памяти и имеют ограниченный размер. Если процесс пытается записать в tmpfs больше данных, чем доступно, возникнет эта ошибка. Проверьте tmpfs:

df -h | grep tmpfs

5. Заполнение корневого разделя (root partition) в контейнерах

В контейнерах (Docker, LXC) часто используется отдельный корневой раздел с ограниченным размером. Ошибка может возникать внутри контейнера, даже если на хосте есть место. Для диагностики в Docker:

docker exec <container_name> df -h

Расширенная диагностика и поиск источника проблемы

Если основные проверки не выявили очевидной причины (например, df -h и df -i показывают свободное место), проблема может быть более специфичной:

  • Проверка логов файловой системы: Проверьте системные журналы (/var/log/syslog, /var/log/messages) на наличие ошибок от файловой системы (ext4, xfs) или драйверов устройств.

  • Мониторинг процессов: Используйте инструменты для обнаружения процессов, активно пишущих данные. Например, с помощью iotop (требует root):

    iotop -o
    
    Эта команда покажет процессы, выполняющие активные операции I/O.
    
  • Поиск множества мелких файлов: Если проблема в inodes, необходимо найти директории с огромным количеством файлов. Можно использовать:

    find /path/to/mount -type f | wc -l
    
    Для подсчета файлов в конкретной точке монтирования. Или более детально:
    
```bash
find / -xdev -type f | wc -l
```
    Чтобы подсчитать все файлы на текущей файловой системе (без перехода на другие mounts).

Пример полного диагностического сценария

Когда возникает ошибка при записи файла в /var/log, выполните:

# 1. Проверка общего дискового пространства
df -h /var

# 2. Проверка использования inodes
df -i /var

# 3. Поиск крупных файлов или директорий в /var
du -sh /var/* | sort -rh

# 4. Проверка квот (если система использует их)
quota -v

# 5. Проверка логов на ошибки файловой системы
grep -i "no space" /var/log/syslog

Решение проблем

  • Если заполнен диск: Удалите ненужные файлы, очистите логи, расширьте раздел или добавьте новый диск.
  • Если заполнены inodes: Найдите и удалите множество мелких файлов (часто временные файлы или кэш). Иногда требуется пересоздание файловой системы с увеличенным количеством inodes.
  • Если проблема в квотах: Обратитесь к администратору для увеличения лимитов или очистите свои файлы.
  • Если проблема в tmpfs: Увеличьте размер tmpfs в /etc/fstab или измените поведение приложения, чтобы не использовать tmpfs для больших данных.
  • В контейнерах: Увеличьте размер rootfs контейнера или очистите данные внутри него.

Таким образом, диагностика ошибки "No space left on device" требует комплексного анализа: проверки дискового пространства, количества inodes, квот и особенностей временных файловых систем. Используя приведенные команды и методику, можно быстро определить точную причину и предпринять корректирующие действия.