ファイルを保存するために使用されるファイルサーバーがあります。ファイルは、1週間または1年間存在します。残念ながら、サーバーからファイルを削除すると、df
コマンドは解放されたスペースを反映しません。そのため、最終的にはサーバーがいっぱいになり(df
99%が表示されます)、そこに数十GBの空き容量がある場合を除き、スクリプトはそれ以上ファイルを送信しません。
私が得たnoatime
ことは、どんな違いがあれば取り付けられたパーティションにフラグを。
ファイルを保存するために使用されるファイルサーバーがあります。ファイルは、1週間または1年間存在します。残念ながら、サーバーからファイルを削除すると、df
コマンドは解放されたスペースを反映しません。そのため、最終的にはサーバーがいっぱいになり(df
99%が表示されます)、そこに数十GBの空き容量がある場合を除き、スクリプトはそれ以上ファイルを送信しません。
私が得たnoatime
ことは、どんな違いがあれば取り付けられたパーティションにフラグを。
回答:
ファイル名を削除しても、実際にはファイルは削除されません。他のプロセスがファイルを開いたままにしているため、削除されません。そのプロセスを再起動または強制終了して、ファイルを解放します。
つかいます
lsof +L1
削除された(リンクされていない)ファイルを使用しているプロセスを見つけます。
Ignacioが言及しているように、ファイルを削除しても、そのファイルに対して開いているハンドルを持つプロセスを削除するまでスペースは解放されません。
それでも、プロセスを強制終了せずにスペースを再利用できます。必要なのは、ファイル記述子を削除することだけです。
最初にlsofを実行します| ファイルを保持しているプロセスを識別するためにgrepが削除されました
[hudson@opsynxvm0055 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
それから
[hudson@opsynxvm0055 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
ファイルを保持している他のプロセスがある場合、操作を繰り返す必要があります。
> FD
ますか?
>
コマンドには名前がありますか?それを使用できるようにするには、zshからbashに切り替える必要がありました。zshで実行することは可能ですか?
1つの可能性は、削除したファイルがファイルシステム内でより多くの参照を持っていることです。ハードリンクを作成した場合、いくつかのファイル名は同じデータを指し、データ(実際のコンテンツ)は、すべての参照が削除されるまで空き/使用可能としてマークされません。ファイルを削除する前に、stats(Linksという名前のエントリ)またはls -lを実行します(2番目の列になります)。
ファイルが他の場所で参照されていることが判明した場合、iノード番号を見つけるにはls -iファイルを検索し、-inum <inode-number>で検索して検索する必要があると思いますそのファイルへの他の参照(おそらく、同じファイルシステム内にとどまるために-mountも使用したいでしょう)。
ファイルは、開いているプロセスによってまだロックされています。スペースを解放するには、次の手順を実行します。
実行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
して、スペースがすでに解放されているかどうかを確認します。まだいっぱいになっている場合は、数秒待ってからもう一度確認する必要があります。
パーティションが、ディスクスペースの特定の部分をルート使用のみのために予約するように構成されている場合df
、このスペースを使用可能として含めません。
[root@server]# 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>
他の答えは正解です。ファイルを削除してもスペースが解放されない場合、通常はファイルが開いたままであるか、他のハードリンクが存在します。
トラブルシューティングを支援するために、ドライブのスペースがどこに費やされているかを示すツールを使用du
します。スペースを使用する場所の概要を取得するために使用できます。さらに良いことに、xdiskusageなどのグラフィカルツールを使用して(このようなものが多数あります)、犯人を追い詰めます。xdiskusageと友人は、スペースがどこに向かっているのかを見つけるために、最大のスペース豚を掘り下げることができます。
そうすれば、2番目のハードリンクのためにまだスペースを占有しているファイルをすばやく見つけることができます。また、削除されたが開いているファイルによって占有されているスペースも表示されます(ファイル名を読み取れないため、(許可が拒否されたように)。
私はあなたの多くがredhat inでこれを行っ/var
ており、FSが縮小することを期待してファイルをgzipしていますが、代わりに拡大するので、syslogを再起動してください。そして
lsof -v file
とにかくこれを表示します。
どの削除されたファイルがメモリを占有しているかを確認するには、次のコマンドを入力します
$ sudo lsof | grep deleted
メモリを保持する削除されたファイルが表示されます。
次に、pidまたはnameでプロセスを強制終了します
$ sudo kill <pid>
$ df -h
今、あなたが同じメモリを持っていることを確認してください
以下のコマンドを入力しない場合、どのファイルがメモリを占有しているかを確認します
# cd /
# du --threshold=(SIZE)
しきい値サイズを超えて占有しているファイルが表示される任意のサイズに言及し、メモリを保持するファイルを削除します