Time Capsule は、Time Machineのバックアップ用として使われるようにデザインされていますが、普通のNASとしても使うことができます。
今回、タイムカプセルとMacMiniを組み合わせて、ファイルサーバを構築した上で、遠隔地にあるバックアップクライアントから 自動でrsync を使ってミラーバックアップを行う環境を構築しました。(いわゆるコロケーションです。)
以下に、手順を簡単に整理しました。
Time Capsule はNASとして使えますが、普通のNASにあるユーザ管理機能... いわゆるディレクトリサービスは付属していないようです。
したがって、アクセスしてきたクライアントごとに、NAS上のファイルのアクセス権をコントロールしたい、といったことはできません。単なる共有ファイルサーバとして使います。
はじめに、Time Capsule を NAS として既存のネットワークに参加するように設定しておきます。
また、ウインドウズファイル共有設定もイキにしておきます。
(設定は、AirMac設定アシスタントを使って簡単に設定できます。)
このとき、以下の条件で設定したことで以下、説明します。
※設定時のトラブルを避けるために、Time Capsule の名前に日本語や半角スペースを含めない方がいいと思います。
(実際には試していないので、日本語が含んでいても問題ないかもしれません。)
次に、タイムカプセル上のデータを遠隔地にあるバックアップクライアントから
rsync を使ってミラーバックアップする準備をします。
rsync は ssh を使って、データ転送を行うことができます。
そこで、ssh で外部から Time Capsuleのディスク領域にアクセスできるようにしたい。
しかし、Time Capsule には sshd はないため MacMini を別途用意してそこで sshd を起動し、MacMini経由で Time Capsule にアクセスできるようにします。
以下の説明では、
と設定したことにして話を進めます。
これで sshd が起動します。(外部から sshクライアントでログインできるようになります。)
また、MacMiniがスリープしないよう省電力設定でスリープなしに設定しておきます。
外部のマシンから接続テストを行います。
local $ ssh foo@192.168.0.101
password: ******(※foobarと入力)
macmini $
ssh でログインできたら、scp , rsync コマンドでも同様にうまく作動するか試します。
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 にファイルがコピーされたか確認します。
事前に 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 Capusle のディスク領域を読み取れるようにするため、MacMini から 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
先ほどの mount コマンドを /Users/foo/bin/auto-mount-tc.sh に記述しておき、MacMini 起動時にこのスクリプトを動かせば、結果として、自動マウントが実現します。
MacMini起動時にスクリプトを動かす方法の一つは、cron を使う方法です。
#!/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アドレス” を表現しています。
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を運用することができます。
以上の設定ができていれば、同じローカルネットワーク内のクライアントマシンから以下のコマンドでミラーバックアップができます。
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
一番簡単なのは、192.168.0.101 のIPで設定してきた「MacMini」をインターネットから直接アクセスできるところに設置し、グローバルな固定IPアドレスを設定することです。
ただ、普通は、そういうことはしません。
ルータを設定して、ルータ経由でMacMiniに ssh (ポート22)接続できるようにします。
「ssh,ルータ,設定」などでググれば情報が出てくると思います。
また、それ以前の問題として、ほとんどのケースで、固定IPを使ってインターネット接続しているところはないと思います。
そのような場合、インターネットに接続するIPアドレスは定期的に変わってしまうため、IPアドレスが固定化していないネットワークに外部からアクセスするには、DynamicDNSサービスなどを併用する必要があります。
「遠隔地のバックアップクライアントから rsync にてミラーバックアップする(手動)」では、毎回 パスワードを入力しないとバックアップできません。
バックアップは定期的に自動で行うのが普通なので、これは不都合です。
ここではパスワードを入力しないで、rsync を実行する手順を説明します。
として説明します。
手順が若干ややこしいですが、やっていることは、遠隔地バックアップクライアントが MacMiniから信頼されるように、鍵を生成して、公開鍵を MacMiniにコピーする、という内容です。
remote $ ssh-keygen -t dsap. このときパスフレーズの入力を求められますが、*空* にします。 ここがポイントです。 以下の2つのファイルが生成されます。 * ~/.ssh/id\_dsa * ~/.ssh/id\_dsa.pub
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アドレスまたはドメイン名を入れます。
remote $ rsync -av -e "ssh -i ~/.ssh/id_dsa " foo@foobar.net:/Users/foo/tc/ /path/to/backup-hdd
うまく設定できていれば、パスワードなしでアクセスすることができます。
/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
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 ベースでコロケーション環境を構築しました。
まだ本当にトラブルがないのかはこれからの検証になりますが。
MindBoard は 直観的な操作で簡単にマインドマップを描くことができる Android タブレット用アプリです。