NFSを使用した Time Machine サーバー構築

容量当たりの単価が最も安かったという理由で Hitachi Deskstar 7K2000 2TB HDS722020ALA330 を自宅サーバーのバックアップ先に使用しているが、実際には1TB程度しか必要なさそうなので、残りの1TBを使って Time Machine サーバーを構築することにした。

Time Machine は基本的にはUSBなどで接続された外付けハードディスクに行うものであり、リモートのマシンにネットワーク経由で行うことは Apple Time Capsule しか公式にはサポートされていないが、実際にはNFSを始めとしたファイル・サーバーにも行うことができる。構築手順は Mac OS X 10.5 Loepard と Mac OS X 10.6 Snow Leopard で異なるが、以下は Snow Leopard 向けに CentOS 5.4 で構築する手順だ。

まずはMacでスパース・ディスクイメージ・バンドルを作成する。この特殊なディスクイメージは容量1TBと指定しても実際の使用容量が1GBであればハードディスクの容量も1GBしか使用されず、しかも実態はフォルダであって、8MB単位のチャンク(ファイル)で構成されている。500GBのtimemachine.sparsebundleというディスクイメージを作るコマンドは以下となる。

どのMacがどのディスクイメージを使うかを識別するために必要なプロパティリストを作成する。<string>には、/アプリケーション/ユーティリティ/システムプロファイラを起動して、左ペインから「ハードウェア」を選択すると表示される「ハードウェアUUID」を入力し、com.apple.TimeMachine.MachineID.plistとして保存しよう。Xcodeをインストールしているのであれば、/Developer/Applications/Utilities/Property List Editor を使うのが安全確実であろう。

先ほどのディスクイメージを右クリックして「パッケージを表示」を選ぶと、bands / info.plist / tokenなどのファイル/フォルダがあるので、同じ階層にcom.apple.TimeMachine.MachineID.plistを入れる。これで Time Machine 用のディスクイメージが準備できたので、Linuxサーバーにコピーしよう。今回は/var/tmにコピーした。

このディレクトリをNFSで公開する。MacがNFSをマウントするにはinsecureオプションが必須であることを忘れずに。また、ボクの環境ではMacとLinuxでユーザー名とユーザーIDのマッピングが異なるので、NFS経由で作成されたファイルの所有者はすべて匿名ユーザーにし、そのユーザーはnfsnobodyになるように設定した。

[text class=”synon” title=”/etc/exports”]
/var/tm *(rw,insecure,all_squash,anonuid=4294967294,anongid=4294967294)
[/text]

ディスクイメージとそれを入れたディレクトリの所有者をnfsnobodyに変更する。これでLinux側の準備は整った。

このままでは Time Capsule 以外のネットワーク・ボリュームを Time Machine 対象とすることができないので、以下のコマンドをMacで実行する。

Finderのメニュー「サーバーへ接続…」から、サーバアドレスに「nfs://servername/var/tm」と入力してNFSディレクトリをマウントする。

システム環境設定「Time Machine」の「ディスクを選択…」から「tm」というディスクが見えるはずなのでそれを選ぶ。以上でNFS経由での Time Machine サーバーが完成した。tmボリュームは常に手動でマウントしておく必要はなく、マウントされていない場合は Time Machine が自動でマウントしてくれる。

なお、AFPでない方法では Snow Leopard のDVDから起動した場合にボリュームをマウントできないので、フルリストアする場合もまずは通常どおりOSを再インストールして、その再インストールしたOSからネットワーク・ボリュームをマウントして Time Machine を実行して自身を上書きするか、別ドライブにインストールされたOSからネットワーク・ボリュームをマウントして Time Machine を実行するなどの必要がある。

ここからは余談。SMB経由での Time Machine も作成可能ではあるが、これのコピー性能がすこぶる悪かったためにNFS経由を採用した。特定の条件だと起きるのか Samba 3.0.33 の実装が悪いのか分からないが、以下のような妙な動きをしていることまでは把握している。

ディスクイメージと同階層に大きなファイルをコピーし、転送の途中で中断すると、Linuxサーバー側で smbd -D というプロセスがCPUをしばらく100%使い切っており、この状態で転送を再開しても1000BASE-Tにも関わらず5MB/s程度と全く速度が出ない(ので、また転送を中断してしまいがち)。このsmbdのstraceを取ってみると、以下のようにディスクイメージ内のチャンクに対してなにかをやっているようだ。数百GBのディスクイメージ内には数万個のチャンクがあるので、これを一つ一つ何か処理しているとなると結構な時間になってしまう。うーん、Sambaはなにを気にしているのだろう……。

2 thoughts on “NFSを使用した Time Machine サーバー構築”

コメントを残す