Вопрос или проблема
Я понимаю, что этот вопрос уже задавался. Но я не смог найти удовлетворительного ответа, поэтому спрашиваю снова, извините.
Итак, моя корневая файловая система – 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. Что делать
Вот рекомендации, которые могут помочь решить вашу проблему и прояснить ситуацию с дисковым пространством:
-
Проверьте монтирование: Убедитесь, что ни одна из директорий, на которые вы обращаетесь с
du
, не замонтирована. Используйте командуmount
для просмотра всех монтированных файловых систем. -
Освободите висячие файлы: Если обнаружены висячие файлы, возможно, потребуется перезапустить процессы или систему, чтобы удалить ссылки на эти файлы.
-
Проверьте блоки: Воспользуйтесь командой
df -i
, чтобы убедиться, что не исчерпаны иноды на данной файловой системе. -
Перезагрузка: В некоторых случаях простая перезагрузка системы может помочь устранить разницу в отображении дискового пространства, освободив все висячие файлы.
Заключение
Несоответствия в выводах df
и du
являются распространенной проблемой, и их решение требует анализа различных факторов, включая монтирование файловых систем и активно исполняемые процессы. С помощью вышеперечисленных шагов вы сможете получить более четкое представление о состоянии вашего дискового пространства и устранить возникшие несоответствия.