rsyncで再開可能なファイル転送
結論: rsnc --partial --appendで再開可能なファイル転送ができる
転送中に障害が発生
takao$ rsync -av --progress --partial --append bigfile 192.168.1.181:/var/tmp/
bigfile
562823168 52% 43.22MB/s 0:00:11 ^C
rsync error: unexplained error (code 130) at rsync.c(541) [sender=3.0.7]
約六割が転送済み
takao$ ls -l bigfile /var/tmp/bigfile
-r-xrwsr-x 1 www-data www-data 1073709056 2011-11-24 23:48 bigfile
-rw------- 1 tengu tengu 605552640 2011-12-02 17:25 /var/tmp/bigfile
転送再開
takao$ rsync -av --progress --partial --append bigfile 192.168.1.181:/var/tmp/
sending incremental file list
bigfile
1073709056 100% 31.61MB/s 0:00:14 (xfer#1, to-check=0/1)sent 468213655 bytes received 31 bytes 24010958.26 bytes/sec
total size is 1073709056 speedup is 2.29
転送再開後のファイル。
ちゃんと同じものがついている。
takao$ ls -l bigfile /var/tmp/bigfile
-r-xrwsr-x 1 www-data www-data 1073709056 2011-11-24 23:48 bigfile
-r-xrwsr-x 1 tengu www-data 1073709056 2011-11-24 23:48 /var/tmp/bigfiletakao$ md5sum bigfile /var/tmp/bigfile
aeb322de486a4d1a7dc6302be48468bf bigfile
aeb322de486a4d1a7dc6302be48468bf /var/tmp/bigfile # 転送されたファイル
--partialは途中まで送ったファイルを残してくれる
これが無いと転送中断されたファイルは片付けられてしまう
takao$ rsync -av --progress bigfile 192.168.1.181:/var/tmp/
sending incremental file list
bigfile
481230848 44% 56.08MB/s 0:00:10 ^C
rsync error: unexplained error (code 130) at rsync.c(541) [sender=3.0.7]
takao$ ls -l /var/tmp/bigfile
ls: cannot access /var/tmp/bigfile: No such file or directory # 残らない
--appendは転送の再開を可能にしてくれる
これが無いとまた全部転送されるよう。表示される数値は最終的な転送量なのでわからないが所要時間で見ると--appendの付いている方が速いのがわかる。
--append無しだと
takao$ time rsync -av --progress --partial bigfile 192.168.1.181:/var/tmp/
sending incremental file list
bigfile
1073709056 100% 27.05MB/s 0:00:37 (xfer#1, to-check=0/1)sent 180767435 bytes received 209261 bytes 3203127.36 bytes/sec
total size is 1073709056 speedup is 5.93real 0m56.307s
user 0m20.520s
sys 0m1.470s
--appendありだと
takao$ time rsync -av --progress --partial --append bigfile 192.168.1.181:/var/tmp/
sending incremental file list
bigfile
1073709056 100% 50.15MB/s 0:00:03 (xfer#1, to-check=0/1)sent 180639355 bytes received 31 bytes 21251692.47 bytes/sec
total size is 1073709056 speedup is 5.94real 0m8.069s
user 0m2.930s
sys 0m0.970s
まとめ: rsync --partial --append で中断されても再開可能なファイル転送ができる
- こういうときは大抵--progressも欲しい
- -vaを併せて使うのが一般的かも
備考
HTTPで再開可能なアップロード方を探していたが満足なものがなかった。nginxのupload_moduleにはupload_resumableというオプションがあるけど、nginx独自のプロトコルのようでブラウザサポートはあまり無いよう。
youtubeには一般ブラウザによる再開可能なアップロード機能があるようだが、OSSウェブサーバでどう実装すればいいのかわからない。というわけで、rsyncに頼ることにした。
todo: これでrsyncをマスターする http://d.hatena.ne.jp/takuya_1st/20100511/1273588133