| rsync | |
|---|---|
| 原作者 | アンドリュー・トリジェル、ポール・マッケラス[ 1 ] |
| 開発者 | ウェイン・デイヴィソン[ 2 ] |
| 初回リリース | 1996年6月19日[ 1 ] (1996年6月19日) |
| 安定版リリース | |
| リポジトリ | |
| 書かれた | C |
| プラットフォーム | クロスプラットフォーム |
| タイプ | データ転送、差分バックアップ |
| ライセンス | 2007年: GPL-3.0以降[ a ] [ 4 ] [ 5 ] [ 6 ] 2007年: GPL-3.0のみ[ b ] 2007年: GPL-2.0のみ[ c ] 1996年: GPL-2.0以降[ d ] [ 7 ] |
| Webサイト | rsync |
rsync (リモート同期)は、コンピュータとストレージドライブ間、およびネットワーク上のコンピュータ間でファイルの変更時刻とサイズを比較することでファイルを転送および同期する ためのユーティリティです。 [ 8 ] Unix系オペレーティングシステムでよく見られ、 GPL 3.0以降のライセンスが適用されます。[ 4 ] [ 5 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ]
rsyncはC言語でシングルスレッドアプリケーションとして記述されています。[ 13 ] rsyncアルゴリズムはデルタ符号化の一種であり、ネットワーク使用量を最小限に抑えるために使用されます。Zstandard 、LZ4、またはZlibは追加のデータ圧縮に使用できます。[ 8 ]また、SSHまたはstunnelはセキュリティのために使用できます。
rsyncは通常、2つの異なるシステム間でファイルとディレクトリを同期するために使用されます。例えば、コマンドをrsync local-file user@remote-host:remote-file実行すると、rsyncはSSHを使用して に接続しますuser。remote-host[ 14 ]接続されると、リモートホストのrsyncが呼び出され、2つのプログラムは、リモートファイルがローカルファイルと一致するように、ローカルファイルのどの部分を転送する必要があるかを決定します。rsyncの用途の一つとして、パッケージ管理システムで使用されるミラーサイト上のソフトウェアリポジトリの同期が挙げられます。[ 15 ] [ 16 ]
rsync はデーモンモード (rsyncd)でも動作し、ネイティブ rsync プロトコル (rsync://構文を使用) でファイルの送受信を行います。
アンドリュー・トリジェルとポール・マッケラスは、1996年6月19日に初めて発表されたオリジナルのrsyncを作成しました。[ 1 ]機能と呼び出しは、 1983年にラルフ・キャンベルによって作成され、 4.3BSDの一部としてリリースされたrdist ( )に似ています。[ 17 ]トリジェルは、1999年の博士論文の第3章から第5章でrsyncの設計、実装、パフォーマンスについて論じています。[ 18 ] 2023年現在、ウェイン・デイヴィソンによってメンテナンスされています。[ 2 ]rdist -c
その柔軟性、速度、そしてスクリプト実行可能性から、rsyncLinuxの標準ユーティリティとなり、すべての主要なLinuxディストリビューションに含まれています。Windows(Cygwin、Grsync、SFU [ 19 ]経由)、FreeBSD [ 20 ] NetBSD [ 21 ] OpenBSD [ 22 ]、macOSにも移植されています。
やと同様にcp、では送信元と送信先の指定が必要であり、そのうち少なくとも1つはローカルである必要があります。[ 23 ]rcpscprsync
一般的な構文:
rsync [オプション] … SRC … [ USER@ ] HOST:DEST rsync [オプション] … [ USER@ ] HOST:SRC [宛先]ここで、SRCはコピー元のファイルまたはディレクトリ (または複数のファイルとディレクトリのリスト)、DESTはコピー先のファイルまたはディレクトリ、角括弧はオプションのパラメータを示します。
rsyncrsyncは、 /と標準の Unix アカウントを使用して、Unix クライアントを中央の Unix サーバーに同期できますssh。デスクトップ環境で使用でき、例えば外付けハードドライブ上のバックアップコピーとファイルを効率的に同期できます。スケジュールユーティリティなどを使用すると、複数のホストと中央サーバー間の cron暗号化された ベースの自動ミラーリングなどのタスクを実行できます。rsync
FreeBSDをミラーリングするためのコマンドラインは次のようになります。[ 24 ]
$ rsync -avz --delete ftp4.de.FreeBSD.org::FreeBSD/ /pub/FreeBSD/ Apache HTTP Serverはミラーの更新にのみrsyncをサポートしています。[ 25 ]
$ rsync -avz --delete --safe-links rsync.apache.org::apache-dist /path/to/mirror PuTTYウェブサイトを現在のディレクトリにミラーリングする推奨される(そして最も簡単な)方法はrsyncを使用することです。 [ 26 ]
$ rsync -auH rsync://rsync.chiark.greenend.org.uk/ftp/users/sgtatham/putty-website-mirror/ 。 Time Machine(macOS)の機能を模倣する方法。[ 27 ]
$ date = $( date "+%FT%H-%M-%S" ) # rsync は ":" をホストとポート (つまり、ホスト:ポート) の区切りとして解釈するため、ここでは %T または %H:%M:%S を使用できません。代わりに %H-%M-%S を使用します。 $ rsync -aP --link-dest = $HOME /Backups/current /path/to/important_files $HOME /Backups/back- $date $ ln -nfs $HOME /Backups/back- $date $HOME /Backups/current システムルートディレクトリの完全バックアップを作成します: [ 28 ]
$ rsync -avAXHS --progress --exclude ={ "/dev/*" , "/proc/*" , "/sys/*" , "/tmp/*" , "/run/*" , "/mnt/*" , "/media/*" , "/lost+found" } /バックアップフォルダへのパス ディレクトリ内のすべてのファイルとディレクトリを非常に高速に削除します。
# どこかに空のディレクトリを作成します。これが最初のパスで、2 番目のパスが空にするディレクトリです。 $ rsync -a --delete /path/to/empty/dir /path/to/dir/to/empty rsyncプロセスは、送信側と受信側の別のrsyncプロセスと通信することで動作します。起動時に、rsyncクライアントはピアプロセスに接続します。転送がローカル(つまり、同じホストにマウントされたファイルシステム間)の場合、接続に適したパイプを設定した後、forkを使用してピアを作成できます。リモートホストが関係する場合、rsyncは接続を処理するプロセス(通常はSecure Shell)を開始します。接続すると、確立された接続を使用するリモートホスト上でrsyncプロセスを開始するコマンドが発行されます。別の方法として、リモートホストでrsyncデーモンが動作している場合、rsyncクライアントはTCPポート873でソケットを開き、プロキシを使用することで接続できます。[ 29 ]
rsyncには、代替シェル、オプション、コマンド(フルパス指定も可能)、ポート番号などを指定するためのコマンドラインオプションと設定ファイルが多数用意されています。リモートシェルの使用に加え、トンネリングを使用することで、rsyncデーモンが実行されるサーバー上でリモートポートをローカルポートとして表示することも可能です。これらの機能により、セキュリティレベルを最先端のレベルに調整することが可能です。また、ローカルネットワークであれば、単純なrsyncデーモンで十分な場合もあります。
1 つの解決策は、ユーザーがコマンドライン引数--dry-runを検証し、実際に変更を加えたりデータを転送したりせずにデータをコピーすると何が起こるかをシミュレートできるオプションです。
デフォルトでは、rsyncは各ファイルの変更時刻とサイズをチェックすることで、送信側と受信側のシステム間で異なるファイルを判別します。時刻またはサイズが異なる場合、rsyncは送信側から受信側へファイルを転送します。これはファイルディレクトリ情報の読み取りのみを必要とするため高速ですが、どちらのシステムにも変更がない異常な変更を見逃す可能性があります。[ 8 ]
rsync は、 を指定して起動すると、低速ながらも包括的なチェックを実行します。これにより、両システムに存在するすべてのファイルに対して完全なチェックサム比較が強制的に実行されます。まれにチェックサムの衝突が--checksum発生しない限り、両システムに存在するすべてのファイルを読み取るというコストを犠牲にして、変更されたファイルを見逃すリスクを回避できます。
rsyncユーティリティは、オーストラリアのコンピュータプログラマーAndrew Tridgellによって発明されたアルゴリズムを使用しており、受信側のコンピュータが既に同じ構造の類似したバージョン(ただし同一ではない)を持っている場合に、通信リンクを介して構造(ファイルなど)を効率的に送信します。[ 30 ]
受信者はファイルのコピーをチャンクに分割し、各チャンクに対して2つのチェックサムを計算します。MD5ハッシュと、より弱いが計算が容易な「ローリングチェックサム」です。[ 31 ]これらのチェックサムを送信者に送ります。
送信者は、受信者のチャンクと同じサイズを持つ、自身のファイル内の各ローリングセクションのチェックサムを計算します。受信者はチャンクサイズの倍数から始まるチャンクに対してのみチェックサムを計算しますが、送信者は任意のアドレスから始まるすべてのセクションに対してチェックサムを計算します。送信者が計算したローリングチェックサムが受信者が計算したチェックサムと一致する場合、このセクションはセクションの内容ではなく、受信者のファイル内の位置のみを送信する候補となります。この場合、送信者は計算コストの高いMD5ハッシュを使用して、送信者のセクションと受信者のチャンクが等しいことを確認します。送信者のセクションは、受信者のチャンクと同じ開始アドレスにあるとは限らないことに注意してください。これにより、挿入や削除によって異なるファイルを効率的に送信できます。[ 32 ]次に、送信者は、一致しなかったファイル部分と、既存のブロックを受信者のバージョンにマージする場所に関する情報を受信者に送信します。これにより、コピーは同一になります。
rsync で使用されるローリングチェックサムは、 zlibで使用されるMark Adler のadler-32チェックサムに基づいており、それ自体はFletcher のチェックサムに基づいています。
送信者と受信者のファイルに多くの共通セクションがある場合、ユーティリティはファイルを同期するために比較的少ないデータ転送量で済みます。一般的なデータ圧縮アルゴリズムを使用する場合、非圧縮時には類似しているファイルでも、圧縮時には大きく異なる場合があり、その場合はファイル全体を転送する必要があります。gzip などの一部の圧縮プログラムは、特別な「rsyncable」モードを提供しています。このモードは、非圧縮ファイル内のローカルな変更が圧縮ファイル内のローカルな変更のみに反映されるようにすることで、これらのファイルを効率的にrsyncできるようにします。
rsync は、データ転送やバックアップに大きく貢献するその他の重要な機能もサポートしています。これには、 Zstandard、LZ4、zlibを使用したブロック単位のデータ圧縮と解凍、そしてsshやstunnelなどのプロトコルのサポートが含まれます。
そのrdiffユーティリティは、rsync アルゴリズムを使用して、ファイル A とファイル B の差分を含むデルタファイルdiffが、デルタ形式が異なります)。このデルタファイルをファイル A に適用すると、ファイル B が作成されます(patchバイナリファイルにも問題なく動作します。
rdiff -backupスクリプトは、ファイルまたはディレクトリのバックアップミラーをローカルまたはネットワーク経由で別のサーバー上に維持します。rdiff-backupは増分rdiffデルタをバックアップとともに保存し、これを使用して任意のバックアップポイントを再作成することができます。[ 33 ]
rdiffが使用するlibrsyncライブラリは、rsyncアルゴリズムの独立した実装です。rsyncネットワークプロトコルを使用せず、rsyncアプリケーションとコードを共有していません。[ 34 ] Dropbox、rdiff-backup、duplicityなどのユーティリティで使用されています。 [ 34 ]
acrosyncライブラリは、rsyncネットワークプロトコルの独立したクロスプラットフォーム実装です。[ 35 ] librsyncとは異なり、rsync(プロトコルバージョン29または30)と互換性があります。これは相互パブリックライセンスの下でリリースされており、商用rsyncソフトウェアAcrosyncで使用されています。[ 36 ]
Pythonで書かれたDuplicityバックアップソフトウェアは、ローカルファイルシステム、SFTP、Amazon S3など、シンプルなストレージバックエンドサービスを利用して増分バックアップを可能にします。librsyncを利用して以前のファイルバージョンの署名に対する差分データを生成し、GPGで暗号化してバックエンドに保存します。パフォーマンス上の理由から、バックアップチェーンの署名はローカルのアーカイブディレクトリにキャッシュされますが、必要に応じてバックエンドから再ダウンロードできます。
macOS 10.5以降では、この機能をサポートする2台のマシン間で同期する際に、 HFS+ファイルのメタデータの大部分を保持できる特別なスイッチ-Eまたはスイッチが追加されました。これは、データフォークと共にリソースフォークを送信することで実現されます。 [ 37 ]--extended-attributes
zsyncはrsyncに似たツールで、ファイルバージョンごとに多数のダウンロードを行うのに最適化されています。zsyncはUbuntu [ 38 ]などのLinuxディストリビューションで、急速に変化するベータ版ISOイメージファイルを配布するために使用されています。zsyncはHTTPプロトコルと、事前に計算されたローリングハッシュを持つ.zsyncファイルを使用することで、サーバーの負荷を最小限に抑えながら、ネットワークの最適化のために差分転送を可能にします。[ 39 ]
Rcloneは、クラウドやその他の高レイテンシストレージに特化した、rsyncに着想を得たオープンソースツールです。50以上のプロバイダーをサポートし、クラウドストレージ用のrsyncライクなインターフェースを提供しています。 [ 40 ]ただし、Rcloneは部分ファイル同期(バイナリ差分)のローリングチェックサムをサポートしていません。これは、クラウドストレージプロバイダーが通常この機能を提供しておらず、Rcloneは追加のメタデータを保存しないためです。 [ 41 ]
| プログラム | オペレーティング·システム | フリーソフトウェア | 説明 | ||
|---|---|---|---|---|---|
| リナックス | macOS | ウィンドウズ | |||
| 過去へ戻る | はい | いいえ | いいえ | はい | |
| バックアップアシスト | いいえ | いいえ | はい | いいえ | 直接ミラーまたは履歴付き、VSS。 |
| cwRsync | いいえ | いいえ | はい | いいえ | Cygwinをベースにしています。 |
| グルシンク | はい | はい | はい[ 42 ] | はい | rsync のグラフィカル インターフェイス。 |
| ラッキーバックアップ | はい | はい | はい | はい | |
| rclone | はい | はい | はい | はい | rsyncに着想を得て、50以上のクラウドストレージプロバイダーやその他の高レイテンシストレージサービスをサポートしています。実際にはrsyncを使用しておらず、ローリングチェックサムや部分的なファイル同期もサポートしていません。 |
| ティム | はい | はい | はい | はい | Time rsYnc Machine – Time Machine風のバックアップ– Bashスクリプト |
| ユニゾン | はい | はい | はい | はい | |
| rsnapshot | はい | ? | いいえ | はい | rsyncとハードリンクを用いた増分バックアップスクリプト。ローカルまたはSSH経由でリモートに完全なスナップショットを保存します。変更内容のみが転送・保存されるため、容量と帯域幅を節約できます。速度、サイズ、復元の容易さ、冗長性のバランスが取れた優れたバックアップを実現します。 |
は広く使用されています。