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の設定とクライアントの設定
- MacMiniを sshd サーバとしてセットアップ
- MacMiniからTime Capsuleを自動マウント
- 遠隔地のバックアップクライアントから rsync にてミラーバックアップする(手動)
- 遠隔地のバックアップクライアントから rsync にてミラーバックアップする(自動)
- まとめ
Time Capsule を NASとして Windows,Mac OS Xクライアント混在環境で使う
Time Capsule はNASとして使えますが、普通のNASにあるユーザ管理機能... いわゆるディレクトリサービスは付属していないようです。 したがって、アクセスしてきたクライアントごとに、NAS上のファイルのアクセス権を コントロールしたい、といったことはできません。 単なる共有ファイルサーバとして使います。
Time Capsuleの設定とクライアントの設定
はじめに、Time Capsule を
NAS として既存のネットワークに参加するように設定しておきます。
また、ウインドウズファイル共有設定もイキにしておきます。
(設定は、AirMac設定アシスタントを使って簡単に設定できます。)
このとき、以下の条件で設定したことで以下、説明します。
- 名前 : TC
- IPアドレス :192.168.0.100 (固定IP)
- パスワード : hogehoge
※設定時のトラブルを避けるために、Time Capsule の名前に日本語や半角スペースを含めない方がいいと思います。 (実際には試していないので、日本語が含んでいても問題ないかもしれません。)
Mac OS X クライアントからアクセスする
- Finderのメニューから【移動 - サーバへ接続】
- 192.168.0.100 を入力
- パスワードを hogehoge を入力
Windows XP クライアントからアクセスする
- Windows Explorer のメニューから【ツール - ネットワークドライブの割り当て】
- \\192.168.0.100\TC\
- ユーザ: TC , パスワード: hogehoge (※ユーザ名はどんな名前でも通る気がするのだが、そこまでは未調査)
MacMiniを sshd サーバとしてセットアップ
次に、タイムカプセル上のデータを遠隔地にあるバックアップクライアントから rsync を使ってミラーバックアップする準備をします。
rsync は ssh を使って、データ転送を行うことができます。 そこで、ssh で外部から Time Capsuleのディスク領域にアクセスできるようにしたい。 しかし、 Time Capsule には sshd はないため MacMini を別途用意してそこで sshd を起動し、 MacMini経由で Time Capsule にアクセスできるようにします。
- MacMini(Mac OS X Leopard)を用意
- MacMiniのIPアドレスを固定IPに設定
- リモートログインにチェックして sshd を起動
- MacMiniからTime Capsuleをマウント
- 外部から ssh で MacMini にリモートログインできるようにする
以下の説明では、
- MacMiniの固定IP : 192.168.0.101
- MacMiniのユーザ : foo , パスワード : foobar
と設定したことにして話を進めます。
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 を実行する手順を説明します。
- 遠隔地のバックアップクライアント : remote $
- TimeCapusleをマウントしているsshdを起動した MacMini : macmini $
として説明します。 手順が若干ややこしいですが、やっていることは、 遠隔地バックアップクライアントが MacMiniから信頼されるように、鍵を生成して、公開鍵を MacMiniにコピーする、 という内容です。
Step1) 鍵の生成
remote $ ssh-keygen -t dsa
このときパスフレーズの入力を求められますが、空 にします。 ここがポイントです。
以下の2つのファイルが生成されます。
- ~/.ssh/id_dsa
- ~/.ssh/id_dsa.pub
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
処理内容
- "backup" と名付けた外付けHDDが /Volumes/backup マウントされているか確認
- 問題がなければ rsync を実行
- ログを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 ベースでコロケーション環境を構築しました。
まだ本当にトラブルがないのかはこれからの検証になりますが。