「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

ファイルを開くアプリケーション/プロセスがあるかもしれません。アプリケーションによって開いているファイルを削除すると、そのファイルはまだメモリに開いているため、オペレーティングシステムは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)

ファイルディスクリプタは、次回再起動したり、ファイルを開いたアプリケーションを再起動/再ロードしたときに解放されます。

もちろん、ロックされたファイルの出力と一致するようにコマンドを調整する必要があります。

おすすめ記事