Отчёты df и du показывают существенно разные результаты.

Вопрос или проблема

Я понимаю, что этот вопрос уже задавался. Но я не смог найти удовлетворительного ответа, поэтому спрашиваю снова, извините.

Итак, моя корневая файловая система – ext3, df показывает, что осталось только 3.7Г. Но du показывает, что используется только 3.5Г. lsof показывает, что есть только 3 висячих файла, которые очень маленькие.

Что еще я могу проверить?

localhost:~ # df -h
Файловая система                 Размер  Использовано Доступно Использ % Примонтировано на
devtmpfs                        63G     0   63G   0% /dev
tmpfs                           96G  168K   96G   1% /dev/shm
tmpfs                           63G  364M   63G   1% /run
tmpfs                           63G     0   63G   0% /sys/fs/cgroup
/dev/sda2                       40G   35G  3.7G  91% /
localhost:~ # du -sh -x /
3.5G    /
PRSapHana:~ # lsof -a +L1 /
КOMМАНДА    PID ПОЛЬЗОВАТЕЛЬ FD   TYPE УСТРОЙСТВО РАЗМЕР/СМЕЩ. NLINK    NODE ИМЯ
xrdp-chan 1024 root    6w   REG    8,2       67     0 2076767 /root/xrdp-chansrv.log (удален)
gnome-she 22802 root   23r   REG    8,2    24436     0 2076894 /root/.local/share/gvfs-metadata/root (удален)
gnome-she 22802 root   33r   REG    8,2    32768     0 2076896 /root/.local/share/gvfs-metadata/root-33d982e0.log (удален)

Проблема вызвана монтированием другого устройства на непустую папку.
В моем случае в /mnt есть большой файл, скажем, 30ГБ.
Если я смонтирую портативный жесткий диск на /mnt, оригинальные файлы в /mnt будут скрыты.
df все равно будет учитывать эти файлы. но du не будет.

Ответ или решение

Почему команды df и du показывают разные результаты?

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

1. Объяснение команд df и du

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

  • df (disk filesystem) отображает информацию о файловой системе, в том числе об общем размере, занятом пространстве и доступном месте. Она учитывает все файлы на разделе, даже если они удалены, но всегда занимали место на диске.

  • du (disk usage) предназначена для отображения использования дискового пространства конкретными папками и файлами. Она показывает, сколько пространства фактически занимает содержимое указанных директорий, игнорируя удаленные файлы, которые все еще «висит» и занимает место.

2. Анализ вашего случая

В вашем примере:

  • Команда df сообщает, что на корневом разделе занято 35 ГБ, из которых доступно только 3.7 ГБ.
  • Команда du показывает, что используется только 3.5 ГБ.

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

3. Причины расхождения в данных

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

  • Удаленные файлы: Как уже было упомянуто, если файл был удален, но процесс все еще использует его, то он не будет отображаться в выводе du, но будет учитываться в df. Убедитесь, что все такие файлы освобождены. Возможно, потребуется перезапустить соответствующие процессы.

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

  • Неочищенное пространство в блоках: В некоторых файловых системах (например, ext3) могут оставаться неочищенные блоки, которые были выделены удаленным файлам. Это может привести к ситуации, когда df показывает вигляд занятого пространства, тогда как du дает более оптимистичный обзор использованного пространства.

4. Что делать

Вот рекомендации, которые могут помочь решить вашу проблему и прояснить ситуацию с дисковым пространством:

  1. Проверьте монтирование: Убедитесь, что ни одна из директорий, на которые вы обращаетесь с du, не замонтирована. Используйте команду mount для просмотра всех монтированных файловых систем.

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

  3. Проверьте блоки: Воспользуйтесь командой df -i, чтобы убедиться, что не исчерпаны иноды на данной файловой системе.

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

Заключение

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

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

Капча загружается...