2006/2 | ||||||
---|---|---|---|---|---|---|
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | ||||
2006/3 | ||||||
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
a person powered by ototoy blog
モヘンジョだろ!!rm /tmp/rm_progress;
for k in 1 2 3 4 5 6 7 8 9 a b c d e f ;
do for j in 0 1 2 3 4 5 6 7 8 9 a b c d e f;
do for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f;
do echo $i$j$k >> /tmp/rm_progress;
idprio 31 rm -f ./cache_*$k$j$i;
done; done; done
手違いで、1ディレクトリの中に350万個ほどキャッシュファイルができちゃったんだけど、それくらい大量のファイルを消すとなるとディレクトリスキャンや実際のunlink()処理をするだけでもシステムに深刻なパフォーマンスの問題が出て来る(システムタイムが110%とかになって、他のタスクに全然実行時間がまわらない)ので、こんな感じのコマンドでポチポチ消している。丸二日使って1/8くらい進んだかと。
このコマンドは、キャッシュファイル名の末尾がmd5()の結果なので必ず0-9かa-fになることを利用して、4096段階に分けて消しつつ、進行状況をファイルに書き出すというもの。
まあ、googleに聞いても全然ひっかかんなかったし、何かの役に立つかと思って。csh系列では動かなくてshとかbash用しかもidprioってFreeBSD依存かも。
...この日記を書いてから実質12日間かかってやっと終りそうな感じ。長い道のりだったなぁ。Linuxとかでもこういう事故って起こってる気がするんだけど、皆どうしてるんだろう。すげー謎。PEAR::CacheLiteとか使ってたら結構な数起こってると思うのだが。
あと、一旦大きくなったディレクトリ(今回のディレクトリファイルのサイズは実に267,376,128バイトだった)が二度と縮小できない今の実装は*BSDでもLinuxでも同様に良くないと思った。改良しやすそうなんだけど、手がついてないのは何故なんだろう。
コメント