rsyncについて
rsyncは、ネットワーク経由のコピーも可能なファイル・ディレクトリ同期ツールで、 コマンドひとつでディレクトリツリーを一気に転送できるほか、 差分のみの転送やコピー対象の条件指定といった多彩な機能を搭載しています。
特徴
- 特別な設定や管理情報などが必要なく、手軽に使える。
- SSHを利用することでセキュアなファイル転送を実現する。
- 転送条件などをきめ細かく指定できる。
- コマンドラインツールなので、自動化・バッチ処理にも最適。
- デーモンとして起動することで、匿名アクセスにも対応可能。
- Linux、Cygwinでも標準搭載されている。
- パーミッション変更のオプションがある。
他の同期手段との比較
[FTPのデメリット]
- 通信が暗号化されない。
- ファイル内容が平分でネットワークを流れる。(セキュリティ面で最悪)
- HTMLはどうせ公開するのでOKだが、PHP等プログラムコードや、configはダメ
[SCP]
- 転送中のデータが暗号化され、FTPよりセキュア
- OpenSSHがインストールされている必要がある(Linuxには標準で入っている)
[SVN]
[rsync]
- SSHリモートシェル経由で通信可能なためFTPよりセキュア
scpとrsyncの違い
scpは転送先サーバに同名ファイルがあると そのファイルをopenして転送開始する。 そのため、 転送最中にファイルを参照すると 中途半端な内容を読込んでしまう危険性がある。 また転送が途中で中断されても 転送先のファイル内容は戻らないようだ。 これはつまり、 scpで転送途中にCtrl + Cなどで中断すると 転送先のファイルが破損する可能性があることを意味する。
rsyncは、ファイル転送時は一時ファイルに対してデータを書き出し、 転送が完了してからmvするため、上記のような心配はない。
rsyncはファイルの保全性を確保できるという点ではscpより優れている。
- ファイルのチェックサムを比較して異なる箇所のみ送信
- そのためファイルの差分のみを転送し、ネットワークに対する負荷も少ない。
- ファイルのサイズや更新日付を参照
- そのため更新されているファイルのみを転送するので非常に効率がよい。
[rsync注意点]
rsyncは送信元ディレクトリの最後に/(スラッシュ)を付けるかどうかで転送の挙動が変わる。
rsync /home/sample/ server1:/home/
rsync /home/sample server1:/home/
ほとんど同じようだが、上段のrsyncではserver1の/home/の中に/home/sample/ 配下のファイルを転送する。つまり/home/sampleというディレクトリは作成しない。 しかし、下段の方は/home/sampleというディレクトリを作ってその中にファイルを転送する。
rsyncには-nオプションを指定すると、転送されるファイルを事前に確認できる。 転送前に-nオプションで確認する癖をつけるとコマンドに間違いがあっても事前に気づける。 また-excludeオプションで転送しないファイルを意図的に指定することができる。 転送に無駄なファイルや転送してはまずいファイルなどはこのオプションで除外できる。
いまやrsyncの情報は豊富にあるが、定番であろうオプションを以下に纏めておく。
- -r: ディレクトリを再起的に処理する
- -l: シンボリックリングをシンボリックリングとしてコピーする
- -p: パーミッションを維持する
- -t: タイムスタンプを維持する
- -g: グループを維持する
- -o: オーナーを維持する
- -v: 転送状況を詳細表示する