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のサービスを起動しておく必要があります。ここが正直理解できていなくて最初は困りました。
起動していない場合は、以下のようなエラーが発生します。
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 転送中のデータを圧縮する