df говорит, что диск заполнен, но это не так

58

На виртуализированном сервере под управлением Ubuntu 10.04 df сообщает следующее:

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             7.4G  7.0G     0 100% /
none                  498M  160K  498M   1% /dev
none                  500M     0  500M   0% /dev/shm
none                  500M   92K  500M   1% /var/run
none                  500M     0  500M   0% /var/lock
none                  500M     0  500M   0% /lib/init/rw
/dev/sda3             917G  305G  566G  36% /home

Это озадачивает меня по двум причинам: 1.) df говорит, что / dev / sda1, смонтированный в /, имеет емкость 7,4 гигабайта, из которых используется только 7,0 гигабайта, но сообщает / заполнен на 100 процентов; и 2.) Я могу создавать файлы на /, так что у него явно есть свободное место.

Возможно, уместно, что каталог / www является символической ссылкой на / home / www, который находится в другом разделе (/ dev / sda3, смонтирован в / home).

Кто-нибудь может предложить предложения о том, что может происходить здесь? Сервер, кажется, работает без проблем, но я хочу убедиться, что нет проблем с таблицей разделов, файловыми системами или чем-то еще, что позже может привести к взрыву (или взрыву).

Крис
источник
Спасибо всем за полезные ответы. Я не могу создавать файлы как обычный пользователь, поэтому кажется, что это 5-процентный буфер, который предотвращает катастрофу. Теперь мне просто нужно выяснить, почему диск заполнен (я немного волнуюсь, что может произойти что-то вредоносное, потому что ни один из файлов журнала не занимает столько места и не установлено много программного обеспечения, просто простой сервер LAMP) ...
Крис
3
Первое место, куда я посмотрю, это / tmp. Другая возможность состоит в том, что у вас есть удаленный файл, за который держится работающая программа. Я думаю, что вы можете запустить 'lsof | grep удалил 'как root, чтобы найти их.
Скотт

Ответы:

103

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

Вы можете проверить это с sudo lsof +L1

mkomitee
источник
8
Это раскрыло тайну для меня. Я удалил большой файл журнала из uwsgi без перезапуска службы. При запросе df -ahя заполнил диск, но du -sh /сообщает, что у меня должно быть свободное место. После ретарта uwsgi у меня появилось много свободного места!
Фабио Монтефусколо
У меня были журналы на 40G, застрявшие в подвешенном состоянии, и lsof + L1 дал мне рентгеновское зрение, чтобы увидеть, что произошло ;-) Все, что мне нужно было сделать, это перезапустить службу.
PJ Brunet
46

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

Если у вас есть демоны, которые запускаются как пользователь без полномочий root, но которым необходимо управлять файлами в этой файловой системе, все пойдет не так. Один из распространенных таких демонов named. Другой есть ntpd.

Дэвид Шварц
источник
1
На вопрос, ПОЧЕМУ ваш диск заполнен, 7G на самом деле не так много места. Похоже, вы также выбросили все в один раздел / файловую систему ( /). Обычно это считается плохой вещью (потому что если что-то пойдет наперекосяк /, а мир кончается), но дистрибутивы Linux все еще продолжают это делать, потому что это «проще». Я бы начал с поиска /var(особенно /var/log) огромных лог-файлов. du -hs /(как root) поможет вам найти самые большие каталоги и, возможно, укажет вам, что нужно очистить.
voretaq7
35

Вы можете быть вне inodes. Проверьте использование inode с помощью этой команды:

df -i
Клиффорд Илкай
источник
17

Большинство файловых систем Linux резервируют 5% пространства для использования только пользователем root.

Вы можете увидеть это, например, с

dumpe2fs /dev/sda1 | grep -i reserved

Вы можете изменить зарезервированную сумму, используя:

tune2fs -m 0 /dev/sda1

В большинстве случаев сервер будет работать нормально - при условии, что все процессы выполняются как «root».

Дэвид Гудвин
источник
8

У меня была эта проблема, и я был сбит с толку тем фактом, что удаление различных больших файлов не улучшило ситуацию (не знал о 5% буфере) в любом случае, следуя некоторым подсказкам здесь

Из корня спустились самые большие каталоги, обнаруженные при повторном выполнении:

du -sh */ 

пока я не пришел каталог для файлов журналов веб-сервера, который имел несколько абсолютно массивных журналов

с которой я обрезал

:>lighttpd.error.log

внезапно df -h был использован до 48%!

zzapper
источник
14
Это должно действительно закончиться словами "... тогда я настроил ротацию логов".
Hayalci
hayalci: обнаружил, что logrotation указывает на неправильный каталог.
zzapper
8

В дополнение к уже предложенным причинам, в некоторых случаях это может быть также следующее:

  • другой диск монтируется «поверх» существующей папки, которая полна данных
  • du подсчитает размер потраченного монтированного диска, а df покажет реально потраченный
  • Решение: (когда это возможно) размонтируйте все диски без полномочий root и проверьте размер du -md 1снова. Исправьте ситуацию, переместив скрытую папку в другое место или смонтировав ее в другом месте.
Роберт Лужо
источник
как вы находите точки монтирования кроме df?
Хоган
@ Хоган: может быть, поможет вызов "mount" или "cat / etc / fstab"?
Роберт Лудзё
5

df -hокругляет значения. Даже проценты округлены. Опусти то -hи увидишь более мелкозернистые различия.

Ой. И ext3 и производные резервируют процент (по умолчанию 5%) для файловой системы именно для этого проблемного созвездия. Если ваша корневая файловая система действительно заполнена (осталось 0 байт), вы не сможете загрузить систему. Таким образом, зарезервированная часть предотвращает это.

mailq
источник
Возможно также, что у него закончились свободные иноды. Запустите 'df -i', чтобы получить использование inode.
Эндрю Кейс
Он не предоставил информацию о том , что диск является полным. Он только думает, что диск заполнен. 100% используемого пространства без ошибок только «практически заполнено».
mailq
1

Я сделал большое обновление нескольких библиотек, и там было много ненужных библиотек и временных файлов, поэтому я освобождаю место в папке "/", используя:

apt-get install -f
sudo apt-get clean

И опустошить свой мусор

aburbanol
источник
Это разумный общий совет по сокращению использования диска, но он не затрагивает вопрос о том, почему df говорит, что диск заполнен, а его нет.
Эндрю Шульман
0

проверьте / lost + found, у меня была система (centos 7) и часть файла в / lost + found исчерпала все пространство

Джуд Чжу
источник
0

Если ваш раздел - btrfs, возможно, есть дополнительный объем, занимающий место. Файловая система btrfs может иметь много подразделов, только один из которых смонтирован. Вы можете использовать, btrfs subvolume list <dir>чтобы перечислить все подобъемы и btrfs subvolume delete <dir>/<subvolume>удалить один. Убедитесь, что вы не удаляете тот, который установлен по умолчанию.

user377486
источник