👨🎤 Файловая система Linux заполняется, несмотря на отсутствие больших файлов или каталогов

by itisgood

Проблема

В системе на основе Linux корневая файловая система заполняется каким-то неизвестным процессом.

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

# df -hP /
/dev/mapper/VGExaDb-LVDbSys1    ext3     30G   29G     0 100%    /

Во всей файловой системе нет больших файлов:

# find / -xdev -type f -size +100M -exec ls -lh {} \;

Во всей файловой системе нет больших каталогов:

# du -h --max-depth=1 /
42M     /sbin
13M     /etc
2.4G    /usr
45M    /tmp
451M   /var
192M   /lib
(and so on)
...

Решение

В какой-то момент два или более процессов использовали файл; например, /tmp/top.log.

Один процесс остановил свой доступ к /tmp/top.log, удалив его (на самом деле это запись каталога), а другой процесс продолжил запись в ссылку на inode, что позволило файлу продолжать расти.

Это можно увидеть в выводе: «lsof + L 1»

# lsof +L 1
COMMAND    PID      USER   FD     TYPE   DEVICE     SIZE/OFF      NLINK          NODE       NAME
top        34261    root   1W     REG   252,0       21460567592   0              1785896    /tmp/top.log (deleted)

Другие файлы были перечислены, но были намного меньше.

Это показывает, что user = root выполнял команду top, которая спулировала /tmp/top.log, и что в настоящее время нет ссылок на этот файл.

Этот буферный файл имел размер 21 Гб, но в выводе «du –h –max-depth=1 /» он не отображался, где / tmp указывалось только размером 45M.

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

1. Определите файлы в системе, которые имеют менее 1 ссылки с помощью команды:

# lsof +L 1

2. Убейте все процессы, которые пишут в любой странно большой файл в списке.

В приведенном выше примере вы должны выполнить:

# kill 34261

3. Пространство будет освобождено, когда окончательный процесс прекратит использование файла.

 

You may also like

Leave a Comment