複数のコンピューター間でホームフォルダーを同期する方法


117

自宅に3台のコンピューターがあり、3台/home/間でフォルダーツリーを同期させたいと考えています。
3つのコンピューターのいずれかで変更/追加/削除されたファイル/フォルダー(非表示のものを除く)は、他の2つのコンピューターで更新されます。

rsync、これを行うのに十分な?そしてどうやって?


9
ほとんどの「同期」ツールの問題(正しく思い出せばrsyncを含む)は、ユーザーアクションの概念がないことです。したがって、コンピューターXのファイルを削除すると、ツールは(a)コンピューターXのファイルを実際に削除したのか、(b)コンピューターYのファイルを追加したのかを知りません。ほとんどのツールは(b)、そのため、同期すると、コンピューターXでファイルが再度追加されます(コンピューターYで削除するのではなく)。
-Rabarberski

5
@Rabarberskiの多くの同期ツール(UnisonまたはSyncthingを含む)は、データベースを既存のデータへの参照で保持します(このため)。新しいフォルダを初めて同期するときには役に立ちませんが、ファイルを(自動的に)削除することができます。ほとんどの同期ツールの本当の問題は、次の同期が発生する前に2つの場所でファイルが変更された場合です。この競合の場合、通常は手動でマージするか、最新バージョンに置き換える必要があります。
クリス

2
変更を他のマシンに瞬時にコピーできない場合の同期は非常に注意が必要であり、プログラムが完全にそれを行うのを見たことがないので、いくつかのバグ、競合、再現ファイルの準備をしてください。同期プログラムで管理できることがわかっている特定のフォルダのみを同期することをお勧めします。
エルゾ

回答:


90

この問題を潜在的に解決できる可能性のあるものを以下にリストします。それぞれが異なるトレードオフのバランスを取っているため、独自の選択を行い、自分で試してみる必要があります。

  • Unison-他の人が述べたように、これは手動で実行されますが、非常に高速で、信頼性が高く、効果的です。両方のマシンが同期している必要があります。ほぼ避けられない競合に対処できるようにする優れたユーザーインターフェイスがあり、削除を正しく追跡および伝達します。グラフィカルアプリ/パッケージはunison-gtkと呼ばれます。

  • OwnCloud-独自のサーバーで実行されるクラウドストレージ。そのままにしておくにはマシンが必要です。適切な量​​のセットアップが必要です。サーバー上で完全なApache 2 WebサーバーとSqlLiteまたはMySQLデータベースを実行します。デスクトップクライアントを使用するDropboxと同様に機能しますが、サーバーは管理下にあります。編集:OwnCloudは最近、プロジェクトが実行される方法でいくつかの変更を経て、今を装って新しい、完全にオープンソース(すなわち無クローズドソースの「企業」版を)持っていNextCloud、(この参照ユーチューブインタビュー元OwnCloudの開発者との詳細については)。

  • SparkleShare -gitを使用してファイルの同期を維持します。ホームページによると、多くの小さなファイルには適していますが、音楽や写真のコレクションなどの大きなファイルには適していません。

  • Seafile-ローカルマシンにインストールできるサーバーコンポーネントを提供します。Seafileは、変更を追跡するためにgit同様のデータモデルを使用します。デスクトップ、タブレット、スマートフォン用の同期クライアントを提供します。セットアップについて説明するブログ投稿は、http://openswitch.org/blog/2013/07/18/installing-and-configuring-seafile-on-ubuntu-12-dot-04/にあります。

  • Osync -「... bashで書かれ、rsyncに基づいた双方向ファイル同期ツール。sshトンネルを介してローカルおよび/またはリモートディレクトリで動作します。主にcronタスクとして起動することを目的としています」(ウェブサイトからのテキスト)

  • PowerFolder -JavaベースのGPL v2プロジェクト。メインWebサイトは商用製品をプッシュしているため、提供されている.jarファイルの使用方法が明確ではありません。

  • Rsync-高速で効果的で、数十年前から存在していましたが、履歴を保持していないため、ファイルを新規にするか削除するかを決定する方向を選択する必要があります。gwRsyncなどのグラフィカルツールを使用できます。

  • Lsyncd-フォルダー/ファイルを監視して、rsyncレプリケーションをトリガーします

  • dvcs-autosync -Pythonで記述され、gitを使用してマシン間で変更を保存および共有し、XMPPを使用して変更を伝達します。

  • git-annex - gitに基づいて、ファイルを迂回するためのコマンドラインツール。ここに説明的なチュートリアルがあります:http : //git-annex.branchable.com/walkthrough/

  • Tonido-フリーウェア。他のデバイスとファイルを共有するデスクトップアプリを提供します。また、商用クラウドサービスとTonidoPlugプラグコンピューターも提供します。

  • BitTorrent Sync(フリーウェア)-BitTorrentに基づくピアツーピアのファイル同期。オープンソースではなく、データをLAN内に保持することを信頼していないため、使用しないため、これについてはあまり知りません。この回答をより良い情報/実際の経験で自由に編集してください。

  • SyncThing -BitTorrent Syncの代替としてオープンソースとして開発されました。現在、信頼できないピアなど、BitTorrent Syncの高度な機能の一部が欠けています。活発に開発中です。

  • dropbox、ubuntu one、google drive、apple iCloudなどの商用ホスト型サービスは、すべて迅速かつ安価で便利ですが、すべてのデータで会社を信頼する必要があり、適度に高速なインターネット接続が必要です。

  • Git / subversion-ソース管理システムを直接使用します。完全に手動で、これらのシステムをプログラミングツールとして使用することで、これらのシステムに精通している一部のユーザーにとって、少し複雑ですが一般的なアプローチになります。

  • CloudFS-ファイルシステム全体を同期、クラスター技術ベース

  • NFSマウント-基本的にあなたの家は1台のマシン上にあり、ネットワーク経由でアクセスします。持ち歩くラップトップには適していません。詳細:http : //www.linuxjournal.com/article/4880


決定を下す際に考慮すべき要素:

  • 中央サーバー-一部のソリューションでは、他のマシンと同期するために常に(または少なくとも同期する必要がある場合に)マシンがオンになっている必要があります。これは、既存のマシンの1つでも、NASなどの別のマシンでもかまいません。電力料金の増加に注意してください。

  • 自動/手動/スケジュール-マシン上で何かが変更された場合に競合を解決する必要がないようにする最良の方法は、変更をすぐに監視して同期するプログラムをすべてのマシンに配置することです。バージョン。手動プロセスでは、常に同期を実行することを忘れないでください。

  • リモートアクセス-LAN(自宅)から離れて同期しますか?これのセキュリティへの影響について考えてください。

  • セキュリティ-データはネットワークを暗号化したままにするかどうか、マシン間の転送はどれほど安全か。誰かが移動中にデータをキャプチャし、後で暗号化に欠陥があることが判明した場合はどうなりますか?データを保持するサーバーを誰が制御しますか?データは暗号化されていますか?サードパーティを信頼できますか?リモートアクセスを行うために、ルーターに穴を開ける必要がありますか。「削除された」ファイルおよび関連するメタデータは、同期されたデバイス上および中央サーバー上でどれくらいの期間保持されますか。暗号化されたストレージと暗号化されていないストレージを同期していますか?

  • 大きなフォルダーを移動する-私が試したすべてのソリューションには、ファイルまたはフォルダーを移動/名前変更すると、同期がこれを理解せず、新しいものとしてもう一度アップロードしてから古いコピーを削除するという問題があります。これに対処できる上記のソリューションをマークすることで助けてください(gitは、使用しているコンテンツベースのアドレス指定のためにgitがこれに苦しんでいないので、gitベースのソリューションが行うと思いますが、それらを使用していません)。

  • ディスク容量

  • バックアップ-同期はバックアップではありません。重要なファイルを誤って削除すると、上記の多くが他のすべてのコピーを楽に削除してしまいます。言うまでもなく、すべてのデジタル卵を1つのデジタルバスケットに入れると何が起こるかを説明するために、Mat Honanのハッキングに関する記事を読むことをお勧めします。


私は、全体のホームフォルダを同期するが、代わりのような同期する特定のフォルダを選んでないことをお勧めしますDocuments/Pictures/これは自動的にすべてを同期化の速度/パフォーマンス/ディスク容量の問題に対処することを余儀なくされているの痛みを避けることができますなど。また、除外リストを維持する必要がなくなります。

私が個人的に役立つものを探し続けているので、有用な情報でこの答えを最新のものにしようとします。他のすべての回答からの情報を1つの完全な回答に集約しました。

参照:

  • LinuxFormat-2014年2月LXF180 p31、「ホスト型ストレージのラウンドアップ」

ハッキング/すべて/


ルートアクセスなしのサーバーがあります(たとえば、ユニゾンをインストールするために必要です)。サーバーにインストールする必要のないスクリプトをクライアントマシンで使用できますか?
ベンクシジャン

freefilesync(sourceforge.net/projects/freefilesync)という名前のソフトウェアが何度か言及されているのを見てきました。あなたのリストに言及する価値があるかもしれません?
YoungFrog

28

ユニゾンは良い候補かもしれません:

Unisonは、UnixおよびWindows用のファイル同期ツールです。ファイルとディレクトリのコレクションの2つのレプリカを異なるホスト(または同じホスト上の異なるディスク)に保存し、別々に変更してから、各レプリカの変更を他のレプリカに伝播して最新の状態にすることができます。

すでに双方向の同期を行っています。以下の更新を参照してください。

rsyncができないことは非常に少ないことを学びました。おそらく、同等以上のソリューションを提供できる可能性がありますが、rsyncの専門家がそのソリューションを見つけるのを待つ必要があります。

更新:はい、Unisonは3台以上のマシンを同期できます。ユーザーマニュアルから:

ユニゾンを使用すると、3つ以上のマシン同期する

ユニゾンは、レプリカのペアを同期させるために設計されています。ただし、これを使用して、複数のペアワイズ同期を実行することにより、マシンのより大きなグループの同期を維持することができます。

これを行う必要がある場合、最も信頼性の高いセットアップ方法は、マシンを「スタートポロジ」に編成し、1台のマシンを「ハブ」、残りを「スポーク」として、各スポークマシンを同期することです。ハブのみ。スタートポロジの大きな利点は、同期するホストのペアごとに個別のアーカイブがUnisonによって保持されるという事実から生じる混乱を招く「偽の競合」の可能性を排除することです。


私はユニゾンでいくつかの悪い経験をしました。他のコンピューターから新しいファイルを追加する代わりに、何らかの理由で時々削除しました。
jhcaiced

1
ループを作成しないように、マニュアルの推奨事項に従うようにa / b / cの例を編集することをお勧めします。
ティム・アベル

rsyncへの参照について。いいえ、双方向の同期を確実に行うことはできません。ユニゾンはそれrsyncはできないケースを扱うことができる理由は、以下の回答を見てください:stackoverflow.com/questions/4504357/...を
ndemou

19

SubVersionやgitなどのバージョン管理システムにファイルを配置する方法はありますか?

私はホームディレクトリ全体をバージョン管理するのではなく、いくつかの重要なものを含むほんの一握りのサブディレクトリのみを管理します。しかし、私はgitへの変換を考えています。なぜなら、このタイプの仕事にとっては良いようだからです。(クイック検索は正しい方向にあなたを送ります)。

幸運を


更新:gitの素晴らしい副作用は、コンピューター専用のブランチが必要なため、コンピューター固有のファイルを簡単に作成できることです(gitではデフォルトで取得されます)。したがって、すべてのコンピューターでまったく同じファイルを使用する必要はありません。それらは類似している必要があり、すべての異なるコンピューターで必要なものを含む共通の「メイン」ブランチが必要です。


うわぁ。ファイル同期にバージョン管理を使用するというアイデアは、本当に私の肌をクロールさせます。
JohnD

はい、アイデアは奇妙ですが、本当に便利です。プライベートヘルパースクリプトの〜/ bin /のようなディレクトリについて考えてください。この種のディレクトリはバージョン管理システムに最適です。.kdeのようなディレクトリはおそらくバージョン管理システムで動作が悪く、処理されないファイルの無視リストに入れられます。
ヨハン

これは、ファイルの同期を保つための素晴らしい方法です。「git add」と「git rm」を使用してファイルを追加/削除するという考え方に慣れる必要がありますが、非常にうまく機能します。
jhcaiced

私の家にあるごみの中のファイルのどの部分を共有するかを制御しているので、私はこのアイデアが好きです。唯一の問題は、コミットの管理方法です。つまり、一部のファイルは最初のコミットに入り、変更を反映してシステム/ etc / skelに基づいていることを示す必要があります。
のみ

ディレクトリを同期しようとしているときに、ファイルのいくつかの別々のブランチを維持することは本当に便利ですか?確かに機能しますが、このタスクには(g)をお勧めしません。通常、ほとんどの同期ツール(名前、フォルダーなど)からファイルを除外できます。また、説明する内容(重要なサブディレクトリにのみ使用)については、元の質問に関してはあまり役に立ちません。
クリス

6

これを行う際の主な問題は、変更をマージする方法、削除を伝播する方法、および競合を解決する方法を決定することです。特に複数の人が3台のコンピューターをセットアップしている場合、これを完全に自動化された方法で行うのは困難です。

ユーザーを分離すると、物事がずっと簡単になります。1人のユーザーが一度に2つの場所にいることはできないため(競合が発生するため)、ログイン時に実行して「変更を取得」し、ログアウトして「変更をプッシュ」するようにrsyncジョブをセットアップできます。マスターになるので、このレベルの粒度では、/ home /全体ではなく、毎回/ home / myuserを同期します。追加された改良(ログアウトしていない人の場合)は、短い非アクティブ期間の後にプッシュスクリプトを実行します。

他にも多くの潜在的な解決策がありますが、私が知っている限り、この問題を魔法のように解決するものはありません。最初のステップは、おそらくマシンの使用方法を考え、ユーザーの動作に合わせて同期ポリシーを作成することです。



4

これは完全に解決策を提供するわけではありませんが、出発点となります:

ファイルをrsyncするために、時々cronジョブをセットアップします。次のようなコマンドを使用します。

rsync -alhz --stats --progress --exclude-from '/etc/rsync_backup_excludes.conf' / -e ssh user@10.10.0.1:/path/to/home/

これはrsyncを使用して必要な変更のみをコピーし、コマンドが実行されるたびにすべてを再コピーするのではありません。

--statsおよび--progressはオプションであり、おそらくスクリプトから除外する必要があります

rsync_backup_excludes.confファイルの内容は次のとおりです。

dev/*
proc/*
lost+found/*
mnt/*
sys/*

Anacronは、マシンの電源が入っているときに同期し、ダウンタイムによるスロットの欠落を防ぎます。
ティムアベル14年

これにより、ローカルルート全体がリモートホームフォルダーにコピーされます。それはOPが求めたものではなく、誰もがそれを望む理由を想像することもできません
...-Cerin

4

lsyncdをご覧ください

Lsyncdは、ローカルディレクトリツリーイベントモニターインターフェイス(inotifyまたはfsevents)を監視します。数秒間イベントを集約および結合し、1つ(または複数)のプロセスを生成して、変更を同期します。デフォルトでは、これはrsyncです。したがって、Lsyncdは、新しいファイルシステムまたはブロックデバイスを必要とせず、インストールが比較的簡単で、ローカルファイルシステムのパフォーマンスを妨げることのない、軽量のライブミラーソリューションです。

Rsync + sshは高度なアクション構成であり、SSHを使用して、移動先をネットワーク経由で再送信するのではなく、ターゲット上でファイルとディレクトリの移動を直接実行します。

設定ファイルを使用して、きめ細かいカスタマイズを実現できます。カスタムアクションの設定は、シェルスクリプトからLua言語で記述されたコードに至るカスケードレイヤーでゼロから作成することもできます。シェルスクリプトからLua言語で記述されたコードに及ぶレイヤー。


2

dropboxをご覧くださいhttp://www.getdropbox.com/ Cross platform Win / Linux / Mac


3
ありがと。すでに試してみました。私が探しているものではありません。
ランクロ09

Dropboxは素晴らしく、リンク、写真、その他の重要でないデータを自宅、職場、ラップトップ間で保存するために無料の2GBを使用しています。この状況で必要なものではありませんが、私の意見では、Dropboxは間違いなくその場所を持っています。
マットコファー

2

/home1台のコンピューターから他の2台にマウントします。この場合、自動マウントはかなりうまく機能します。


1

Ubuntu Oneはあなたが探しているものかもしれません。残念ながら、まだベータ段階であり、私はそれを経験していないので、それがあなたのために働くかどうかはわかりません。


現時点ではまだ重い開発が行われていると思います。Ubuntuチームが問題を解決するために数日ごとに更新が行われます。動作しますが、Dropboxよりもお勧めしません。
ナグル

1

構成も同期したい場合-上記のツールはまったく役に立ちません。構成は頻繁に変更され、多くのログファイルが競合してマージできないようになります。
私の決断は簡単で、愚かです:)マスターワークステーションがあり、「〜」のすべてのファイルが2番目の「スレーブ」にコピーされます。何かを変更する必要があることに気付いた瞬間-マスターでそれを行い、スレーブは同期でこれらの変更をキャッチします。

また、一部のbashスクリプトはこれらのマシン上で異なる動作をするはずなので、/ etc / bash.bashrcを編集しました。

OOHOST = Masterをエクスポート

これで、スクリプトはサービスを提供しているホストを認識します;)


1

dvcs-autosyncを試してください。

これはgitに基づいており、XMPPを使用して、接続されたクライアントにファイルの変更を通知し、iノードの変更を介してファイル変更イベントに反応します。そのため、ファイルの変更直後に常に通知され、競合が発生した場合は、実績のあるgitの方法に依存します。

私はしばらくの間、SSH公開鍵を介してDropboxの代替としてそれを使用してきましたが、実際に仕事をしています。


0

PowerFolder-ファイルの同期、フォルダーの同期、リモートストレージ、バックアップ、プライベートファイル共有。自宅とオフィスのPCを同期したり、休日の写真を共有したり、ドキュメントで共同作業したりします。PowerFolderの安全なピアツーピア技術は、インターネットまたはLANで機能します。


0

私が検討する回避策:

  • ドロップボックス。
    主な欠点:合理的な量のデータが無料ではありません。それ以外の場合は完璧に動作します

  • NASサーバー。NASサーバーにファイルを置くと、最近手頃な価格になり(150ドルから)、優れたファイルはあまりエネルギーを消費しません。同期の問題はありません。
    主な欠点:ローカルコピーよりも遅い


NASを使用しても、同期がどのように発生するかについてはまだ対処していません。NASと2台のコンピューターを持つことは、原則として、OPが求めている3台のコンピューターを持つことと違いはありません。同期する必要があるすべてのものをNASに保存することを提案している場合、それは一般的に不可能です-たとえば、設定ファイルの同期を検討してください-それらは各マシン上にある必要があります。
kba

0

私はMac用のSyncTwoFoldersとPC 用のSyncbackを使用しています-最初は自宅の3台のMac (ラップトップを含む)用で、2台目は職場のPC用です。両方のプログラムには、さまざまなバックアップと同期のオプションがあり、プリセットがセットアップされると、これが簡単になります。簡単!LinuxおよびUbuntuで利用可能な同様のソフトウェアの他のバージョンがあると確信しています。


0

削除されたファイルを伝播し、変更されたファイルのみを更新できるosyncのような同期スクリプトを使用できます。 http://www.netpower.fr/osync osyncはrsyncベースですが、sshを介したローカルフォルダーまたはリモートフォルダー間の多くの同期シナリオを処理できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.