rsync

rsync
原作者アンドリュー・トリジェルポール・マッケラス[ 1 ]
開発者ウェイン・デイヴィソン[ 2 ]
初回リリース1996年6月19日[ 1 ] (1996年6月19日
安定版リリース
3.4.1 [ 3 ] ウィキデータで編集する / 2025年1月15日 (2025年1月15日
リポジトリ
書かれた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 .samba .org ウィキデータで編集する

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を使用して に接続しますuserremote-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(CygwinGrsyncSFU [ 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 は、データ転送やバックアップに大きく貢献するその他の重要な機能もサポートしています。これには、 ZstandardLZ4zlibを使用したブロック単位のデータ圧縮と解凍、そしてsshstunnelなどのプロトコルのサポートが含まれます。

バリエーション

その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バックアップソフトウェアは、ローカルファイルシステム、SFTPAmazon 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 ]

rsyncアプリケーション

プログラムオペレーティング·システムフリーソフトウェア説明
リナックスmacOSウィンドウズ
過去へ戻るはいいいえいいえはい
バックアップアシストいいえいいえはいいいえ直接ミラーまたは履歴付き、VSS。
cwRsyncいいえいいえはいいいえCygwinをベースにしています。
グルシンクはいはいはい[ 42 ]はいrsync のグラフィカル インターフェイス。
ラッキーバックアップはいはいはいはい
rcloneはいはいはいはい rsyncに着想を得て、50以上のクラウドストレージプロバイダーやその他の高レイテンシストレージサービスをサポートしています。実際にはrsyncを使用しておらず、ローリングチェックサムや部分的なファイル同期もサポートしていません。
ティムはいはいはいはいTime rsYnc Machine – Time Machine風のバックアップ– Bashスクリプト
ユニゾンはいはいはいはい
rsnapshotはい?いいえはいrsyncとハードリンクを用いた増分バックアップスクリプト。ローカルまたはSSH経由でリモートに完全なスナップショットを保存します。変更内容のみが転送・保存されるため、容量と帯域幅を節約できます。速度、サイズ、復元の容易さ、冗長性のバランスが取れた優れたバックアップを実現します。

参照

注記

  1. ^ 2007-07-10 以降 GPL-3.0、2007-10-05 のプレリリース 3.0.0pre1、2008-03-01 の安定版 3.0.0。
  2. ^ 2007年7月7日から2007年7月9日まではGPL-3.0のみ。
  3. ^ 2007年2月4日から2007年7月7日まではGPL-2.0のみ。
  4. ^ GPL-2.0-or-later、1996-06-16 から 2007-01-31 まで、バージョン 0.1 から 2.6.9。

参考文献

  1. ^ a b c Tridgell, Andrew (1996年6月19日). 「rsync – rcp代替品の初リリース」 .ニュースグループcomp.os.linux.announce . Usenet:  cola-liw-835153950-21793-0@liw.clinet.fi . 2011年11月8日時点のオリジナルよりアーカイブ。 2007年7月19日閲覧
  2. ^ a b “rsync” . 2014年11月27日時点のオリジナルよりアーカイブ2014年11月28日閲覧。
  3. ^ 「[rsync-announce] rsync 3.4.1 リリース」 . 2025年1月15日. 2025年1月15日閲覧
  4. ^ a b「ニュース」
  5. ^ a b「ライセンステキストをもう少し調整する」
  6. ^ 「rsync のライセンス」
  7. ^ 「rsync のライセンス」
  8. ^ a b c "rsync(1) – Linux man page" . linux.die.net . 2017年1月1日時点のオリジナルよりアーカイブ。 2017年2月2日閲覧
  9. ^ Sayood, Khalid (2002年12月18日).ロスレス圧縮ハンドブック. Elsevier. ISBN 9780080510491. 2014年8月18日閲覧
  10. ^ Webコンテンツキャッシュと配信:第8回国際ワークショップ議事録. Springer Science & Business Media. 2004. p.  316. ISBN 9781402022579. 2014年8月18日閲覧– Internet Archive経由。rsyncは広く使用されています。
  11. ^ Rasch, David; Burns, Randal; In-Place Rsync: File Synchronization for Mobile and Wireless Devices Archived 13 April 2016 at the Wayback Machine , Department of Computer Science, Johns Hopkins University
  12. ^ Dempsey, Bert J.; Weiss, Debra (1999年4月30日). 「I2-DSIプロジェクトのための効率的でスケーラブルなレプリケーションメカニズムに向けて」.技術レポート TR-1999-01 . CiteSeerX 10.1.1.95.5042 . 
  13. ^ 「Bash - 同時/並行ファイル転送でrsyncを高速化? - Stack Overflow」2019年8月6日時点のオリジナルよりアーカイブ。 2019年12月18日閲覧
  14. ^ 「RsyncとSSHの使用」 Troy.jdmz.net 。 2014年8月18日閲覧
  15. ^ 「ミラーの使用と実行」 GNUプロジェクト。2020年4月16日時点のオリジナルよりアーカイブ2020年4月15日閲覧。
  16. ^ 「CentOSのパブリックミラーを作成する方法」。CentOS wiki。2020年4月1日時点のオリジナルよりアーカイブ。 2020年4月15日閲覧
  17. ^ "rdist(1)" .
  18. ^ Tridgell, Andrew; Efficient Algorithms for Sorting and Synchronization、1999年2月、2009年9月29日閲覧。
  19. ^ 「Tool Warehouse」 . SUAコミュニティ. 2013年4月6日時点のオリジナルよりアーカイブ。
  20. ^ 「FreeBSD Ports」 . 2016年10月24日閲覧
  21. ^ “NetBSD Ports” . 2016年10月25日時点のオリジナルよりアーカイブ2016年10月24日閲覧。
  22. ^ 「OpenBSD Ports」 . 2016年10月24日閲覧
  23. ^ READMEファイルを参照。2007年12月10日アーカイブ、 Wayback Machine
  24. ^ 「FreeBSDをミラーリングする方法(rsyncを使用)」 Freebsd.org 2014年8月18日閲覧
  25. ^ 「Apache Software Foundationのミラーサイトになる方法」 Apache.org。2014年8月21日時点のオリジナルよりアーカイブ2014年8月18日閲覧。
  26. ^ 「PuTTY Web Site Mirrors: Mirroring Guidelines」 Chiark.greenend.org.uk、2007年12月20日。2014年8月19日時点のオリジナルよりアーカイブ。 2014年8月18日閲覧
  27. ^ 「RsyncをTime Machineのように動作するように設定」 Blog.interlinked.org。2007年11月15日時点のオリジナルよりアーカイブ2014年8月18日閲覧。
  28. ^ 「rsyncによるシステム全体のバックアップ」 wiki.archlinux.org. 2015年2月11日時点のオリジナルよりアーカイブ2014年12月15日閲覧。
  29. ^ 「Rsyncの仕組み」2016年12月16日時点のオリジナルよりアーカイブ2017年1月24日閲覧。
  30. ^ 「RSync – 概要」2017年4月10日時点のオリジナルよりアーカイブ2017年4月9日閲覧。
  31. ^ “News for rsync 3.0.0” . 2008年3月1日. 2008年3月20日時点のオリジナルよりアーカイブ
  32. ^ Norman Ramsey. 「Rsyncアルゴリズム」 .
  33. ^ rdiffバックアップ
  34. ^ a bプール、マーティン; 「librsync」 2013年12月9日アーカイブ、 Wayback Machine
  35. ^ Chen, Gilbert. 「acrosync-library」 . github.com. 2017年2月10日時点のオリジナルよりアーカイブ2016年6月22日閲覧。
  36. ^ "acrosync.com" . 2019年12月20日時点のオリジナルよりアーカイブ2020年7月29日閲覧。
  37. ^ “Mac Developer Library” . Developer.apple.com. 2012年9月26日時点のオリジナルよりアーカイブ2014年8月18日閲覧。
  38. ^ 「Zsync CDイメージ」ubuntu.com . 2015年1月6日閲覧
  39. ^ zsyncウェブサイト
  40. ^ Craig-Wood, Nick. 「クラウドストレージシステムの概要」rclone.org . 2017年10月4日時点のオリジナルよりアーカイブ2017年7月10日閲覧
  41. ^ Craig-Wood, Nick. 「Rclone よくある質問」rclone.org . 2022年5月10日時点のオリジナルよりアーカイブ2022年5月13日閲覧
  42. ^ “Grsync for Windows” . SourceForge . 2016年7月12日. 2019年3月24日時点のオリジナルよりアーカイブ。 2019年3月24日閲覧