LinuxTutorial

LinuxTutorial

Linux ラップトップとデスクトップの同期――2

Jem Matzan
2006年6月2日 / 09:00
 
転送の完了

複数のディレクトリ(CVS、FTP、NFS)にある膨大な数のファイルの転送に利用可能 なネットワーキング技術は多数存在するが、われわれの目的には rsync が最適だと思われる。

rsync は、複雑な転送に適した設計だという点を除き、scp に良く似ている。手元のラップトップとデスクトップコンピュータがほとんど同じソフトウェア、「/home」ディレクトリ構造、そしてデータを使っている場合、rsync はこれをインテリジェントにアップデートする。もし rsync が重複したファイルをリモートマシン上で見つけると、どのファイルが新しいのかをチェックして、古くなっていればリモートファイルをアップデートする。また、ファイルやディレクトリが存在しない場合は rsync がこれを作成してくれる。さらに、ローカルマシンで見つからないファイルがリモートマシン上にある場合に、それを削除するよう rsync を設定することもできるが、このスイッチは危険なため、本稿の例では一切使っていない。

ファイル転送に rsync を使うためには、OpenSSH 同様、リモートマシン上でデーモンを起動する必要がある。コマンドはrsyncdで、もちろん、必要に応じてこれを OS の起動スクリプトに登録することも可能だ。以下の例では rsync デーモンが不要で、代わりに OpenSSH がファイル転送に利用されているため、SSH デーモンの起動が必要になる。ファイル転送で利用するソフトウェアは、リモートホストの名前や IP アドレスのあとにコロンを1つ(SSH)つけるか、2つ(rsync)つけるかで指定する。以下の例はすべてコロンを1つ使っている。

rsync の最も簡単な使い方は、同じユーザーとファイルシステム構造を持つ2台のコンピュータの「/home」ディレクトリを同期させる方法だ。
rsync -arvuz /home/user/ 192.168.1.101:/home/user/


SSH を使う場合と同じように、「/etc/hosts」を使ってリモートマシンの IP アドレス用のニックネームを作成したり、「@」を使ってほかのユーザーを指定することもできる。「-arvuz」の各フラグはそれぞれ(順番に)、ユーザーとグループのファイルアクセス権を維持する、「/home/user/」ディレクトリとその中のファイルおよびディレクトリを再帰的にコピーする、転送もしくはアップデートされたファイルを冗長表示する、同じタイムスタンプの付いた同一ファイルは無視する、そしてネットワーク上で帯域幅を多く使わないようデータを圧縮する、という意味になる。

「/home/user/」ディレクトリ全体ではなく、重要なファイルとディレクトリだけを転送したい場合はどうすれば良いだろうか? 方法は2つある。「/home」ディレクトリ内の同じディレクトリを毎回コピーする場合は、シンプルなスクリプトを使って入力の手間を省くことができる。お気に入りのテキストエディタを起動し、sync_laptop.sh という名前のファイルを作成して、ディレクトリを自分のものと置き換えて以下の例をファイルに入力する。
rsync -arvuz ’/home/user/pictures /home/user/documents /home/user/jokes ’ laptop:



これを保存したら、chmod +xを使って実行イメージにする。上のコマンドは複数階層が含まれるディレクトリでは機能しないため、「/home/user/pictures/summer/」では動かない。また、上の例ではリモートの「/home」ディレクトリ以外にファイルをコピーすることもできない。下の階層にある転送したいディレクトリごと、スクリプトにコマンドを1行ずつ追加することも可能だが、ほかにももっと効率的な方法がある。

まず最初に、「sync」というディレクトリをユーザーのホームディレクトリに作成する。この「sync」ディレクトリに移動し、転送したいディレクトリすべてにシンボリックリンクを作成する。転送先のリンクを作成するときは、「sync」ディレクトリを必ず自分のホームディレクトリのように扱う。階層が複数にわたる場合は、「/home/user/sync/」ディレクトリ内にディレクトリを作成しなくてはならない可能性もある。
ln -sf /home/user/documents ./documents
mkdir .gconf
mkdir .gconf/apps
ln -sf /home/user/.gconf/apps/evolution ./.gconf/apps/evolution
ln -sf /home/user/.evolution ./.evolution
mkdir pictures
mkdir pictures/summer
ln -sf /home/user/pictures/summer ./pictures/summer


ここで転送を行うスクリプトを作成し、これに sync_laptop.sh という名前を付けてユーザーのホームディレクトリに置く。
# このスクリプトは本マシンとリモートコンピュータとの同期を行う

cd /home/user/

# ホームディレクトリ内の(ディレクトリではなく)ファイルをすべてリモートマシンに
# コピーしたい場合は、次のコマンドのコメント記号をはずす。

# cp * ./sync

rsync -arLuvz /home/user/sync/ laptop:/home/user


「 -L」のスイッチは、シンボリックリンクを実際のディレクトリのように扱うよう rsync に指示している。

スクリプトを保存したら、 chmod +x を使い、これを実行イメージにする。このスクリプトを実行すると、手元のラップトップがデスクトップマシンのファイルとディレクトリでアップデートされる。最初の実行時は多少時間がかかるが、rsync は変更されていないファイルを上書きしないため、2回目以降の同期にはさほど時間がかからない。

この逆の処理はラップトップコンピュータで同じことを行うが、リモートマシンの IP アドレスやニックネームを忘れずに変更すること。

ところで、上記の例は電子メールアカウント、アドレス帳、保存してある電子メールのほか、Novell Evolution のデータすべてをリモートマシンにコピーする。新しいラップトップコンピュータを設定する場合は、これで Evolution データの移行がはるかに容易になる。

次へ 参考 »

目次

1 シングルオブジェクトの転送
2 転送の完了
3 参考
【関連記事】
Linux ラップトップとデスクトップの同期
Linux ラップトップとデスクトップの同期――1
Linux ラップトップとデスクトップの同期――3
オープンソースも「使えば慣れる」、みんなが Linux、OpenOffice.org を使う町役場
mixi と2ちゃんねるに見る、未来の Web2.0 的仮想社会

New Topics

Special Ad

ゆりかごからロケットまで、すべての乗り物をエンジョイ
ゆりかごからロケットまで、すべての乗り物をエンジョイ えん乗り」は、ゆりかごからロケットまで、すべての乗り物をエンジョイする、ニュース、コラム、動画などをお届けします! てんこ盛りをエンジョイするのは こちらから

Hot Topics

IT Job

Interviews / Specials

Popular

Access Ranking

Partner Sites