それ、うまいのか?

... 記憶の残滓

十分な空き領域が使用できないため、復元できませんでした @iPhone

なんで、こうなった

うちの奥さんが、通信費削減のために、キャリアを変更し iPhone4 を iPhone6 に機種変更。
iTunes で取っておいたバックアップを復元しようとしたら、容量が足りない、と。

話を聞いてみたら、 64GB を 16GB に変更したんだとか。
そりゃあ、入るわけないよね (´・ω・`)

backup のときの考慮不足を、restore の際に気が付いても、時すでに遅し、というやつ(仕事でもよくある)。
でも、そんなことは今だから分かるんで、変更前に相談されてたとしても、多分、気が付かない。

因みに iCloud の連絡先の同期も試してみたけど、それまで意識したことが無いらしく、随分と古い状態の連絡先でしか復元できてない。

よく見ると、アプリのアイコンが復旧されている。
中途半端には、復元はできているんだ。
ってことは、バックアップは、多分、正しく取れているし、restore のやり方さえ工夫すれば、どうにかなりそうな気もする。

「連絡先だけでも、何とかしてくれえ」


今日は、リアル人力検索だね :-)

旧iPhone4 は下取りに出しちゃったので、バックアップデータで何とかするしかない。
iTunes で取ったバックアップデータは、AppData の下にあった(そんなのは、すぐ分かる)。

c:\Users\(ID)\AppData\Roaming\Apple Computer\MobileSync\Backup\bf4b????

バックアップを取ったらしき更新時間のフォルダで、ファイルが 24,000 ほど入ってる。
ファイルの中をメモ帳で見てみると PNG や GIF らしきものがある。
拡張子は無いものの、どうやら、ファイルは、アーカイブ用の形式ではなく、ひとつひとつのファイルがそのまま保存されているらしい。

バックアップデータの容量の大半を占めるのは、画像、動画、音楽(多分)。
それらしきファイルを消してリストア、じゃあ、うまくは行かないだろうな。
普通に考えて、ファイルが無い、ってエラーになるのは、想像に難くない。


ファイル名は、16進っぽい感じで長さが同じ、ってことはハッシュか?
ってことは、どこかにファイル名とハッシュを結び付けている、インデックスのようなファイルがあるはず。
ファイル名のパターンが違うのは、この四つ。

2014/11/08  11:08            13,796 Info.plist
2014/11/08  11:08         5,081,512 Manifest.mbdb
2014/11/08  11:08             8,307 Manifest.plist
2014/11/08  11:08               189 Status.plist

一番、サイズが大きい Manifest.mdbd がインデックスなんだろう。開いてみるとバイナリだ。

何やら、ファイル名らしき文字列もある。

思いつきで、"address" という文字列を検索してみた。

あるある。

Library/AddressBook/AddressBookImages.sqlitedb
Library/AddressBook/AddressBook.sqlitedb

vCard で保存されてるかと思ったら、SQLite なのね。
頑張れば自分でも解析できそうな気もするけど、絶対に誰かがやっているはずだ。
というわけで、検索。

manifest.mbdb filename parse - Google 検索

しょっぱなの、stackoverflow 。
http://stackoverflow.com/questions/3085153/how-to-parse-the-manifest-mbdb-file-in-an-ios-4-0-itunes-backup

Python かー、と思ってたら、お尻の方に Rubyスクリプトがあるじゃない。ラッキー。
コードをコピペして、実行。
結果は filenames.txt というファイルに出力される。

drwxrwxrwx 000001f5 000001f5       0 1361016319 1361016319 1317871906 (a04420b16aaf4552906cd9412ca40cec2784d181)HomeDomain::Library/AddressBook
-rwxrwxrwx 000001f5 000001f5 5873664 1414800600 1413532677 1360759929 (cd6702cea29fe89cf280a76794405adb17f9a0ee)HomeDomain::Library/AddressBook/AddressBookImages.sqlitedb
-rwxrwxrwx 000001f5 000001f5  622592 1415400149 1414800467 1360759940 (31bb7ba8914766d4ba40d6dfb6113c8b614be442)HomeDomain::Library/AddressBook/AddressBook.sqlitedb

括弧の中が、ハッシュ (SHA-1) で、それに対応するファイルが...

2014/11/08  11:07           622,592 31bb7ba8914766d4ba40d6dfb6113c8b614be442

あるある。
中身をのぞいてみると、電話番号らしき文字列が満載。

フィニッシュは、もう、そこまで見えている。


そして、復元

新しい iPhone でバックアップを取って、連絡先のファイルを置き換え。
そのデータで復元。
これで、できるはず。

ファイル名がハッシュらしいので、新しい iPhone6 で取ったバックアップは、古い iPhone4 のファイル名と違っているはず。なので、iPhone6 のバックアップでも、Manifest.mbdb の解析をしなきゃいけない。

  1. iPhone4 の Manifest.mdbd を解析する
  2. iPhone4 のバックアップデータから、スクリプトでファイル名を特定した AddressBook.sqlitedb と AddressBookImages.sqlitedb にあたるファイルを取っておく
  3. iPhone6 のバックアップを iTunes で作成する
  4. Ruby スクリプトで Manifest.mbdb を解析する
  5. AddressBook.sqlitedb と AddressBookImages.sqlitedb にあたるファイルを、2. で取っておいたファイルで上書き
  6. iTunesiPhone6 を復元する

もろもろのデータを入力して、復元が完了した後に、連絡先を開いてみると...


できた (・∀・)



連絡先の復元はできたのだけれども...

解析をしてるやつがいるくらいだから、ツールを作っているやつもいるだろう、と。

http://ameblo.jp/tos0123/entry-11431335980.html

「iBackupBot for iTunes」というのがあるみたいなのね。

http://www.icopybot.com/itunes-backup-manager.htm
↑でダウンロードできたのは 7.8.9 。
でも、最新版では、ちょっと勝手が違うみたい。
複数のバックアップがあっても、最新の分しか、表示されない。
Alt を押しても、メニューバーが表示されない。

もう少し、古いバージョンだと、先のブログに書いてあるようなことはできるっぽい。

有料のツールを Free のトライアルで美味しいとこだけ持ってっちゃうのは、一応、ソフトウェアで飯を食ってる身でもあるし、どうかな、という気もする。
なので、詳しくは書きません :-)