😸

rsyncについて(Linux)

に公開

はじめに

rsyncを使用し、リモートホストとデータを同期する方法を調べてみました。
その中でrsyncの仕様について新たに理解した部分があったので、備忘録として残しておきます。

rsyncとは

rsyncとは、ネットワーク上のリモートマシンのファイルやディレクトリを同期するためのコマンドツール。単なるcpコマンドとは違い、差分転送により変更があった分だけ更新するので、とても効率的。ちなみにローカル環境のみでも使用できます。

新しく理解した事

rsyncを使用する上で、sshを使用する方法とrsyncデーモンを使用する方法の2通りがある事を知りました。

【ssh方式】

  • rsyncはSSH経由でリモートホストと通信
  • 通常のリモートコピーのように使える
  • SSHで安全に暗号化通信
  • 特別な設定なしで使える
  • セキュアなファイル同期が必要な時におすすめ

【rsyncデーモン方式】

  • rsync独自のrsyncプロトコルを使って通信
  • rsyncデーモンがリモート側で常駐している必要がある
  • 暗号化されていない通信
  • rsyncd.confを設定し、デーモンを起動する必要がある
  • 高速性を重視かつローカルネットワークならおすすめ

実装内容

実際に同プライベートサブネットに2台のEC2を起動してrsyncデーモンを使用したデータ同期を実行してみました。
(※実際の作業ではリモート操作用のEC2をもう一台たててますが、その内容については割愛します)

  • data_server(192.168.0.151)

    • OS : Redhat
  • backup_server(192.168.0.148)

    • OS : RedHat

data_serverのホームディレクトリ以下に適当なデータを作成し、それをbackup_serverのホームディレクトリ以下に同期させていこうと思います。

data_serverのファイル

[ec2-user@dataserver ~]$ pwd
/home/ec2-user
[ec2-user@dataserver ~]$ ls
data
[ec2-user@dataserver ~]$ ls ~/data/
test1.txt  test2.txt
# このdataディレクトリをバックアップする

backup_serverのファイル

[ec2-user@backupserver ~]$ pwd
/home/ec2-user
[ec2-user@backupserver ~]$ ls
# ここがバックアップ先。今は何もない。

続いてbackup_server側で/etc/rsyncd.confファイルを設定します。
(※テストのため今回は最少構成の記載です。業務で使用する際などは、パスワード認証など色々と追加設定が可能です。)

[ec2-user@backupserver ~]$ sudo vi /etc/rsyncd.conf
rsyncd.conf
uid = ec2-user
gid = ec2-user
use chroot = no
max connections = 4
log file = /var/log/rsyncd.log
timeout = 300

[backup]
    path = /home/ec2-user
    read only = no

backup_server側でrsyncデーモンを起動します。

[ec2-user@backupserver ~]$ sudo rsync --daemon

それではdata_server側からrsyncで同期を実行してみます。まずはdry-runを使用して、挙動のみ確認してみます。

※dryrun(試験モード)とは

  • 実際には動作せず、動作内容だけ表示。nオプションを使用する。
      ※rsyncコマンドは**--deleteオプション**を使用した場合などに意図せぬデータが消えてしまう可能性があります。同期を実行する前にdry-runを使用してどういう動きになるのかを必ず確認しましょう。)
[ec2-user@dataserver ~]$ rsync -av -n /home/ec2-user/data 192.168.0.148::backup
sending incremental file list
data/
data/test1.txt
data/test2.txt

sent 135 bytes  received 34 bytes  338.00 bytes/sec
total size is 26  speedup is 0.15 (DRY RUN)

挙動は問題なさそうです。それではdry-runを省略し実際に同期してみます。

[ec2-user@dataserver ~]$ rsync -av /home/ec2-user/data 192.168.0.148::backup
sending incremental file list
data/
data/test1.txt
data/test2.txt

sent 245 bytes  received 66 bytes  622.00 bytes/sec
total size is 26  speedup is 0.08

backup_serverを確認してみます。

[ec2-user@backupserver ~]$ pwd
/home/ec2-user
[ec2-user@backupserver ~]$ ls
data
[ec2-user@backupserver ~]$ ls data
test1.txt  test2.txt

無事に同期できました。
今回は試してませんが、--deleteオプションを使用すると完全同期が可能となります。しかし、--deleteオプションはバックアップ元になくてバックアップ先だけに存在するファイルは削除されてしまいますので、dry-runを使用して事前検証をしっかりと行いましょう。

Discussion