• 締切済み

find が遅すぎる。代替え案は

/home下の 200GB ほどのファイルやディレクトリーの中から、 user, group が nobody のファイルを毎日検索して保管する必要があります。 find /home -user nobody -group nobody で実行していますが毎日3時間以上かかる上、負荷も異常に上がってしまいます。 何かもっと良い方法はないでしょうか。毎日のことなので差分で検索するようなイメージのほうがいいように思いますが、 具体的なコマンドとともにアドバイスいただけたら嬉しいです。

みんなの回答

  • dev_null
  • ベストアンサー率67% (37/55)
回答No.5

的外れかもしれませんが、ext3ならファイル数の増加にともなるI-NODEの劣化とか考えられます。

tanpopo012
質問者

お礼

ありがとうございました。

  • ki073
  • ベストアンサー率77% (491/634)
回答No.4

No.3です。 他の方が書いておられるようにHDDの問題か、もしネットワーク越しのHDDアクセスでものすごく低下している可能性もあります。 こちらで実験した結果 Scientific Linux 6.5 HDD使用サイズ 約700GB ファイル数 約70万 これで実行すると time sudo find . -user nobody -group nobody で2.2秒でした。NFS経由で他のPCから実行した場合で2分44秒でネットワーク経由だと遅くなります。 まずはHDDのSMARTチェックされてはいかがでしょうか webminを入れておくと、SMARTやその他設定も簡単にできます。 http://www.webmin.com/

tanpopo012
質問者

お礼

検証までして頂いてありがとうございます。こちらのHDDの問題がありそうですね。 ありがとうございましいた。

  • ki073
  • ベストアンサー率77% (491/634)
回答No.3

確認ですが、findはroot権限でやっていますか? rootではない場合は、アクセスできないディレクトリがあるとその旨警告がでます。 警告が出ているようでしたらかなり検索を遅くしています。 それとコピーはどのようにしていますか? findで出力されるファイル全部を対象にコピーあるいは、既にコピーされているかどうか確認されているのでしょうか? その場合は、-mtimeで何日前までの指定ができますので、findが出力するファイル数を減らすことができます。 200GB程度なら、rsyncで差分コピーするのが、全体のバックアップも兼ねて速くて簡単なように思いますが。

tanpopo012
質問者

お礼

find /home -user nobody -group nobody > nobody.txt  で 対象物のリストを書き出しているだけです。root権限で実行しています。 過去24時間以内に更新されたファイルを対象にするべく find /home -mtime -1 -user nobody -group nobody を実行すると 余計時間がかかってしまいました。

回答No.2

No1さんも指摘していますが、要因、原因を追究しないまま、何か代替といのは、意味不明な行動です。 要因を、とりのぞいてからでないと、何やっても同じです。 それとも何か特定のアプリの宣伝でしょうか。

tanpopo012
質問者

お礼

想像力豊かなご回答ありがとうございました。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

3時間以上というのはコピーする時間も含めてでしょうか? 私が主に使用しているのはFreeBSDなので直接比較はできませんが、 ファイル数+フォルダ数: 約25.7万件 総合計容量: 約640GiB /homeはnfsでマウント user, groupがnobodyのファイルなし の条件で find /home -user nobody -nogroup -print に2分もかからなかったので user, groupがnobodyのファイルが異常に多いのか コピーに時間がかかってるか のような気がしますけど。 他に気になる点としては、もしfindで -exec cp ~ などとしてる場合はファイル(質問文のfindの指定だとディレクトリも)が見つかる度にcpを起動するので、多少遅くはなります。 あまり考えたくない事として、ディスクに異常があってリトライが頻発してる可能性というのもありえますが・・・

tanpopo012
質問者

お礼

単に find /home -user nobody -group nobody > nobody.txt で書き出しています。だいたい8000件ほどヒットして書き出されます。 ディスクの問題かもしれませんね。

関連するQ&A