この中で作成日時が1週間以上前のファイルを定期的に削除したいと思っております。
現在、findコマンドを使って削除を試みたところ、iowaitが酷い状態で、毎日実行したいのに、実行完了まで2日かかる状況です。
こういったニーズを「Linux上」で「軽いシステム負荷」で実現するための方法を教えて頂けませんでしょうか?
Linux上で1週間以内に作成されたファイルのみが保持されることが目的さえ満たせれば、何かしらのOSS製品を組み合わせる方法でも構いません。
なお、HDDを定期的に初期化をする方法ですと、キャッシュが再生成されるまでシステムが高負荷となってしまうため現実的ではありません。
【環境】
Linux CentOS 5.5 x86_64
HDD: SATA 2TB RAID-1(BBU付きのサーバ用RAIDカード)
ファイルシステム:ext3
※ Windows・Mac用のソフト紹介はご遠慮お願いします
発想を逆転して、1週間以内のキャッシュを残すようなロジックではどうでしょうか?
つまり、
①キャッシュディレクトリごと一旦リネーム(例ではcache4delete)
②キャッシュディレクトリ再作成(cache)
③1週間以内のキャッシュのみ②に移動
④①でリネームしたディレクトリ削除
です。
以下がそれっぽいシェルコマンドですが、findでヒットするファイル名が"./"付きのため
"mv: rename . to ../cache/.: Invalid argument"とエラーメッセージが表示されてしまいますので修正が必要そうです。
このあたりの処理はko-takadaさんのほうが詳しいかも知れませんね。
$ mv cache cache4delete
$ mkdir cache
$ cd cache4delete
$ find . -ctime -7 -exec mv '{}' ../cache/ ';'
$ cd ..
$ rm -rf cache4delete
ありがとうございます。逆転の発想ですね。
発想としては良いと思うのですが、以下の懸念があります。
・findコマンドを使って移動する間に、ローカルキャッシュのヒットレートが長時間落ちこむ
・cache4deleteを削除するのにとても長い時間が掛かる
物理ファイルだとそもそも厳しそうなので、数百KBのファイルを数百万(トータル数百GB)の、自然と消えるファイルシステムや、OSS製品は無いものでしょうか。