Диск медленно заполняется, но видимых изменений размера файла нет

16

Д.Ф.

 Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/vda1       30830588 22454332   6787120  77% /
none                   4        0         4   0% /sys/fs/cgroup
udev             1014124        4   1014120   1% /dev
tmpfs             204996      336    204660   1% /run
none                5120        0      5120   0% /run/lock
none             1024976        0   1024976   0% /run/shm
none              102400        0    102400   0% /run/user

Эти 77% были только 60% вчера, и через несколько дней они заполнятся до 100%.

Я уже некоторое время слежу за размерами файлов:

sudo du -sch /*


9.6M    /bin
65M     /boot
224K    /build
4.0K    /dev
6.5M    /etc
111M    /home
0       /initrd.img
0       /initrd.img.old
483M    /lib
4.0K    /lib64
16K     /lost+found
8.0K    /media
4.0K    /mnt
4.0K    /opt
du: cannot access ‘/proc/21705/task/21705/fd/4’: No such file or directory
du: cannot access ‘/proc/21705/task/21705/fdinfo/4’: No such file or directory
du: cannot access ‘/proc/21705/fd/4’: No such file or directory
du: cannot access ‘/proc/21705/fdinfo/4’: No such file or directory
0       /proc
21M     /root
336K    /run
12M     /sbin
8.0K    /srv
4.1G    /swapfile
0       /sys
4.0K    /tmp
1.1G    /usr
7.4G    /var
0       /vmlinuz
0       /vmlinuz.old
14G     total

Это дает мне (более или менее) одни и те же цифры каждый день. Это 14G всего меньше половины размера диска. Куда идут остальные?

Мои знания Linux не намного глубже.

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

nizzle
источник
1
7,4 G для вас /varкажется мне необычайно большим. Я подозреваю, что файл журнала заполняется быстро.
Йос
4
Любые удаленные файлы? Что lsof -b 2>/dev//null | grep deleted(выходные данные могут быть довольно большими, итеративно отбрасывать записи, которые кажутся нормальными)
muru
@muru да куча файлов показывается именно так. Что это означает? Где они? Как мне это почистить?
Nizzle
2
Перезагрузка должна очистить многие из них. Это просто файлы, открытые различными процессами, которые затем были удалены. Нормально иметь их, но если один из них станет слишком большим, у вас не будет простого способа определить его, используя du.
Муру
1
Обратите внимание, что вы можете задать второй вопрос о том, что не так с вашим logrotate.conf, так как apache должен быть настроен на закрытие файлов, когда происходит регистрация, и т. Д. Я говорю это, потому что перезагрузка решает проблему сейчас, но если я что-то упустил, ваш проблема должна периодически повторяться, и необходимость перезагрузки когда-либо недели - печаль. [Я бы предложил, если это произойдет периодически, посмотрев, перезапускает ли служба httpd (или перезагружает) снова временно проблему
Foon

Ответы:

28

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

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

lsof -b 2>/dev/null | grep deleted

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

Перезагрузка должна исправить это, но если вы не хотите перезагружаться, проверьте соответствующие приложения (первый столбец в lsofвыводе) и перезапустите или закройте разумно выглядящие.

Если вы когда-нибудь увидите что-то вроде:

zsh   1724   muru   txt   REG   8,17   771448   1591515  /usr/bin/zsh (deleted)

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

Файлы в /dev/shmявляются объектами с общей памятью и не занимают много места на диске (я думаю, самое большее число инодов). Их также можно безопасно игнорировать. Названные файлы vteXXXXXXявляются файлами журнала из эмулятора терминала на основе VTE (например, GNOME Terminal, Terminator и т. Д.). Они могут быть большими, если у вас открыто окно терминала с большим количеством (и я имею в виду много ) выводимых материалов.

Мур
источник
1
В системе OP весь / dev является точкой монтирования udev, поэтому ничто из этого не занимает места в основной файловой системе. Более того, / dev / shm обычно так или иначе реализован как tmpfs, который также является просто точкой монтирования, поэтому отдельные файлы в нем даже не занимают место в каталоге.
Кевин
3

Чтобы добавить к отличному ответу от muru:

  • df показывает размер на диске,
  • и du показывает общий размер содержимого файлов.

Может быть, с du вы не видите появления множества маленьких файлов ... (посмотрите на последний столбец df -iи посмотрите, не увеличивается ли количество inode (то есть файлов) со временем)

Если у вас есть, скажем, 1'000'000 (1 млн.) Крошечных 1-байтовых файлов, то duбудет считаться, что всего 1'000'000 байт, скажем, 1 Мб (... пуристы, пожалуйста, не передергивайте)

Но на диске каждый файл состоит из 2 вещей:

  • 1 индекс (указывающий на данные файла), и этот индекс может сам по себе быть 16 КБ (!),
  • И данные каждого файла (= содержимое файла) помещаются на дисковые блоки, и эти блоки не могут содержать несколько данных файла (обычно ...), поэтому ваш 1 байт данных будет занимать как минимум 1 блок

Таким образом, миллион файлов 1-байтовых файлов будет занимать 1'000'000'000 * size_of_a_blockобщее пространство для данных, плюс 1'000'000'000 * size_of_an_inodeразмер inode ... Это может составлять несколько ГБ использования диска для 1 миллиона "1-байтовых" файлов.

Если у вас есть блоки размером 1024 байта и еще 256 байтов размера inode, ваши файлы размером 1 000 000 будут иметь размер duпримерно 1 МБ, но на диске они будут равны примерно 1,25 ГБ (как видно df)! (или даже 2 ГБ, если каждый инод также должен быть на 1 выделенном блоке диска ... Я не знаю, так ли это)

Оливье Дюлак
источник
1
Если вы явно не используете опцию ( -bили --apparent-size), которая указывает duпоказывать видимый размер файла, duфактически всегда будет отображаться размер на диске файла (общее количество используемых блоков, умноженное на размер блока). Фактически это может быть больше (в обычном случае) или меньше (в случае разреженных файлов), чем видимый размер файла.
Джонатан Каллен