Linuxマシンを使ってネットワーク越しのTime Machineバックアップ環境を構築する手順まとめ

2009年2月5日追記

Hat氏がこのトピックに関する情報をまとめてくださっているので併せてご参照ください.



Mac OSX 10.5 LeopardからTime Machineというバックアップソフトウェアが標準搭載されるようになりました。Time Machineはバックアップ先として、外付けのハードディスクドライブの他に、Time Capsuleのような特定のネットワークストレージもサポートしています。MacBookなど本体を日常的に持ち運ぶ環境では、外付けハードディスクドライブは毎回接続するのは少々煩わしいですし、Time Capsuleを新たに買うには少々お金がかかります。手元に空き容量に余裕があるハードディスクドライブがある場合、それをネットワークドライブとしてTime Machineから使えればベストです。

さて、Time MachineとTime Capsuleの間の通信はAFP over TCP(AppleTalkの後継)というプロトコルで行われています。このAppleTalkオープンソース版の実装としてNetatalkというものがあり、Linuxやその他のOSをサポートしています。そこでNetatalkを使って、Time Machineによるバックアップ環境を無料で構築できないかと思い、試行錯誤をしてみたところ上手くいったのでその手順を解説します。

※以下はUbuntu Linux 7.10 Gutsy Gibbon上での作業を基準に解説していますが、他のDebianベースのLinuxなら手順は大体同じだと思います。

HFS+形式でフォーマットされたパーティションの準備

  • この手順は必要ないことが判明しました。ファイルシステムLinuxがサポートするものであれば何でもいいようです。私はext3を使っています。

Netatalkのインストール・設定

NetatalkのバイナリパッケージではサポートしていないSSLオプションを有効にするため、ソースからビルドしてインストールします。

Netatalkのソースを取得
> apt-get source netatalk
Netatalkが依存するパッケージをインストール
> sudo apt-get install devscripts fakeroot libssl-dev cracklib2-dev
> sudo apt-get build-dep netatalk
NetatalkSSLオプションを有効にしてビルド
> cd netatalk-2.0.3
> DEB_BUILD_OPTIONS=ssl debuild

ビルドしたNetatalkをインストール

> sudo dpkg -i ../netatalk*.deb
Netatalkの設定をする

/etc/netatalk/afpd.confに以下の一行を追加。

- -transall -uamlist uams_dhx.so -nosavepassword

/etc/netatalk/AppleVolumes.defaultに以下の一行を追加。

/media/sdb1 "Time Machine"

sdb1と記載されている部分は各自の環境に合わせて読み替えて下さい。なお他のマシンに公開する名前("Time Machine"の部分)は任意です。

afpdによる他マシンからのブラウジングの設定

/etc/avahi/servicesを作成し、以下の内容を記述

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">

<service-group>

<name replace-wildcards="yes">%h</name>

<service>
<type>_afpovertcp._tcp</type>
<port>548</port>
</service>

</service-group>

LeopardからAppleTalkで接続するときのパスワードを設定する

  • この手順は必要ないことが判明しました。Netatalkの認証はデフォルトではUNIXユーザー名とパスワードで行われます

Netatalkサービスを再起動し、設定を有効にする

> sudo /etc/init.d/netatalk restart
> sudo /etc/init.d/avahi-daemon restart

この段階で、MacのFinder上からLinuxマシンのホスト名が見えているはずです。

※以下、Mac上での作業です。

Time Machineがサポートしていないネットワークドライブを認識するようにする

お使いのMacのTerminal.app上で以下のように入力します。

> defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1

Time Machineのバックアップ先の設定

  • システム環境設定→システム→Time Machine→ディスクを変更.. で、 先ほど設定した「Time Machine(Linuxマシンのホスト名)」というハードディスクが表示されるので、選択
    • 100秒後にバックアップを開始するよ!的なカウントダウンが始まります
  • Time Machineの状況をメニューバーに表示をチェック
  • メニューバーのTime Machineのアイコンから「今すぐバックアップを作成」を選択

このとき何もしないで待っていると、数秒後に「Time Machineのエラー:バックアップディスクイメージを作成できませんでした。」と表示されて先に進めません。このときちょっとした細工をすると上手くいきます。

以下はタイミングが少々シビアです
  • メニューバーのTime Machineのアイコンから「今すぐバックアップを作成」を選択
  • Netatalk共有したポイント(上の例だと/media/sdb1)に以下のファイルが作成されるのを待ちます。
<hostname>_<en0MacAddress>.sparsebundle
:2e<en0MacAddress></strong> 
# ※<hostname>, < en0MacAddress >はそれぞれMac側のホスト名と有線LAN(Ethernet)のMACアドレスに対応

これらのファイルが作成されてすぐに、Linuxマシン側で

> sudo /etc/init.d/nettalk stop

と入力し、Netatalkサービスを停止します。当然Mac側でTime Machineがエラーを表示するはずです。

(ファイルが作成されるタイミングを確認するには、Nautilusなどで公開したディレクトリを表示しておくといいと思います)

  • マウントポイントに作成された:2eというファイルを.というようにファイルの名前を変えます。
  • ↑の作業は必要ないことが判明しました

次に、先ほど停止したNetatalkサービスを開始します。

> sudo /etc/init.d/nettalk start
  • Time Machine環境設定の画面を再度開くと、前回のバックアップがエラーで終了したとの表示があるので、一旦バックアップ先を「なし」にします
  • Time Machine環境設定の画面に戻り「ディスクを選択」ボタンを押し、先ほどと同じ場所をバックアップ先として指定します
  • メニューバーのTime Machineのアイコンから「今すぐバックアップを作成」を選択します。

今度はTime Machineが初回バックアップに成功し、以降はNetatalkサービスで公開したディレクトリを使って定期的にバックアップがとるようになるはずです.

初回のTime Machineの処理中にNetatalkサービスを停止することで上手くいく理由は、深入りしてないのでよく分かっていません。

謝辞

コメント欄でHATさんに私のいくつかの勘違いや誤りを指摘していただいたことで、より正確な内容にすることができました。ありがとうございました。

参考にしたページ

Netatalk(AFP over TCP)の代わりにSambaを使う方法(Thx HAT氏)

4/23 23:26追記: 上記手順はid:y_yanbeの思い込み・勘違いによる不正確な記述があり、現在確認中です。

4/24 12:00追記: 不必要な手順を削除しました。

4/26 10:20追記: 不正確な記述を修正しました。