Ошибка ‘No Space Left on Device’ на Linux

Сегодня в статье рассмотрим примеры как можно исправить ошибку «No Space Left on Device» (на устройстве не осталось места) на вашем Linux дистрибутиве.

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

Есть два пути решения данной проблемы, но сперва нам надо узнать о наличии свободного места в системе. Для этого в терминале набираем следующее:

sudo df -h
Файловая система Размер Использовано  Дост Использовано% Cмонтировано в
udev               1,7G            0  1,7G            0% /dev
tmpfs              337M         2,6M  334M            1% /run
/dev/sda1           20G          11G  8,1G           57% /
tmpfs              5,0M         4,0K  5,0M            1% /run/lock
tmpfs              673M         172M  502M           26% /dev/shm
/dev/sda2           90G         3,7G   82G            5% /home
cgroup              12K            0   12K            0% /sys/fs/cgroup
tmpfs              337M         4,0K  337M            1% /run/user/118
tmpfs              337M          24K  337M            1% /run/user/1000

Из вывода нас интересует только две строчки:

/dev/sda1           20G          11G  8,1G           57% /

Тут вывод показывает сколько места у нас осталось на основной системе «/«. Как видно что использовано всего 57% пространства.

/dev/sda2           90G         3,7G   82G            5% /home

Тут вывод показывает сколько места у нас осталось в директории «/home«, для данной директории мы выделили свое пространство на диске. Как видно что использовано всего 5% пространства.

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

Первое — это если место закончилось, т.е. из вывода выше на всех примонтированных дисках у нас заполненность была 100%. То тут поможет только удаление ненужных файлов. Вот вам парочка статей о том, как освободить место на вашем диске в Linux.

  • Какие файлы можно удалить при нехватке места на диске Linux (скоро ожидается)
  • Программа ncdu. Как узнать, какие файлы и директории занимают наибольшее место на диске (скоро ожидается)

Второе — это если место на диске есть, как и в моем случае, но система выдает вам данное предупреждение о нехватке места ‘No Space Left on Device’. В этом случае необходимо проделать ряд мероприятий по настройке и очистке системы.

Далее я разберу только второй вариант — это когда место на диске есть, но система все равно ругается о нехватке ресурсов. И так поехали!

Удаление файлов занятых процессом

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

Давайте введем следующую команду и посмотрим на процессы:

sudo lsof / | grep deleted

Если результатов нет, то попробуйте команду:

sudo lsof / | grep -i del

В списке должен присутствовать процесс, вызывающий проблему, затем просто перезапустите его:

sudo systemctl restart Имя_Службы

или остановите данный процесс:

sudo systemctl stop Имя_Службы

Для примера я перезапустил процесс unattended:

sudo systemctl restart unattended-upgrades.service

И systemd-journal:

sudo systemctl restart systemd-journald.service

Недостаточно Инод (Inode)

Для современных файловых систем Linux есть такое понятие как иноды.

inodes — это набор метаданных на файловой системе. Иноды отслеживают информацию о файлах. Многие файловые системы имеют фиксированное количество инод, поэтому очень возможно занять максимальное выделенное количество без заполнения самой файловой системы. Вы можете использовать для проверки команду df:

sudo df -i /
Файл.система   Iнодов IИспользовано IСвободно IИспользовано% Cмонтировано в
/dev/sda1      327680        119991    207689            37% /

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

В нормальных условиях, даже на системах интенсивно использующих постоянное хранилище, редко происходит потребление всех инод. Как правило, исчерпание inodes сигнализирует о другой проблеме. Обычно причиной является неконтролируемое создание огромного количество файлов из-за бага в системе или в программе.

В первую очередь нужно локализовать папку, в которой возникла проблема.

Следующая команда выведет количество используемых инод каждой директории, присутствующей в корне файловой системы:

sudo find / -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n

Когда будет найдена директория с наибольшим количеством инод, то можно будет уже работать с данной директории.

В разных ситуациях для пользователей проблемными директориями оказывались:

  • /var/lib/php/sessions/
  • /var/cache/fontconfig
  • /usr/src/
  • /var/cache/eaccelerator/
  • /var/log/squid3/

В /usr/src/ накапливалось слишком большое количество файлов, имеющих отношение к предыдущим ядрам. В /var/lib/php/sessions/ — бесконечные сессии phpMyAdmin. В /var/log/squid3/ и вообще в папке /var/log/ может накопиться огромное количество файлов с журналами от неправильно работающей программы или просто за много лет. В папке /var/cache/ может скопиться огромное количество файлов, имеющих отношение к кэшированию.

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

Плохие блоки

Ещё одна распространённая проблема — это плохие блоки в файловой системе. Со временем из-за износа дисков, файловые системы повреждаются. Ваша операционная система, скорее всего, увидит эти блоки пригодными для использования, если они не помечены иным образом. Лучший способ найти и пометить эти блоки — использовать fsck с флагом -cc. Помните, что вы не можете использовать fsck из той же файловой системы, которую тестируете. Вам, вероятно, понадобится использовать Live CD.

sudo fsck -vcck /dev/sda1
  • замените /dev/sda1 на имя того диска и раздела, который вы хотите проверить. Кроме того, имейте в виду, что это, вероятно, займёт много времени.

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

Кстати, сообщение “No space left on device” может возникнуть при попытке записать файл размером более 4GB на раздел с файловой системой FAT — данная файловая система не поддерживает файлы таких больших размеров.

Если есть вопросы, то пишем в комментариях.

Также можете помочь проекту, заранее всем СПАСИБО!!!

.

RSS

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

5 1 vote
Рейтинг статьи
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 комментариев
Inline Feedbacks
Просмотреть все комментарии