優れたソフトウェアと実用的なチュートリアル
Rsync詳細な説明
1. Rsyncとは何か
Rsync(remote synchronize) は、LAN/WAN を介して複数のホスト間でファイルを高速に同期できるリモートデータ同期ツールです。Rsync は、いわゆる「Rsync アルゴリズム」を使用して、ローカルホストとリモートホスト間でファイルを同期します。このアルゴリズムは、2 つのファイル全体を毎回転送するのではなく、異なる部分のみを転送するため、非常に高速です。
rsyncは元々rcpを置き換えるツールでした。現在はrsync.samba.orgによってメンテナンスされているため、rsync.confファイルのフォーマットはsambaのメイン設定ファイルと似ています。rsyncはrshまたはssh経由で使用でき、デーモンモードでも実行できます。デーモンモードで実行する場合、rsyncサーバーはポート873を開き、クライアントからの接続を待機します。接続時に、rsyncサーバーはパスワードが一致するかどうかを確認します。パスワード検証が成功すると、ファイル転送を開始できます。最初の接続が完了すると、ファイル全体が一度転送され、それ以降は増分バックアップのみが必要になります。
Rsyncは、ほとんどのUnix系システムをサポートしています。リナックス、Solaris、BSD。さらに、窓cwRsync や Sync2NAS など、プラットフォームに対応するバージョンもあります。
Rsync の基本的な機能は次のとおりです。
- ディレクトリ ツリーとファイル システム全体をミラーリングして保存できます。
- 元のファイルの権限、時間、ソフトウェア、ハードリンクなどを簡単に維持できます。
- インストールには特別な権限は必要ありません。
- 最適化されたプロセス、高いファイル転送効率。
- rsh、ssh などの方法を使用してファイルを転送することも、直接ソケット接続を使用することもできます。
- サポート匿名伝染 ; 感染。
2. Rsync同期アルゴリズム
Rsyncが非常に高速にファイルを同期できる理由は、「Rsync同期アルゴリズム」がバックアップが必要なデータを非常に短時間で計算できるためです。Rsyncの同期アルゴリズムの説明は次のとおりです。
類似のファイルAとBを2台のコンピュータ(No.1とNo.2)間で同期すると仮定します。No.1はファイルAに、No.2はファイルBにアクセスできます。また、ホストNo.1とNo.2間のネットワーク帯域幅は非常に小さいと仮定します。この場合、rsyncアルゴリズムは次の5つのステップで完了します。
- 2 番目は、ファイル B を固定サイズ S バイトの重複しないデータ ブロックのセットに分割します。最後のブロックは S より小さくなる場合があります。
- 2 番目は、セグメント化された各データ ブロックに対して 2 つのチェックを実行します。1 つは 32 ビットのローリング弱いチェックで、もう 1 つは 128 ビットの MD4 強いチェックです。
- 2番はこれらの検証結果を1番に送信します。
- 1 番目は、ファイル A 内のサイズ S のすべてのデータ ブロック (オフセットは任意で、S の倍数である必要はありません) を検索し、ファイル B 内のブロックと同じ弱いチェックサムと強いチェックサムを持つデータ ブロックを見つけます。この作業は、ローリング チェックサム機能を使用すると迅速に実行できます。
- No. 1 は、No. 2 にファイル A のバックアップを生成するための一連の指示を送信します。ここでの各指示は、ファイル B に再送信なしで特定のデータ ブロックがすでに存在していることの証明、またはファイル B 内のどのデータ ブロックとも確実に一致しないデータ ブロックのいずれかです。
3. Rsyncパラメータの説明
3.1 rsyncd.conf 設定ファイル
グローバルパラメータ
ファイル内の[module]より前のすべてのパラメータはグローバルパラメータです。もちろん、グローバルパラメータ部分でモジュールパラメータを定義することもできます。この場合、パラメータの値はすべてのモジュールのデフォルト値となります。
port: バックグラウンドプログラムが使用するポート番号を指定します。デフォルトは873です。
motd ファイル: 「motd ファイル」パラメータは、メッセージ ファイルを指定するために使用されます。サーバこのファイルの内容はクライアントに表示されます。デフォルトではmotdファイルは存在しません。
ログファイル: 「ログファイル」は、syslog にログを送信する代わりに、rsync のログファイルを指定します。例えば、「/var/log/rsyncd.log」のように指定できます。
pid ファイル: rsync の pid ファイルを指定します。通常は「/var/run/rsyncd.pid」と指定されます。
syslog facility: rsyncがsyslogにログメッセージを送信する際のメッセージレベルを指定します。一般的なメッセージレベルはuth、authpriv、 クローン、daemon、ftp、kern、lpr、mail、news、security、sys-log、user、uucp、local0、local1、local2、local3、local4、local5、local6、local7。デフォルト値はdaemonです。
モジュールパラメータ
主に、サーバーのどのディレクトリを同期するかを定義します。形式は「[モジュール]」です。この名前はrsyncクライアントに表示される名前で、Sambaサーバーが提供する共有名に似ています。サーバーが実際に同期するデータはパスで指定します。必要に応じて複数のモジュールを指定できます。モジュールには以下のパラメータを定義できます。
コメント: モジュールの説明を入力します。この説明は、モジュール名とともに、クライアントがモジュール一覧を取得するために接続した際に表示されます。デフォルトでは説明は定義されていません。
path: このモジュールのバックアップ先のディレクトリツリーパスを指定します。このパラメータは必須です。
chroot を使用: 「chroot を使用」が true に指定されている場合、rsync はファイルを転送する前に、まず path パラメータで指定されたディレクトリに chroot します。これはセキュリティ保護を強化するためですが、欠点として、root 権限が必要になり、外部を指すシンボリックリンクが指すディレクトリファイルをバックアップできないという点があります。chroot のデフォルト値は true です。
uid: このオプションは、モジュールがファイルを転送する際にデーモンが持つべきuidを指定します。gidオプションと併用することで、アクセス可能なファイルとその権限を決定できます。デフォルト値は「nobody」です。
gid: このオプションは、このモジュールがファイルを転送する際にデーモンが持つべき gid を指定します。デフォルト値は「nobody」です。
最大接続数: サーバーを保護するために、このモジュールの最大同時接続数を指定します。制限を超えた接続要求は通知され、後ほど再試行されます。デフォルト値は0で、制限がないことを意味します。
list: このオプションは、クライアントが利用可能なモジュールのリストを要求したときに、モジュールをリストするかどうかを指定します。このオプションをfalseに設定すると、非表示のモジュールが作成されます。デフォルト値はtrueです。
読み取り専用: このオプションは、クライアントがファイルのアップロードを許可するかどうかを設定します。true の場合、すべてのアップロード要求は失敗します。false の場合、サーバーディレクトリの読み取りおよび書き込み権限が許可されていれば、アップロードは許可されます。デフォルト値は true です。
exclude: 複数のファイルまたはディレクトリ(相対パス)をスペースで区切って指定し、除外リストに追加します。これは、クライアントコマンドでパターンを指定する --exclude を使用するのと同じです。モジュールは1つの除外オプションのみを指定できます。ただし、このオプションにはセキュリティ上の問題があることに注意してください。クライアントが除外リストをバイパスする可能性が非常に高いためです。特定のファイルへのアクセスを確実に禁止したい場合は、uid/gidオプションと組み合わせて使用することをお勧めします。
除外元: 除外パターン定義を含むファイル名を指定します。サーバーはこのファイルから除外リスト定義を読み取ります。
include: 要件を満たすファイルまたはディレクトリを除外しないことを指定します。これは、クライアントコマンドでパターンを指定する --include を使用するのと同じです。include と exclude を組み合わせることで、複雑な exclude/include ルールを定義できます。
include from: includeパターンの定義を含むファイル名を指定します。サーバーはこのファイルからincludeリストの定義を読み取ります。
auth users: このオプションは、スペースまたはカンマで区切られたユーザー名のリストを指定します。これらのユーザーのみがモジュールへの接続を許可されます。ここで指定されたユーザーは、システムユーザーとは無関係です。「auth users」が設定されている場合、クライアントのモジュールへの接続要求は、rsyncによってID検証のためにチャレンジされます。ここではチャレンジ/レスポンス認証プロトコルが使用されます。ユーザー名とパスワードは、「secrets file」オプションで指定されたファイルにプレーンテキストで保存されます。デフォルトでは、パスワードなしでモジュールに接続できます(つまり、匿名モードです)。
シークレットファイル: このオプションは、ユーザー名とパスワードのペアを含むファイルを指定します。このファイルは、「auth users」が定義されている場合にのみ使用されます。ファイルの各行には、ユーザー名とパスワードのペアが1つずつ含まれます。一般的に、パスワードは8文字以下にする必要があります。デフォルトのシークレットファイル名はないため、必ず指定してください(例:/etc/rsyncd.passwd)。注意:このファイルのパーミッションは600に設定する必要があります。そうでない場合、クライアントはサーバーに接続できません。
厳密モード:このオプションは、パスワードファイルの権限を監視するかどうかを指定します。オプション値がtrueの場合、パスワードファイルにはrsyncサーバーを実行しているユーザーのみがアクセスでき、他のユーザーはアクセスできません。デフォルト値はtrueです。
hosts allow: このオプションは、このモジュールへの接続を許可するIPクライアントを指定します。クライアントモードの定義は以下の形式で行えます。
単一の IP アドレス (例: 192.167.0.1)
ネットワークセグメント全体。例: 192.168.0.0/24、または 192.168.0.0/255.255.255.0
複数のIPアドレスまたはネットワークセグメントを指定する場合はスペースで区切る必要があります。「*」はすべてを意味します。デフォルトでは、すべてのホストが接続を許可されます。
hosts deny: rsyncサーバへの接続を許可しないマシンを指定します。これはhosts allow定義を使用して定義できます。デフォルトではhosts deny定義はありません。
ignore errors: 転送中に削除操作を実行するかどうかを決定する際に、rsyncd がサーバー上の IO エラーを無視するように指定します。通常、rsync は IO エラーが発生した場合、一時的なリソース不足やその他の IO エラーによる深刻な問題を防ぐため、--delete 操作をスキップします。
ignore nonreadable: rysncサーバーが、ユーザーがアクセス権を持たないファイルを完全に無視するように指定します。これは、バックアップが必要なディレクトリ内に、バックアップユーザーがアクセスできないファイルがある場合に有効です。
ロックファイル: 最大接続数パラメータをサポートするロックファイルを指定します。デフォルト値は/var/run/rsyncd.lockです。
転送ログ: rsync サーバーが ftp 形式のファイルを使用して、ダウンロード操作とアップロード操作をそれぞれ別のログに記録します。
ログ形式: このオプションでは、転送ログを使用する際にログファイルのフィールドをカスタマイズできます。形式は弦次の書式指定子が使用できます。
%h リモートホスト名
%a リモートIPアドレス
%l ファイルの長さ(文字数)
%p このrsyncセッションのプロセスID
%o 操作タイプ:「送信」または「受信」
%f ファイル名
%Pモジュールパス
%m モジュール名
%t 現在の時刻
%u 認証ユーザー名(匿名の場合はnull)
%b 実際に送信されたバイト数
%c ファイルを送信する場合、このフィールドにはファイルのチェックサムが記録されます。
デフォルトのログ形式は「%o %h [%a] %m (%u) %f %l」です。通常、各行の先頭に「%t [%p]」が追加されます。この形式のログファイルをカウントするためのperlスクリプトrsyncstatsもソースコードに含まれています。
timeout: このオプションは、クライアントが指定したIPタイムアウトを上書きします。このオプションにより、rsyncサーバーがクラッシュしたクライアントを永久に待機することがなくなります。タイムアウトは秒単位で、0はタイムアウトが定義されていないことを意味し、これがデフォルト値です。匿名rsyncサーバーの場合、理想的な数値は600です。
拒否オプション: このオプションでは、クライアントがこのモジュールで使用できないコマンドパラメータのリストを定義できます。ここではコマンド名を省略形ではなく、完全な形で指定する必要があります。ただし、コマンドが拒否された場合、サーバーはエラーメッセージを報告して終了します。圧縮を使用しないようにしたい場合は、「dont compress = *」と指定してください。
圧縮しない: 転送前に圧縮しないファイルを指定する場合に使用します。デフォルト値は *.gz *.tgz *.zip *.z *.rpm *.deb * です。アイソ *.bz2 *.tbz
3.2 rsyncコマンド
rsyncサーバーの設定が完了したら、次のステップはクライアント側でrsyncコマンドを実行し、サーバー上のファイルをクライアントにバックアップすることです。rsyncは非常に強力なツールであり、そのコマンドには多くの機能オプションがあります。以下では、各オプションを一つずつ分析し、解説していきます。
Rsync のコマンド形式は次の 6 つになります。
- rsync [オプション]... ソース 宛先
- rsync [オプション]... SRC [ユーザー@]ホスト:宛先
- rsync [オプション]... [ユーザー@]ホスト:ソース 宛先
- rsync [オプション]... [ユーザー@]ホスト::ソース 宛先
- rsync [オプション]... SRC [ユーザー@]ホスト::宛先
- rsync [オプション]... rsync://[ユーザー@]ホスト[:ポート]/SRC [宛先]
上記の 6 つのコマンド形式に対応して、rsync には 6 つの異なる動作モードがあります。
- ローカルファイルをコピーします。このモードは、SRCパス情報にもDESパス情報にもコロン「:」区切り文字が含まれていない場合に有効になります。例:rsync -a /data /backup
- リモートシェルプログラム(rsh、sshなど)を使用して、ローカルマシンの内容をリモートマシンにコピーします。このモードは、DSTパスアドレスにコロン「:」区切り文字が含まれている場合に有効になります。例:rsync -avz *.c foo:src
- リモートシェルプログラム(rsh、sshなど)を使用して、リモートマシンの内容をローカルマシンにコピーします。このモードは、SRCアドレスパスにコロン「:」区切り文字が含まれている場合に開始されます。例:rsync -avz foo:src/bar /data
- リモートrsyncサーバからローカルマシンへファイルをコピーします。このモードは、SRCパスに「::」区切り文字が含まれている場合に有効になります。例:rsync -av ルート@172.16.78.192::www/データバック
- ローカルマシンからリモートrsyncサーバへファイルをコピーします。このモードは、DSTパス情報に「::」区切り文字が含まれている場合に有効になります。例:rsync -av /databack ルート@172.16.78.192::www
- リモートマシン上のファイルを一覧表示します。rsyncによる転送と似ていますが、コマンドからローカルマシンの情報を省略します。例:rsync -v rsync://172.16.78.192/www
rsync パラメータの具体的な説明は次のとおりです。
- -v, --verbose 詳細モード出力
- -q, --quiet 静かな出力モード
- -c, --checksum チェックサムスイッチをオンにして、ファイル転送時にチェックサムを強制します。
- -a, --archive アーカイブモード。これは、ファイルを再帰的に転送し、すべてのファイル属性を保持することを意味します。これは -rlptgoD と同じです。
- -r, --recursive サブディレクトリを再帰的に処理する
- -R, --relative 相対パス情報を使用する
- -b, --backup はバックアップを作成します。つまり、保存先に同じファイル名が既に存在する場合、古いファイルの名前を ~filename に変更します。--suffix オプションを使用して、バックアップファイルのプレフィックスを変更できます。
- --backup-dir バックアップ ファイル (~filename など) をディレクトリに保存します。
- -suffix=SUFFIX はバックアップファイルのプレフィックスを定義します
- -u, --update 更新のみ。つまり、DSTに既に存在し、バックアップ対象のファイルよりもファイル時刻が新しいファイルはすべてスキップします。(更新されたファイルは上書きしません)
- -l, --links ソフトリンクを保持する
- -L, --copy-links ソフトリンクを通常のファイルのように扱う
- --copy-unsafe-links SRCパスディレクトリツリーの外側を指すリンクのみをコピーします
- --safe-links SRCパスディレクトリツリーの外側を指すリンクを無視します
- -H, --hard-links ハードリンクを保持する
- -p, --perms ファイルの権限を保持
- -o, --owner ファイルの所有者情報を保持します
- -g, --group ファイルグループ情報を保持
- -D, --devices デバイスファイル情報を保持
- -t, --times ファイルの時刻情報を保持します
- -S, --sparse DST のスペースを節約するためにスパースファイルを特別に処理します
- -n、--dry-run は転送されるファイルを表示します
- -W, --whole-file 増分検出なしでファイルをコピーします
- -x, --one-file-system ファイルシステムの境界を越えない
- -B, --block-size=SIZE 検証アルゴリズムで使用されるブロックサイズ。デフォルトは700バイトです。
- -e, --rsh=COMMAND は、データ同期に rsh または ssh を使用することを指定します。
- --rsync-path=PATH は、リモートサーバー上の rsync コマンドのパス情報を指定します。
- -C, --cvs-exclude CVSと同じ方法を使用してファイルを自動的に無視します。転送したくないファイルを除外するために使用されます。
- --existing は DST に既に存在するファイルのみを更新し、新しく作成されたファイルはバックアップしません。
- --delete SRC にない DST 内のファイルを削除する
- --delete-excluded このオプションで除外された受信側のファイルも削除します
- --delete-after 転送完了後に削除する
- --ignore-errors IOエラーが発生しても削除する
- --max-delete=NUM 最大NUM個のファイルを削除します
- --partial は何らかの理由で完全に転送されなかったファイルを保持し、後続の再転送を高速化します。
- --force ディレクトリが空でなくても強制的に削除する
- --numeric-ids 数値のユーザーIDとグループIDをユーザー名とグループ名として一致させない
- --timeout=TIME IPタイムアウト(秒)
- -I, --ignore-times 同じ時間と長さのファイルをスキップしない
- --size-only ファイルをバックアップするかどうかを決定する際に、ファイルの時間を考慮せずにファイルサイズのみを確認します。
- --modify-window=NUM ファイルの時刻が同じかどうかを判断するために使用するタイムスタンプウィンドウ。デフォルトは0です。
- -T --temp-dir=DIR DIR に一時ファイルを作成する
- --compare-dest=DIR DIR内のファイルを比較して、バックアップする必要があるかどうかを判断します。
- -Pは--partialと同等です
- --progress バックアップの進行状況を表示する
- -z, --compress 転送中にバックアップファイルを圧縮します
- --exclude=PATTERN は転送する必要のないファイルのパターンを指定します
- --include=PATTERN は除外せず転送するファイルパターンを指定します
- --exclude-from=FILE FILEで指定されたパターンのファイルを除外する
- --include-from=FILE FILEで指定されたパターンに一致するファイルを除外しない
- --version バージョン情報を出力する
- --address 特定のアドレスにバインドする
- --config=FILE は、デフォルトの rsyncd.conf ファイルの代わりに別の設定ファイルを指定します。
- --port=PORT は別の rsync サービスポートを指定します
- --blocking-io リモートシェルにブロッキングIOを使用する
- -statsは特定のファイルの転送ステータスを表示します
- --progress 転送中に転送の進行状況を表示します
- --log-format=formAT ログファイルの形式を指定する
- --password-file=FILE FILEからパスワードを取得する
- --bwlimit=KBPS I/O帯域幅を制限する(KB/秒)
- -h, --help ヘルプ情報を表示する
Linuxでのrsyncの設定
Rsync 3.2.4 リリース
2022年4月15日
Rsyncバージョン3.2.4がリリースされました。バグ修正と機能強化を含む、いつも通りのリリースです。また、バンドル版のzlib 1.2.8も含まれています。 セキュリティ修正 特定のビルド構成で使用される場合と使用されない場合があります。
知らせ:今はパッチは、「-pedantic-errors」が有効な場合のconfigureにおける「signed char」のチェックを修正します。これは、「char」のデフォルトが「unsigned char」であるシステム(ARMシステムなど)で動作し、rsyncアルゴリズムの効率を最大限まで高めます(パッチを適用しない場合、転送時にローカルデータを検索するよりも多くのリテラルデータが送信されることになります)。
参照3.2.4 ニュース 詳細な変更履歴をご覧ください。最新のマニュアルページも以下から入手できます。
ソース tarball はここから入手できます: rsync-3.2.4.tar.gz (サイン)「patch」ディレクトリの tarball は別のファイルで配布されます。 rsync-パッチ-3.2.4.tar.gz (サイン)バージョン 3.2.2 の diff はここで確認できます: rsync-3.2.3-3.2.4.diffs.gz (サイン)。
rsyncサーバーの設定
- rsyncを簡単にインストールする
- 設定ファイルVim etc/rsyncd.confを変更します。
uid=ルート
gid=ルート
最大接続数=4
chroot=noを使用する
ログファイル=/var/log/rsyncd.log
pidファイル=/var/run/rsyncd.pid
ロックファイル=/var/run/rsyncd.lock
秘密ファイル=/etc/rsyncd.pwd
ホスト許可 = 10.10.0.200
ホスト拒否 = 0.0.0.0/0
[oa]
パス=/home/sxit/appbak
コメント = バックアップファイル
エラーを無視する
読み取り専用 = いいえ
リスト = はい
認証ユーザー = root
- pwdファイルを作成し、ファイルの権限を変更する
Vim rsyncd.pwd
ルート:パスワード
chmod 600 rsyncd.pwd
- /usr/bin/rsync –daemon --config=/etc/rsyncd.conf を起動するには、ルート権限が必要になる場合があります。
(/etc/init.d/rsyncd および /etc/xinetd.d/rsync ファイルをチェックして、サービスがスーパーデーモンによって開始されたか、独立したプロセスによって開始されたかを確認します。Service xinetd start / service rsyncd start)
Rsync10.10.0.200 クライアント構成
- パスワードを保存するファイルを作成する
Vim の /etc/rsyncd.pwd
パスワード
chmod 600 rsyncd.pwd
- サーバーデータを同期する /usr/bin/rsync –vazp –progress –password-file=/etc/rsyncd.pwd ルート@10.10.1.3::oa /home1/sxit/appbak (ローカルストレージディレクトリ)
- このコマンドをプランに入れて定期的に実行することができます。
Vimの/etc/crontab
01 04 * * * root /usr/bin/rsync -vzau --progress --password-file=/etc/rsyncd.pwd ルート@10.10.1.3::oa /home1/sxit/appbak
rsync存在する窓構成
Rsyncサーバーの設定
- rsyncをインストールする
rsync公式サイト:
https://rsync.samba.org/
[ Windows RSYNC サーバ ]
https://itefix.net/dl/free-software/cwrsync_6.2.4_x64_free.zip
https://itefix.net/dl/free-software/cwrsync_5.5.0_x86_free.zip
選ぶインストールパス E:\cwRsyncServer、注: rsync は Windows の cgywin のラッパーです
インストール中に、Rsync は次のことを実行します。
a. 新しいユーザーSvcwRsyncを作成し、このユーザーを管理者に設定します。パスワードが生成されます。
b. インストールディレクトリ E:\cwRsyncServer の権限を設定します。権限は変更しないでください。
c. RsyncServerサービスを作成する
下位バージョンでは、上記の手順を手動で実行し、以下に示すようにサービスを手動で作成する必要がある場合がありますが、ここではインストール プログラムの 3 つの手順はすべて既に完了しています。
cygrunsrv.exe -I "Rsync" -p /cygdrive/d/cwRsyncServer/bin/rsync.exe -a "--config=/cygdrive/d/cwRsyncServer/etc/rsyncd.conf --daemon --no-detach"
-f "rsync" -u 管理者 -w 123456
- 設定ファイルconfを変更する
chroot = false を使用する
厳密モード = false
ホスト許可 = 10.10.1.3
ログファイル = rsyncd.log
pid ファイル = rsyncd.pid
秘密ファイル = /cygdrive/e/cwRsyncServer/etc/rsyncd.txt
# モジュール定義
# cygwinの命名規則を覚えておいてください: c:\workは/cygwin/c/workになります
#
[郵便]
パス = /cygdrive/d/MDaemon/Users
読み取り専用 = false
エラーを無視する
認証ユーザー = root
転送ログ = はい
- アカウントを作成して権限を割り当てる
設定ファイルではルートアカウントを使用するため、新しいルートアカウントを作成し、パスワードを設定し、ルートアカウントを管理者グループに追加し、d/MDaemon/Usersでルートアカウントにフルコントロール権限を与える必要があります。
- txtファイルを作成する
ルート:パスワード
- サービスを開始する
サービス内でrsyncserverサービスを起動し、自動起動するように設定します。正常であれば、ポート873がリッスンしていることがわかります。
Rsyncクライアントの設定
- 新しいパスワード保存ファイルを作成する
Vim の /etc/rsync.pwd
パスワード
chmod 600 rsync.pwd
2./usr/bin/rsync –auv –progress –password-file=/etc/rsync.pwd ルート@10.10.3.1::mail /home/maiusers (パラメータ Z がない場合、接続はできますが、ファイルを転送することはできません)