rsyncのすばらしさはどこにあるのか。1つは、毎回ファイルを丸ごとコピーするのではなく、新旧ファイル間の差分をコピーすることでファイル転送を高速化している点だ。たとえば、この記事を書いているときも、rsyncで今すぐコピーを行い、後でまたコピーすることができる。2回目(あるいはそれ以降)にrsyncでこのファイルをコピーするときは、差分だけがコピーされる。そのため、所要時間はずっと短くて済む。これは、ディレクトリ全体を1日ごとにバックアップしたりする場合に特に重要だ。初回のコピーにはかなり時間がかかるが、次回以降はわずか数分で終わる(そのディレクトリの毎日の変更量があまり大きくなければの話だが)。
もう1つの利点は、rsyncではパーミッションおよび所有者情報の保存、シンボリックリンクのコピーが可能であり、全般的に各種ファイルをうまく処理するように作られていることだ。
わざわざrsyncをインストールする必要はないだろう。ほとんどどんなLinuxディストリビューションでもデフォルトで使えるようになっているはずだ。そうでなくても、ディストリビューションのパッケージリポジトリからインストールすることができる。言うまでもないが、リモートシステムにデータをコピーする場合はローカルとリモートの双方のマシンにrsyncが必要になる。
別のホストにファイルをコピーする場合、rsyncは、SSH(Secure Shell)やRSH(Remote Shell)のようなリモートシェル経由で動作する。以下の例ではSSHを利用するが、それはRSHがセキュアでなく、それをデータのコピーに使いたいと思う人は多分いないからだ。rsyncデーモンを使ってリモートホストに接続することも可能だが、最近はほぼどこでもSSHが使えるので、わざわざそうする必要はないだろう。
rsyncの使い方
rsyncの基本的な文法はかなりシンプルだ。単に「rsync [options] source destination 」とすれば、「 source 」で指定したファイル(複数可)が「 destination 」で指定した場所にコピーされる。
たとえば、ホームディレクトリの下にあるファイルをUSBストレージデバイスにコピーしたければ、「rsync -a /home/user/dir/ /media/disk/dir/」とすればよい。ちなみに、rsyncは“/home/usr/dir/”と“/home/usr/dir”を区別する。最後のスラッシュがない場合、rsyncはそのディレクトリも含めて全体をコピーする。スラッシュがある場合、ディレクトリの中身をコピーするが、ディレクトリそのものは作られない。たとえば、/var/wwwを別のマシンか何かにミラーリングするなど、rsyncを使ってディレクトリ構造を複製しようとする場合は、最後のスラッシュを除く必要があるわけだ。
上の例では、アーカイブオプション(-a)を指定している。これは、実際にはいくつかのrsyncオプションを結合したもので、再帰コピーとシンボリックリンクコピーの各オプションを含み、グループと所有者の情報を保存する。普通は、アーカイブのコピーに適したオプションだ。ただし、ハードリンクは保存されないので、それらも保存したい場合はハードリンクオプション(-H)を追加する必要がある。
もう1つ、ほとんどの場合に必要になりそうなオプションが詳細情報の出力(-v)で、これを使うとrsyncによって実行中の処理について多くの情報が表示される。このオプションは2つまたは3つ重ねることができる。つまり、-vとするよりも-vvとするほうが表示される情報は多く、-vvvとすればrsyncの処理に関するすべての情報が表示される。
rsyncでは、オプションを何も指定しなくても隠しファイル(ファイル名が“.”で始まるもの)のコピーが行われる。隠しファイルを除外したければ、--exclude=".*/"というオプションを使えばよい。また、--excludeオプションを使ってVimのスワップファイル(.swp)や自動バックアップファイル(.bak)など一部のプログラムによって作成されたファイルをコピーの対象外にすることもできる。
