スポンサーリンク

【iOS】iDevice復元にまつわるエトセトラ

iPad

iOSと復元、切っても切れないめんどくさい間柄。しかも用語の使い方に紛らわしい部分が多く、惑わされている人も多いと思う。
そこで復元にまつわる情報を簡単にまとめてみる。

 

スポンサーリンク

【復元の種類】

iOSに登場する『復元』という用語は2つある。

  • iDevice*を復元 (*実際には iPhone、iPad、iPod Touch を復元…と表示される)
  • バックアップから復元

この二つは根本的に違うものなのだが、同じ『復元(英語ではrestore)』という用語が使われていることにより、混乱させられる。それぞれの要点をまとめてみる。

 

【iDeviceを復元】

iTunes_restore

iTunes上から『iDeviceを復元』を実行すると、iDevice上のデータを全て消去し、iOSのクリーン・インストールを行う。『iOSの再インストール』とでも表記してくれれば混乱も避けられると思うのだが。

▼『iPhoneを復元』を実行中の画面。iTunes上には『iPhoneファームウェアを復元中』と表示される
iPhone_restoring

 

iOSの再インストールにあたる復元作業は、もう一種類ある。『(iOSの)アップデート』である。『アップデート』も内部では同様にiOSの再インストール=iDeviceの復元を行っているのだが、こちらはユーザーデータを維持し、新しいiOSバージョンを上書きしており、いわゆるOSの差分アップデートにあたる。

iOS_Update

上記画面にもあるように、iDeviceの復元、アップデートを行う際には、Appleの認証サーバへの問い合わせが行われる。この認証プロセスでは、復元するファームウェア・ファイル (IPSW: IPhone/ IPod Touch/ IPad SoftWare) のバージョンが最新のものかどうか、またファイルが正規なものかどうかをAppleのサーバに問い合わせている。このプロセスがあるため、iDeviceの復元は、最新バージョンのiOSへの一方通行のみとなっている。jailbreakはこの復元・認証プロセスをかいくぐって行われる事が多い。

 

『iDeviceの復元』に際して、iDevice側には3種類のモードが存在する。通常モード、リカバリモード、DFUモード。 通常モードは 名前の通りiOSが起動してiDeviceが通常動作している状態。通常モードで接続後、iTunesから『iDeviceを復元』または『アップデート』が実行されると、iTunesは対象のiDeviceをDFU・リカバリモードに自動的に遷移させiOSのクリーン・インストールまたは差分アップデートを行う。

 

リカバリモードはiOSブートの最初の部分に実行されるプロセスで、iOSのイメージが破損し、起動に失敗した場合などに自動的に起動される。パソコンで言えばOSのセットアッププログラムに当たるもの。

一方DFU (Device Firmware Upgrade) モードはiOSブート以前に実行される、BIOS ROMのような存在。Appleロゴのまま先に進まない、などの大トラブル発生の際にも、たいがい起動できる頼もしい存在。

 

iOSのインストールイメージが壊れた場合などには、リカバリモード、またはDFUモードで直接母艦に繋ぐと、iTunesからリカバリモードのデバイスとして認識される。

リカバリモード、DFUモードでiDeviceがiTunesに接続されている場合、『アップデート』は選択できず、『iDeviceを復元』でiOSの再インストールをすることになる。

▼上がリカバリモード、下がDFUモードでiPhoneがiTunesに直接接続された状態。
photo_recovery

photo_dfu

DFUモードは画面が一切表示されないが、母艦からはDFUデバイスとして認識され、iTunesには『リカバリモード』と表示される。これもまた紛らわしい。

以下に手作業でリカバリ、DFUモードにする方法をまとめておく。緊急時以外は使用しないことをおすすめ。

リカバリモードにする方法:

  1. 母艦に接続していない状態で、iDeviceの電源を落とす。
  2. ホームボタンを押しながら、母艦にUSBケーブルで接続
  3. iDeviceの電源が入りアップルロゴ→リカバリモード画面に
  4. iTunesがリカバリモードのiDeviceを認識し、『iTunesはリカバリモードのxxxを見つけました』のダイアログを出す。

DFUモードにする方法:

  1. USBケーブルでiDeviceを母艦と接続、iDeviceをシャットダウン(電源オフ)する。
  2. Appleロゴが表示されるまで、iDeviceの電源ボタンを3秒ほど押す。
  3. 電源ボタンを押し続けながら、同時にホームボタンを押す。(画面は真っ暗)
  4. 10秒ほどしたら、ホームボタンは押したまま、電源ボタンだけ放す。(画面は真っ暗)
  5. iTunesがDFUモードのiDeviceを認識し、『iTunesはリカバリモードのxxxを見つけました』のダイアログを出す。(画面はずっと真っ暗)

DFUモードは、パソコンでいうとBIOSのように、iDeviceのブートROMに格納されている。このためインストールされたiOSが完全に壊れて、リカバリモードの起動すら出来ない状態(Appleマークが出たまま先に進まない状態など)でも、大概のケースでDFUモードは起動できるはず。修理に出す前に最後のチャンスでDFUモードでiTunesに接続、ファームウェアの復元をやってみる価値はあるかと。

▼iOSのブートシーケンス概念図。
LLB=Low Level Bootloader, iBoot=iOS Bootloader
iBoot署名確認の部分では、実際にはAppleの認証サーバへの問い合わせが行われる。

iDevice復元シーケンスについて詳しく知りたい方は、Apple iDevice Jailbreak用語集復元シーケンス関連 の項目をご参考にどぞ。(若干情報に古いところがあるのはご容赦のほど)

 

【バックアップから復元】

Restore_fm_backup

『バックアップから復元』は、同じ『復元』という用語が使われているが、こちらは単にバックアップしたユーザデータを復元(レストア)しているだけで、iOSシステムにはまったく影響を与えない。jailbreakを維持するためには無用に復元をするな!と言われるが、こっちの『バックアップから復元』はなんら影響がないので念のため。

『バックアップからの復元』に関してはあまり書くこともないので、小ネタをひとつ。

バックアップしたデータを別の端末に『バックアップから復元』した場合、メールのパスワードやWiFiキーなどの情報はコピーされない。おそらく端末IDを見ており、異なる場合は手作業で入れさせられる羽目になる。iTunesから『iPhoneのバックアップを暗号化』してバックアップしておくと、そのバックアップデータは別の端末に復元しても、パスワード類もそのままコピーされて便利。

Encrypt_backup

 evasi0nなど最近のjailbreakでは、この『バックアップからの復元』の脆弱性を利用して行われるのがパターン。

タイトルとURLをコピーしました

Fatal error: Uncaught Error: Call to a member function listFiles() on null in /home/peer2/www/sjdojo/wp-content/plugins/w3-total-cache/CdnEngine_GoogleDrive.php:595 Stack trace: #0 /home/peer2/www/sjdojo/wp-content/plugins/w3-total-cache/CdnEngine_GoogleDrive.php(615): W3TC\CdnEngine_GoogleDrive->path_get_id('sjdojo/wp-conte...') #1 /home/peer2/www/sjdojo/wp-content/plugins/w3-total-cache/Cdn_Core.php(738): W3TC\CdnEngine_GoogleDrive->format_url('sjdojo/wp-conte...') #2 /home/peer2/www/sjdojo/wp-content/plugins/w3-total-cache/Cdn_Plugin.php(1226): W3TC\Cdn_Core->url_to_cdn_url('https://peer2.n...', 'sjdojo/wp-conte...') #3 /home/peer2/www/sjdojo/wp-content/plugins/w3-total-cache/Cdn_Plugin.php(911): W3TC\_Cdn_Plugin_ContentFilter->_link_replace_callback_ask_cdn('"https://peer2....', '"', 'https://peer2.n...', 'sjdojo/wp-conte...') #4 [internal function]: W3TC\_Cdn_Plugin_ContentFilter->_link_replace_callback(Array) #5 /home/peer2/www/sjdojo/wp-content/plugins/w3-total-cache/Cdn_Plugin.php(935): preg_replace_callback('~([" in /home/peer2/www/sjdojo/wp-content/plugins/w3-total-cache/CdnEngine_GoogleDrive.php on line 595