- Как исправить ошибку ‘No Space Left on Device’ (на устройстве не осталось места) на Linux, когда свободное место на самом деле есть
- Просмотр свободного места на диске/разделах в Linux
- Просмотр занятого места на разделах командой du
- Получаем размеры директорий командой du
- Bash скрипт мониторинга свободного места в Linux
- Как исправить ошибку ‘No Space Left on Device’ (на устройстве не осталось места) на Linux, когда свободное место на самом деле есть
- Что делать, если закончилось место в Linux
- Проверьте с du и df
- Возможные причины
- Удаление файлов занятых процессом
- Недостаточно Инод (Inode)
- Плохие блоки
Как исправить ошибку ‘No Space Left on Device’ (на устройстве не осталось места) на Linux, когда свободное место на самом деле есть
На жёстком диске ещё есть место, но система Linux говорит, что места не осталось и любая операция, связанная с созданием файлов, завершается ошибкой с сообщением, что места на диске нет.
Эта ситуация выглядит странной и непонятной — что нужно сделать для очистки диска, если место и так есть?
У меня такая проблема возникла на сервере в результате чего любые процессы, которые требуют создания файлов, сохранения временных файлов и даже файлов блокировки стали выдавать ошибки при запуске.
Подобная ситуация возникала на этом же сервере накануне и помогла очистка логов, очистка кэша установленных пакетов и удаление ненужных файлов. Но на следующей день ситуация повторилась, хотя места уже точно было достаточно — несколько свободных гигабайт места на диске.
Проверьте с du и df
Перед тем как начать искать проблему, давайте убедимся, что на диске действительно есть свободное место. Хотя инструменты с графическим интерфейсом хорошие, намного лучше использовать программы напрямую из командной строки.
Начнём с du. Укажем ей базовую директорию на диске у которого проблемы. Это руководство подразумевает, что проблемным диском является раздел с рутом.
Для обхода всего дерева директорий потребуется время.
Добавьте корень файловой системы (рут) и файловые системы, смонтированные под ним. Например, если у вас есть «/home» на отдельном диске, добавьте это к показанию для root. Количество занятого и свободного пространства должно получиться близко к тому, что нам показала программа du. Если это не так, это может указывать на то, что удалённые файлы используются процессами.
Главное, на что следует обратить внимание, чтобы вывод этих команд о занятом пространстве соответствовал друг другу и размеру диска. Если это не так, значит имеется проблема.
Возможны разные ситуации возникновения ошибки о том, что диск переполнен, когда на самом деле на нём ещё достаточно места. Если вы видите несоответствие между выводом команд du и df, то перейдите к первому варианту решения проблемы. В противном случае начните со второго.
Удаление файлов занятых процессом
Иногда файл будет удалён, но процесс все ещё использует его. Linux не освободит хранилище, связанное с файлом, пока процесс ещё запущен. Вам просто нужно найти процесс и перезапустить его.
Попробуйте найти процесс.
Если результатов нет, то попробуйте команду:
В списке должен присутствовать процесс, вызывающий проблему, затем просто перезапустите его:
Недостаточно Инод (Inode)
Для современных файловых систем Linux есть такое понятие как иноды (“inodes”) — это набор метаданных на файловой системе. Иноды отслеживают информацию о файлах. Многие файловые системы имеют фиксированное количество инод, поэтому очень возможно занять максимальное выделенное количество без заполнения самой файловой системы. Вы можете использовать для проверки команду df:
Сравните количество существующих инод с количеством занятых. Если больше нет свободных, к сожалению, вы не можете получить больше. Выход: удалите ненужные или устаревшие файлы для очистки инод.
В нормальных условиях, даже на системах интенсивно использующих постоянное хранилище, редко происходит потребление всех инод. Как правило, исчерпание inodes сигнализирует о другой проблеме. Обычно причиной является неконтролируемое создание огромного количество файлов из-за бага в системе или в программе.
В первую очередь нужно локализовать папку, в которой возникла проблема.
Следующая команда выведет количество используемых инод каждой папкой, присутствующей в корне файловой системы:
Ещё варианты команд, которые делают это же самое (по умолчанию они настроены проверять текущую папку — это можно изменить, для этого вместо точки впишите желаемую для проверки папку:
Когда найдена папка с наибольшим количеством инод, то проверьте её подпапки — для поиска проблемной. Продолжайте эти действия, пока не найдёте папку с огромным количеством нагенерированных файлов.
Например, использование первой команды для поиска по директории /src/:
Вариант для поиска по директории /var/cache/:
В разных ситуациях для пользователей проблемными папками оказывались:
В /usr/src/ накапливалось слишком большое количество файлов, имеющих отношение к предыдущим ядрам. В /var/lib/php/sessions/ — бесконечные сессии phpMyAdmin. В /var/log/squid3/ и вообще в папке /var/log/ может накопиться огромное количество файлов с журналами от неправильно работающей программы или просто за много лет. В папке /var/cache/ может скопиться огромное количество файлов, имеющих отношение к кэшированию.
В моём случае причиной проблемы оказалась папка /var/cache/fontconfig — в этой папке постоянно накапливаются новые файлы (я не знаю, насколько это нормально) и по итогу работы за 4 годы из-за этой папке закончились иноды.
Когда проблемная папка найдена, то нужно её очистить. Скорее всего все файлы в ней не нужны (оцените это исходя из вашей ситуации). Также весьма вероятно, что файлов там астрономическое количество и их обработка может затянуться на часы, поэтому самый быстрый вариант — удалить папку целиком, а затем создать её заново. Даже при таком подходе в моём случае удаление папки /var/cache/fontconfig заняло около 10-20 минут.
Это полностью разрешило мою проблему и снизило количество используемых инод со 100% до 13%:
Ещё одна распространённая проблема — это плохие блоки в файловой системе. Со временем из-за износа дисков, файловые системы повреждаются. Ваша операционная система, скорее всего, увидит эти блоки пригодными для использования, если они не помечены иным образом. Лучший способ найти и пометить эти блоки — использовать fsck с флагом -cc. Помните, что вы не можете использовать fsck из той же файловой системы, которую тестируете. Вам, вероятно, понадобится использовать Live CD.
Очевидно, замените /dev/sda2 на имя того диска и раздела, который вы хотите проверить. Кроме того, имейте в виду, что это, вероятно, займёт много времени.
Надеюсь, одно из этих решений решило вашу проблему. Эту проблему не всегда легко диагностировать в каждом случае. Однако, если повезёт, вы сможете устранить источник проблемы и продолжить пользоваться системой без её переустановки.
Кстати, сообщение “No space left on device” может возникнуть при попытке записать файл размером более 4GB на раздел с файловой системой FAT — данная файловая система не поддерживает файлы таких больших размеров.
Источник
Просмотр свободного места на диске/разделах в Linux
В данной статье мы расскажем, как проверить свободное дисковое пространство на хосте под управлением Linux через консоль. Мы рассмотрим несколько базовых команд с помощью которых можно узнать размер не только одного диска или директории, а целого дерева каталогов. Отдельно выделим комбинированные команды для получения более детальной информации о размерах вложенных папок. В конце статьи мы приведем пример простого скрипта для мониторинга дискового пространства с отправкой уведомлением на почтовый ящик администратора.
Просмотр занятого места на разделах командой du
Выведем список дисков в системе и их размер:
В моем случае, на виртуальной машине доступен 1 диск размером 40Гб.
Чтобы получить более детальную информацию по двум разделам, которые созданы на диске, можно использовать:
В листинге команды видно, что один раздел используется под /boot, а второй под корень системы.
Перейдем к утилите, вокруг которой мы построили данную инструкцию:
df – это команда позволяет отобразить информацию о свободном/доступном месте на диске, файловой системы раздела.
Чтобы листинг команды был более читабелен, нужно использовать ее с опциями. Например:
- Filesystems – имя файловой системы
- Size – размер раздела
- Used – используемое дисковое пространство
- Avail – доступное дисковое пространство(свободное)
- Use% — занятое дисковое пространство в процентах
- Mounted on – смонтировано. Указывает директорию, к которой примонтирован раздел.
При использовании опции -h дисковое пространство выводится в Гб. Если размер меньше 1Гб, то вывод будет в Мб.
df -m – информация будет отображена в Мб.
df -k — информация будет отображена в Кб.
df -T – к выводу добавиться тип файловой системы
df -hT /boot – с данной опцией, будет предоставлена информация
Опции можно комбинировать между собой, для получения нужной информации.
Полная справка по df доступна через команду:
Получаем размеры директорий командой du
Вторая команда, которую мы рассмотрим, это du. du – команда отображающая размер директории.
Дополнительные опции для du:
- du -h – показывает информацию в читабельном формате. Можно указать путь к конкретной директории, если применить без этого, покажет информацию в текущем каталоге.
- du -sh – покажет размер директории в которой вы находитесь. Можно указать путь к директории.
- du -m – вывод информации в Мб.
- du -h —time – выведет информацию с дополнительным столбцом по времени изменения директории или файлов.
Больше информации по утилите, можно увидеть так:
При администрировании сервера, можно комбинировать вышеописанные команды. Например, выведем размер всех вложенных каталогов в /var/log и отсортируем вывод от большего к меньшему (чтобы самые большие каталоги оказались вверху списка):
# du -h /var/ | sort -rn
# du —max-depth=1 -h – выводит на экране размер вложенных директории, не дальше 1-го уровня вложенности.
Таким образом, вы легко можете определить сколько места занимают разные директории, и быстрой найти большие каталоги, которые занимают очень много места.
Bash скрипт мониторинга свободного места в Linux
Рассмотрим простой bash скрипт, для мониторинга дискового пространства на сервере и отправке email уведомления администратору, если места недостаточно.
#!/bin/bash
CURRENT=$(df / | grep / | awk ‘< print $5>‘ | sed ‘s/%//g’)
THRESHOLD=90
if [ «$CURRENT» -gt «$THRESHOLD» ] ; then
mail -s ‘Заканчивается дисковое пространство’ -r admin@example.com
При достижении заполняемости директории / до 90% к вам на почту будет отправляться уведомление. Добавьте данный скрипт в cron и мониторьте вашу систему. Можно изменить скрипт, чтобы он смотрел за размером определенного раздела или каталога.
Источник
Как исправить ошибку ‘No Space Left on Device’ (на устройстве не осталось места) на Linux, когда свободное место на самом деле есть
На жёстком диске ещё есть место, но система Linux говорит, что места не осталось и любая операция, связанная с созданием файлов, завершается ошибкой с сообщением, что места на диске нет.
Эта ситуация выглядит странной и непонятной — что нужно сделать для очистки диска, если место и так есть?
У меня такая проблема возникла на сервере в результате чего любые процессы, которые требуют создания файлов, сохранения временных файлов и даже файлов блокировки стали выдавать ошибки при запуске.
Подобная ситуация возникала на этом же сервере накануне и помогла очистка логов, очистка кэша установленных пакетов и удаление ненужных файлов. Но на следующей день ситуация повторилась, хотя места уже точно было достаточно — несколько свободных гигабайт места на диске.
Что делать, если закончилось место в Linux
Вполне возможно, что на диске действительно закончилось место, тогда вам рекомендуются следующие статьи:
Если же место на самом деле имеется, то продолжайте чтение.
Проверьте с du и df
Перед тем как начать искать проблему, давайте убедимся, что на диске действительно есть свободное место. Хотя инструменты с графическим интерфейсом хорошие, намного лучше использовать программы напрямую из командной строки.
Начнём с du. Укажем ей базовую директорию на диске у которого проблемы. Это руководство подразумевает, что проблемным диском является раздел с рутом.
Для обхода всего дерева директорий потребуется время.
Теперь попробуем с df:
Добавьте корень файловой системы (рут) и файловые системы, смонтированные под ним. Например, если у вас есть «/home» на отдельном диске, добавьте это к показанию для root. Количество занятого и свободного пространства должно получиться близко к тому, что нам показала программа du. Если это не так, это может указывать на то, что удалённые файлы используются процессами.
Главное, на что следует обратить внимание, чтобы вывод этих команд о занятом пространстве соответствовал друг другу и размеру диска. Если это не так, значит имеется проблема.
Возможные причины
Возможны разные ситуации возникновения ошибки о том, что диск переполнен, когда на самом деле на нём ещё достаточно места. Если вы видите несоответствие между выводом команд du и df, то перейдите к первому варианту решения проблемы. В противном случае начните со второго.
Удаление файлов занятых процессом
Иногда файл будет удалён, но процесс все ещё использует его. Linux не освободит хранилище, связанное с файлом, пока процесс ещё запущен. Вам просто нужно найти процесс и перезапустить его.
Попробуйте найти процесс.
Если результатов нет, то попробуйте команду:
В списке должен присутствовать процесс, вызывающий проблему, затем просто перезапустите его:
Недостаточно Инод (Inode)
Для современных файловых систем Linux есть такое понятие как иноды (“inodes”) — это набор метаданных на файловой системе. Иноды отслеживают информацию о файлах. Многие файловые системы имеют фиксированное количество инод, поэтому очень возможно занять максимальное выделенное количество без заполнения самой файловой системы. Вы можете использовать для проверки команду df:
Сравните количество существующих инод с количеством занятых. Если больше нет свободных, к сожалению, вы не можете получить больше. Выход: удалите ненужные или устаревшие файлы для очистки инод.
В нормальных условиях, даже на системах интенсивно использующих постоянное хранилище, редко происходит потребление всех инод. Как правило, исчерпание inodes сигнализирует о другой проблеме. Обычно причиной является неконтролируемое создание огромного количество файлов из-за бага в системе или в программе.
В первую очередь нужно локализовать папку, в которой возникла проблема.
Следующая команда выведет количество используемых инод каждой папкой, присутствующей в корне файловой системы:
Ещё варианты команд, которые делают это же самое (по умолчанию они настроены проверять текущую папку — это можно изменить, для этого вместо точки впишите желаемую для проверки папку:
Когда найдена папка с наибольшим количеством инод, то проверьте её подпапки — для поиска проблемной. Продолжайте эти действия, пока не найдёте папку с огромным количеством нагенерированных файлов.
Например, использование первой команды для поиска по директории /src/:
Вариант для поиска по директории /var/cache/:
В разных ситуациях для пользователей проблемными папками оказывались:
- /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/ может скопиться огромное количество файлов, имеющих отношение к кэшированию.
В моём случае причиной проблемы оказалась папка /var/cache/fontconfig — в этой папке постоянно накапливаются новые файлы (я не знаю, насколько это нормально) и по итогу работы за 4 года из-за этой папки закончились иноды.
Когда проблемная папка найдена, то нужно её очистить. Скорее всего все файлы в ней не нужны (оцените это исходя из вашей ситуации). Также весьма вероятно, что файлов там астрономическое количество и их обработка может затянуться на часы, поэтому самый быстрый вариант — удалить папку целиком, а затем создать её заново. Даже при таком подходе в моём случае удаление папки /var/cache/fontconfig заняло около 10-20 минут.
Это полностью разрешило мою проблему и снизило количество используемых инод со 100% до 13%:
Плохие блоки
Ещё одна распространённая проблема — это плохие блоки в файловой системе. Со временем из-за износа дисков, файловые системы повреждаются. Ваша операционная система, скорее всего, увидит эти блоки пригодными для использования, если они не помечены иным образом. Лучший способ найти и пометить эти блоки — использовать fsck с флагом -cc. Помните, что вы не можете использовать fsck из той же файловой системы, которую тестируете. Вам, вероятно, понадобится использовать Live CD.
Очевидно, замените /dev/sda2 на имя того диска и раздела, который вы хотите проверить. Кроме того, имейте в виду, что это, вероятно, займёт много времени.
Надеюсь, одно из этих решений решило вашу проблему. Эту проблему не всегда легко диагностировать в каждом случае. Однако, если повезёт, вы сможете устранить источник проблемы и продолжить пользоваться системой без её переустановки.
Кстати, сообщение “No space left on device” может возникнуть при попытке записать файл размером более 4GB на раздел с файловой системой FAT — данная файловая система не поддерживает файлы таких больших размеров.
Источник