разница между du и df

<p>у меня есть файловый сервер, где df сообщает о 94%/full. но по словам дю, гораздо меньше используется:</p><pre><code># df -h / filesystem size used avail use% mounted on /dev/sda3 270g 240g 17g 94% / # du -hxs / 124g / </code></pre><p>я читал, что открытые, но удаленные файлы могут быть ответственны за это, но перезагрузка не исправила это.</p><p>это linux, ext3.</p><p>с уважением</p>

<p>хорошо, нашел это.</p><p>у меня была старая резервная копия в/mnt/backup <strong>в той же файловой системе</strong>, а затем в этом месте был смонтирован внешний диск. так что дю не видел файлы. таким образом, очистка вернула мне место на диске.</p><p>вероятно, так и было: внешний диск был размонтирован во время выполнения сценария ежедневного резервного копирования.</p>

<p>я не думаю, что вы найдете более подробное объяснение, которое тогда <a href="http://linuxshellaccount.blogspot.com/2008/12/why-du-and-df-display-different-values.html">эта ссылка</a> по всем причинам, по которым оно может быть отключено. некоторые основные моменты, которые могут помочь:</p><ul> <li> <p>каково ваше использование инода, если оно почти на 100% может испортить ситуацию:</p> <p>df -i</p> </li> <li> <p>какой у тебя размер блока? множество маленьких файлов и большой размер блока могут немного исказить его.</p> <p>sudo tune2fs -l/dev/sda1 | grep 'размер блока'</p> </li> <li> <p>удаленные файлы, вы сказали, что исследовали это, но чтобы получить общее пространство, вы могли бы использовать следующий конвейер (мне нравится находить вместо lsof только потому, что lsof - боль в разборе):</p> <p>sudo find/proc/*/fd -printf "% l\t% s\n" | grep удален | cut -f2 | (tr '\ n' +; echo 0) | до н.э</p> </li> </ul><p><strong> однако это почти вдвое меньше. запустите fsck для раздела, пока он отключен, чтобы быть безопасным. </strong></p>

<p>это похоже на случай удаления файлов, в то время как процессы все еще имеют их открытыми. это разъединение происходит потому, что команда du суммирует пространство файлов, существующих в файловой системе, а df показывает блоки, доступные в файловой системе. блоки открытого и удаленного файла не освобождаются, пока этот файл не будет закрыт.</p><p>вы можете узнать, какие процессы открыли, но удалили файлы, изучив/proc</p><pre><code>find /proc/*/fd -ls | grep deleted </code></pre>

<p>наиболее вероятной причиной в вашем случае является то, что у вас много очень маленьких файлов (меньше, чем размер вашего блока на диске). в этом случае df сообщит сумму всех используемых блоков, тогда как du сообщит фактическую сумму размеров файлов.</p>

<p>я согласна с тем что</p><pre><code>lsof +l 1 /home | grep -i deleted </code></pre><p>это хорошее место для начала, в моем случае я заметил, что у меня было много скриптов perl, которые работали, и поддерживали много файлов, даже если они должны были быть удалены.</p><p>я убил perl-функции, и это сделало <code>du</code> и <code>df</code> практически идентичными, случай закрыт.</p>

<p>по умолчанию, когда вы форматируете файловую систему с ext3, 5% диска зарезервировано для root. df учитывает этот резерв, когда сообщает, что доступно, а du показывает, что на самом деле используется.</p><p>вы можете просмотреть зарезервированные блоки, выполнив:</p><blockquote> <p>tune2fs -l/dev/sda | grep -i резерв</p> </blockquote><p>и вы получите что-то вроде:</p><pre><code>reserved block count: 412825 reserved gdt blocks: 1022 reserved blocks uid: 0 (user root) reserved blocks gid: 0 (group root) </code></pre><p>если вы хотите установить более низкий процент, вы можете сделать это с помощью чего-то вроде</p><blockquote> <p>tune2fs -m 1/dev/sda</p> </blockquote><p>вы можете уменьшить его до 0, однако, поскольку это ваша корневая файловая система, я бы с осторожностью это сделал. если файловая система фактически заполнена, это может усложнить задачу обслуживания, необходимую для ее очистки.</p>

<p>возможно ли, что du не добавляет размер каталогов? тем не менее, кажется, огромная разница, которая не может нести ответственность за все это.</p>