Rsyncのソースを表示
←
Rsync
ナビゲーションに移動
検索に移動
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
{{小文字}} {{Pathnav|差分符号化|frame=1|this=rsync}} {{Infobox Software | 名称 = rsync | ロゴ = | 説明文 = | 開発元 = [[アンドリュー・トリジェル]](Andrew Tridgell), Paul Mackerras, Wayne Davison | 最新版 = 3.4.1 | 最新版発表日 = {{release_date|2025|1|15}} | 対応プラットフォーム = [[クロスプラットフォーム]] | 種別 = [[データ転送]]/[[差分バックアップ]] | ライセンス = [[GNU General Public License]] | 公式サイト = [https://rsync.samba.org/ rsync.samba.org] }} '''rsync'''(アールシンク) は、[[UNIX]]システムにおいて、[[差分符号化]]を使って[[データ]]転送量を最小化し、遠隔地間の[[ファイル (コンピュータ)|ファイル]]や[[ディレクトリ]]の[[ファイル同期|同期]]を行う[[アプリケーションソフトウェア]]である。類似のプログラムやプロトコルにはない rsync 独自の特徴として、[[ミラーサイト]]との転送が双方向に高々1回で済む点がある。rsync はディレクトリ内容を表示し、ディレクトリやファイルをコピーできる。オプションで[[データ圧縮]]や[[再帰呼び出し|再帰]]も指定可能。 rsync プロトコルの[[デーモン (ソフトウェア)|デーモン]] rsyncd がデフォルトで使う[[Transmission Control Protocol|TCP]][[ポート番号]]は 873 である。rsync はローカルなディレクトリ間の同期にも使えるし、[[リモートシェル|RSH]]や[[Secure Shell|SSH]]などのリモートシェル経由でも使える。後者の場合、rsync のクライアントプログラムはローカルとリモートの両方にインストールされている必要がある。 [[GNU General Public License]] でリリースされており、[[自由ソフトウェア]]である。 == アルゴリズム == rsync は、転送先のコンピュータが何らかの構造体(ファイルなど)の別バージョンを既に持っている場合、その構造体を効率的に転送する[[アルゴリズム]]を使っている。このアルゴリズムは、[[オーストラリア]]のプログラマ[[アンドリュー・トリジェル]]が発明した。 受信側は、そのファイルの[[複写]]を固定長のチャンク(塊)に重ならないように分割し、チャンクごとに2つの[[チェックサム]]を計算する。この分割長を <math>S</math> とする。チェックサムは、[[MD4]] [[ハッシュ関数]]と弱いローリングチェックサムである。受信側は送信側に対して、それらチェックサムを送る。 送信側は、自身の持つバージョンのファイルについて、長さ <math>S</math> の各チャンクごとにローリングチェックサムを計算する。このときチャンクは重なるものも含めて計算する。重なりのあるチャンクについてのローリングチェックサムの計算は効率的にできる。[[バイト (情報)|バイト]]位置 <math>n</math> から <math>n+S-1</math> までのローリングチェックサムが <math>R</math> であったとき、<math>n+1</math> から <math>n+S</math> までのローリングチェックサムは、<math>R</math> と <math>n</math> 番目のバイトの内容、<math>n+S</math> 番目のバイトの内容だけから計算でき、全バイトの内容を調べる必要がない。したがって、1 バイト目から 25 バイト目までのローリングチェックサムを既に計算していた場合、2 バイト目から 26 バイト目までのローリングチェックサムは、単に 1 バイト目と 26 バイト目の値がわかれば計算できる。 rsync で使われている[[ローリングハッシュ|ローリングチェックサム]]は[[マーク・アドラー]](Mark Adler)の [[adler-32]] チェックサムに基づいている。adler-32 は、[[フレッチャーのチェックサム]]に基づいており、[[zlib]] でも使われている。 次に送信側は受信側が送ってきたチェックサムと一致するものがあるかを調べる。一致する場合、その位置について MD4 チェックサムを計算し、受信側が送ってきた MD4 の値と比較する。 一致が見つけられない場合、送信側は自身の持つファイルの部分にマージのための手順を付けて受信側に送信し、ファイル内容が全く同じになるようにする。 送信側と受信側のファイルの内容が多くの部分で一致する場合、同期のために転送が必要となるデータ量は少なくなる。 rsync のこのようなアルゴリズムはアプリケーションとしての rsync の中核であり、2つのコンピュータ間での TCP/IP 上の転送量を最適化するものである。rsync は他にもデータ転送やバックアップに役立つ機能を備えている。 * [[Zstandard]], [[LZ4]], [[zlib]] を使ったブロック単位の圧縮/伸張 * [[Secure Shell|ssh]] や [[stunnel]] などのプロトコルをサポートし、暗号化が可能 == 利用 == 初期の利用形態は、UNIXシステム群のうちの1台をサーバとし、他のシステムとの間で[[ミラーリング]]や[[バックアップ]]を行うものであった。[[crontab|cron]]のようなスケジューリング機構を使えば、自動スケジューリングされ暗号化された複数台の同時ミラーリングが可能である。 == 派生 == '''rdiff''' は、rsync のアルゴリズムを使ってファイル A からファイル B への[[差分符号化|差分ファイル]]を生成するものである([[diff]] に似ているが、出力形式が異なる)。その差分ファイルをファイル A に適用すると、それをファイル B に変換できる([[patch]] に類似)。 diff とは異なり、差分ファイル生成過程は2段階に分かれる。まず、ファイル A からより小さいシグネチャファイルを生成し、次にそのシグネチャファイルとファイル B から差分ファイルを生成する。また、diff とは異なり、rdiff は[[バイナリファイル]]にも適用可能である。 rdiff を使って、'''rdiff-backup''' というユーティリティも作られている。これはファイルやディレクトリの[[バックアップ]]をネットワーク経由で保守できるものである。rdiff-backup はバックアップと共に rdiff の差分ファイル群を保持しているので、任意の時点のバックアップが可能である。 rdiff-backup からの派生として Duplicity がある。事前に各ブロックのハッシュを生成して暗号化しておき、サーバ上にそれらを格納しておく。[[増分バックアップ]]に際しては、サーバ上の暗号化されたハッシュを利用する。データの残りも暗号化されて記憶される。 == 歴史 == rsync は[[1996年]][[6月19日]]に発表された<ref>[https://groups.google.com/g/comp.os.linux.announce/c/tZE1qtTcQaU/m/IF8GhGQ_uTsJ First release of rsync - rcp replacement] [[1996年]][[6月19日]]</ref>。オリジナルの作者は[[アンドリュー・トリジェル]]と Paul Mackerras であった。 == 関連項目 == * [[CVSup]] * [[Unison]] * [[xdelta]] * [[Jigdo]] == 脚注 == {{reflist}} == 外部リンク == * [https://rsync.samba.org rsync 公式サイト] * [https://rsync.samba.org/tech_report/ rsync algorithm] * [https://samba.org/~tridge/phd_thesis.pdf Andrew Tridgell's PHD on rsync] [[Category:ネットワークソフト]] [[Category:UNIXのソフトウェア]] [[Category:ファイル転送プロトコル]] [[Category:1996年のソフトウェア]] [[Category:オープンソースソフトウェア]] [[Category:Cでプログラムされた自由ソフトウェア]]
このページで使用されているテンプレート:
テンプレート:Infobox Software
(
ソースを閲覧
)
テンプレート:Pathnav
(
ソースを閲覧
)
テンプレート:Reflist
(
ソースを閲覧
)
テンプレート:小文字
(
ソースを閲覧
)
Rsync
に戻る。
ナビゲーション メニュー
個人用ツール
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
ソースを閲覧
履歴表示
その他
検索
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
特別ページ
ツール
リンク元
関連ページの更新状況
ページ情報