2008年12月21日

2008年12月21日: MacBook のバックアップ作戦

 新しい MacBook のバックアップ用に外付けハードディスクを2台購入した。さすがに、マシンの内蔵ハードディスクが 250 GB なのにバックアップ用が 80 GB しかないのはまずいやろ、と。買ったのは秋葉館Standard II。Firewire がついていて S-ATA 対応のケースは少ないので、この製品は貴重である。この2台を常時接続して、1台をバックアップ先に指定し、定期的に rsync か何かで同期させ、できれば入れ替えながら使いたい。また、妻のマシン(PowerBook G4, 10.4) は CocoaRsync で、MacBook は TimeMachine を使えればなおよい。ちなみに、サーバは iBook G4 で 10.3.9。

 「定期的に rsync で同期させる」のは別に難しくなく、rsync -a -v --delete SRC DST でよい。まだたまにリソースフォークが必要なファイルがあるので、CocoaRsync の rsync_hfs を使っている。「定期的に2台のハードディスクを入れ替える」のがなかなかに難物だが、diskutil でマウント/マウント解除ができるので、これを使えば良さそう。Firewire ディスクを2台カスケードでつなぎ、その他に何も外付けディスクがなければ、2台の外付けディスクは /dev/disk1, /dev/disk2 として見える。また、2台のボリュームラベルを同じにしておく(たとえば Backup_1)と、先にマウントした方が Backup_1, 後にマウントした方が Backup_1 1 という名前になる。これを使って、こんなシェルスクリプトで2台を(見かけ上)入れ替えることができる。

if diskutil info /Volumes/Backup_1 | grep disk1 >/dev/null; then # Backup_1 は /dev/disk1 diskutil unmountDisk /dev/disk1; diskutil unmountDisk /dev/disk2 diskutil mountDisk /dev/disk2; diskutil mountDisk /dev/disk1 else # Backup_1 は /dev/disk2 diskutil unmountDisk /dev/disk1; diskutil unmountDisk /dev/disk2 diskutil mountDisk /dev/disk1; diskutil mountDisk /dev/disk2 fi

 意外にてこずったのが、この外付けハードディスクを AFP 経由で TimeMachine のバックアップ先に指定することだった。公式にはサポートされていない機能だが、あちこちで報告がある通り、裏技で実現できる。"TimeMachine NAS" などでネット検索すればいろいろ情報が出てくる。今回はここを主に参考にした。

(1) ターミナルで次のコマンドを実行。

$ defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1

(2) ディスクユーティリティを立ち上げ、新規ディスクイメージを作る。

  • 名前:Macのホスト名_内蔵イーサネットポートのMACアドレス(コロンなし、小文字)
  • ボリューム名:TMBackup_1 など。なんでもよい
  • サイズ:適当に。必要ならあとで拡張できる。最初から大きくしておいてもよい(中身が空ならディスクイメージのサイズ自体はそれほど大きくならない)
  • フォーマット:Mac OS 拡張(ジャーナリング)
  • 暗号化:なし
  • パーティション:ハードディスク
  • イメージフォーマット:スパースバンドル・ディスクイメージ

(3) 「サーバに接続…」でサーバ上の外付けディスクをマウントし、そのルートディレクトリに上で作ったスパースバンドル・ディスクイメージをコピーする。

(4) TimeMachine 環境設定を開き、サーバ上の外付けディスクをバックアップ先として選ぶ。

 これでいいはずなんですが、(4) のところで何回やっても「ファイル“.xxxxxxxxxxxx”をフォルダ“Backup_1”に保存するためのアクセス権がありません」(xxxxxxxxxxxx はMACアドレス)というエラーが出て、選ぶことができない。Finder で見ても ls -l で見てもアクセス権あるように見えるし、ファイルコピーもできるんだけどなあ。もう少し調べてみると、/var/db/.TimeMachine.Cookie というファイルをコピーしようとして失敗しているらしいので、手動でコピーしてみた。

$ sudo cp /var/db/.TimeMachine.Cookie /Volumes/Backup_1/.xxxxxxxxxxxx

 sudo が必要なのは、/var/db/.TimeMachine.Cookieroot しか読めないファイルであるため。このあと (4) の操作をやってみると、ようやくバックアップ先として選ぶことができた。

 バックアップも成功。ホームディレクトリだけをバックアップするのだが、それでも初回は時間がかかるので、有線 LAN 経由にした。3時間ぐらいかかったようだ。その後は、無線 LAN 経由でも特に問題はない。2つの外付けを rsync で同期したあと入れ替えても、気づかずに (?) バックアップを続けてくれる(もちろん、入れ替えている途中は AFP をいったん切るので、その間にバックアップをすることはできない)。一応目標は全部達成できたので、しばらくこれで運用してみる。

タグ:Mac
Posted at 2008年12月21日 17:46:20
email.png