rsyncの基本的な使い方を覚えましょう。
昔、WinSCPでLinuxサーバーからLinuxサーバーへ転送しているのを見たことがあった。WinSCPでWindows経由してたわけです。それをみて「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"オプションをつけると・・・?チョット嬉しい。
参考URL
http://double7up.blog72.fc2.com/blog-entry-13.html
http://d.hatena.ne.jp/nodchip/20090908/1252414199
http://d.hatena.ne.jp/koseki2/20090424/rsync
追記
2016-10-28 ちょっと書き換え