Linux не видит свободное место

Обновлено: 04.07.2024

У меня есть файловые серверы, которые используются для хранения файлов. Файлы могут находиться там в течение недели или года. К сожалению, когда я удаляю файлы с сервера, df команда не отражает освободившееся пространство. В итоге сервер заполняется ( df показывает 99%), и мой сценарий больше не отправляет туда файлы, за исключением того, что там может быть несколько десятков ГБ свободного места.

Я получил noatime флаг на смонтированных разделах, если это что-то меняет.

Это происходит на одном разделе или на всех разделах? Ну, это происходит в моем основном разделе данных, который является единственным, о котором я забочусь, так как я только записываю / удаляю файлы на него. Пожалуйста, сообщите мне решение или ссылку на него. Какая файловая система (ы)? DF выполняет статистику суперблока, возможно, ваша файловая система не обновляет инод sb. Вы пробовали очистить кеш?

Удаление имени файла фактически не удаляет файл. Какой-то другой процесс удерживает файл открытым, не позволяя удалить его; перезапустите или убейте этот процесс, чтобы освободить файл.

чтобы выяснить, какой процесс использует удаленный (несвязанный) файл.

К удаленным файлам не обращались более месяца, и единственный процесс, который обращается к ним, - это nginx, так что это сомнительно. +1. Кроме того, «lsof + L1» скажет вам, какая программа держит файлы открытыми. Запустив от имени root команду «lsof -n | grep file», вы будете удивлены тем, как долго файлы могут задерживаться из-за процессов, которые по какой-то причине поддерживают их открытыми. Если ничего не помогает, перезагрузите компьютер, я чувствую себя плохо, предлагая это, но он определенно удостоверится, что ничто не держит файл. С другой стороны, lsof + L1, вероятно, лучший путь. Вы только что спасли меня! Удалил файл журнала 93G, не вернул место и не мог понять почему. Благодарю. В том же духе, и в случае, если это поможет другим, я удалил большой файл nginx access.log, но смог освободить место только после перезапуска nginx: service nginx restart

как упоминает Игнасио, удаление файла не освободит место до тех пор, пока вы не удалите процессы, которые имеют открытые дескрипторы для этого файла.

Тем не менее, вы можете восстановить пространство, не убивая процессы. Все, что вам нужно сделать, это удалить дескрипторы файлов.

Сначала выполните lsof | grep удален, чтобы идентифицировать процесс, содержащий файл

«1» будет дескриптором файла. Теперь введите "> FD", чтобы освободить это пространство

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

у этой > команды есть имя? Мне пришлось переключиться с Zsh на Bash, чтобы иметь возможность использовать его. Можно ли запустить его на Zsh? это перенаправление вывода и, следовательно, усечение файла. Длинна from будет "echo -n> 1" или "true> 1". Он не удаляет FD, а просто указывает на пустой файл.

Одна возможность состоит в том, что удаленные файлы имеют больше ссылок в файловой системе. Если вы создали жесткие ссылки, несколько имен файлов будут указывать на одни и те же данные, и данные (фактическое содержимое) не будут помечены как свободные / пригодные для использования, пока все ссылки на них не будут удалены. Прежде чем удалять файлы, либо укажите их (запись с именем Links), либо выполните для них команду ls -l (это должен быть второй столбец).

Если выясняется, что на файлы есть ссылки в другом месте, я думаю, вам придется ls -i файл (ы), чтобы найти номер inode, а затем выполнить поиск с помощью -inum <inode-number>, чтобы найти другие ссылки на этот файл (возможно, вы также захотите использовать -mount, чтобы остаться в той же файловой системе).

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

Запустите sudo lsof | grep deleted и посмотрите, какой процесс содержит файл. Пример результата:

Убить процесс с помощью sudo kill -9 . В приведенном выше примере PID составляет 1623.

Запустите, df чтобы проверить, освободилось ли место. Если он все еще заполнен, возможно, вам нужно подождать несколько секунд и проверить еще раз.

Если раздел настроен на резервирование определенной части дискового пространства только для использования root, df не будет включать это пространство как доступное.

Даже после освобождения места путем удаления файлов / каталогов, пользователь без полномочий root не сможет писать в определенный раздел.

Вы можете легко проверить, так ли это, попытавшись создать файл на устройстве как пользователь root и не пользователь root.

Кроме того, вы можете проверить конфигурацию файловой системы, запустив

и рассчитать фактический% самостоятельно.

Чтобы изменить% диска, зарезервированный для использования только в корне, выполните

Другие ответы верны: если вы удаляете файл, а пространство не освобождается, это обычно либо потому, что файл все еще остается открытым, либо на него есть другие жесткие ссылки.

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

Таким образом, вы быстро найдете файлы, которые все еще занимают место из-за второй жесткой ссылки. Он также покажет пространство, занимаемое удаленными, но открытыми файлами (я считаю, что (разрешение запрещено), поскольку он не может прочитать имя файла).

Так как я знаю, что многие из вас делают это для redhat /var и gzip-файлов, ожидая сокращения FS, но вместо этого она увеличивается, просто убедитесь, что вы перезапускаете syslog службы. а также

покажу вам это в любом случае.

Это на самом деле не добавляет много; принятый ответ покрывал логику этого в 2001 году. Если у вас есть 50 представителей, используйте комментарии, если вы хотите добавить квалификаторы к существующим ответам.

Еще один вариант: диск может быть заполнен из-за процесса, который постоянно создает данные: журналы, ядра и тому подобное. Возможно, что пространство на самом деле освобождается, но сразу же заполняется. Я действительно видел такой случай. df в этом случае просто не дает картину дыры. Используйте, du чтобы узнать больше.

Я использую EXT2, FSCK помог мне в этой ситуации. Попробуйте shudown -F сейчас, после некоторых перезапусков и fscks, я вижу половину используемого пространства.

Уважаемый Марцелл, ваше решение заключено в принятом ответе; и иногда вы не хотите делать перезагрузку, если вас не принуждают .

Чтобы проверить, какие удаленные файлы заняли память, введите команду

Он покажет удаленные файлы, которые содержат память.

Затем убейте процесс с помощью pid или name

проверьте сейчас у вас будет такая же память

Если нет, введите команду ниже, чтобы увидеть, какой файл занимает память

укажите любой размер, который покажет, какие файлы занимают размер выше порогового, и удалите файл, в котором останется память

открыть терминал, попробуйте эту команду df -Th, затем используйте эту команду sudo du -h --max-deep = 1 / в этой команде вы найдете подробности использования диска, затем откроете, как пользователь root удалит файл (root-local-share-trash) и удали свой файл

Эта ситуация выглядит странной и непонятной — что нужно сделать для очистки диска, если место и так есть?

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

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

Что делать, если закончилось место в 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 на имя того диска и раздела, который вы хотите проверить. Кроме того, имейте в виду, что это, вероятно, займёт много времени.

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

GenuZ

По-умолчанию файловая система ext4 резервирует под служебные нужды 5% свободного места на разделе. На больших дисках это бывает много. Изменить такое поведение можно, сказав в терминал подмонтированному разделу:
tune2fs -m 1 /dev/sda1
где 1 - количество резервируемого места в процентах (0% тоже можно), а /dev/sda1 - раздел, к которому это применить

Эффект немедленный и без перезагрузок.

Также после этого можно слегка дефрагментировать этот смонтированный раздел:
e4defrag /dev/sda1

Не нашёл полностью правильный ответ, поэтому напишу его.

Второй комментарий в ответе, помеченном, как решение.
Ваш ответ аналогичный + дополнение про дефрагментацию.

GenuZ

Даже предложенный в лучшем ответе mkfs.ext4 -N500000 -m0 /dev/sdb1 форматирует раздел (удаляя данные). Да и эта команда выставляет не настройки резервной области, а лишь количество inodes (в этой резервной области).
А это не помогает освободить занятое резервом свободное место, а лишь решает проблему отсутстия inodes под много мелких файлов (когда место есть, а файл не создать).

Во втором комментарии ответа, отмеченного как решение:
Таблицу inode'ов без переформатирования изменить нельзя, процент зарезервированного места можно изменить до 0 командой tune2fs -m0 /dev/sda1.

Здесь точна та же команда tune2fs -m , что и у вас.

Ваш ответ хороший и развернутый, а xibir помог мне разобраться в причинах и в комментарии подсказал то же самое решение.

planarik
А как посмотреть размер блока? Я знаю, что размер физического блока на диске 512 байт (/sys/block/sdb/queue/physical_block_size, logical_block_size). Размер экстента в LVM-томе 4МБ, ext4 создавал с параметрами по умолчанию. Диск сделал GPT; раздел на диске создавал с отступом 2048 секторов (т.е. 1 МБ), иначе parted ругался.

TheSpbra1n
Компьютер - дома, я сейчас на работе. Начал искать возможные решения - видел упоминания под резерв под root. Как проверить - не знаю. Логично было бы, чтобы этот резерв был только на системном диске.

Большую часть места занимают большие файлы (фильмы, музыка). Файлов до нескольких килобайт немного.

In Windows, контролировать свободное место на жестких дисках и SSD довольно просто. В Linux, правда, не намного сложнее, чем в Microsoftоперационной системы, но мы должны четко понимать, как это делается. Что касается большинства задач, мы можем найти несколько способов сделать это в Linux, либо через терминал или через приложения с графический интерфейс .

Жесткие диски в Linux

Проверьте свободное место в Linux из Терминала

Используйте команду df -h

Освободи Себя Команда DF является одним из самых простых, которые мы можем использовать в терминале. Эта команда происходит от названия «disk-free», поэтому ее цель - показать нам, сколько свободного места у нас есть на наших жестких дисках, и точки подключения в любой системе Linux.

Для этого нам нужно открыть терминал и выполнить в нем следующую команду:

Эта команда покажет нам свободное место в данных, которые мы можем прочитать, например, в МБ и ГБ.

Espacio libre Linux - df

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

Проверьте размер каждого каталога с помощью du -h

Освободи Себя du command это инструмент, в некотором роде похожий на предыдущий. С его помощью мы сможем контролировать пространство, которое мы занимаем на диске нашего Linux, но другим способом. В то время как df фокусируется на показе свободного места в каждой точке монтирования, du (использование диска) показывает нам размер каждого из каталогов на нашем диске.

Мы можем запустить этот инструмент с помощью:

Espacio libre Linux - du

Информация выходит в кучу, поэтому наша задача - поискать интересующие нас каталоги, чтобы узнать, сколько они занимают.

NCurses, более полный для терминала

Использование диска NCurses представляет собой полноценный анализатор диска, который запускается из терминала, но имеет собственный интерфейс. Этот инструмент позволит нам увидеть все каталоги на нашем жестком диске и размер, который каждый из них занимает. Кроме того, мы можем перемещаться по дереву каталогов, чтобы увидеть размер вложенных папок, и даже увидеть список файлов, которые занимают больше всего.

Espacio libre Linux - ncdu

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

Мы должны скачать его вручную из здесь (есть скомпилированная версия, которую нам не нужно компилировать самостоятельно) и запустить ее.

Программы для контроля доступного места на жестком диске

Дисковый анализатор

Один из инструментов с графическим интерфейсом, который мы можем найти для Linux, - это дисковый анализатор . Этот инструмент является частью рабочего стола GNOME, поэтому мы можем найти его установленным по умолчанию в любом дистрибутиве, который использует этот рабочий стол, например Ubuntu.

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

Espacio libre Linux - Анализатор дискотек Gnome 1

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

Espacio libre Linux - Анализатор дискотек Gnome 2

Espacio libre Linux - Анализатор дискотек Gnome 3

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

Espacio libre Linux - Анализатор дискотек Gnome 4

Дисковая утилита GNOME

Другой способ увидеть свободное место на жестких дисках, намного более простой, чем предыдущий, - использовать рабочий стол GNOME. дисковая утилита. Эта утилита в первую очередь предназначена для быстрой работы с разделами, форматирования дисков, а также для монтирования и размонтирования дисков. Но это также очень быстрый способ узнать, сколько места мы занимаем и доступно, хотя и менее детально, чем предыдущий.

Мы будем искать «Диски» в средстве запуска приложений дистрибутива, и мы сможем увидеть окно, подобное следующему.

Espacio libre Linux - дискотеки Herramienta

В этом окне мы можем подробно увидеть все разделы, и если мы выберем один из них, мы сможем увидеть пространство, которое мы занимаем, и сколько гигабайт у нас осталось.

QDirStat, самый полный

QDirStat является преемником KDirStat, и его разработка была сосредоточена на устранении всех зависимостей KDE, чтобы быть полностью независимой программой, использование которой не подразумевает установку всего рабочего стола. У этой программы очень простой интерфейс, в котором мы сможем найти все точки монтирования нашего Linux.

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


Эта программа обычно входит в основные репозитории, поэтому для ее установки нам просто нужно запустить в терминале:

Читайте также: