У меня есть файловые серверы, которые используются для хранения файлов. Файлы могут храниться там неделю или год. К сожалению, когда я удаляю файлы с сервера, команда df не отражает освободившееся место. В итоге сервер заполняется (df показывает 99%), и мой скрипт больше не отправляет туда файлы, хотя там может быть несколько десятков ГБ свободного места. У меня есть флаг «noatime» на смонтированных разделах, если это имеет какое-то значение.
Ответ 1
Удаление файла не освободит место, пока вы не удалите процессы, у которых есть открытые дескрипторы к этому файлу. Тем не менее вы можете освободить место, не завершая процессы. Все, что вам нужно сделать, — это удалить дескрипторы файлов. Сначала выполните команду lsof | grep deleted, чтобы определить процесс, в котором находится файл:
[hudson@opsynxvm0055 log]$ /usr/sbin/lsof |grep deleted
java 8859 hudson 1w REG 253,0 3662503356 7578206 /crucible/data/current/var/log/fisheye.out (deleted)
Затем выполните:
cd /proc/PID/fd
И в итоге:
[hudson@opsynxvm0055 fd]$ ls -l |grep deleted
total 0
l-wx------ 1 hudson devel 64 Feb 7 11:48 1 -> /crucible/data/current/var/log/fisheye.out (deleted)
«1» будет дескриптором файла. Теперь введите «> FD», чтобы освободить это место.
> 1
Вам может потребоваться повторить операцию, если файл находится в других процессах.
Ответ 2
Одна из возможностей заключается в том, что удаленный файл (файлы) имеет больше ссылок в файловой системе. Если вы создали жесткие ссылки, несколько имен файлов будут указывать на одни и те же данные, и данные (фактическое содержимое) не будут помечены как свободные/используемые, пока все ссылки на них не будут удалены. Прежде чем удалять файлы, либо просмотрите их (Entry с именем Links), либо сделайте ls -l (должен быть второй столбец).
Если окажется, что на файлы есть ссылки в других местах, я полагаю, вам придется выполнить ls -i для файла(ов), чтобы найти номер inode, а затем выполнить find с -inum <номер inode>, чтобы найти другие ссылки на этот файл (вероятно, вы также захотите использовать -mount, чтобы оставаться в пределах одной файловой системы).
Ответ 3
Если вы удаляете файл, а место не освобождается, это обычно связано либо с тем, что файл все еще открыт, либо с наличием других жестких ссылок на него.
Чтобы помочь в устранении неполадок, используйте инструмент, который подскажет вам, куда расходуется место на диске; для этого вы можете использовать du. Еще лучше использовать графический инструмент xdiskusage (их много) для поиска решения. xdiskusage и другие инструменты позволяют просмотреть самые большие «засорители» пространства и найти, куда уходит место.
Таким образом, вы быстро найдете файлы, которые все еще занимают место из-за второй жесткой ссылки. Он также покажет место, занятое удаленными, но открытыми файлами (как permission denied, я полагаю, поскольку он не сможет прочитать имя файла).
Ответ 4
Одна из причин нехватки дискового пространства (сценарий, с которым я только что столкнулся сам, потому что я, очевидно, не сделал то, что обычно делаю при создании нового массива), заключается в следующем... Обычно я освобождаю все доступное дисковое пространство, а также 5%, зарезервированные для root (tune2fs -m0), поскольку это однопользовательская файловая серверная система. Однако внезапно я получил отсутствие свободных байт, согласно df, но разница между общим и используемым пространством говорила о другом.
Поскольку я был уверен, что освободил те 5%, которые зарезервированы по умолчанию в Fedora (и имел несколько пустых папок вместо файлов, которые я только что скопировал... или думал, что скопировал), я начал отчаянно искать способ решить эту проблему, перезагружаясь, пробуя «lsof» и тому подобные вещи.
Затем наконец я решил запустить tune2fs -m0 на файловой системе, хотя я был уверен, что причина не в этом — но она была! Чуть больше 400 ГБ стало доступно, как и должно быть. Да, я знаю... моя ошибка, но тем не менее мой ответ может оказаться полезным для других, кто забыл об этом зарезервированном пространстве или твердо уверен, что освободил его.
Ответ 5
Если раздел был настроен на резервирование определенной части дискового пространства только для корневого использования, df не будет включать это пространство как доступное.
[root@server]# df -h
Filesystem Size Used Avail Use% Mounted on
...
/dev/optvol 625G 607G 0 100% /opt
Даже после того как место будет восстановлено путем удаления файлов/каталогов, пользователь не root не сможет записывать на определенный раздел.
Вы можете легко проверить, так ли это в вашем случае, попробовав создать файл на устройстве от имени пользователя root и от имени пользователя non-root.
Кроме того, вы можете проверить конфигурацию файловой системы, выполнив команду:
tune2fs -l <device> | egrep "Block count|Reserved block count
и вычислить фактический % самостоятельно. Чтобы изменить % диска, зарезервированного для использования только root, выполните команду:
tune2fs -m <percentage> <device>
Linux