SERVER:~ # df -mP /home/
Filesystem 1048576-blocks Used Available Capacity Mounted on
/dev/mapper/rootvg-home_lv 496 491 0 100% /home
SERVER:~ #
SERVER:/home # lsof | grep -i deleted | grep -i "home" | grep home
badprocess 4315 root 135u REG 253,2 133525523 61982 /home/username/tr5J6fRJ (deleted)
badprocess2 44654 root 133u REG 253,2 144352676 61983 /home/username/rr2sxv4L (deleted)
...
SERVER:/home #
ファイルは使用中に削除されます。だから彼らはまだスペースを消費します。しかし、私たちは「badprocess *」を再起動したくありません。オペレーティングシステムはSLES9ですが、「一般条件」について質問します。
質問:スペースを解放するために削除されたファイルを保存したプロセスを再起動せずに削除する方法は?
答え1
の項目を使用して、/proc
これらのファイルを切り捨てることができます。
# ls -l /proc/4315/fd
これにより、プロセス4315で開かれたすべてのファイルが表示される。すでに使用しており、lsof
削除されたファイルはファイル記述子135として表示されるため、次のように削除されたファイルが使用するスペースを解放できます。
# > /proc/4315/fd/135
ファイル記述子133を持つプロセス44654によって開かれた他の削除されたファイルにも同様に適用されます。
# > /proc/44654/fd/133
これでスペースが解放されたことがわかります。
また、削除されたがプロセスによってまだ開いているファイルの内容をコピーするためにも使用できますcp /proc/XXX/fd/YY /some/other/place/filename
。
答え2
badprocess
デバッグまたはそのptrace()
ツールを使用してプロセスを操作し、特定のファイルを閉じる他のツールを使用せずにこれを行う方法はないと思います。
あなたのタイトルはロックについて話していますが、質問の本文にはロックを言及していません。いずれにしても、プロセスがファイルのロックを放棄するように強制する方法はありません。これは、ファイルがファイルシステムにまだリンクされているかどうかに関係なく適用されます。