df -Th は du -sh スペースサイズと矛盾します

問題のある現象

日々の運用やメンテナンスを行っていると、ディスク容量がいっぱいになって、大量のディスク容量を占有しているファイルが削除されたにもかかわらず、ディスク容量がまだいっぱいで、df - によって解放されていないことがよくあります。 Th 

しかし、du -sh がチェックすると、スペースが空になっていることがわかります。

問題の 2 つの理由

通常、この場合、ファイルは削除されますが、まだプロセスによって占有されているため、du と df の結果が不一致になります。

Du -sh * と df -Th は異なるサイズを示します。一般的に、df が使用するスペースは du よりも大きくなります。

ファイルが削除されると、そのファイルはファイル システムのディレクトリに表示されなくなるため、du はそれをカウントしなくなります。

ただし、この時点で削除されたファイルのハンドルを保持している実行中のプロセスがまだ存在する場合、そのファイルはディスク上で削除されず、パーティションのスーパーブロック内の情報は変更されません。このようにして、df は削除されたファイルを引き続きカウントします。

3つの問題解決

1 まず問題が発生しているプロセスを見つけ、次のコマンドを使用して見つけます。

lsof |grep が削除されました

リストされたファイルは削除されたことを示していますが、実際にはプロセスはまだ使用されています。

解決策は通常、ファイルを占有しているプロセスを停止することです。

2つのソリューション

しかし、プロセスを停止できない場合はどうなるでしょうか? ビジネスが使用中のため、プロセスまたはサービスを再起動できません。もう 1 つの解決策は、ファイルをクリアして領域を解放することです。

加工方法は以下の通りです。

lsof | grep delete を使用して削除できないファイルを検索し、占有されているプロセス番号を確認します。

#lsofコマンドがない場合はyum install lsof -y

次に、ls -l /proc/PID/fd/* | grep ファイル名で対応するファイル ハンドルを見つけ、ファイルの内容をクリアします echo > /proc/PID/fd/FD_NUM

この操作ではファイルは削除されませんが、ドキュメントの内容がクリアされて領域が解放され、ファイルはまだ存在します。

ls -l /proc/PID/fd/* | grep catalina 対応するファイル ハンドルを見つけ、echo > mode を使用してクリアします echo > /proc/28283/fd/1 echo > /proc/28283/fd/2

このとき df -PTh で確認すると、du -sh と基本的にサイズが同じであることがわかり、問題は解決しています。

おすすめ

転載: blog.csdn.net/u013380694/article/details/130171795