banner
ECSS11

Kita ☆ Kita ☆

试试 Xlog 做博客(并把好久之前写的老文章搬过来)之每年都要换一个网站,也不知道何时是个头。

rsyncを使用してデータを定期的に同期する

まず、rsync の基本的な使用方法を知る必要があります。man rsyncを通じて簡単に理解できます。

ローカル:rsync [オプション...] ソース... [ターゲット]

SSH 経由のリモート接続:

プル: rsync [オプション...] [ユーザー@]アドレス:ソース... [ターゲット]

プッシュ: rsync [オプション...] ソース... [ユーザー@]アドレス:ターゲット

rsync リスニングサービス経由:

プル: 

  rsync [オプション...] [ユーザー@]アドレス::ソース... [ターゲット]
  rsync [オプション...] rsync://[ユーザー@]アドレス[:ポート]/ソース... [ターゲット]

プッシュ: 

  rsync [オプション...] ソース... [ユーザー@]アドレス::ターゲット
  rsync [オプション...] ソース... rsync://[ユーザー@]アドレス[:ポート]/ターゲット

SRC パラメータのみを提供し、DEST パラメータがない場合は、ソースファイルがリストされ、コピーされません。

クイックスタート#

使用プラットフォーム:ubuntu 20

実現方法:サーバー側で rsync リスニングサービスを設定し、クライアント側で積極的にプッシュし、crontab で定期タスクを設定します。

rsync リスニングの設定#

リモートサーバー、つまりファイルを同期して保存したいサーバーで、次のコマンドを順に実行して確認します:

root@ubuntu:~# sudo apt update
root@ubuntu:~# sudo apt install rsync

rsync 環境がインストールされているか確認します。

root@ubuntu:~# service rsync status

rsync サービスの情報を確認します。

● rsync.service - fast remote file copy program daemon
     Loaded: loaded (/lib/systemd/system/rsync.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-05-09 00:19:13 MSK; 29min ago
       Docs: man:rsync(1)
             man:rsyncd.conf(5)
   Main PID: 6216 (rsync)
      Tasks: 1 (limit: 2279)
     Memory: 13.0M
     CGroup: /system.slice/rsync.service
             └─6216 /usr/bin/rsync --daemon --no-detach

任意のエディタを使用するか、cat でrsync.serviceサービスファイルを開きます。

[Unit]
Description=fast remote file copy program daemon
Documentation=man:rsync(1) man:rsyncd.conf(5)
ConditionPathExists=/etc/rsyncd.conf
After=network.target

[Service]
ExecStart=/usr/bin/rsync --daemon --no-detach

[Install]
WantedBy=multi-user.target

ConditionPathExists=/etc/rsyncd.confによって、rsync が rsyncd.conf から設定ファイルを読み取ることがわかります。

root@ubuntu:~# vim /etc/rsyncd.conf

任意のエディタで設定ファイルを開き、存在しない場合は作成します。作成方法については自分で調べることをお勧めします。

設定オプション#

[custom1]
pid file = /var/run/rsyncd1.pid
...

[custom2]
pid file = /var/run/rsyncd2.pid
...

[custom3]
pid file = /var/run/rsyncd3.pid
...

必須:カスタムモジュールを作成し、接続時に使用します。

uid = user1
gid = group1

必須:rsync モジュールのユーザーは、root を推奨せず、adduser --disabled-login [username]で作成することをお勧めします。

path = /path/to/backup
use chroot = yes

必須:このモジュールのパスを定義するために path を使用し、use chroot でセキュリティを強化します。

read only = no
write only = no

オプション:読み取りまたは書き込みを有効にするかどうかは、必要に応じて設定できます。

hosts allow = 154.53.59.237

# 最大接続数
max connections = 4

# 転送ログを有効にする
transfer logging = yes

# ログ形式を指定
log format = %t %a %m %f %b

list = no

追加:hosts allow で IP アクセスを制限し、list で使用するモジュールを隠します。

クライアント接続#

クライアントでも rsync をダウンロードし、以下のコマンドで設定が成功したかテストします。

root@vmi819506:~# rsync -avzrn /tmp/test/ rsync://[ユーザー]@[アドレス][:ポート]/[モジュール]

トラブルシューティング#

Q1:サーバーに接続できません。
A1:サーバーのポートが開いていない可能性があります。rsync はデフォルトで 873 ポートをリッスンします。

定期設定#

crontab を使用して、時間が来たら自動的に実行します。以下は一例です(5 分ごとに rsync を実行):

5 * * * * [コマンド]

まとめ#

この記事はここで終了です。今後、この記事の内容に補足や修正を加える可能性があります。

rsync の設定を書くと、いつも優雅さが足りないと感じますし、md のハイライトサポートもありません。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。