rsyncを利用してバックアップを行う(CentOS7.6)

rsyncを利用してバックアップをやってみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/9785d6c0-015e-132d-e550-03d432ac7506.png)

■環境
CentOS 7.6
rsync.x86_64 3.1.2-10.el7



#1.rsyncのインストール
yumにてインストールを実施します。
転送元サーバ、転送先サーバの両方にてインストールを実施します。


##1.1 パッケージ確認

```text:yum_list
[root@cent76-01 ~]# yum list rsync

≪中略≫

Available Packages
rsync.x86_64              3.1.2-10.el7            base
[root@cent76-01 ~]# 
```

##1.2 パッケージインストール

```text:yum_install
[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 コマンドサンプル

```text:rsync_command_sample
#事前確認
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章で記載します。

```text:rsync_command_description
rsync [option] [source] [target]
```



<br>
###2.2.1 送信元/送信先ディレクトリ指定

同期元ディレクトリについては、PATH名の後ろに"/"をつけるかどうかで動作が変わります。
`"/"をつける場合 (/dir/)`
→ディレクトリ直下のファイルのみ同期します。

`"/"をつけない場合 (/dir)`
→ディレクトリとディレクトリ配下のファイル/ディレクトリを同期します。

リモートホスト指定については、ディレクトリ名の前にホスト名やIPアドレスを記載することで指定可能。
`server1:/dir/dir`
`192.168.142.1:/dir/dir`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/62dc6698-3f8d-e202-4751-b2e6c9f3b39f.png)



###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  | 拡張属性を保持する

https://www.atmarkit.co.jp/ait/articles/1702/02/news031.html


#3.daemonモードでの実行
通常コマンド実行の場合はパスワード等の入力が必要となりますが、daemonモードを利用することでパスワード入力の省略や定期実行で利用しやすい状態を準備することが出来ます。

◇daemonモードでできること
・ユーザ認証(無しも可)
・パスワードの省略(パスワード無しも可)
・同期元/先のIPアドレス制限

◇daemonモードでできないこと(やりにくいこと)
・rsyncサーバ側のディレクトリ変更
・リアルタイム同期(rsync+lsyncで実現)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/9518080a-34c6-9ef3-13a0-847a79146fe9.png)


##3.1 rsync実行ユーザについて
rsyncを実行するにあたり、rsyncクライアント側のOSユーザを意識する必要があります。
事前にrsyncサーバ側に、rsyncクライアント側のrsyncを実行するOSユーザのユーザ名とrsync用のパスワードを登録しておき、rsync実行時に認証して動作させることが出来ます。
※なお、configを省略することでユーザ/パスワード認証を利用しないことも可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/c8c36862-b8db-93f5-c928-d6f9bff2c313.png)




◇ユーザについて
rsyncクライアント側のrsync実行ユーザはOSユーザとして存在している必要がありますが、<b>rsyncサーバ側には同様のOSユーザを作成しておく必要はありません。</b>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サーバ側の同期ディレクトリやユーザ/パスワード認証の有無を記載します。


```text:/etc/rsyncd.conf_sample
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`を記載しない場合、ユーザ/パスワード認証無しで利用できます。


```text:/etc/rsyncd.conf_description
#
# 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`に記載したファイルにユーザとパスワードをコロン区切りで記載します。
なお、本ファイルは<b>rsync daemonを起動するユーザを所有者とし、パーミッション600で設定しておく必要があります。</b>

```text:/etc/rsyncd.secrets_sample
user1:passwd1
user2:passwd2
```

```text:permission_/etc/rsyncd.secrets
# 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`を利用するものとします。
なお、本ファイルも<b>rsyncコマンドを実行するユーザを所有者とし、パーミッション600で設定しておく必要があります。</b>

```text:/etc/rsync.passwd_sample
passwd1
```

```text:permission_/rsync.passwd
# ll /etc/rsync.passwd
-rw------- 1 user1 user1 7  7月  4 10:55 /etc/rsync.passwd
```

##3.4 rsync daemonの起動
rsyncサーバ側でdaemonの起動を行います。

```text:service_start
systemctl start rsyncd.service
```

OS起動時に自動起動する場合は以下も実行します。

```text:service_enable
systemctl enable rsyncd.service
```

なお、systemctlを利用しない場合、以下コマンドで起動可能です。

```text:rsync_start
rsync --daemon --config=/etc/rsyncd.conf
```
※`--config`を記載しない場合、デフォルトでは`/etc/rsyncd.conf`ファイルを読み込みます。


##3.5 rsyncコマンドの実行
rsyncクライアント側でコマンドを実行します。
コマンドには、サーバ側の`/etc/rsyncd.conf`の`Module options`の設定を利用します。

```text:rsync_command
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 エラーメッセージ
```text:user_password_error
@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`の内容を見直してください。


</br>
</br>

```text:client_passwd_permission_error
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

https://access.redhat.com/documentation/ja_jp/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/sect-managing_confined_services-rsync-configuration_examples

https://www.atmarkit.co.jp/ait/articles/1702/02/news031.html

https://www.atmarkit.co.jp/ait/articles/1702/03/news020.html

https://changineer.info/server/centos_basic/lsyncd_rsynd.html

http://www.maruko2.com/mw/rsync_%E3%81%A7%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AE%E5%90%8C%E6%9C%9F%EF%BC%88%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%EF%BC%89