私は奇妙な違いがあります。 「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
ファイルを開くアプリケーション/プロセスがあるかもしれません。アプリケーションによって開いているファイルを削除すると、そのファイルはまだメモリに開いているため、オペレーティングシステムは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つのファイルサイズを0にするには、次のコマンドを実行します。
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)
ファイルディスクリプタは、次回再起動したり、ファイルを開いたアプリケーションを再起動/再ロードしたときに解放されます。
もちろん、ロックされたファイルの出力と一致するようにコマンドを調整する必要があります。