肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

Time Capsule から任意のファイルを任意の場所に復元する

どうも、love++ の件で密かに話題になっているそうたろうです。Mac を買うたびに Mac ネタかって話ですが、タイトルのとおり、Time Capsule から任意の場所にバックアップされているファイルを復元する方法です。

http://farm6.static.flickr.com/5111/5835945151_c081f1c8f0_z.jpg

今回、自分のマシンで問題になったのは、復元「先」が指定できない問題でした。Mac は Time Machine を使って Time Capsule に常にバックアップしていて、ファイルは存在しているのですが、今回新しい iMac を買って、構成が

と変更されました。ここで問題となったのは、 Primary ディスクかつ起動ディスクとなっているシステムのボリュームが 256 GB SSD の方になっていたことでした。
Time Capsule から以前のファイルを復元しようとしたところ、復元先を指定することができず、256 GB SSD のほうに復元されようとしてしまい、当然容量が足りない *1
で、仕方なく OS インストールの際には、iTunes のディレクトリと iPhoto のディレクトリを除いて復元したのだが、後から復元できるかなーと思ったけど、「移行アシスタント」を使っても、同じ状況で復元先は指定できなかった....

もうだめや...


と思っていたが、要するに以下の要領で復元した。

  • Time Capsule の Data ディレクトリをマウント
  • iMac のバックアップファイル (.sparsebundle … スパース・ディスクイメージ・バンドル) をマウント
  • そのマウントされたディレクトリの Latest ディレクトリから rsync

Data ディレクトリをマウント

これはもはや言及するまでもなく、Finder から Time Capsule を選択すれば勝手にマウントされる。

スパース・ディスクイメージ・バンドルをマウント

マウントされた Time Capsule の Data ディレクトリをひらいて、 .sparsebundle となっているファイルをダブルクリック。

rsync

基本的に Terminal.app とか iTerm とかで作業。
マウントされた .sparsebundle は、

$ ls /Volumes
Backup of Monopoli      <- バックアップファイル (これは Monopoli というマシン名)
Data                    <- Time Capsule のディスク
Macintosh HD            <- ローカルの SSD
Macintosh HD 2          <- ローカルの HDD

な場所にあるので、中身をとりあえず見てみる。

$ ls -la /Volumes/Backup\ of\ Monopoli
total 16
drwxr-xr-x  6 sotarok  staff   408  6 13  2010 .
drwxrwxrwt@ 6 root     admin   204  6 15 23:27 ..
-rw-r--r--@ 1 sotarok  staff  6148  9  4  2010 .DS_Store
drwx------  3 root     staff   102  8 14  2009 .Spotlight-V100
d-wx-wx-wt  3 sotarok  staff   102  6 15 23:27 .Trashes
-rw-r--r--  1 root     staff     0  8 14  2009 .com.apple.timemachine.supported
drwx------  2 sotarok  staff   102  6 15 23:29 .fseventsd
drwxr-xr-x+ 3 root     staff   102  9 13  2009 Backups.backupdb

Backups.backupdb ディレクトリが実体になってて、日付ごとのディレクトリ + Latest ディレクトリがある。

$ ls -la /Volumes/Backup\ of\ Monopoli/Backups.backupdb/Monopoli
...
drwxr-xr-x@  3 root  staff   204  6  8 23:04 2011-06-08-230426
drwxr-xr-x@  3 root  staff   204  6 11 01:37 2011-06-11-013743
drwxr-xr-x@  3 root  staff   204  6 11 02:37 2011-06-11-023745
...
drwxr-xr-x@  3 root  staff   204  6 13 19:42 2011-06-13-194209
lrwxrwxrwx   1 root  staff    17  6 13 19:42 Latest -> 2011-06-13-194209

で、要するに Latest がその中身なので、もう要するに以下のように吸いだした。復元先はもちろん Macintosh HD 2 ですよ。「/Volumes/Macintosh HD 2/Music/iTunes/iTunes Music/」 が新しい iTunes Music ライブラリのディレクトリ。

$ rsync -avP /Volumes/Backup\ of\ Monopoli/Backups.backupdb/Monopoli/Latest/Macintosh\ HD/Users/sotarok/Music/iTunes/iTunes\ Music/ /Volumes/Macintosh\ HD\ 2/Music/iTunes/iTunes\ Music/

みたいなかんじ。結構時間かかるけどめでたしめでたし(多分。今転送中)

というか

みんなどうやって復元しているのだろうか。もっと簡単な方法があるのか? rsync とか使えないような人ってどうしてるんだろうな。

余談

Time Capsule のディスクを単純にマウントするなら、

$ mount_afp afp://user:password@ip addr of time capsule/Data /path/to/mount

的な感じでできます。

これはこれで、前起動ディスクが死んだときに、OS DVDディスクから起動してターミナル起動してバックアップとってなかったディレクトリを Time Capsule に転送するときに役に立った。

*1:あ、もちろんもとのディスクで 500 GB 中 256 GB 以下しか使っていない場合は別