Index > Mac OS X(Leopard) + Time Capsule + rsyncによる遠隔地ミラーバックアップ(コロケーション)環境の構築
Wed, January 7, 2009

Mac OS X(Leopard) + Time Capsule + rsyncによる遠隔地ミラーバックアップ(コロケーション)環境の構築

Time Capsule は、Time Machineのバックアップ用として使われるように デザインされていますが、普通のNAS(Network Attatched Storage)としても 使うことができます。

今回、タイムカプセルとMacMiniを組み合わせて、ファイルサーバを構築した上で、 遠隔地にあるバックアップクライアントから 自動で rsync を使ってミラーバックアップを行う環境を構築しました。 (いわゆるコロケーションです。)

手順

以下に、手順を簡単に整理しました。

Time Capsule を NASとして Windows,Mac OS Xクライアント混在環境で使う

Time Capsule はNASとして使えますが、普通のNASにあるユーザ管理機能... いわゆるディレクトリサービスは付属していないようです。 したがって、アクセスしてきたクライアントごとに、NAS上のファイルのアクセス権を コントロールしたい、といったことはできません。 単なる共有ファイルサーバとして使います。

Time Capsuleの設定とクライアントの設定

はじめに、Time Capsule を NAS として既存のネットワークに参加するように設定しておきます。 また、ウインドウズファイル共有設定もイキにしておきます。 (設定は、AirMac設定アシスタントを使って簡単に設定できます。)
このとき、以下の条件で設定したことで以下、説明します。

※設定時のトラブルを避けるために、Time Capsule の名前に日本語や半角スペースを含めない方がいいと思います。 (実際には試していないので、日本語が含んでいても問題ないかもしれません。)

Mac OS X クライアントからアクセスする

  1. Finderのメニューから【移動 - サーバへ接続】
  2. 192.168.0.100 を入力
  3. パスワードを hogehoge を入力

Windows XP クライアントからアクセスする

  1. Windows Explorer のメニューから【ツール - ネットワークドライブの割り当て】
  2. \\192.168.0.100\TC\
  3. ユーザ: TC , パスワード: hogehoge (※ユーザ名はどんな名前でも通る気がするのだが、そこまでは未調査)

MacMiniを sshd サーバとしてセットアップ

次に、タイムカプセル上のデータを遠隔地にあるバックアップクライアントから rsync を使ってミラーバックアップする準備をします。

rsync は ssh を使って、データ転送を行うことができます。 そこで、ssh で外部から Time Capsuleのディスク領域にアクセスできるようにしたい。 しかし、 Time Capsule には sshd はないため MacMini を別途用意してそこで sshd を起動し、 MacMini経由で Time Capsule にアクセスできるようにします。

  1. MacMini(Mac OS X Leopard)を用意
  2. MacMiniのIPアドレスを固定IPに設定
  3. リモートログインにチェックして sshd を起動
  4. MacMiniからTime Capsuleをマウント
  5. 外部から ssh で MacMini にリモートログインできるようにする

以下の説明では、

と設定したことにして話を進めます。

MacMini(Leopard) を用意して sshd を起動

これで sshd が起動します。(外部から sshクライアントでログインできるようになります。)
また、MacMiniがスリープしないよう省電力設定でスリープなしに設定しておきます。

sshによる接続テスト

外部のマシンから接続テストを行います。

local $ ssh foo@192.168.0.101
password: ******(※foobarと入力)
macmini $

ssh でログインできたら、scp , rsync コマンドでも同様にうまく作動するか試します。

scp テスト

local $ echo "hello macmini." > hello.txt
local $ scp hello.txt foo@192.168.0.101:/Users/foo/hello.txt
password :

※Macminiの /Users/foo/hello.txt にファイルがコピーされたか確認します。

rsync テスト

事前に MacMini に /Users/foo/test/ ディレクトリを作成した上で...

local $ mkdir test
local $ echo "hello macmini." > test/hello.txt 
local $ rsync  --progress -av -e ssh test/ foo@192.168.0.101:/Users/foo/test/
password :

※Macminiの /Users/foo/test/ ディレクトリがミラーされたか確認します。

MacMiniからTime Capsuleを自動マウント

遠隔地のバックアップクライアントが MacMini にアクセスし、 そこから Time Capusle のディスク領域を読み取れるようにするため、 MacMini から Time Capsule をマウントします。

Terminalを使って Time Capsule を手動マウント

MacMini から Time Capusle をマウントするには、 以下の方法でマウントできます。

macmini $ mkdir /Users/foo/tc
macmini $ mount -t afp afp://winz:hogehoge@192.168.0.100/TC/ /Users/foo/tc

cron を使ってMacMini起動時に自動マウント

先ほどの mount コマンドを /Users/foo/bin/auto-mount-tc.sh に記述しておき、MacMini 起動時にこのスクリプトを 動かせば、結果として、 自動マウントが実現します。

MacMini起動時にスクリプトを動かす方法の一つは、cron を使う方法です。

Step1) auto-mount-tc.sh の用意

#!/bin/sh
/sbin/mount -t afp afp://foo:hogehoge@192.168.0.100/TC/ /Users/foo/tc

※ foo:hogehoge@192.168.0.100 の部分で
"ユーザ:パスワード@TimeCapusleのIPアドレス" を表現しています。

Step2) cronの設定

crontab -e にて以下の記述を追加

@reboot /Users/foo/bin/auto-mount-tc.sh

/Users/foo/bin/auto-mount-tc.sh 実行権を付与しておきます。

macmini $ chmod 755 /Users/foo/bin/auto-mount-tc.sh

以上の設定により、MacMini電源さえ入れておけば、 /Users/foo/tc 以下にTime Capusleをマウントした状態になります。 あとは、このディレクトリを遠隔地のバックアップクライアントから rsync を使ってミラーバックアップするだけです。

MacMiniをマウス・キーボード・ディスプレイレスで運用

Time Capusleのマウントは、Finderメニューから行うこともできますが、 mountコマンドと cron を組み合わせることで、 マシンの起動時に自動でTime Capusleをマウントできます。
この方法を使えば、MacMiniは、マウスとキーボードとディスプレイなしにMacMiniを 運用することができます。

遠隔地のバックアップクライアントから rsync にてミラーバックアップする(手動)

以上の設定ができていれば、 同じローカルネットワーク内のクライアントマシンから 以下のコマンドでミラーバックアップができます。

local $ rsync --progress -z -av -e ssh foo@192.168.0.101:/Users/foo/tc/ /path/to/backup-hdd

ローカルではなく、 インターネット越しの遠隔地にあるバックアップ用クライアントから rsync するには、 どうすればいいか?

それは、インターネットから MacMini に ssh を使って接続できる環境をつくる必要があります。
もし、インターネットから foobar.net でこのMacMiniにアクセスできるとすれば...
以下のコマンドでミラーバックアップできます。

$ rsync --progress -z -av -e ssh foo@foobar.net:/Users/foo/tc/ /path/to/backup-hdd

インターネットからMacMiniを見えるようにするには...

一番簡単なのは、192.168.0.101 のIPで設定してきた「MacMini」を インターネットから直接アクセスできるところに設置し、グローバルな固定IPアドレスを設定することです。

ただ、普通は、そういうことはしません。 ルータを設定して、ルータ経由でMacMiniに ssh (ポート22)接続できるようにします。 「ssh,ルータ,設定」などでググれば情報が出てくると思います。

また、それ以前の問題として、 ほとんどのケースで、固定IPを使ってインターネット接続しているところはないと思います。 そのような場合、インターネットに接続するIPアドレスは定期的に変わってしまうため、 IPアドレスが固定化していないネットワークに外部からアクセスするには、 DynamicDNSサービスなどを併用する必要があります。

遠隔地のバックアップクライアントから rsync にてミラーバックアップする(自動)

「遠隔地のバックアップクライアントから rsync にてミラーバックアップする(手動)」では、 毎回 パスワードを入力しないとバックアップできません。 バックアップは定期的に自動で行うのが普通なので、これは不都合です。

ここではパスワードを入力しないで、rsync を実行する手順を説明します。

として説明します。 手順が若干ややこしいですが、やっていることは、 遠隔地バックアップクライアントが MacMiniから信頼されるように、鍵を生成して、公開鍵を MacMiniにコピーする、 という内容です。

Step1) 鍵の生成

remote $ ssh-keygen -t dsa

このときパスフレーズの入力を求められますが、 にします。 ここがポイントです。

以下の2つのファイルが生成されます。

Step2) 公開鍵のMacMiniへのコピーと設置

Step1 で生成した公開鍵 id_dsa.pub の内容を MacMini の ~/.ssh/authorized_keys2 に追加します。
ここでは話を簡単にするために、MacMini には ~/.ssh/authorized_keys2 は 存在していなかったこととして説明します。 (存在している場合はバックアップをとってからやってください。)

remote $ scp ~/.ssh/id_dsa.pub foo@foobar.net:~/.ssh/authorized_keys2

※ @foobar.net のところは、MacMiniを表すIPアドレスまたはドメイン名を入れます。

Step3) remoteから rsync で MacMiniにアクセスして rsync によりミラーバックアップ

remote $ rsync -av -e "ssh -i ~/.ssh/id_dsa " foo@foobar.net:/Users/foo/tc/ /path/to/backup-hdd

うまく設定できていれば、パスワードなしでアクセスすることができます。

Step4) バックアップスクリプトの作成

/Users/tomo/bin/myrsync.sh として以下のスクリプトを作成

#!/bin/sh

LOG=/Users/tomo/var/log

#DELETEOPT=--delete
DELETEOPT=""

MACMINI=foobar.net

#MACMINI=192.168.0.101


# rsync

R=`/bin/df | grep backup | grep Volumes`

if [ -z "$R" ] 
then
        echo "error, USB HDD not mounted." > $LOG
else
        echo "ok ... do sync" > $LOG
        /usr/bin/rsync --progress -z -av -e "ssh -i /Users/tomo/.ssh/id_dsa " $DELETEOPT \
        $USER@$MACMINI:/Users/foo/tc/ \
        /Volumes/backup/tc/ >> $LOG
        /bin/df | grep backup | grep Volumes >> $LOG
fi

# copy log
MYDATE=`/bin/date +%Y%m%d-%H%M`
/usr/bin/scp -i /Users/tomo/.ssh/id_dsa  $LOG $USER@$MACMINI:~/var/log.$MYDATE 
rm -f $LOG

処理内容

  1. "backup" と名付けた外付けHDDが /Volumes/backup マウントされているか確認
  2. 問題がなければ rsync を実行
  3. ログをMacMini にscp で転送

Step5) cron への登録

crontab -e にて、myrsync.sh を 毎日 6:00, 12:00,18:00,0:00 に実行するようにセット。

0 6 * * *     /Users/tomo/bin/myrsync.sh
0 12 * * *     /Users/tomo/bin/myrsync.sh
0 18 * * *     /Users/tomo/bin/myrsync.sh
0 0 * * *     /Users/tomo/bin/myrsync.sh

※ myrsync.sh は chmod 755 などで実行権限を設定しておくこと。

まとめ

Mac OS X は 簡単なところは、簡単にGUIで設定でき、 細かい部分に関しては、UNIXの流儀で設定していける、 さらにUNIXツールがそのまま搭載されているため、UNIX,Linuxの豊富な ネット上のドキュメントも参照しながら設定が行える、という利点を あらためて実感しました。

今回の環境構築も事前の調査は時間がかかりましたが、 設定自体は、まる一日程度で完了しています。

Mac OS XもLeopardになり、Sambaのバージョンがあがって、 Windowsとのファイル共有でそれ以前にはあった、日本語ファイル・ロングファイルネームのトラブルが ほとんどないという情報を得て今回、Mac OS X ベースでコロケーション環境を構築しました。
まだ本当にトラブルがないのかはこれからの検証になりますが。

 Twitter
follow me on Twitter
 Categories