ホームページ >php教程 >PHP开发 >Linux サーバーのファイル削除戦略

Linux サーバーのファイル削除戦略

高洛峰
高洛峰オリジナル
2016-11-19 09:05:381266ブラウズ

ディスク容量がいっぱいです

Linuxにはごみ箱機能がないため、オンラインサーバー上で削除されるすべてのファイルは最初にsystem/tmpディレクトリに移動され、その後、/tmpディレクトリ内のデータが定期的に消去されます。この戦略自体には何も問題はありませんが、検査の結果、このサーバーのシステム パーティションには個別の /tmp パーティションがないことが判明したため、/tmp 下のデータは実際にはルート パーティションの領域を占有していました。問題が見つかったので、/tmp ディレクトリで多くのスペースを占有しているデータ ファイルをいくつか削除し、/tmp 内の 3 つの最大のデータ ファイルを確認してください。

du -sh /tmp/* | sort -nr | head -3

/tmp の下にある上位 3 つの最大のデータ ファイルを確認し、コマンド出力から /tmp ディレクトリに 66 GB のファイル access_log があることを確認します。ログ サイズから判断すると、このファイルは Apache によって生成されたアクセス ログ ファイルであるはずです。 Apache ログ ファイルを長期間クリーンアップしていないため、基本的にこのファイルが原因でルート領域がいっぱいであると判断され、ファイルが削除できることを確認した後、次の削除操作を実行します。

次に、システムのルート パーティションのスペースが解放されているかどうかを確認します。出力からわかります。ルート パーティションのスペースがまだ解放されていません。何が起こっていますか?

ファイルを削除した後もスペースは解放されません

ファイルを削除しても解放されませんが、ファイルがプロセスによってロックされている、プロセスがこのファイルにデータを書き込んでいるなどの例外があります。この問題を理解するには、ストレージメカニズムを知る必要があります。 Linux でのファイルのストレージ構造。

ファイルのデータ部分とポインタ部分

ファイルシステム内のファイルのストレージは、データ部分とポインタ部分の 2 つの部分に分かれています。ポインタは、ファイル システムのメタデータに配置されます。データが削除されると、このポインタは から変わります。メタデータはクリアされ、データ部分はディスクに保存されます。メタデータからデータに対応するポインターをクリアした後、ファイル データが占有しているスペースを上書きし、新しいコンテンツを書き込むことができます。access_log ファイルを削除した後にスペースが解放されないのは、httpd プロセスが原因です。まだこのファイルにコンテンツを書き込み続けているため、access_log ファイルが削除されますが、プロセスのロックにより、ファイルに対応するポインタ部分がメタデータからクリアされておらず、ポインタが削除されていないため、システムはカーネルはファイルが削除されていないと信じています。

アプリケーションによって占有されている削除されたファイルのリストを見つけます

そこで、df コマンドを使用してスペースをクエリします。問題を解決するアイデアが得られたので、解放されたプロセスがあるかどうかを確認してみましょう。データを access_log ファイルに書き込みます。ここでは、Linux で lsof コマンドを使用する必要があります。このコマンドを通じて、アプリケーションによってまだ占有されている削除されたファイルのリストを取得できます。 /tmp/access_log ファイルはプロセス httpd によってロックされており、httpd プロセスのログ データもこのファイルに書き込まれています。列 7 から、このログ ファイルのサイズは約 70 GB であることがわかり、システム ルート パーティションの合計サイズはわずか 100 GB です。このファイルがシステム ルート パーティションの領域を使い果たす原因であることがわかります。 。最後の列の「削除済み」ステータスは、ログ ファイルが削除されたが、プロセスがまだこのファイルにデータを書き込んでいるため、スペースが解放されていないことを示します。

ファイルを正しくクリアする

この種の問題を解決する最も簡単な方法は、httpd プロセスを閉じるか再起動することです。もちろん、これらは最良の方法ではありません。ファイルにログを書き込み続けるこの種のプロセスの場合、ファイルが占有しているディスク領域を解放する最善の方法は、次のコマンドを使用してファイルをクリアすることです:

rm /tmp/access_log

このようにして、ディスク領域が解放されます。すぐに解放できるだけでなく、プロセスが確実にファイルにログを書き続けるようにすることもできます。この方法は、Apache、Tomcat、Nginx などの Web サービスによってオンラインで生成されたログ ファイルをクリーンアップするためによく使用されます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。