ファイルシステムにやさしく rsync する
rsync
の I/O 優先度を下げてはみたけど、load average がやっぱり上がってしまう。
あるディレクトリのスキャン中に数字が上がるのに気づいたので、ls
かけてみると全然反応がかえってこない。数えたらファイル数が 50,000 を超えていた。
ディレクトリの下に大量のファイルを置くな、という話は聞くし、たとえば git はファイルシステムの性能問題があるというので、.git/objects
の下はサブディレクトリで区切られていたりする。
幸い今回の件のファイル名は md5 になっている。
とりあえず git のアプローチを拝借することにして rename
を書いた。
$ cd too/much/files $ echo {0..255} | xargs -n1 printf "%02x\n" | xargs mkdir -p $ rename 's#^(..)#$1/#' *
これで rsync
したら load average が安定するようになった。