解決策 1:
ファイル名を削除しても、実際にはファイルは削除されません。他のプロセスがファイルを開いたままにしているために、ファイルが削除されていません。そのプロセスを再起動または強制終了して、ファイルを解放してください。
使用
lsof +L1
削除された (リンクされていない) ファイルを使用しているプロセスを特定します。
解決策 2:
Ignacio が言及しているように、ファイルを削除しても、そのファイルに対して開いているハンドルを持つプロセスを削除するまで、スペースは解放されません。
それでも、プロセスを強制終了せずにスペースを再利用できます。ファイル記述子を削除するだけです。
最初に lsof | を実行します。ファイルを保持しているプロセスを特定するために grep を削除
[[email protected] log]$ /usr/sbin/lsof |grep deleted
java 8859 hudson 1w REG 253,0 3662503356 7578206 /crucible/data/current/var/log/fisheye.out (deleted)
次に実行します:
cd /proc/PID/fd
次に
[[email protected] fd]$ ls -l |grep deleted
total 0
l-wx------ 1 hudson devel 64 Feb 7 11:48 1 -> /crucible/data/current/var/log/fisheye.out (deleted)
「1」はファイル記述子になります。ここで "> FD" と入力して、そのスペースを再利用します
> 1
ファイルを保持している他のプロセスがある場合は、操作を繰り返す必要がある場合があります。
解決策 3:
1 つの可能性は、削除したファイルがファイルシステム内により多くの参照を持っていることです。ハードリンクを作成した場合、複数のファイル名が同じデータを指し、そのデータ (実際のコンテンツ) は、そのデータへのすべての参照が削除されるまで無料/使用可能としてマークされません。ファイルを削除する前に、それらを stat (Links という名前のエントリ) するか、ファイルに対して ls -l を実行します (2 列目にある必要があります)。
ファイルが他の場所で参照されていることが判明した場合は、ファイルを ls -i して inode-number を見つけてから、-inum
解決策 4:
パーティションが root 用にのみディスク領域の特定の部分を予約するように構成されている場合、 df
このスペースは利用可能として含まれません。
[[email protected]]# df -h
Filesystem Size Used Avail Use% Mounted on
...
/dev/optvol 625G 607G 0 100% /opt
...
ファイル/ディレクトリを削除してスペースが再利用された後でも、root 以外のユーザーは特定のパーティションに書き込むことができません。
root および root 以外のユーザーとしてデバイス上にファイルを作成しようとすることで、それがあなたのケースであるかどうかを簡単に確認できます。
さらに、
を実行してファイルシステム構成を確認できます。tune2fs -l <device> | egrep "Block count|Reserved block count
実際の % を自分で計算します。
ルートのみの使用のために予約されているディスク % を変更するには、
を実行します。tune2fs -m <percentage> <device>
解決策 5:
ファイルは、それを開くプロセスによってまだロックされています。スペースを解放するには、次の手順を実行します:
<オール>
sudo lsof | grep deleted
を実行 ファイルを保持しているプロセスを確認します。結果の例:
$ sudo lsof | grep deleted
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
cron 1623 root 5u REG 0,21 0 395919638 /tmp/tmpfPagTZ4 (deleted)
sudo kill -9 {PID}
を使用してプロセスを強制終了します .上記のサンプルでは、PID は 1623 です。
$ sudo kill -9 1623
df
を実行 スペースがすでに解放されているかどうかを確認します。まだいっぱいの場合は、数秒待ってからもう一度確認してください。