【Linux豆知識】rsyncって実はよく分かってなかった

rsyncの基本知識

ローカルのファイルをリモートホストへ転送

rsync -avz {ローカルパス} {リモートホスト}:/{パス}
例)rsync -avz /home/test/ 192.168.1.1:/home/test

実際にはコピーせずにまず確認したい場合は「–dry-run」か「-n」を付けて実行する。

rsync -avz --dry-run {ローカルパス} {リモートホスト}:/{パス}
例)rsync -avz --dry-run /home/test/ 192.168.1.1:/home/test

rsyncは 基本 SSH 経由で実行されますので、リモートホスト側でSSHのサービスを起動しておく必要があります。ここが正直理解できていなくて最初は困りました。

なんだよ、SCPもrsyncも結局はSSHかよ!

起動していない場合は、以下のようなエラーが発生します。

ssh: connect to host 192.168.1.1 port 22: No route to host

ポートを「22」以外にしている場合は以下のようにすると接続できます。

例)rsync -avz -e "ssh -p 20022" /home/test/ 192.168.1.1:/home/test

SSHを使わないで rsync する場合

何らかの理由でリモートホストでSSHサービスを起動できない場合、rsyncサービスを起動してポート「873」でやり取りするのが一般的です。

リモート側設定

rsyncデーモンをインストール

rsync-daemonをインストールしなくても、「/usr/bin/rsyncd –daemon」にてrsyncデーモンモードで起動できますが、再起動時の設定とかめんどくさそうなのと、停止の方法がよく分からないので・・・

あとrysnc-daemonをインストールしていないと「systemctl start rsyncd.service」にて起動できず、「rsyncd.service: Unit rsyncd.service not found」のエラーが発生します。

dnfはyumの後継でyumと基本的に同じです。

dnf -y install rsync-daemon

rsyncデーモンを起動しておきます、リモート側だけでいいです。

systemctl start rsyncd.service

/etc/rsyncd.secrets認証リストファイルを作成

接続するユーザーとパスワードをコロン区切りで設定します。

userAAA:passwoooooooord

権限を変える、変えないとエラーが発生する

chmod 600 /etc/rsyncd.secrets

rsync設定ファイル設定
/etc/rsyncd.confを設定します。allow に複数IP指定する場合はスペースで区切ります。

uid = root
gid = root
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
dont compress = *.gz *.tgz *.zip *.pdf *.sit *.sitx *.lzh *.bz2 *.jpg *.gif *.png
[moduleAAA]
comment = moduleAAA
path = /home/test
secrets file = /etc/rsyncd.secrets
hosts allow = {接続してくるサーバーIP1} {接続してくるサーバーIP2}・・・
hosts deny = *

クライアント側設定

パスワードファイル設定(/etc/rsync.passwd)

接続するパスワードを入力します。

passwoooooooord

権限を変える、変えないとエラーが発生する。

chmod 600 /etc/rsync.passwd

では、準備完了したのでrsyncしてみる!

rsync -avz --password-file=/etc/rsync.passwd rsync://userAAA@192.168.1.1/home/test /home/test

オプション

さて、今更ですがオプションです。

基本的には「-avz」を設定しておけば間違いないです、「-avz」の意味合いは以下の通りです。

-a:「-rlptgoD」を指定するのと同じ効力!つまりスーパー汎用的

ちなみに「-rlptgoD」とは以下の通り

r:ディレクトリを再帰的に処理 
l:シンボリックリンクをシンボリックリンクのままコピー 
p:パーミッションを保持
t:タイムスタンプを保持 
g:所有グループをそのまま保持 
o:所有者をそのまま保持 
D:deviceファイルを保持する、specialファイルを保持する

残りの「-vz」はわかりやすいですね。

-v 動作内容を表示する
-z 転送中のデータを圧縮する