du -skh * in / returns df from df on Centos 5.5
質問
centosを実行しているVPSスライスがあります。
走るとき du -skh *
In / as rootが得られるように:
[root@yardvps1 /]# du -skh *
0 aquota.group
0 aquota.user
5.2M bin
4.0K boot
4.0K dev
4.9M etc
2.5G home
12M lib
14M lib64
4.0K media
4.0K mnt
299M opt
0 proc
692K root
23M sbin
4.0K selinux
4.0K srv
0 sys
48K tmp
2.0G usr
121M var
これは、私がマシンにアップロードしたものと一致しており、約5Gigsを追加します。
しかし、私が走るとき df
わかりました:
[root@yardvps1 /]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/simfs 15728640 11659048 4069592 75% /
none 262144 4 262140 1% /dev
すでに12個のギグを使用していることを示しています。
この矛盾を引き起こしていること、そして私がそれについてできることは何でもありますか、私は15のギグに基づいてサーバーを計画しましたが、今では基本的には約7ギグのものしか持っていません。
ありがとう。
解決
この効果の最も一般的な原因は、削除されたオープンファイルです。
カーネルは、削除時に使用されていない場合、削除されたファイルのディスクブロックのみを解放します。それ以外の場合は、ファイルが閉じられるか、システムが再起動されるまで延期されます。
一時的なファイルが残っていないことを確認するための一般的なUNIX世界のトリックは、次のとおりです。
プロセスが一時ファイルを作成して開きます
開いているファイル記述子をまだ保持している間、プロセスはファイルをリンクしません(つまり削除します)
プロセスは、ファイル記述子を使用して通常ファイルに読み取り、書き込みます
プロセスは、ファイル記述子が完了したときに閉じ、カーネルはスペースを解放します
プロセス(またはシステム)が予期せず終了する場合、一時ファイルは既に削除されており、クリーンアップは必要ありません。
ボーナスとして、ファイルを削除すると、一時的なファイルを作成するときに衝突を命名する可能性が低くなり、ルートユーザー以外の人には、実行中のプロセスに対する追加の不明瞭さも提供されます。
この動作により、プロセスは、突然足の下から引き出されるファイルを処理する必要がなく、ファイルを削除するためにプロセスが相互に相談する必要がないことが保証されます。ただし、Windowsシステムから来る人にとっては予想外の動作です。通常、使用中のファイルを削除することは許可されていないためです。
lsof
コマンドは、rootとして実行されると、すべての開いたファイルが表示され、削除された削除されたファイルを明確に示します。
# lsof 2>/dev/null | grep deleted
bootlogd 2024 root 1w REG 9,3 58 917506 /tmp/init.0W2ARi (deleted)
bootlogd 2024 root 2w REG 9,3 58 917506 /tmp/init.0W2ARi (deleted)
有罪のプロセスを停止して再起動するか、サーバーを再起動するだけで、この問題が解決するはずです。
たとえば、マウントされたファイルシステムイメージである場合、削除されたファイルはカーネルによって開くこともできます。この場合、ファイルシステムのマウントを解除するか、サーバーを再起動する必要があります。
あなたの場合、「欠落している」スペースのサイズから判断すると、VPSを設定するために使用したファイルへの参照を探します。
他のヒント
私が出会った別のケースは、あなたの問題ではないように見えますが、既存のファイルの「上に」パーティションを取り付ける場合です。
そうする場合、マウントされたパーティションからマウントされたパーティション(マウントポイント)のディレクトリに存在する既存のファイルを効果的に非表示にします。
修正するには、マウントされたパーティションにオープンファイルを使用してプロセスを停止し、マウントパーティションを外し、Mount Pointディレクトリに表示されるファイルを見つけて移動/削除します。
FreeBSDサーバーでも同じ問題が発生しました。再起動が役立ちました。