「du」と「df」の不一致

「du」と「df」の不一致

奇妙な矛盾があります。「df」で、ルート ディスクが約 229G を使用していることがわかります。

# df -h
Filesystem                  Size  Used Avail Use% Mounted on
/dev/dm-2                   241G  229G   13G  96% /

しかし、「du」は、使用中は約 12GB (切り上げ) しかないことを伝えます。

# du -sh /* | grep G
3.2G    /run
2.1G    /usr
6.0G    /var

両方のコマンドはルートとして実行されました。私が想像できるのは、NFS 共有がマウントされているディレクトリに「隠し」データがあるということです。これが事実である場合、「隠し」のファイルが何であるかをどうやって見つければよいでしょうか。または、これらの数字がまったく異なる理由について、他に何か考えはありますか。

答え1

おそらく、そのファイルを開いているアプリ/プロセスがあるでしょう。アプリによって開かれたままになっているファイルを削除しても、ファイルはメモリ内でまだ開いているため、OS は df 内のファイル サイズを引き続き認識します。

ここに、同僚のために私が書いた、必要なものがわかるドキュメントがあります。

開いている大きなファイルを切り捨てる

スペースを解放するためにファイルを削除しましたが、その後スペースは解放されません。現在、df -lah と du -lah は異なるサイズを表示します

削除されたが保持されているファイルを取得するには、LSOF を使用します。

lsof |grep deleted

これにより、削除されたがアプリによって開いたままになっているすべてのファイルが表示されます。

java       2943  gateway  410w      REG              253,3  50482102     139274 /opt/span/app/node/default/var/attachments/att180368_0.part (deleted)
java       2943  gateway  411w      REG              253,3  46217973     139284 /opt/span/app/node/default/var/attachments/att182230_0.part (deleted)
java       2943  gateway  412w      REG              253,3  50483894     139280 /opt/span/app/node/default/var/attachments/att181920_0.part (deleted)

アプリを再起動してファイルのロックを解除するか、ファイルを切り捨てることができます。

ファイルを切り捨てるには、上記の出力を見て PID と fd (ファイル記述子番号) を取得する必要があります。

ファイルを切り捨てる

echo > /proc/PID/fd/fd_number

例: 上記の3つのファイルサイズをゼロにするには、次のようにします。

echo > /proc/2943/fd/410 
echo > /proc/2943/fd/411
echo > /proc/2943/fd/412

切り捨てる必要があるものがたくさんある場合は、bash が役に立ちます。

for n in {410..412}; do 'echo  > /proc/2943/fd/$n'; done;

df -lah で空き容量が表示されるはずですが、lsof |grep で削除されたファイルが表示されますが、サイズは 1 になります。

java       2943  gateway  410w      REG              253,3         1     139274 /opt/span/app/node/default/var/attachments/att180368_0.part (deleted)
java       2943  gateway  411w      REG              253,3         1     139284 /opt/span/app/node/default/var/attachments/att182230_0.part (deleted)
java       2943  gateway  412w      REG              253,3         1     139280 /opt/span/app/node/default/var/attachments/att181920_0.part (deleted)

ファイル記述子は、次回の再起動時、またはファイルを開いたアプリの再起動/再ロード時に解放されます。

もちろん、ロックされたファイルの出力に合わせてコマンドを調整する必要があります。

答え2

私の場合 (PM で同じことを教えてくださって助かりました)、それはオーバーマウントの問題でした。パーティション上のディレクトリにいくつかのデータがありましたが、duマウントによってデータが隠されていたため、見えませんでした。

だから、すべてのマウントを解除残りのディレクトリでデータを探します。

楽しい時間を過ごしてください、ありがとう!

関連情報