(本稿は、2010年7月24日に投稿され、あまりにも読みづらいため、2010年7月31日にて、再度書き直しました。混乱を招くため、第一稿は消しますが、晒し上げ的な目的でと、ご希望があれば、再度公開するかもしないかも。)
今回、僕が試みたケースは、rsyncを使って、『メインに使っているデスクトップ機のデータ』(以下、『メイン機の方の~』、『バックアップ元』、ないし、"/home/graviton1/") を、LAN内の『サブ的なデスクトップ機のホームディレクトリ』(以下、『サブ機の方の~』、『バックアップ先』、ないし、"192.168.1.4:/home/graviton2")にバックアップしよう、ということです。
ちなみに、両方とも、同じヴァージョンのXubuntuの、同じ日本語Remixなデスクトップ版で、ホームディレクトリの中身も、(ドットファイル等以外は、)同じディレクトリ構成で、同じように英語表記にしてあります。
結論から先。まず、バックアップに使ったコマンドは、以下。
$ rsync -av /home/graviton1/ --exclude '.*' --delete graviton2@192.168.1.4:/home/graviton2/
使われているユーザ名、ディレクトリ名、IPアドレス等は、適宜、ご自身の環境に合わせて、読み替えてくださいな。
バックアップ元のディレクトリ表記に気をつける
バックアップ元(本稿で言うところの、メイン機のデータ)の収まっているディレクトリ、/home/graviton1/ の、末尾のスラッシュ記号の有無で、対象のディレクトリ自体をどう扱うかが決まってしまうようなので、気をつける。
バックアップ元の末尾に、スラッシュをつけると、ディレクトリ『graviton1』自体はコピーされず、その中に有るファイルとディレクトリだけがコピーされ、バックアップ先に送られる。
対して、末尾に、スラッシュを付けずに行うと、ディレクトリ『graviton1』自体もまた、(別段指定がなければ、同じディレクトリ名のまま、)コピーされていくのだ。……って、何よ? 何言ってるのか、さっぱり分からん。
僕も、ここで、大いにこんがらがったので、図解。今回のエントリは、下のようなディレクトリを考えた場合のお話ですね。こんなんなってます。
home
└graviton1
├Desktop
├Documents
│ ├file1.txt
│ ├file2.ods
│ ├file3.csv
│ ├……
│ ├……
│ ├……
│ └……
├Pictures
│ ├file1.jpg
│ ├file2.png
│ ├……
│ ├……
│ ├……
│ └……
├Mail
│ ├……
│ ├……
│ ├……
│ └……
├Music
├……
├……
├……
└……
で、スラッシュをつけると、保存されるのは、以下。
├Desktop
├Documents
│ ├file1.txt
│ ├file2.ods
│ ├file3.csv
│ ├……
│ ├……
│ ├……
│ └……
│
├Pictures
│ ├file1.jpg
│ ├file2.png
│ ├……
│ ├……
│ ├……
│ └……
├Mail
│ ├……
│ ├……
│ ├……
│ └……
├Music
├……
├……
├……
└……
次に、スラッシュをつけないでやると、以下。
└graviton1
├Desktop
├Documents
│ ├file1.txt
│ ├file2.ods
│ ├file3.csv
│ ├……
│ ├……
│ ├……
│ └……
│
├Pictures
│ ├file1.jpg
│ ├file2.png
│ ├……
│ ├……
│ ├……
│ └……
├Mail
│ ├……
│ ├……
│ ├……
│ └……
├Music
├……
├……
├……
└……
この差がどのような状況を生むのか。この差で何が困るのか。それは、ご自身のバックアップのとり方を考えて、問題を予測してほしい。
オプション類の解説
まずは、一番最初の-av。これは、-aがアーカイブモード。ディレクトリ構成は元より、パーミッションやグループの情報などを保持したままコピーします……というもの。次のvは、処理中のファイルを端末内に表示します。すなわち、verboseのvです。
それから、バックアップ元のディレクトリの指定があって、次に、–exclude ‘.*’ という文字列。バックアップ対象から、シングルクオートで囲まれた中のパターン(今回は’.*’で、いわゆるドットファイル、ドットディレクトリのようなものをさしてますが)に一致するものを除外(exclude)します。もちろん、逆に、除外『しない』ファイルを指定するために、–includeなどというのもあります。
続いて、–delete 。バックアップ元から消されたファイルは、バックアップ先からも消す……というオプションで、例えば、何度目かのバックアップの前に、バックアップ元からMusicディレクトリの中のfile1.oggを消した……という状態で、–deleteオプションをつけて、rsyncを掛けると、バックアップ先にあるMusic/file1.oggも消去するよと。
バックアップ先の……
こちらのrsync、バックアップ先へは、デフォルトで、sshで以て接続します。(ssh以外を指定するオプションもある)
$ rsync -av /home/graviton1/ --exclude '.*' --delete graviton2@192.168.1.4:/home/graviton2/
上のgraviton2@192.168.1.4:/home/graviton2/ が、バックアップ先の指定。今回は、別のマシンにつないでいるので、『バックアップ先マシンのユーザ名@ホスト名(今回はプライベートアドレスのIPアドレス):保存したいディレクトリの場所』という具合に指定しています。
なので、バックアップ先のユーザディレクトリに、バックアップ用のディレクトリを掘った、もしくは、掘ってないけど、掘って保存したい……という場合は、$ rsync -av ……(中略)…… graviton2@192.168.1.4:/home/graviton2/backup-dir/ としてやれば、OK。
バックアップを復元したいんだ
バックアップを取ったからには、有事の際には、復元するのです。
$ rsync -av graviton2@192.168.1.4:/home/graviton2/ /home/graviton1/
行き来を逆さにすれば、帰ってくるでしょ。(復元も、バックアップ元から操作)
いやあ、この記事、長かった……。というわけで、おしまい。ミスの指摘等は、コメント欄(、もしくは、メール)でお願いします。m(_ _)m