人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

数百KB程度の画像データのキャッシュが、複数の階層に分かれて数百万ファイルあります。
この中で作成日時が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用のソフト紹介はご遠慮お願いします

●質問者: ko-takada
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:bbu CentOS ext3 HDD KB
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● typista
●60ポイント

発想を逆転して、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製品は無いものでしょうか。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ