Назад | Перейти на главную страницу

Нет места на диске, каков источник?

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             220G  220G     0 100% /
none                  1.9G  168K  1.9G   1% /dev
none                  1.9G     0  1.9G   0% /dev/shm
none                  1.9G   52K  1.9G   1% /var/run
none                  1.9G     0  1.9G   0% /var/lock
none                  1.9G     0  1.9G   0% /lib/init/rw
none                  220G  220G     0 100% /var/lib/ureadahead/debugfs

во время паники в поисках ответов спустя какое-то время использование уменьшилось

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             220G  9.3G  200G   5% /
none                  1.9G  168K  1.9G   1% /dev
none                  1.9G     0  1.9G   0% /dev/shm
none                  1.9G   52K  1.9G   1% /var/run
none                  1.9G     0  1.9G   0% /var/lock
none                  1.9G     0  1.9G   0% /lib/init/rw
none                  220G  9.3G  200G   5% /var/lib/ureadahead/debugfs

Я пока ничего не удалял, и теперь, когда я пишу это обратно,

/dev/sda1             220G   12G  197G   6% /

Что случилось?? Как я могу выяснить причину и сделать так, чтобы это больше не повторилось? Я предотвращаю повторение этого

Во время использования массажа я обнаружил, что размер папки / var был постоянным и составлял 1,8 гигабайта, но я не мог проверить все папки

редактировать поднялся до

/dev/sda1             220G   18G  192G   9% /

* обновление 2 * Он снова идет вверх

ubuntu /: df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             220G   43G  167G  21% /
none                  1.9G  168K  1.9G   1% /dev
none                  1.9G     0  1.9G   0% /dev/shm
none                  1.9G   52K  1.9G   1% /var/run
none                  1.9G     0  1.9G   0% /var/lock
none                  1.9G     0  1.9G   0% /lib/init/rw
none                  220G   43G  167G  21% /var/lib/ureadahead/debugfs

И проверяя команду, которую мне дали

ubuntu /: du -h --max-depth=1 /
31M     /boot
4.0K    /selinux
8.0K    /srv
7.4M    /bin
du: cannot access `/proc/9993/task/9993/fd/4': No such file or directory
du: cannot access `/proc/9993/task/9993/fdinfo/4': No such file or directory
du: cannot access `/proc/9993/fd/4': No such file or directory
du: cannot access `/proc/9993/fdinfo/4': No such file or directory
0       /proc
12K     /tmp
2.4G    /var
0       /sys
100K    /root
4.0K    /media
575M    /usr
4.0K    /opt
16K     /lost+found
4.5M    /home
270M    /lib
168K    /dev
4.0K    /mnt
6.7M    /sbin
6.1M    /etc
4.0K    /cdrom
3.3G    /

обратите внимание на 3.3G для /

Я думаю, что у вас есть что-то записывающее в файл, который был удален с диска, но еще не закрыт приложением / сервером, поэтому пространство остается выделенным на диске, но его не видит du поскольку файл был удален из файловой системы. В lsof программа перечисляет процессы, у которых есть открытые файлы. Если бы у вас было смонтировано больше файловых систем и их число не сильно колебалось, то я бы предположил, что у вас была файловая система, смонтированная поверх каталога, который не был пуст (хотя вы могли бы попробовать umount /var/lib/ureadahead/debugfs и убедитесь, что каталог пуст и в каталог, скрытый под этой точкой монтирования, не записано много мусора).

В этом случае их легко найти с помощью sudo lsof | grep deleted. lsof включает (deleted) в последнем столбце, если файл был удален, пока процесс еще открыт. Первый столбец - это имя команды, второй столбец - это PID. Вы можете более подробно ознакомиться с командой, используя ps например ps auxww | grep PID, или ps auxwwf | less -S чтобы увидеть список процессов в «лесном» режиме, чтобы вы могли видеть, из какого процесса пришел этот PID. После того, как вы отследите процессы, которые содержат открытые гигантские файлы, вы можете остановить его, чтобы освободить место на диске, а затем выяснить, как исправить это, чтобы правильно закрыть файл. Обычной причиной этого является сценарий logrotate, который переименовывает / удаляет файлы журнала, но не уведомляет приложение о том, что это было сделано (либо через соответствующий сигнал с kill или перезапустив приложение), поэтому приложение продолжает держать старый файл журнала открытым.

Бегать

du -h --max-depth=1 /

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

Похоже, проблема в /var/lib/ureadahead/debugfs. Похоже, это известная проблема, вот ссылка на ubuntuforums с дополнительной информацией http://ubuntuguide.net/howto-fix-ureadahead-problem-after-upgrading-to-ubuntu-10-04. Кажется, что tl; dr обновляет и обновляет, sudo mv /etc/init.d/ureadahead.conf /etc/init.d/ureadahead.conf.disabled, затем перезагрузитесь. Конечно, я предполагаю, что вы используете 10.04.

Я предполагаю, что это файлы журналов; У меня было так много предупреждений об устаревании PHP 5.3 в моих журналах Apache на сервере разработки, что я не особо обращал внимание на то, что он занимал все 8 ГБ пространства на моем разделе var (в качестве боковой панели к проблеме: вы всегда должны поместите / var в отдельный раздел, так как в корневом разделе нехватка места может вызвать проблемы с нестабильностью системы).

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

Причиной может быть огромный файл подкачки или временные файлы для какого-то приложения, которые очищаются после его обработки.

Сделать du --max-length=1 когда много места потребляется.

Если вы считаете, что ваша корневая папка занимает слишком много (3,3 ГБ), попробуйте ll -a / и опубликуйте результаты.

Похоже /var/lib/ureadahead/debugfs может быть красной селедкой. Вот почему ...

Пока /var/lib/ureadahead/debugfs действительно существует в /etc/mtab, его нет в /proc/mounts:

$ mount | grep debug
none on /sys/kernel/debug type debugfs (rw)
none on /var/lib/ureadahead/debugfs type debugfs (rw,relatime)

$ cat /proc/mounts | grep debug
none /sys/kernel/debug debugfs rw,relatime 0 0

В df похоже, что команда сообщает то же самое для /var/lib/ureadahead/debugfs и /

$ df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1             10321208   1681128   8115792  18% /
none                    830388       120    830268   1% /dev
none                    880752         0    880752   0% /dev/shm
none                    880752        60    880692   1% /var/run
none                    880752         0    880752   0% /var/lock
none                    880752         0    880752   0% /lib/init/rw
none                  10321208   1681128   8115792  18% /var/lib/ureadahead/debugfs
/dev/sdb             153899044    192068 145889352   1% /mnt

Создание файла размером 1 ГБ в /tmp:

$ dd if=/dev/zero of=/tmp/carypjunk.out bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 52.7234 s, 20.4 MB/s

Показывает размер, указанный в обоих местах:

$ df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1             10321208   2730216   7066704  28% /
none                    830388       120    830268   1% /dev
none                    880752         0    880752   0% /dev/shm
none                    880752        60    880692   1% /var/run
none                    880752         0    880752   0% /var/lock
none                    880752         0    880752   0% /lib/init/rw
none                  10321208   2730216   7066704  28% /var/lib/ureadahead/debugfs
/dev/sdb             153899044    192068 145889352   1% /mnt

Итак, похоже /var/lib/ureadahead/debugfs устройство - отвлекающий маневр, поскольку оно просто отражает статистику /. Если вам не хватает места, это связано с тем, что что-то заполняет вашу корневую файловую систему. Я бы сначала проверил ваш / var / log.

Проблема была инициирована задачей cron, выполняющей команду командной строки php каждую минуту. Код PHP, казалось, застрял в каком-то безумном цикле обнаруженных ошибок и огромного количества отладочных данных, растущих со скоростью процессора.

Поскольку выполняемый php-код занимал больше минуты, он не считал задание выполненным, он продолжал выполняться снова и снова, увеличивая скорость роста (временных?) Данных.

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

Странно то, что скрипт php устанавливает максимальное время выполнения вручную

Я проверил php.ini на предмет подсказок

; Maximum execution time of each script, in seconds
; http://php.net/max-execution-time
; Note: This directive is hardcoded to 0 for the CLI SAPI
max_execution_time = 30

; Maximum amount of time each script may spend parsing request data. It's a good
; idea to limit this time on productions servers in order to eliminate unexpect$
; long running scripts.
; Note: This directive is hardcoded to -1 for the CLI SAPI
; Default Value: -1 (Unlimited)
; Development Value: 60 (60 seconds)
; Production Value: 60 (60 seconds)
; http://php.net/max-input-time
max_input_time = 60

В нем говорится, что значения жестко запрограммированы на неограниченное количество для CLI! О_о