マウントできなくなったTimeMachineからデータを救出した話

先日、MacBook Pro が起動しなくなりました。救出ボリュームから起動したらSSDが認識されていません。そうMacBook Pro 13-inch (Early 2011) に Fusion Drive を搭載したら BootCamp 作れなくなった話 - backyard of 伊勢的新常識でも書いた通り、Fusion Drive にしていたので、SSDとHDDのどちらか片方が死んだら起動できなくなるのです。

ですので、TimeMachineを設定していたのですが、よくないことは続くもので、数日前から TimeMachine をマウントできておらず、この週末に直そうと思っていたところなのです。

最近は多くのデータをDropboxやOneDriveといったクラウド上に置いていたので、作業中だった夏コミの原稿を含めて無事だったのですが、問題は手元にしかないiTunesライブラリです。かれこれ15年近く育ててきたライブラリが一瞬で終了したわけです。

このままあきらめるわけにはいかない。SSDはもうマウントすらできなくなったFusion Driveはもう戻ってこないので諦めて、HDDだけの構成にしてMacBookを仮復旧。TimeMachine を救出することを考えて、なんとかデータの吸出しがはじまりました。

まだコピー中ですが、とりあえず手順のメモをかねて。

ディスクユーティリティを使う

一番最初に思いつくのは OS 標準のディスクユーティリティです。復旧ボリューム(Cmd-R押しっぱなしで起動)から起動した時にも使えます。簡単なものであれば First Aid をかければなおります。

しかし今回の場合は、コンソールには alignment error と出てそもそもディスク自体を認識してくれず、使うことができませんでした。

シングルユーザーモードfsck_hfs を使う

次に試したのは、シングルユーザーモード(Cmd-S で起動)で fsck_hfs を使うことです。fsck_hfs -fy /dev/disk1s2 などを実行します。修復は試みられるものの、その後のリスキャンで引き続きエラーのままになってしまいます。

B-tree の再構築をする fsck_hfs -ypr /dev/disk1s2 というより強力なオプションも試しましたが、効果なし。

有償ユーティリティを検討する

では、有償ユーティリティではどうかど、Data Rescue の体験版試しました。

アイギーク・インク Data Rescue 4

アイギーク・インク Data Rescue 4

終了までに 90 日とか出ました。さすがにそれはちょっと長すぎる…ただ、何か探しているような感じはあったので、中のデータはわりと無事なんじゃないかと思いました。

ちなみにこの手の記事ググってると「とりあえず DiskWarrior 使っとけ」って書かれてる場所が多かったのですが、体験版がなく本当に解決するか怪しいと思ったのでやめておきました。

DiskWarrior (ディスクウォーリア) 5

DiskWarrior (ディスクウォーリア) 5

Windows から読もうとする

では、Apple 製ではない HFS+ の実装からであればと思い、Windows 用の HFS+ for Windows 8- file system driver | PARAGON Software Group をインストールした Windows で開いてみました。すると、中身を見ることができました!しかし、空のファイルが並ぶばかり。

しかし、データは生きてるという謎の確信を持ちました。

Ubuntu から読み出す!

では、同じ *nix である Ubuntu からではどうか。仮復旧したMacBookVirtualBoxを導入して、Ubuntuをインストールします。Ubuntu Desktopでは特に追加作業なく、HFS+ボリュームを読み込み専用でマウントすることができました。

しかしながら、Windows のときと状況は同じで、空のファイルが並ぶばかりでした。

であれば、この状態で何かできるはず!そう思って Ubuntu read TimeMachine でググったら…!出てきたのがこのフォーラム記事!

Accessing mac time machine backup from Ubuntu

どうやら、ドライブルートの .HFS Private Directory Data\r というディレクトリに実態があり、空ファイルはそのありかを示しているだけ、ということらしいです。

嬉しいことに、そのあたりをうまいことやってくれる copy-from-time-machine.sh というスクリプトを公開してくれています。

Copy data from a Time Machine volume mounted on a Linux box. · GitHub

これを、以下のように実行します。

$ ./copy-from-time-machine.sh (復元したい backupdb 内のフォルダ) (データの展開先)

たとえば、僕の場合は、VirtualBox のこういう感じでやりました。

$ ./copy-from-time-machine.sh /media/[ubuntu_user_name]/[disk_name]/Backups.backupdb/[mac_name]/[date_folder_name]/Machintosh\ HD/Users/[mac_user_name]/ /media/[virtualbox_sf]/tmrestore

あ、VirtualBox の権限はこういう感じのケアが必要らしいので要注意。

Virtual Box 共有フォルダの権限 | Ubuntu初心者の集いブログ

すると、無事復元が始まりました!

CocoaPods の Master Repo とかコピーしだして辛い感じだったので、クイックハックで Music フォルダ以下のみに限定したり、iOS のアプリは別にもういいからスキップしたりとかそのあたりの調整をしつつ、うまくデータを抽出しています。


2016/08/13(Sat) 13:50ごろ 追記

抽出できました!

実際は途中で I/O error が頻発するようになるため、その度に Ubuntu でアンマウント→物理的に抜く→Ubuntu シャットダウン→Ubuntu 起動→再度VM接続 という再開フローが必要になりました。10 回くらい繰り返したらデータの抽出に成功しました。Documents フォルダも復元成功。今度は Pictures フォルダにチャレンジしています。


やはり、TimeMachine だけでは万全じゃないですね。今後はもっと他の方法でもバックアップしていきたいと思います。