複数のパソコン間でホームフォルダを同期する方法は?
私は自宅に3台のコンピュータを持っていますが、3台の間で/home/
フォルダツリーを同期させたいと思っています。
3台のうちの1台で変更/追加/削除されたファイル/フォルダ(非表示のものを除く)は、他の2台のコンピュータで更新されます。
rsync
で十分なのでしょうか?
私は自宅に3台のコンピュータを持っていますが、3台の間で/home/
フォルダツリーを同期させたいと思っています。
3台のうちの1台で変更/追加/削除されたファイル/フォルダ(非表示のものを除く)は、他の2台のコンピュータで更新されます。
rsync
で十分なのでしょうか?
この問題を解決する可能性のあるものをリストアップしてみました。それぞれが異なるトレードオフのバランスをとっているので、自分で選択して試してみてください。
Unison - 他の人が言っているように、これは手動で実行されますが、非常に速く、信頼性が高く、効果的です。
Unison - 他の人が言っているように、これは手動で実行しますが、非常に速く、信頼性が高く、効果的です。これは、ほとんど避けられないコンフリクトに対処できるようにするための素晴らしいユーザーインターフェースを持っており、削除を正確に追跡して伝搬します。グラフィカルなアプリ/パッケージは unison-gtk と呼ばれています。
OwnCloud - クラウドストレージを自分のサーバー上で実行します。オンにしておくにはマシンが必要です。それなりのセットアップが必要です。完全なApache 2ウェブサーバとSqlLiteまたはMySQLデータベースをサーバ上で実行します。デスクトップクライアントでのDropboxと似たような動作をするが、サーバーは自分のコントロール下にある。 edit : OwnCloudは最近プロジェクトの運営方法にいくつかの変更があり、 NextCloud という名目で新しい完全なオープンソース(つまりクローズドソースの「エンタープライズ」版ではない)を持っている。
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 プロジェクト。メインのウェブサイトでは商用製品をプッシュしているので、提供されている.jarファイルの使用方法は不明です。
Rsync - 高速で効果的で、何十年も前から存在していますが、履歴を保持しないので、ファイルが新しいか削除されたかを判断するには方向を選択しなければなりません。グラフィカルなツールは gwRsync のようなものがあります。
Lsyncd - rsync レプリケーションを起動するためにフォルダやファイルを監視します
dvcs-autosync - python で書かれています。
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 はこの問題に悩まされることはないと思いますが、私は使っていないので確かなことはわかりません)。
ディスク容量
バックアップ - 同期はバックアップではありません。重要なファイルを誤って削除してしまうと、上記の多くは他のすべてのコピーを陽気に削除してしまいます。デジタルの卵をすべてデジタルのカゴに入れた場合に何が起こるかについては、 Mat Honanのハッキングされることについての記事を読むことをお勧めします。
ホームフォルダ全体を同期するのではなく、Documents/
やPictures/
など特定のフォルダを選んで同期することをお勧めします。これにより、すべてを自動的に同期させる際の速度、パフォーマンス、ディスク容量の問題に対処しなければならないという苦痛を避けることができます。また、除外リストを管理する必要もありません。
私は個人的にうまくいくものを見つけようと努力を続けていますが、この回答は有用な情報で最新のものにしていきたいと思っています。他の全ての回答から得られた情報を一つの完全な回答に集約しました。
参考文献。
hacking/all/
SubVersionやgitのようなバージョン管理システムにファイルを入れてみてはどうでしょうか?
私はホームディレクトリ全体のバージョン管理はしていません。しかし、この種の作業にはgitの方が適しているようなので、gitに変換しようと考えています。 (http://www.google.se/search?q=git+sync+home))を使用しています。
グッドラック
Update . git の良いところは、コンピュータ固有のファイルを簡単に作成できることです。つまり、すべてのコンピュータにまったく同じファイルを用意する必要はなく、似たようなファイルを用意して、すべてのコンピュータに共通の「メイン」ブランチを用意すればいいのです。
これをしようとしたときの主な問題は、変更をマージしたり、削除を伝搬させたり、競合を解決する方法を決めることです。これは完全に自動化された方法で行うのは難しく、特に複数の人が3台のコンピュータを使用している場合には難しいです。
ユーザーを分けておけば、もっと簡単になります。1人のユーザが同時に2つの場所にいることはできないので(したがって競合が発生する)、ログイン時に「変更を取得」するために実行するrsyncジョブを設定し、ログアウト時に「変更をプッシュ」するために実行するように設定することができます…マスターとなるコンピュータの1台に…このレベルの粒度では、/home/全体ではなく、毎回/home/myuserを同期させることになります。(人々がログアウトしていない場合の)追加の改良点としては、しばらく操作が行われていない状態が続いた後にプッシュスクリプトを実行するという方法があります。
他にも多くの解決策が考えられますが、私の知る限りではこの問題を魔法のように解決するものはありません。最初のステップは、マシンの使用方法を考え、ユーザーの行動に合わせた同期ポリシーを考えることでしょう。
共通のホームフォルダをNFSマウントすることで、より良いものが実現できると思います。この記事をチェックしてみてください http://www.linuxjournal.com/article/4880
チェックアウト lsyncd
Lsyncd はローカルディレクトリツリーのイベントモニタインタフェース (inotify または fsevents) を監視します。数秒間イベントを集約して結合し、変更を同期させるために1つ(または複数)のプロセスを生成します。デフォルトでは、これは rsync です。Lsyncd はこのように、新しいファイルシステムやブロックデバイスを必要とせず、インストールが比較的簡単で、ローカルファイルシステムのパフォーマンスを妨げない軽量なライブミラーソリューションです。
Rsync+ssh は高度なアクション設定で、移動先を有線で再送信する代わりに、SSH を使ってターゲット上でファイルやディレクトリの移動を直接実行します。
コンフィグファイルを通して、きめ細かいカスタマイズが可能です。カスタムアクションの設定は、シェルスクリプトからLua言語で書かれたコードまでのカスケードレイヤでスクラッチから書くこともできます。
これで完全に解決するわけではありませんが、手始めにはなります。
頻繁にファイルを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 はオプションで、おそらくスクリプトから除外されるべきです。
dev/*
proc/*
lost+found/*
mnt/*
sys/*
1台のコンピュータから他の2台のコンピュータに/home
をマウントします。これにはAutomountがかなり有効です。
dropboxを見てみましょう http://www.getdropbox.com/ クロスプラットフォーム Win / Linux / Mac
Ubuntu One はあなたが探しているものかもしれません。残念ながらまだベータ版の段階で、私は経験がないので、これで動くかどうかはわかりません。
設定を同期させたい場合は、上記のツールは全く無力です:設定は頻繁に変更され、多くのログファイルはコンフリクトを起こしてマージできません。
私の判断は単純で愚かなものです :) 私はマスターワークステーションを持っていて、"~“からの全てのファイルを二番目の "スレーブ "にコピーしています。何かを修正する必要があると思った瞬間、マスターで修正を行い、スレーブは同期時にこれらの変更をキャッチします。
また、いくつかの bash スクリプトはこれらのマシンで異なる動作をするはずなので、/etc/bash.bashrc を編集しました:
export OOHOST=Master
これで、スクリプトはどのホストにサービスを提供しているかわかるようになりました ;)
dvcs-autosync ](http://www.mayrhofer.eu.org/dvcs-autosync) を試してみてください。
これはgitをベースにしており、接続しているクライアントにファイルの変更を通知するためにXMPPを使用し、inodeの変更を介してファイルの変更イベントに反応します。そのため、常にファイル変更の直後に通知を受け、競合が発生した場合はgitの実績のある方法に頼ります。
私はSSH公開鍵を使ってDropboxの代わりに使っています。
私が考える回避策
Dropbox。
Dropbox. 主な欠点:妥当な量のデータに対しては無料ではない。それ以外の場合は、IMHO
NASサーバー。NASサーバーにファイルを置く。最近では手頃な値段で手に入るようになった(150ドルかそこら)。また、良いものはあまりエネルギーを消費しません。
主な欠点: ローカルコピーよりも遅い
私はMac用のSyncTwoFolders とPC用のSyncback を使っています - 1つ目は自宅の3台のMac(ラップトップを含む)用、2つ目は職場のPC用です。両方のプログラムには様々なバックアップと同期のオプションがあり、事前に設定しておけば、これを簡単に行うことができます。簡単に簡単に! 私は、LinuxとUbuntuで利用可能な同様のソフトウェアの他のバージョンがあると確信しています。
osync のような同期スクリプトを使えば、削除されたファイルを伝搬し、変更されたファイルのみを更新することができます http://www.netpower.fr/osync osync は rsync ベースですが、ssh 経由でローカルフォルダ間やリモートフォルダ間の多くの同期シナリオを扱うことができます。