Hatena::ブログ(Diary)

mteramotoの日記 RSSフィード Twitter

2011-01-19

NetatalkとAvahiを使ってFreeBSDマシンをTime Capsuleとして使う

Mac OS XにはTime Machineというバックアップ機能があって、ローカル接続したHDDネットワーク接続したファイルサーバに自動的にバックアップを作成してくれる。デスクトップ型ならローカル接続したHDDを使うのが、高速かつ確実だけど、ノート型の場合はいちいちHDDを接続するのが面倒で、そのうちバックアップを取らなくなる恐れがある。

Time Machineに使えるネットワーク接続したファイルサーバは、Apple純正のTime Capsuleがあるけど、内蔵のHDDが故障したらせっかく取得したバックアップがパーになるから、冗長化されたHDDを使いたい。

そこで、手元のFreeBSDマシンをTime Capsuleっぽく仕立てることにした。

Time Capsuleは、ディスク共有をAFP over TCP、サービス広告をBonjourで実現してるので、それらを適切に設定すればTime Capsuleっぽく動作させることができる。

インストール

portsから、net/netatalknet/avahiインストールする。それぞれがAFP over TCPBonjourを担当する。NetatalkTime Machine対応を簡単に実現するには、Netatalk 2.0.5以上が必要である。net/netatalkは現在2.1.5だから問題なし。

Netatalkの設定

ユーザのホームディレクトリは共有せず、Time Machine用ボリュームの共有のみを行う設定とする。

まずはAFP over TCPを担当するafpdの設定を、/usr/local/etc/afpd.confに記述する。デフォルトではユーザごとのホームディレクトリを共有する設定になっているので、-nouservolを追加して共有しない設定にする。認証は、OSのローカルユーザアカウントを使うことにしてる。

(追記)ホームディレクトリの共有は、/usr/local/etc/AppleVolumes.defaultで指定されてるから、該当箇所をコメントアウトすればOK。afpd.confの編集は不要。id:K-HATさん、ご指摘ありがとうございました。

# The "~" below indicates that Home directories are visible by default.
# If you do not wish to have people accessing their Home directories,
# please put a pound sign in front of the tilde or delete it.
# ~
↑これをコメントアウトする

次はafpdで共有するボリュームの設定を、/usr/local/etc/AppleVolumes.defaultに記述する。

/path/to/backup "Time Machine" options:tm

options:tmがTime Machine対応のための設定である。Time Machineは、ディスク容量があればあるだけバックアップを作成するので、共用のボリュームの場合はlimitsizeも指定してTime Machineに使用するディスク容量を制限するとよい。今回はZFSのquotaを使ってディスク容量を制限するため、limitsizeの指定はしなかった。/path/to/backupは、接続の際使用するユーザで書き込み可能としておくこと。

Avahiの設定

/usr/local/etc/avahi/services以下に、広告するサービスの設定ファイルを設置する。以下はAFP over TCPの設定ファイルadisk.serviceである。

<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name replace-wildcards="yes">%h</name>
  <service>
    <type>_adisk._tcp</type>
    <port>9</port>
    <txt-record>sys=adVF=0x100</txt-record>
    <txt-record>dk0=adVN=Time Machine,adVF=0x81</txt-record>
  </service>
</service-group>

adVF=0x81がTime Machine対応ボリュームの証。これでTime Capsuleディスクを探すときに、一覧に登場するようになる。

/etc/rc.confの設定

NetatalkとAvahiが起動時に起動するよう、/etc/rc.confに設定を追加する。

avahi_daemon_enable="YES"
avahi_dnsconfd_enable="YES"
netatalk_enable="YES"
cnid_metad_enable="YES"
afpd_enable="YES"

最後に手動でサービスを起動するか、サーバごと再起動するかする。その後、afpd、cnid_metad、avahi-daemonが起動しているかどうか確認する。

Time Machine環境設定から「ディスクを選択」を実行すると、設定した共有ボリュームが表示される。Time Machineボリュームを選択すれば、ネットワーク経由でTime Machineが実行可能。すばらしい。

f:id:mteramoto:20110119224018p:image

参考

APPLE Time Capsule 2TB MC344J/A
アップル (2009-10-21)
売り上げランキング: 25363

K-HATK-HAT 2011/01/20 01:51 -nouservolはDon't red the user's volume *file* です。
~/AppleVolumesや~/.AppleVolumesを読まなくする設定です。
ホームディレクトリを共有できなくするには、AppleVolumes.default内の「~」の行を削除します。

mteramotomteramoto 2011/01/20 12:40 修正しました。ご指摘ありがとうございました。設定ファイルを確認したら、~はコメントアウトしてました。作業記録をとってなかったのが敗因か。ぐぬぬ。

K-HATK-HAT 2011/01/21 22:22 未確認なんですが、クライアント側から見える共有ボリュームの容量は、quotaで制限した容量と一致してますかね? もし一致してないなら、limitsizeオプションが必要ということになります。

mteramotomteramoto 2011/01/21 23:28 手元で確認したところ、容量は一致してるので問題なさそうです。

ま 2011/01/23 19:21 この手順は opensolaris + napp-it の設定でも流用出来、 zfs の Time Machine が無事作れました。

K-HATK-HAT 2011/01/24 21:35 ほおおおお。
私の取り越し苦労だったようです。
安心しました。

mteramotomteramoto 2011/01/25 01:48 afpdのソースコードまでは確認してませんが、ZFSのquotaはquotaで指定した容量のZFSをpoolから切り出すことになるので、afpdから見ると指定容量のFSに見えるから問題ないのでしょう。

K-HATK-HAT 2011/01/25 02:30 ZFSもquotaも使ってないので、よくわかんないんですが、特に問題ないのですね。
limitsizeってオプションは実際にlimitするんじゃなくて、sizeをfakeするだけのヤクザなオプションです。quotaによって正常にlimitできるなら、それが一番です。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証