rsync 3.xがリリースされて、ファイル数が大量にあっても快適にバックアップが取れるようになったので、写メあぷのデータ用ドライブを新調してデータ移行。
データだけでもこまごまとしたのが100万ファイル以上あるので、rsync 2.xでバックアップすると無茶な時間とメモリ消費で結構大変。
rsync2.xが、一旦すべてのファイルを走査して比較するのに対してrsync 3.xはコピー元・コピー先を同時に走査しながらコピーしていくので、メモリ消費が少なく動作が軽いという記述をそこらで見かけるので、これを使ってみた。
rsync 3.0.5を本家から頂いてきてmakeし、/usr/bin/にコピーして、
$ sudo rsync -av /home/shameapu/ /mnt/hdd1/
とやってみるものの、これがもうひっじょーーーーーーに重くて、WEBサーバへのアクセスがままならない悲惨な状況に。原因はディスクI/Oやりすぎ。
てことで、転送速度を制限してリトライ
$ sudo rsync -av --bwlimit=2048 /home/shameapu/ /mnt/hdd1/
なんとも快適にコピーが始まりました。60GBほどあるので8時間半ぐらいの計算なので、負荷が大きくならないことを小一時間ほど確認してから放置。
4時間後、ちょっと自分のサイトを見ようとしたら重くて開かん。
Load Averageが30超え。
topで見ても特にrsyncがメモリやCPUを占有してるわけじゃないけど、
$ sudo kill -s SIGSTOP `pidof rsync`
としてやると軽くなるので、重い原因はrsyncで間違いないみたい。
どこまで進んだのか確認して、ディレクトリごとにコピーを実行していってみると、どうやらファイル数の非常に多いディレクトリに入ると重くなる模様。
コピー元とコピー先を比較するために、ディレクトリ内のファイル数を確認しようと、「linux ディレクトリ ファイル数」でググったら、1つのディレクトリに入れるファイル数は1万前後が限度っぽい記述がやたら目に入った。
あちゃー。ファイル数3万オーバーのディレクトリとか普通にある・・・
重くなるだけで止まるわけではないので無理矢理コピーを取ったが、そもそも1つのディレクトリに入るファイル数が多くなりすぎない運用が必要な模様。
現状、一ヶ月ごとに作ってるディレクトリを、週ごとに作るか毎日作ればこれから先の分は解決するわけだけど、サービスの性質上、すでにあるファイルの場所を変えるのは出来ない。
どうしたものか・・・
taramonera
この記事を読んで、rsync3.0.7に移行してみました。
1つのディレクトリに入れるファイル数にも限界があるのですね。