web-dev-qa-db-ja.com

duはdfで示されるスペースを考慮していません

CentOS 7.2(最小)VM vSphereクラスターで実行しています。vSphereクラスターには、CentOSインストーラーのデフォルトのフルディスク使用量パーティションスキームでXFSとしてフォーマットされた16Gドライブがあります。システムは実行されています。テストhttpdサービス(デフォルトのcentosリポジトリのすべてのソフトウェア)ですが、ディスク上のスペース使用量が増えています。これは、問題のあるApacheエラー/アクセスログ(サイズが2 + GB)に一部起因しており、これらのlongを削除するとスペースが解放されます。 。ドライブスペースを何が消費しているのかは私にはそれほど関係ありません(最終的にはこれを削除して舗装します)。ただし、ファイルサイズを確認するためにdf a duを実行すると、不一致が発生し、これが混乱を招きます。 。

まず、df -hを実行して、ファイルシステムの使用状況を表示します。

[root@svrhttp03 httpd]# df -h
Filesystem                         Size  Used Avail Use% Mounted on
/dev/mapper/centos_svrhttp03-root   14G  4.8G  9.1G  35% /
devtmpfs                           902M     0  902M   0% /dev
tmpfs                              912M     0  912M   0% /dev/shm
tmpfs                              912M   97M  816M  11% /run
tmpfs                              912M     0  912M   0% /sys/fs/cgroup
/dev/sda1                          497M  169M  329M  34% /boot
tmpfs                              183M     0  183M   0% /run/user/0

これは、ルートFSで使用されている4.8Gを示しています。

次に、以下を実行して、ファイルシステムのルートにあるすべてのアイテムのサイズを表示します。

[root@svrhttp03 httpd]# du -a -h -t 10K / 2> /dev/null | grep -v -E "[A-Z,a-z,0-9]/." | sort -h
16K /home
7.4M    /root
31M /etc
97M /run
143M    /boot
324M    /var
1.3G    /usr
1.9G    /

これは、使用中の1.9Gのみを示しており、すべてのディレクトリの報告されたサイズは、予想どおり、合計で最大1.9Gになります。

では、ディスク上のデータに対してdfduが主張しているものの間に約2.9Gの不一致があることをどのように見つけることができますか?

3
Topher

これは完全な答えではないかもしれませんが、私はそのような不一致の2つの原因を知っています:

  • dfduよりも多くのスペースを表示(別名、非常に大きなファイル)

スパースファイルがこれを引き起こす可能性があります。例:/ var/log/lastlogは、VMWareのバグが原因で、多くのVMで非常に巨大(1.2 TBなど)として報告されます。それほど大きくはなく、スパースファイルです。取り扱いはそれらを無視することです。 dfは、実際のディスク領域の空き容量については、常にduよりも正確です。

  • dfは、duが示すよりもディスクがいっぱいであることを示しています(ディスク領域を消費している非表示のファイル)

これの通常の原因は、プロセスによって開いたままになっている削除されたファイルです。これは、アップグレード後、再起動前によくあることです。古いライブラリファイルはすべて、「削除」されてduから表示されない場合でも、ファイルハンドルを持つプロセスによって開いたままになります。またはls

簡単な取り扱いは再起動することですが、より外科的に扱うことができます。たとえば、lsof | grep -c DELで開始し、まだ開いている削除済みファイルの数を確認します。 (ある程度は比較的正常であり、必ずしも病的である必要はありませんが、それでもディスク容量の不一致を理解するために調べるのに適切な場所です。)

3
Wildcard

ワイルドカードの答えは絶対に正しいですが、理由を言う方が理にかなっているかもしれません。

duは、[〜#〜] vfs [〜#〜]で指定されたパスからディレクトリを介して、すべてのファイルのファイルサイズを再帰的に合計します。複数のマウントされたファイルシステム。

dfは、ファイルシステムの割り当て済みおよび未割り当てのスペースの量を報告します。

ファイルに割り当てられるスペースは、ファイルサイズと常に同じであるとは限りません。ほとんどのファイルシステムは、1バイトよりもはるかに大きいブロックで割り当てます。そのため、最悪の場合、ファイルはブロック全体を割り当てて、その1バイトのみを使用できます。非常に多くの小さなファイルは、それらのサイズの合計よりもはるかに多くのスペースを割り当てます。さらにスパースファイルは、ゼロ以外のデータであるファイルの部分のみを割り当てるため、割り当てるスペースよりもファイルサイズが大きくなる可能性があります。

2
jdwolf