Linux df и du не совпадает

Обновлено: 04.07.2024

Я обнаружил проблемы, кажется, нет свободного места на диске. Я использовал команды " df " и " du " для проверки, результаты следующие:

как бы очистить систему для большего дискового пространства?

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

Скорее всего, вы знаете, что можете удалить файл, который все еще используется каким-либо приложением, и для этого приложения он остается доступным. Это потому, что файловый дескриптор в / proc / filesystem остается открытым.

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

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

Это только спасло меня. Я понятия не имел, почему мой диск был полон, но дю сказал, что он был пуст. Дескриптор открытого файла для файла 8 ГБ Иногда вам нужно выполнить это как root, чтобы увидеть удаленные файлы, открытые процессами других пользователей. Основной причиной этого для меня стала неправильная спецификация файла журнала в одном из моих /etc/logrotate.d файлов. В плохой записи отсутствовала подпрограмма postrotate, из-за которой процесс-демон не отпускал свои повернутые / удаленные файлы. Как я могу удалить эти несвязанные, но открытые файлы?

Как я могу удалить ссылки? - Викас Хардиа 22 августа '14 в 5:46

Вы должны найти процесс, который содержит дескриптор файла. Воспользуйтесь командой Дмитрия Александрова, там вы увидите процесс и пид. В нашем случае и «старый» файл журнала лака стал космическим убийцей.

Не забудьте снова запустить службу или процесс, если это демон или какой-либо другой сервис на вашем компьютере. Если можете, просто перезагрузите компьютер;)

Хорошо, давайте проверим справочные страницы:

df - сообщает об использовании дискового пространства файловой системы

du - оценить использование файлового пространства

Эти два инструмента были предназначены для разных целей. Хотя df , чтобы показать использование файловой системы, du это сообщить об использовании файлового пространства. du работает из файлов, в то время как df работает на уровне файловой системы, сообщая, что ядро ​​говорит, что оно доступно. Продолжите читать du страницу поддержки man:

Суммируйте использование диска каждого ФАЙЛА , рекурсивно для каталогов.

он говорит, du работает с файлами.

df отображает объем доступного дискового пространства в файловой системе, содержащей каждый аргумент имени файла. Если имя файла не указано, отображается пространство, доступное во всех подключенных файловых системах.

У меня есть SCSI-диск на сервере (аппаратный Raid 1), 32G, ext3 filesytem. df сообщает мне, что диск заполнен на 100%. Если я удалю 1G, это будет правильно показано.

Однако, если я запустил du -h -x / , тогда du говорит мне, что используется только 12G (я использую -x из-за некоторых монстров Samba).

Итак, мой вопрос не о тонких различиях между командами du и df, а о том, как я могу узнать, что вызывает эту огромную разницу?

Не стесняйтесь спрашивать дополнительную информацию об установке.

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

Просто наткнулся на эту страницу, пытаясь отследить проблему на локальном сервере.

В моем случае df -h и du -sh не соответствует примерно 50% размера жесткого диска.

Это было отслежено, запустив lsof | grep "/var" | grep deleted , где /var был разделом, который мне нужно было очистить.

Я согласен с ответом OldTroll как наиболее вероятной причиной вашего «недостающего» пространства.

В Linux вы можете легко перемонтировать весь корневой раздел (или любой другой раздел, если на то пошло), в другое место в вашей файловой системе say /mnt, например, просто выполните

, то вы можете сделать

и посмотрите, что использует ваше пространство.

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

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

Я, наконец, решил проблему, используя lsof | grep deleted , который показал мне, какая программа содержит два очень больших файла журнала (всего 5 ГБ моего доступного корневого раздела 8 ГБ).

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

Попробуйте это, чтобы увидеть, заблокирован ли мертвый /зависающий процесс при записи на диск: lsof | grep "/mnt"

Затем попробуйте убить любые PID, которые застревают (особенно посмотрите на строки, заканчивающиеся на «(удаленные»))

Это самый простой метод, который я нашел, чтобы найти большие файлы!

Вот пример, если ваше корневое монтирование полно /(mount /root) Пример:

cd / (так что вы в корне)

ls | xargs du -hs

, то вы заметите, что store большой cd /store

и снова запустите

ls | xargs du -hs

в этом случае каталог vms представляет собой пробел.

Итак, у меня была эта проблема и в Centos 7, и я нашел решение, попробовав кучу таких вещей, как bleachbit и clean /usr и /var, хотя они показывали только около 7G. По-прежнему показывал 50G 50G, используемых в корневом разделе, но показывал только 9G использования файлов. Выиграл живой компакт-диск ubuntu и размонтировал нарушительный раздел 50G, открыл терминал и запустил xfs_check и xfs_repair на разделе. Затем я перемонтировал раздел, и мой каталог lost + found расширился до 40G. Сортировал потерянный + найденный по размеру и нашел текстовый файл журнала 38G для пара, который в результате просто повторил ошибку mp3. Убрал большой файл и теперь имеет место, а использование моих дисков соответствует размеру моего корневого раздела. Я все равно хотел бы узнать, как заставить паровой журнал не расти так сильно.

, если установленный диск является общей папкой на компьютере Windows, тогда кажется, что df покажет размер и использование диска для всего диска Windows, но du покажет только часть диска, к которой у вас есть доступ. (и монтируется). поэтому в этом случае проблема должна быть исправлена ​​на машине Windows.

Еще одна возможность рассмотреть - вы почти гарантированно увидите большое несоответствие, если используете докер, и вы запускаете df /du внутри контейнера, использующего тома. В случае каталога, смонтированного на томе на хосте docker, df будет сообщать об итогах df HOST. Это очевидно, если вы думаете об этом, но когда вы получаете отчет о «контейнере беглых контейнеров, заполняющем диск!», Убедитесь, что вы проверяете потребление файлового пространства контейнера чем-то вроде du -hs <dir> .

Для меня мне нужно было запустить sudo du , поскольку в разделе /var/lib/docker было большое количество файлов докеров, которые не-sudo user doesn ' t иметь разрешение на чтение.

Аналогичная вещь произошла с нами в производстве, использование диска составило 98%. Произошло следующее расследование:

a) df -i для проверки использования inode, использование inode составляло 6%, поэтому файлы с меньшим размером

b) Установка root и проверка скрытых файлов. Не удалось загрузить любые дополнительные файлы. Результаты du были такими же, как и до монтирования.

c) Наконец, отметьте журналы nginx . Он был настроен на запись на диск, но разработчик удалил файл журнала, в результате чего nginx сохранил все журналы в памяти. Поскольку файл /var/log/nginx/access.log был удален с диска с помощью rm , он не был виден с помощью du , но файл был доступ к коду nginx и, следовательно, он по-прежнему содержался open

У меня была та же проблема, о которой упоминается в этом разделе, но в одном VPS. Поэтому я проверил все, что описано в этой теме, но безуспешно. Это был контакт для поддержки нашего провайдера VPS, который выполнил перерасчет квот и исправил разницу в размере df -h и du-sh / .

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

Закончилось место в /var, cron начал ругаться и сыпать на почту алармы. Смотрю df -h место занято на 99%. Делаю du -hs /var места свободного как минимум 50%.

$ lsof | grep deleted
cmasm2d 3291 root 1w REG 253,1 476834734 82306 /var/spool/compaq/cma.log.1 (deleted)

и таких строк очень много.

Я нашел два способа очистить место. Перезапустить процесс держащий удаленные файлы на привязи (так я поступил с заббикс агентом) или сделать размер файла чуток поменьше.

$ ls -l /proc/3291/fd/
итого 0
lr-x------ 1 root root 64 Авг 28 12:16 0 -> /dev/null
l-wx------ 1 root root 64 Авг 28 12:16 1 -> /var/spool/compaq/cma.log.1 (deleted)
l-wx------ 1 root root 64 Авг 28 12:16 2 -> /var/spool/compaq/cma.log.1 (deleted)
lrwx------ 1 root root 64 Авг 28 12:16 3 -> /dev/hpilo/d0ccb6

cat /dev/null > /proc/3291/fd/1

Файл останется открытым, но размер у него будет 0 байт

Теперь df -h покажет более приятную глазу картинку.

Если есть еще варианты решения, буду благодарен.

Почему вообще du и df показывают разный объем доступного дискового пространства?

Вам нужно разобраться, что на самом деле делают команды du и df. du проходит по дереву каталогов, замеряя, насколько большой объем занимает каждый файл, и выдает общий объем. df просто запрашивает файловую систему об оставшемся объеме. Это выглядит как одно и то же, однако файл без записи в каталоге затронет df, но не повлияет на du.

Когда программа использует файл, а вы его удалили, файл на самом деле не удаляется из файловой системы, пока программа не прекратит его использовать. Однако файл тут же удаляется из списка каталога. Вы можете легко это видеть при помощи такой программы, как more. Предположим, что у вас имеется файл, настолько большой, что его присутствие влияет на вывод команд du и df. (Так как в настоящее время диски могут быть настолько большими, это может быть очень большой файл!) Если вы удалите этот файл в процессе работы more над ним, на команду more это не повлияет и она не сообщит, что не может просматривать файл. Запись о файле просто удалена из каталога, так что другие программы или пользователи не смогут к нему обратиться. du покажет, что файл исчез — она просматривает дерево каталогов, а файла там не будет. df показывает, что он все еще здесь, так как файловая система знает, что more все еще использует это пространство. Как только вы закончите работу с more, команды du и df придут в соответствие.

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

du-df-command

Для того, чтобы посмотреть, сколько места занимает файловая система, диск, файл или каталог, в Linux существует две команды: df и du.

Df (disk free) выводит список всех файловых систем по именам устройств с указанием размера, показывает точки монтирования и количество свободного/занятого пространства.

Если мы введем команду df без ключа, у нас получится примерно вот такой вывод

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

Список опций

Наиболее часто используется опция –h, поскольку она оказывает данные в килобайтах.

В качестве вывода получаем более понятную картину

Чтобы получить информацию о всех смонтированных файловых системах, прописываем

Получаем вывод (первые 10 строк)

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

Наш список существенно уменьшился

Можно задать файловую систему на свое усмотрение

Или указать интересующий раздел

Используя опцию –i, мы можем получить данные о состоянии inode заданной нами директории.

Утилита du (disk usage) – используется для оценки занимаемого файлового пространства. Показывает размер файлов и каталогов, как в совокупности, так и по отдельности.

Основные опции

-s, summarize – вывод суммарного итога для каждого аргумента;

Так будет выглядеть вывод при введении команды (первые десять строк)

Использование опции -а и -h выводит информацию об использовании дискового пространства файлами и каталогами в удобном для чтения формате, например, в кило-, мегабайтах и т.д.

Проверяем, сколько места у нас занимает каталог dir1

Получаем вывод в килобайтах

С помощью этой команды можем посмотреть дату создания/изменения файлов и каталогов

Важно! Если не ввести ключи –а или –s, выдается информация только о размерах каталогов.

Хотите изучить Linux от А до Я? Записывайтесь на наши авторские курсы по Linux администрированию. Обещаем – будет еще интереснее, сложнее и познавательнее!

Читайте также: