karasuyamatenguの日記

 | 

2011-12-03

rsyncで再開可能なファイル転送

12:24

結論: 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/bigfile

takao$ 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.93

real	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.94

real	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

トラックバック - http://d.hatena.ne.jp/karasuyamatengu/20111203/1322882652
 | 
Connection: close