継続的にディスク容量が不足するシステムがあります。大きくなるディレクトリをクリーンアップするスクリプトを作成します。通常、これらはログディレクトリです。マシンの性質を考えると、ログを保持する必要はありません。
サイズが大きくなっているすべてのディレクトリを表示するスクリプトを作成したいので、このリストが0になるようにします。
私はこのようなことを考えています
1. du /
2. wait 24 hrs
3. du /
4. find all instances where the file size increased
見た目は簡単ですが、私の問題は、duがファイルとディレクトリで機能することです。dirsだけでは機能しません。どうすればそれを克服できますか?
Findを使用して、24時間で何が変更されたかを知ることができます。
find / -type d name \* -mtime 1 -print
過去24時間に変更されたすべてのディレクトリを一覧表示する必要がありますが、実際には、ディレクトリではなく変更されたファイルを覚えておいてください。
別の方法は
du -s * | sort > currentsize
これはディレクトリごとに要約され、開始位置にファイルがありますが、毎日保存し、そのファイルをoldsizeと言って移動し、コマンドを再度実行することができます
その後
diff currentsize oldsize
何が変わったかがわかります。
Awkを使用して、大きいか小さいかを判断できます。
すべてのシステムログも変更される傾向があります。
しかし、私が述べた最初の発見は、過去24時間に変更されたファイルを示しています。それに基づいたものを使用することもできます。
問題がログファイルにある場合は、代わりにlogrotate
を使用することをお勧めしますか?
ログファイルを定期的に「ゼロ」にしたり、古いログをアーカイブおよび/または削除したりする機能があります。魔法をかける前に関連するデーモンを停止するところまでです(デーモンがログファイルを開いたままにしている場合は必要になる場合があります)。
すでに述べたように、logrotate
を使用してログファイルのローテーションとクリーンアップを管理します。古いログを圧縮し、X世代後に最も古いログを削除できます。
私の通常のスペース検索は、コマンドdu -s * | sort -n
を使用して最大のディレクトリを歩くことを使用して実行されます。これにより、クリーンアップが大きな影響を与えるディレクトリやファイルをすばやく見つけることができます。
munin
を使用してディスク使用量を監視している場合は、使用量が多いときに通知するように構成できます。 80%と90%は、警告メッセージと重要なメッセージの開始点として適しています。
定期的にfindを実行して、あるしきい値よりも大きいファイルを検索します。これは、大きなファイルがたくさんある場合は役に立ちませんが、不当に大きくなるファイルを検出します。
それほど効率的ではありませんが、次のようなことができます。
find / -type d -print0 | xargs -0 du -s
/
の下で成長しているディレクトリを見つけようとしていると仮定すると、次のことを試すことができます。
du -s /*/
これにより、/(およびディレクトリのみ)の下の各ディレクトリの要約された個々のサイズが出力されます。