(Linux)rsyncでリモートファイルコピー

7-1.ファイル・アーカイブ

rsyncでリモートファイルのコピーをします。

コピー元は、ローカルの、/home/takk/srcディレクトリ
コピー先は、リモートの、takk@xxxxxx:/home/takk/destディレクトリ

前回と同じく、初めにコピー元のファイルを生成します。

~$ mkdir src
~/src$ seq 30 | perl -ne 'print chr' | split -db10
~/src$ stat -c'%n %y' *
x00 2016-08-07 22:32:51.798269497 +0900
x01 2016-08-07 22:32:51.798269497 +0900
x02 2016-08-07 22:32:51.798269497 +0900
~/test$ 

ローカルからrsyncコマンドでリモートへファイルコピー。

~/src$ rsync -r . takk@xxxxxx:/home/takk/dest
~/src$ 

リモート側にコピーされました。

takk@xxxxxx:~$ cd dest
takk@xxxxxx:~/dest$ stat -c'%n %y' *
x00 2016-08-07 23:09:21.501973064 +0900
x01 2016-08-07 23:09:21.501973064 +0900
x02 2016-08-07 23:09:21.501973064 +0900
takk@xxxxxx:~/dest$ 

ローカルでのrsyncの使い方と同様に、-uオプションで更新されたファイルのみコピーできます。また、ローカルでのファイル削除にも–deleteオプションで対応できます。

~/src$ touch x00
~/src$ rm x02
~/src$ stat -c'%n %y' *
x00 2016-08-07 23:10:10.874229712 +0900
x01 2016-08-07 22:32:51.798269497 +0900
~/src$ rsync -ru --delete . takk@xxxxxx:/home/takk/dest
takk@xxxxxx's password: 
~/src$ 

リモート側。

takk@xxxxxx:~/dest$ stat -c'%n %y' *
x00 2016-08-07 23:11:37.006865478 +0900
x01 2016-08-07 23:09:21.501973064 +0900
takk@xxxxxx:~/dest$ 

サイズの大きいファイルで確認してみましょう。rsyncに-vを指定して、コピー状況を確認します。
ロカール側で、78MByteぐらいのファイルaを生成して、リモートへコピーしてみます。

~/src$ rm *
~/src$ seq 9999999 > a
~/src$ stat a
  File: `a'
  Size: 78888888  	Blocks: 154080     IO Block: 4096   通常ファイル
Device: 801h/2049d	Inode: 7745799     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1001/    takk)   Gid: ( 1001/    takk)
Access: 2016-08-07 23:37:13.558200879 +0900
Modify: 2016-08-07 23:37:14.666200859 +0900
Change: 2016-08-07 23:37:14.666200859 +0900
 Birth: -
~/src$ time rsync -ruv --delete . takk@xxxxxx:/home/takk/dest
takk@xxxxxx's password: 
sending incremental file list
a

sent 78,908,250 bytes  received 35 bytes  6,312,662.80 bytes/sec
total size is 78,888,888  speedup is 1.00

real	0m12.075s
user	0m1.144s
sys	0m0.320s
~/src$ 

パスワード入力を合わせて、コピーに12秒かかりました。

リモート側はどうなっているでしょうか。

takk@xxxxxx:~/dest$ stat *
  File: 'a'
  Size: 78888888  	Blocks: 154080     IO Block: 4096   regular file
Device: fd01h/64769d	Inode: 2097585     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1201/    takk)   Gid: ( 1201/    takk)
Access: 2016-08-07 23:44:05.223612886 +0900
Modify: 2016-08-07 23:44:11.963656798 +0900
Change: 2016-08-07 23:44:11.963656798 +0900
 Birth: -
takk@xxxxxx:~/dest$ 

ローカルのファイルと同じサイズのファイルができていますね。

一旦リモートへファイルがコピーされると、再びrsyncをしても差分で済むのですぐに終わります。かかる時間の大半はパスワードの入力時間だけです。

~/src$ time rsync -ruv --delete . takk@xxxxxx:/home/takk/dest
takk@xxxxxx's password: 
sending incremental file list

sent 63 bytes  received 12 bytes  21.43 bytes/sec
total size is 78,888,888  speedup is 1,051,851.84

real	0m3.325s
user	0m0.024s
sys	0m0.008s
~/src$ 

ローカル側のaファイルを一部修正してrsyncを使ってみます。

~/src$ echo HELLO >> a
~/src$ md5sum a
04fb87507c5ba70f10a60e6e5b2751db  a
~/src$ time rsync -ruv --delete . takk@xxxxxx:/home/takk/dest
takk@xxxxxx's password: 
sending incremental file list
a

sent 43,495 bytes  received 62,223 bytes  19,221.45 bytes/sec
total size is 78,888,894  speedup is 746.22

real	0m5.164s
user	0m0.364s
sys	0m0.040s
~/src$ 

転送サイズは、実際のファイル差分よりも大きいですね。

リモート側を見てみます。

takk@xxxxxx:~/dest$ stat *
  File: 'a'
  Size: 78888894  	Blocks: 154080     IO Block: 4096   regular file
Device: fd01h/64769d	Inode: 2097586     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1201/    takk)   Gid: ( 1201/    takk)
Access: 2016-08-07 23:54:46.307791197 +0900
Modify: 2016-08-07 23:51:01.474325483 +0900
Change: 2016-08-07 23:51:01.482325536 +0900
 Birth: -
takk@xxxxxx:~/dest$ md5sum a
04fb87507c5ba70f10a60e6e5b2751db  a
takk@xxxxxx:~/dest$ 

コピーされています。ファイルの内容もローカルと一致しました。

コメント

タイトルとURLをコピーしました