■環境
CentOS 7.6
rsync.x86_64 3.1.2-10.el7
#1.rsyncのインストール
yumにてインストールを実施します。
転送元サーバ、転送先サーバの両方にてインストールを実施します。
##1.1 パッケージ確認
[root@cent76-01 ~]# yum list rsync
≪中略≫
Available Packages
rsync.x86_64 3.1.2-10.el7 base
[root@cent76-01 ~]#
##1.2 パッケージインストール
[root@cent76-01 ~]# yum install -y rsync
≪中略≫
===========================================================================
Package Arch Version Repository Size
===========================================================================
Installing:
rsync x86_64 3.1.2-10.el7 base 404 k
Transaction Summary
===========================================================================
Install 1 Package
≪中略≫
Installed:
rsync.x86_64 0:3.1.2-10.el7
Complete!
[root@cent76-01 ~]#
#2.手動でのコマンド実行
rsyncはオプションが複数あるので、必要に応じて設定をします。
#2.1 コマンドサンプル
#事前確認
rsync -avzn /var/rsync/source 192.168.142.42:/var/rsync/target
#転送用(バックアップ)
rsync -avz --stats --progress --bwlimit=10240 /var/rsync/source 192.168.142.42:/var/rsync/target
⇒アーカイブモードで
#転送用(レプリケーション)
rsync -avzc --delete --stats --progress --bwlimit=10240 /var/rsync/source 192.168.142.42:/var/rsync/target
##2.2 コマンド詳細
以下の[source]と[target]については2.2.1章で、[option]について2.2.2~2.2.3章で記載します。
rsync [option] [source] [target]
###2.2.1 送信元/送信先ディレクトリ指定
同期元ディレクトリについては、PATH名の後ろに"/"をつけるかどうかで動作が変わります。
"/"をつける場合 (/dir/)
→ディレクトリ直下のファイルのみ同期します。
"/"をつけない場合 (/dir)
→ディレクトリとディレクトリ配下のファイル/ディレクトリを同期します。
リモートホスト指定については、ディレクトリ名の前にホスト名やIPアドレスを記載することで指定可能。
server1:/dir/dir
192.168.142.1:/dir/dir
###2.2.2 コマンドオプション
option | 内容 |
---|---|
-a | アーカイブモード ※詳細下記(2.2.3) |
-v | 動作内容を表示 |
-n | 試験モード。実際には動作せず、動作内容だけ表示する |
--progress | 転送の進行状況を表示する |
--stats | ファイル数や転送サイズを表示する |
-c | 更新日とサイズではなく、チェックサムで変更の有無をチェックする |
-u | 同期先のファイルの方が新しい場合はスキップする |
--inplace | ファイルを上書きする |
-remove-source-files | 同期後にファイルを削除する |
--delete | 同期元にないファイルを同期先から削除する |
--delete-before | 同期先にないファイルを同期前に削除する |
--delete-after | 同期先にないファイルを同期終了後に削除する |
-z | 転送中のデータを圧縮する |
--compress-level=[level] | データの圧縮レベルを指定する(0-9) |
--port=[port_num] | ポート番号を指定する |
-h | 字を読みやすい単位で表示する |
--bwlimit=[speed] | 転送速度を指定(単位はkbps) |
###2.2.3 アーカイブモードの動作
有効/無効 | option | 内容 |
---|---|---|
有効 | -r | ディレクトリを再帰的に処理する |
有効 | -l | シンボリックリンクをシンボリックリンクのままコピーする |
有効 | -p | パーミッションを保持する |
有効 | -t | タイムスタンプを保持する |
有効 | -g | 所有グループをそのまま保持する |
有効 | -o | 所有者をそのまま保持する(自分以外の所有者を保持するにはroot権限が必要) |
有効 | -D | デバイスファイルや特殊ファイルを保持する(「--devices --specials」相当) |
有効 | --specials | 特殊ファイルを保持する |
無効 | -H | ハードリンクを保持する |
無効 | -A | CL(アクセス制御リスト)を保持する |
無効 | -X | 拡張属性を保持する |
#3.daemonモードでの実行
通常コマンド実行の場合はパスワード等の入力が必要となりますが、daemonモードを利用することでパスワード入力の省略や定期実行で利用しやすい状態を準備することが出来ます。
◇daemonモードでできること
・ユーザ認証(無しも可)
・パスワードの省略(パスワード無しも可)
・同期元/先のIPアドレス制限
◇daemonモードでできないこと(やりにくいこと)
・rsyncサーバ側のディレクトリ変更
・リアルタイム同期(rsync+lsyncで実現)
##3.1 rsync実行ユーザについて
rsyncを実行するにあたり、rsyncクライアント側のOSユーザを意識する必要があります。
事前にrsyncサーバ側に、rsyncクライアント側のrsyncを実行するOSユーザのユーザ名とrsync用のパスワードを登録しておき、rsync実行時に認証して動作させることが出来ます。
※なお、configを省略することでユーザ/パスワード認証を利用しないことも可能です。
◇ユーザについて
rsyncクライアント側のrsync実行ユーザはOSユーザとして存在している必要がありますが、rsyncサーバ側には同様のOSユーザを作成しておく必要はありません。rsyncサーバ側は/etc/rsyncd.conf
およびetc/rsyncd.secrets
に記載するのみとなります。
◇パスワードについて
パスワードはrsync用のパスワードとなりますので、OS用のパスワードとは別に設定します。
##3.2 rsyncサーバの準備
サーバ側は以下2ファイルを事前に設定しておきます。
・/etc/rsyncd.conf
→rsyncの設定ファイル
・/etc/rsyncd.secrets
→rsyncの認証ユーザ/パスワードファイル
※認証を利用しない場合は不要です。
###3.2.1 /etc/rsyncd.conf
config設定を記載します。
config内容はGlobal options
とModule options
に分けられます。
Module options
はrsyncサーバ側の同期ディレクトリやユーザ/パスワード認証の有無を記載します。
uid = root
gid = wheel
[backup001]
path = /var/rsync/target
read only = no
auth users = user1,user2
secrets file = /etc/rsyncd.secrets
※auth users
、secret file
を記載しない場合、ユーザ/パスワード認証無しで利用できます。
#
# Global options
#
uid = [rsync daemon実行ユーザ]
gid = [rsync daemon実行ユーザグループ]
log file = [ログファイルPATH,指定なしでsyslogに出力]
log facility = [ログレベル,デフォルトはdaemon]
pid file = [pidファイルPATH]
hosts allow = [接続を許可するホスト、CIDR]
hosts deny = [接続を許可しないホスト、CIDR]
dont compress = [圧縮しない拡張子]
#
# Module options
#
[モジュール名]
comment = [コメント]
path = [同期ディレクトリ]
auth users = [認証ユーザ名]
secrets file = [認証ユーザパスワードファイル]
read only = [readonly指定、デフォルトはyes]
###3.2.2 /etc/rsyncd.secrets
/etc/rsyncd.conf
のsecret file
に記載したファイルにユーザとパスワードをコロン区切りで記載します。
なお、本ファイルはrsync daemonを起動するユーザを所有者とし、パーミッション600で設定しておく必要があります。
user1:passwd1
user2:passwd2
# ll /etc/rsyncd.secrets
-rw------- 1 root root 29 7月 4 11:21 /etc/rsyncd.secrets
##3.3 rsyncクライアントの準備
サーバ側は以下1ファイルを事前に設定しておきます。
・/etc/rsync.passwd
→rsyncのパスワードファイル
※認証を利用しない場合は不要です。
###3.3.1 /etc/rsync.passwd
クライント側のrsync実行ユーザのパスワードのみを記載します。
なお、サーバ側の/etc/rsyncd.conf
に記載されているユーザuser1
を利用するものとします。
なお、本ファイルもrsyncコマンドを実行するユーザを所有者とし、パーミッション600で設定しておく必要があります。
passwd1
# ll /etc/rsync.passwd
-rw------- 1 user1 user1 7 7月 4 10:55 /etc/rsync.passwd
##3.4 rsync daemonの起動
rsyncサーバ側でdaemonの起動を行います。
systemctl start rsyncd.service
OS起動時に自動起動する場合は以下も実行します。
systemctl enable rsyncd.service
なお、systemctlを利用しない場合、以下コマンドで起動可能です。
rsync --daemon --config=/etc/rsyncd.conf
※--config
を記載しない場合、デフォルトでは/etc/rsyncd.conf
ファイルを読み込みます。
##3.5 rsyncコマンドの実行
rsyncクライアント側でコマンドを実行します。
コマンドには、サーバ側の/etc/rsyncd.conf
のModule options
の設定を利用します。
rsync -avz --password-file=/etc/rsync.passwd /var/rsync/source rsync://192.168.142.42/backup001
option | 内容 |
---|---|
--password-file=[passwd_file] | パスワードファイルを指定 |
rsync://[server]/[module_name] | 接続するrsyncサーバとModule名を記載 |
※rsyncサーバの接続ではModule名以外を指定するとエラーとなりますので、別の接続ディレクトリを指定する場合はrsyncサーバの/etc/rsyncd.conf
に追加のModule options
を指定し、path
にて定義してください。
##3.6 エラーメッセージ
@ERROR: auth failed on module [モジュール名]
rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]
こちらのメッセージの場合、以下のエラーパターンが考えられます。
①rsyncサーバ側の/etc/rsyncd.secrets
のパーミッションが誤っている場合。
rsyncサーバの/etc/rsyncd.secrets
の所有者(rsync daemon実行ユーザ)、パーミッション(600)を見直してください。
②rsyncサーバの/etc/rsyncd.secrets
の記載が誤っている場合。
rsyncサーバの/etc/rsyncd.secrets
の内容を見直してください。
rsync: could not open password file /etc/rsync.passwd: Permission denied (13)
rsync error: syntax or usage error (code 1) at authenticate.c(187) [sender=3.1.2]
①rsyncクライアント側の/etc/rsync.passwd
のパーミッションが誤っている場合。
/etc/rsync.passwd
の所有者(rsync実行ユーザ)、パーミッション(600)を見直してください。
②rsyncクライアント実行ユーザがrsyncサーバの/etc/rsyncd.conf
-モジュール
-auth users
に記載されていない場合。
rsyncサーバの/etc/rsyncd.conf
-モジュール
-auth users
、および/etc/rsyncd.secrets
を見直してください。
③rsyncクライアントの/etc/rsync.passwd
の記載が誤っている場合。
rsyncクライアントの/etc/rsync.passwd
を見直してください。
#参考
https://linux.die.net/man/1/rsync