問題
Linux ベースのシステムで、不明なプロセスによってルート ファイル システムがいっぱいになります。ファイル システムからどのファイルが移動または削除されても、処理は続行されます。
# df -hP / /dev/mapper/VGExaDb-LVDbSys1 ext3 30G 29G 0 100% /
ファイル システム全体を占める大きなファイルはありません:
# find / -xdev -type f -size +100M -exec ls -lh {} \;
ファイルシステム全体を占める大きなディレクトリはありません:
# du -h --max-depth=1 / 42M /sbin 13M /etc 2.4G /usr 45M /tmp 451M /var 192M /lib (and so on) ...
解決策
過去のある時点で、2 つ以上のプロセスがファイルを使用していました。たとえば、/tmp/top.log です。 1 つのプロセスが /tmp/top.log を削除することでアクセスを停止し (実際にはディレクトリ エントリです)、もう 1 つのプロセスが i ノード参照への書き込みを続けたため、ファイルが拡大し続けました。
これは、「lsof +L 1」の出力で確認できます。 」
# lsof +L 1 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NODE NAME top 34261 root 1W REG 252,0 21460567592 0 1785896 /tmp/top.log (deleted)
他のファイルもリストされていましたが、はるかに小さかったです.
これは、user=root が /tmp/top.log にスプールする top コマンドを実行していたこと、および現在そのファイルへのリンクがないことを示しています。そのスプール ファイルのサイズは 21Gb でしたが、「du –h –max-depth=1 /」の出力ではレポートされませんでした。/tmp は 45M しかリストされていませんでした。
以下の手順に従って、そのようなプロセスを特定して強制終了してください。
1. 次のコマンドを使用して、リンクが 1 つ未満のシステム上のファイルを特定します。
# lsof +L 1
2. リストされた異常に大きなファイルに書き込みを行っているプロセスを強制終了します。上記の例では、以下を実行します:
# kill 34261
3. 最終プロセスがファイルの使用を停止すると、スペースが解放されます。