предыстория проблемы
Система мониторинга сервера бизнес-системы отправила раннее предупреждение о том, что уровень использования дискового пространства достиг 90%, а затем зашла на сервер для поиска относительно больших файлов журнала, все из которых были удалены (яма была зарыта здесь ), диск Некоторое место было освобождено, но это также было небрежно в то время, и не было подтверждено, было ли освобождено пространство размера обнаруженных и удаленных файлов. Через несколько дней сервер снова был предупрежден, и мне было интересно, почему журнал так быстро растет.После расследования я обнаружил, что это было вызвано большим файловым пространством, которое не было освобождено после удаления файла последней операцией.
Восстановление и решение проблемы
Найдите файлы данных, которые занимают много места
#查看磁盘空间使用情况
$ df -h
#先查询/tmp目录下占用空间较大的文件
$ du -sh /tmp/*|sort -nr|head -3
#在查询/home目录下占用空间较大的文件
$ du -sh /home/*|sort -nr|head -3
# 找到文件后,进行删除即可,删除后,使用 df -h进行查看是否已经释放
Объясните, почему при поиске файлов сначала найдите файлы в каталоге /tmp/*
Linux System Удалить политику: Linux - это не функция корзины Recycle, поэтому сервис перейдет в файл, который вы хотите удалить, система сначала будет двигаться в каталог / TMP, а затем периодически очищает данные в каталоге / TMP.
Многие серверы не дают /tmp при установке системы, поэтому большая часть данных находится в каталоге /TMP, что позволяет удалить файлы из каталога /TMP, чтобы освободить место.
На этот раз удаление файлов не освобождает место, это произошло при удалении лог-файла службы dubbo в пространстве каталога /home.
Удаление файлов не освобождает место
В обычных условиях после удаления файла пространство не освобождается, но это все же происходит, когда файл заблокирован процессом или процесс продолжает записывать данные в файл. Эту проблему можно понять, разобравшись с механизмом хранения и структурой хранения файлов в Linux.
Файл существует в системе Linux и разделен на две части:часть указателяичасть данных.
-
Указательная часть: существует в метаданных файловой системы, выполняем
rm
После того, как команда удалит данные, этот указатель очищается от метаданных. -
Часть данных: данные хранятся непосредственно на диске.Когда указатель очищается от метаданных, пространство, занимаемое частью данных, может быть перезаписано и может быть записано новое содержимое.
Причина, по которой место не освобождается после удаления файла журнала dubbo, заключается в том, что процесс dubbo все еще записывает данные в этот файл.При удалении файла указатель не очищается от метаданных, поэтому файл журнала все равно занимают место.
Как найти такие файлы
в состоянии пройтиlsof
Команда для получения списка файлов, которые были удалены, но все еще заняты программой:
lsof | grep delete
Как освободить такое пространство
Есть много способов решить этот тип проблемы по освобождению места: перезапустить занятый процесс, перезагрузить операционную систему, через команду. Первые два способа наиболее удобны для непроизводственных сред, а вот для производственных сред следует максимально использовать командный метод, на самом деле команда тоже очень простая:
echo " " >/home/dubbo/log/xxx.log
Таким образом, занятое место на диске будет освобождено, и процесс не будет затронут.
Если у вас есть какие-либо вопросы, пожалуйста, обратите внимание на публичный аккаунт [Hugh's Whiteboard] Пишите мне в личку, обсуждайте и учитесь вместе