今号では、rsync コマンドを使ったファイル転送の方法について説明します!
rsync とは
rsync とは、サーバ間でファイルを同期、転送する仕組みです。
用途は ftp/sftp と似ていますが、rsync は差分転送という技術でファイルを転送しており、ファイルの変更部分のみを検出して転送します。
そのため、同ファイルを 2回目以降転送する場合は非常に高速に動作し、定期的なバックアップやミラーリングの操作に適しています。
なお、前回ご紹介した sftp コマンドの記事と同様 Linux や Windows 上のターミナルで rsync コマンドを使う前提で説明します。
基本の書式
- ローカル→リモートサーバへファイルを転送
rsync ローカルのファイル リモートのユーザ名@リモートのホスト名:ディレクトリのパスの書式で実行します。
なお、rsync は sftp のように事前に接続を確立しておくのではなく、コマンド実行時点で一時的に接続を確立し、ファイルの転送を行います。例: $ rsync /tmp/data/1.log ruser@172.30.10.10:/data/ ruser@172.30.10.10's password: $
※パスワード認証の場合、リモートユーザのパスワードが求められます。
ファイル転送が成功した場合、デフォルトでは何も表示されませんが、-v オプションを付与することによって実行時の詳細な情報が表示されるようになります。
例: $ rsync -v /tmp/data/1.log ruser@172.30.10.10:/data/ sent 40 bytes received 12 bytes 20.80 bytes/sec total size is 0 speedup is 0.00 $
- リモート→ローカルサーバへファイルを転送
rsync リモートのユーザ名@リモートのホスト名:ファイルのパス ローカルのディレクトリの書式で実行します。例: $ rsync ruser@172.31.7.54:/data/1.log.bkp /tmp/data/ $
-v オプションを付与した場合、下記のような実行結果となります。
$ rsync -v ruser@172.31.7.54:/data/1.log.bkp /tmp/data/ 1.log.bkp sent 43 bytes received 83 bytes 84.00 bytes/sec total size is 0 speedup is 0.00 $
なお、ファイルのパス部分にはディレクトリを指定することができ、この場合は当該ディレクトリ配下のすべてのファイルを転送します。
例: (ローカルサーバ側での操作) $ ls /tmp/data/ 1.log 2.log 3.log 4.log 5.log $ rsync -avz /tmp/data/ ruser@172.31.7.54:/data/ sending incremental file list ./ sent 179 bytes received 19 bytes 79.20 bytes/sec total size is 0 speedup is 0.00 $
例: (リモートサーバ側での操作) $ ls /data/ 1.log.bkp 2.log.bkp 3.log.bkp 4.log.bkp 5.log.bkp (ローカルサーバ側での操作) $ rsync -av ruser@172.31.7.54:/data /tmp/data/ receiving incremental file list data/ data/1.log.bkp data/2.log.bkp data/3.log.bkp data/4.log.bkp data/5.log.bkp sent 28 bytes received 201 bytes 152.67 bytes/sec total size is 0 speedup is 0.00 $
※各オプションの意味については後述します。
rsync コマンドのオプション
rsync コマンドの基本的なオプションをご説明します。
※すべてのオプションはご紹介せず、よく使用されると考えられるものを抜粋しています。
- -a
アーカイブモード (ディレクトリ構成、パーミッション、グループなどを保持した状態) で転送します。
★基本的には付与しておくことを推奨します。$ rsync -a /tmp/data/1.log 172.30.10.10:/data/
- -v
実行時の詳細な情報を表示します。$ rsync -v /tmp/data/1.log 172.30.10.10:/data/
- -r
ディレクトリ (ディレクトリ配下のサブディレクトリも) を再帰的に転送します。
ディレクトリごと転送したい場合に使用します。$ rsync -r /tmp/data/ 172.30.10.10:/data/
- -n
テスト用コマンド。
実際には変更を加えず、どのような動作になるかだけ表示します。$ rsync -n /tmp/data/1.log 172.30.10.10:/data/
- -z
ファイル転送時にデータを圧縮します。
ネットワーク転送速度が遅い環境において、帯域幅を削減したい場合に有効です。
★ファイルをたくさん転送する場合、付与しておくことを推奨します。$ rsync -z /tmp/data/*.log 172.30.10.10:/data/

