Top > ZakkiCho > MotoxDumping
Table of Contents

Moto X リテール(T-Mobile)版の「ファクトリイメージ」をダンプした時の手順を書いておく。 要件を満たせれば他機種にも応用できるだろう。

ちなみに、ブートローダモードからの

fastboot boot <カスタムリカバリイメージファイル名>

が使える端末ではこんな面倒なことをする必要はない。

参照ページ

  1. [Moto X]exploitによるrooting
  2. Moto Xのカスタムリカバリ: [RECOVERY] Unofficial CWM Recovery for Moto X -- Unlocked Bootloader Only!
  3. Moto XのCWM(unofficial): Unofficial CWM Recovery with f2fs support - for unlocked Bootloader

要件

  1. 端末のブートローダアンロックができること
  2. 端末をブートローダアンロックによらずにrootingする方法が存在していること。
  3. 端末のカスタムリカバリイメージ(リカバリ起動中にadbが使えること。これ必須)が入手できること。
  4. 対象端末と母艦PCに対応したUSBドライバ(adb/fastboot用)

ダウンロード

  1. Moto Xのカスタムリカバリイメージ(unofficial CWM)

情報集め

  1. 端末で開発者メニューを有効にする(Settings > About > Build Number を連続(7回だったか)タップ)。
  2. 端末の開発者メニューからUSBデバッグを有効にする。
  3. 端末で
    ls -l /dev/block/platform/*/by-name/recovery
    を実行する(*の部分は端末により異なる)。
  4. このrecoveryファイルはブロックデバイスへのシンボリックリンクになっているので、そのリンク先をメモしておく。 Moto Xの場合は次のようになる。
    /dev/block/mmcblk0p34
  5. 端末で
    ls -l /dev/block/platform/*/by-name/
    を実行する(*の部分は端末により異なる)。
  6. 表示されるリストをどこかに保存しておく。

Stockリカバリイメージの取得

後の手順でカスタムリカバリで上書きされる前にstock(標準)のリカバリイメージを取得する。

  1. まずブートローダアンロックによらずにrootingをおこなう。Moto Xでは参照ページ1の方法で。
  2. 端末でスーパーユーザになるために、端末で次のコマンドを実行する(初回は端末の画面で確認を求められるので承認する)。
    su
  3. リカバリイメージをダンプするために、端末で次のコマンドを実行
    dd if=/dev/block/mmcblk0p34 of=/sdcard/recovery.img bs=1048576
    if=のあとには上記でメモしたrecoveryファイルのリンク先のブロックデバイス名を指定。bsはあまり小さくすると時間がかかる。
  4. ダンプしたリカバリイメージを母艦PCに退避するため、母艦PCとUSB接続し、母艦PCから次のコマンドを実行。
    adb pull /sdcard/recovery.img .

端末のファクトリリセット

  1. 端末の電源を落とし、ブートローダモードを起動。Moto Xでは voldown + power の長押し後、先にpowerを離す。
  2. リカバリを起動。Moto Xでは、ブートローダモードメニューでvoldownを何回か押してrecoveryを選択状態にしたあと、 volupを押すと起動する。
  3. リカバリメニューを表示。Moto Xではドロイド君腹パカ画像が表示されるので、volup + power を短押しで表示される。
  4. リカバリメニューから wipe data/factory resetを選択実行(volup/voldownで選択、powerで実行)。
  5. 確認を求められるので、yesを選択実行。
  6. ファクトリリセットが始まる。私のMoto Xでは数十秒で終わった。

カスタムリカバリの導入

初期状態のイメージをダンプするために、端末を起動しないでカスタムリカバリを導入する。

  1. ブートローダモードを起動。 Moto Xでは、前節に引き続き、リカバリメニューの reboot system now が選択された状態で voldown + power を押す。
  2. 母艦PCとUSB接続し、母艦PCで次のコマンドを実行。
    fastboot flash recovery <カスタムリカバリイメージファイル名>
  3. リカバリイメージが書き込まれたら、ブートローダモードメニューの Recovery を選択実行。
  4. カスタムリカバリが起動する。

各パーティションのイメージの取得

  1. 母艦PCから次のコマンドを実行(40はMoto Xの場合で、一般には端末の種類によって異なる)。
    • DOS窓の場合
      for /L %i in (1,1,40) do adb shell cat /dev/block/mmcblk0p%i >p%i.img
    • Cygwinの場合
      for i in `seq 1 40`; do adb shell cat /dev/block/mmcblk0p%i >p%i.img; done

なお、ダンプした「ファクトリイメージ」を公開することは一般には著作権の侵害等につながると思われるので注意。

(2014-01-04)

おまけ

端末の /dev/block/plathome/*/by-name/ からパーティション名を取得してそこにあるパーティションを全部(デフォルトではuserdataとcacheは除外してあります)母艦PCにダンプするBourneシェルスクリプトです。ダンプ結果は、カレントディレクトリの<パーティション名>.imgというファイルに格納されます。adbdの動くカスタムリカバリを起動した端末、あるいはUSBデバッグ有効にしたrootedな端末を、母艦PCにUSB接続した状態で実行してください。母艦PCがWindowsの場合はCygwinが必要です。このスクリプトはパブリックドメインに置くことにします。

#!/bin/sh

adbx() {
  adb "$@" | sed 's/\r\r*$//'
}

if [ `adbx shell id -u` -eq 0 ]; then
  sucmd=''
elif [ `adbx shell which su` = '' ]; then
  echo "$0: Unable to dump: There are neither rooted adbx nor su command.">&2
else
  sucmd='su -c'
fi

partdir='/dev/block/platform/*/by-name'
partls=`adbx shell ls -d "$partdir"`
if [ `echo "$partls" | wc -l` -eq 1 ]; then
  for partition in `adbx shell ls "$partdir"`; do
    if [ "$partition" = userdata ]; then continue; fi
    if [ "$partition" = cache ]; then continue; fi
    echo $partition:
    adb shell $sucmd "cat $partls/$partition" >"$partition".img
  done
else
  echo "$0: The partition-name directory is anbiguous as following. Please work manually. ">&2
  adbx shell ls -ld "$partdir"
fi

(2014-01-05)

Tag: Motorola Moto X XT1053 ghost T-Mobile Google Android JerryBeans rooting ブートローダアンロック パーティション ダンプ バックアップ ファクトリイメージ