それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

rsyncの基本的な使い方。

rsyncの基本的な使い方を覚えましょう。

昔、WinSCPLinuxサーバーからLinuxサーバーへ転送しているのを見たことがあった。WinSCPWindows経由してたわけです。それをみて「Rsync使わないの?」「よく解りませんし、前にグチャグチャになったことがあるので」と答えが返ってきてヘナっとなった。「SCPの方が確実ですよ」と言われたこともある。まぁそうなんだけど。

WinSCPでなんてやってないでさ、Rsyncでパパットできるようになりませんか。Winscpでサーバー間の同期が出来ないので、ローカルのWindows経由は止めましょう。転送待ちですとか言わないようにしよう。

rsyncの特徴

  • 更新されたファイルだけを転送できる
  • Gzipで圧縮転送が可能
  • 使ってないファイルを消せる。
切れても途中から再開できる

転送再開ができるのがcp /scp転送と大きく違うところでしょう。

まずはこれだけ覚えよう 基本

rsync -avz [元] [先]

よく使うオプション

 --delete        :完全同期モード、不要なファイルは消す
 --update        :新規作成されたスキップする (既存の更新のみ
 --ignore-time   :更新されてないファイルは転送しない。
 -v, --verbvose  :処理中のファイル名を表示する。
 -l, --links     : シンボリックリンクを作り直す。
 -n, --dry-run   :転送をテストする。

本番環境でRsyncをミスると致命的です。使って覚えるしか無いのです。緊張する場面でも無理なく使えるように練習しましょう。

練習しましょう。使って覚えましょう。scp -r /cp -r に頼らず、Rsyncでコピーする習慣をつけましょう。

例:ホームディレクトリを別サーバーに移動する

rsync -av takuya@192.168.1.10:/home/takuya/ takuya@192.168.100.23:/home/takuya
転送する。
rsync -a SRC/ DIST

基本的には -aをつけます。-a は省略形です -a は-rlptgoD です。

コピーを作る

rsync -avz /var/www/example.com/ /home/www/example.com

コピー元にファイルを送る

rsync -avz  /home/www/example.com/ /var/www/example.com

コピー元にファイルの削除も反映させる。

rsync -avz --delete  /home/www/example.com/ /var/www/example.com

他の人の作業結果を消さないようにする

rsync -avz --update --delete  /home/www/example.com/ /var/www/example.com

他の人の作業結果を取り込む

rsync -avz --update --delete  /var/www/example.com/  /home/www/example.com

更新ファイルだけ転送

更新ファイルだけを転送するには、具体的オプションを指定します。


rsync -I /home/www/example.com/ /var/www/example.com
#または
rsync --ignore-times /home/www/example.com/ /var/www/example.com 

サーバー間の移動の場合

サーバー間でファイル移動する。このときユーザー情報を転送しません。
パーミッションや、ユーザー情報を転送しないようにします。

転送すると困ることが多いです。uid/gid/modeを無視します。

サーバー間でコピーの例
rsync -rItD /home/www/example.com/ www-data@192.168.2.1:/var/www/example.com

サーバー側の他の更新ファイルを上書きしない。

サーバー側も更新ファイルを持っている場合、サーバー側にある、新しいファイルを上書きすると困ります。サーバーに大勢がファイルを追加する場合。サーバーの新しいファイルを維持する。

サーバー側の方が新しければ、上書きしない
rsync -rItD --update /home/www/example.com/ www-data@192.168.2.1:/var/www/example.com

テストモード

rsync -nave /home/www/example.com/ www-data@192.168.2.1:/var/www/example.com
#-n を追加した。

まず、転送をテストしましょう。転送テストでミスが見つかります。

転送先を転送元に一致させる。

二つのディレクトリを全く同じ構造にする。

rsync -av --delete /home/www/example.com/ /var/www/example.com
#--deleteをつける

スラッシュをつけ忘れると悲劇が起こります。スラッシュには注意しましょう。コピペするときによく間違います。

サーバー側に合わせる。
rsync -av --delete /var/www/example.com/ /home/www/example.com/ 
#先例からSRC/DISTが逆になった。
サーバー側の更新ファイルをだけを持ってくる
rsync -av --update 192.168.2.100:/var/www/example.com /home/www/example.com/

#--delete の代りに--updateを使う。

よくある間違い

末尾のスラッシュを忘れる。または、末尾にスラッシュをつけ忘れる

rsync -av /var/www 192.168.2.1:/var/www #←スラッシュに注意

/var/www/www が出来てしまう。

cpコマンドと同じです。

cp /var/www  /var/www2    #/var/www2/www/index.html になる
cp /var/www/ /var/www2    #/var/www2/index.html     になる
コピー先にスラッシュ

つけてもつけなくても動作は同じ。つけても意味がないのでつけないことにしましょう。

Rsyncで文字化けする。

Rsyncで文字化けする場合はiconvオプションを使うことで回避できる。

rsync -avzu --iconv=CP932,UTF-8 (バックアップ元) (バックアップ先)

ただし--iconvオプションが使えるのはRsyncバージョン3.0以降らしい。

最後に

"--progress"オプションをつけると・・・?チョット嬉しい。

追記

2016-10-28 ちょっと書き換え