web-dev-qa-db-ja.com

Linuxで削除されたがまだ使用されているファイルから「ロック」を削除する方法

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 *」を再起動したくありません。 OSはSLES9ですが、「一般的に」これを求めています。

質問:これらのすでに削除されたファイルを保持しているプロセスを再起動せずに削除して、スペースを解放するにはどうすればよいですか?

4
user90825

/procのエントリを使用して、このようなファイルを切り捨てることができます。

# ls -l /proc/4315/fd

これにより、プロセス4315によって開かれたすべてのファイルが表示されます。すでにlsofを使用しており、削除されたファイルがファイル記述子135であることを示しているため、次のように、削除されたファイルが使用していたスペースを解放できます。

# > /proc/4315/fd/135

プロセス44654によって開かれた他の削除されたファイルについても同じことが言え、ファイル記述子133があるので、次のようになります。

# > /proc/44654/fd/133

これで、スペースが解放されたことがわかります。

これを使用して、削除されたがプロセスによって開いたままになっているファイルの内容をコピーすることもできます。cp /proc/XXX/fd/YY /some/other/place/filenameだけです。

6
wurtel

デバッガーまたはptrace()機能を使用してプロセスを操作し、そのファイルの一部を閉じるようにする何かを使用してbadprocessに接続する以外に、私は方法がないと思いますそれを行う。

タイトルはロックについて説明していますが、質問の本文でロックについては言及していません。とにかく、プロセスがファイルに対して持っているロックを強制的に放棄する方法もありません。これは、ファイルがファイルシステムにリンクされているかどうかに関係なく当てはまります。

0
Celada