ニュース

Android端末の全パーティションのバックアップ

Androidのパーティションのバックアップについてです。
端末上の全てのパーティションをバックアップする方法について書いています。

ワンクリックツールを利用して簡単にバックアップが出来るようになりました。詳細は「ワンクリックツール」の項を参照して下さい。

2014/12/23…「ワンクリックツール」を公開

全パーティションのバックアップの必要性

Android端末には、PCで言うところのCドライブやDドライブような様々なパーティション(データの領域)が存在します。
パーティションは機能/役割毎に分かれており、例えばsystemやboot、cacheなどがあります。

このようなデータのバックアップにはCWMやTWRPなどのカスタムリカバリが使われることが多いです。
しかし、カスタムリカバリでは端末上の"全て"のパーティションをバックアップすることはできません。基本的に、バックアップできるのはsystemやboot、cacheなどのROM焼きなどによって書き換えられる領域だけになります。

通常のROM焼きならばカスタムリカバリのバックアップで十分です。
しかし、特殊な作業や意図しない作業が原因で稀にsystemやboot、cache以外のパーティションを破損してしまう場合があります。

その場合、カスタムリカバリのバックアップでは元に戻すことが出来ず、端末を復旧することが極めて困難になってしまいます。

特に、EFSと呼ばれる領域にはIMEI(端末識別番号)が含まれており、これを破損するとネットワークサービスが利用できなくなるなど致命的な障害が発生してしまいます。

そこで、最低でも一度は端末上に存在する全てのパーティションのバックアップが必要になります。

全パーティションをバックアップする

今回は、例としてOnePlus Oneのパーティションをバックアップしてみます。

ワンクリックツールを使って簡単にバックアップが出来ます。詳しくは記事下部の「ワンクリックツール」の項を参照して下さい。

バックアップが出来る条件

パーティションのバックアップには、root権限(suが使用できること)が必須になりますので、下記のどちらがの条件が整っている必要があります。
  • 端末がroot化されている
  • カスタムリカバリ(CWMやTWRPなど)が起動できる
※内部ストレージ(/sdcard)領域の容量が少ない場合、バックアップが出来ないことがあります。
※カスタムリカバリからsu(root権限)が使用できない場合は、端末をroot化してから行って下さい。

バックアップの流れ

バックアップは手動でコマンドを入力して行います。

全体の流れとしては以下の通りです。
  1. 各パーティーションの名前とその場所を確認する。
  2. 内部ストレージ(/sdcard)領域にバックアップファイルを置くフォルダを作り、「dd」コマンドで各パーティーションをコピーする。
  3. 内部ストレージ(/sdcard)領域に作ったフォルダからバックアップをPCにコピーする。

バックアップを行うタイミング

root化した直後など出来るだけ手を加えていない状態で行うことをおすすめします。
バックアップは取得した時点の状態になるので、基本的にそれより前の状態には戻せないからです。

例えば、一時rootを取得した直後や、CMWやTWRPを「fastboot boot」で起動した直後などです。

※端末にOTAアップデートがあった場合、パーティションの内容が変更されることがあります。その際はその都度バックアップをし、古いバージョンのバックアップファイルを復元しないようにして下さい。

各パーティーションの名前とその場所の確認

端末により、存在するパーティションが異なります。

まずはどのような名前のパーティションがどこにあるのかを調べます。
  1. 端末をPCをUSB接続し、adbコマンドが使えるようにしておく
    OS起動状態CMW/TWRP起動状態のどちらでも可
  2. PCでコマンドプロンプトを開く
  3. adb shell」と入力し、「Enter」キーを押す。
  4. su」と入力し、「Enter」キーを押してroot権限の使用許可を取る。
    ※OS起動状態でroot権限の使用許可を求めるメッセージが端末に表示されている場合、許可して下さい。
  5. cd /dev/block/platform」と入力し、「Enter」キーを押してそのフォルダに移動する。
  6. ls」(エルエス)と入力し、「Enter」キーを押してファイル/フォルダ名一覧を表示させる。
  7. ディレクトリ(フォルダ)が1つ表示されるので、確認する。(OnePlus Oneの場合は「msm_sdcc.1」)
    ※端末が使用しているSoCによって異なります!必ず自分の端末のものを確認して下さい!
  8. cd (確認したフォルダ名)」と入力し、「Enter」キーを押してそのフォルダに移動する。(OnePlus Oneの場合は「cd msm_sdcc.1」)
  9. cd by-name」と入力し、「Enter」キーを押してそのフォルダに移動する。
  10. ls -l」と入力し、「Enter」キーを押してファイル/フォルダ名一覧を表示させる。

  11. 端末に存在するパーティションの名前とその場所が一覧表示されるので、画面をコピーするかメモしておく。
    ※「(パーティション名) -> (パーティションの場所)」という表記になっています

「dd」コマンドで各パーティションをコピー

 まず、内部ストレージ(/sdcard)領域にバックアップファイルを置くフォルダを作り、そのフォルダに「dd」コマンドで各パーティションをコピーしていきます。
  1. 端末をPCをUSB接続し、adbコマンドが使えるようにしておく
    OS起動状態CMW/TWRP起動状態のどちらでも可
  2. PCでコマンドプロンプトを開く
  3. adb shell」と入力し、「Enter」キーを押す。
  4. cd /sdcard」と入力し、「Enter」キーを押して内部ストレージ領域に移動する。
  5. バックアップを置くフォルダを作ります。 「mkdir (わかりやすいフォルダ名)」と入力し、「Enter」キーを押してバックアップフォルダを作成する。
    ※今回は「partbackup」というフォルダ名
  6. cd (手順5で作成したバックアップフォルダ名)」と入力し、「Enter」キーを押して作成したフォルダに移動する。
  7. su」と入力し、「Enter」キーを押してroot権限の使用許可を取る。
    ※OS起動状態でroot権限の使用許可を求めるメッセージが端末に表示されている場合、許可して下さい。
  8. 作成したフォルダにパーティションをコピー(バックアップ)します。確認したパーティションの名前と場所を使用します。
    dd if=(パーティションの場所) of=/sdcard/(手順5で作成したバックアップフォルダ名)/(パーティションの場所)_(パーティション名) bs=4096」と入力し、「Enter」キーを押してフォルダにコピーする。

    例として、OnePlus Oneでは以下の1文になります(dd~bs=4096までで1文)。
    OnePlus One以外の端末では使用できません!あくまでも例文です!
    dd if=/dev/block/mmcblk0p1 of=/sdcard/partbackup/mmcblk0p1_modem bs=4096
  9. ◯ bytes (◯MB) copied, ◯ seconds, ◯MB/s」(◯は環境によって異なります)と表示され、コピーが完了したことを確認する。
  10. 手順8~9を残りの全パーティションに対して繰り返す。(1文ずつ入力し、Enterを押してコピーする)
    必ず1文ずつ実行して下さい!全文コピーで実行すると、正しくコピー出来ない場合があります。
    userdata領域は非常に大きいのでバックアップしないことをおすすめします。

    例として、OnePlus Oneでは以下のコマンド文になります(dd~bs=4096までで1文)。
    ※OnePlus One以外の端末では使用できません!あくまでも例です!
    dd if=/dev/block/mmcblk0p1 of=/sdcard/partbackup/mmcblk0p1_modem bs=4096(←手順8で実行した文)
    dd if=/dev/block/mmcblk0p2 of=/sdcard/partbackup/mmcblk0p2_sbl1 bs=4096
    dd if=/dev/block/mmcblk0p3 of=/sdcard/partbackup/mmcblk0p3_dbi bs=4096
    dd if=/dev/block/mmcblk0p4 of=/sdcard/partbackup/mmcblk0p4_DDR bs=4096
    dd if=/dev/block/mmcblk0p5 of=/sdcard/partbackup/mmcblk0p5_aboot bs=4096
    dd if=/dev/block/mmcblk0p6 of=/sdcard/partbackup/mmcblk0p6_rpm bs=4096
    dd if=/dev/block/mmcblk0p7 of=/sdcard/partbackup/mmcblk0p7_boot bs=4096
    dd if=/dev/block/mmcblk0p8 of=/sdcard/partbackup/mmcblk0p8_tz bs=4096
    dd if=/dev/block/mmcblk0p9 of=/sdcard/partbackup/mmcblk0p9_pad bs=4096
    dd if=/dev/block/mmcblk0p10 of=/sdcard/partbackup/mmcblk0p10_modemst1 bs=4096
    dd if=/dev/block/mmcblk0p11 of=/sdcard/partbackup/mmcblk0p11_modemst2 bs=4096
    dd if=/dev/block/mmcblk0p12 of=/sdcard/partbackup/mmcblk0p12_oppodycnvbk bs=4096
    dd if=/dev/block/mmcblk0p13 of=/sdcard/partbackup/mmcblk0p13_oppostanvbk bs=4096
    dd if=/dev/block/mmcblk0p14 of=/sdcard/partbackup/mmcblk0p14_system bs=4096
    dd if=/dev/block/mmcblk0p15 of=/sdcard/partbackup/mmcblk0p15_persist bs=4096
    dd if=/dev/block/mmcblk0p16 of=/sdcard/partbackup/mmcblk0p16_cache bs=4096
    dd if=/dev/block/mmcblk0p17 of=/sdcard/partbackup/mmcblk0p17_recovery bs=4096
    dd if=/dev/block/mmcblk0p18 of=/sdcard/partbackup/mmcblk0p18_fsg bs=4096
    dd if=/dev/block/mmcblk0p19 of=/sdcard/partbackup/mmcblk0p19_fsc bs=4096
    dd if=/dev/block/mmcblk0p20 of=/sdcard/partbackup/mmcblk0p20_ssd bs=4096
    dd if=/dev/block/mmcblk0p21 of=/sdcard/partbackup/mmcblk0p21_misc bs=4096
    dd if=/dev/block/mmcblk0p22 of=/sdcard/partbackup/mmcblk0p22_LOGO bs=4096
    dd if=/dev/block/mmcblk0p23 of=/sdcard/partbackup/mmcblk0p23_DRIVER bs=4096
    dd if=/dev/block/mmcblk0p24 of=/sdcard/partbackup/mmcblk0p24_reserve1 bs=4096
    dd if=/dev/block/mmcblk0p25 of=/sdcard/partbackup/mmcblk0p25_reserve2 bs=4096
    dd if=/dev/block/mmcblk0p26 of=/sdcard/partbackup/mmcblk0p26_reserve3 bs=4096
    dd if=/dev/block/mmcblk0p27 of=/sdcard/partbackup/mmcblk0p27_reserve4 bs=4096
    dd if=/dev/block/mmcblk0p29 of=/sdcard/partbackup/mmcblk0p29_grow bs=4096
  11. 手順8~10が全て完了したら、「ls」と入力し、「Enter」キーを押してファイル/フォルダ名一覧を表示させる。
  12. フォルダ内に全てのパーティションのバックアップが存在していることを確認する。
    ※画像では「/dev/block/mmcblk0p1」しかバックアップしていないため、1つしか表示されていません

PCにバックアップしたファイルをコピー

 PCにバックアップしたファイルをコピーします。
 PCにファイルをコピーする方法はいくつかありますが、ここでは確実なコピーを行うために「adb pull」コマンドを使用します。
  1. 端末をPCをUSB接続し、adbコマンドが使えるようにしておく
    OS起動状態CMW/TWRP起動状態のどちらでも可
  2. PC上にバックアップファイルをコピーするためのフォルダを作り、フォルダのパスをコピーするかメモしておく。

    例として、Dドライブ直下に「パーティションバックアップ」というフォルダを作りました。(パス:D:\パーティションバックアップ
  3. PCでコマンドプロンプトを開く
  4. adb pull /sdcard/(端末上のバックアップフォルダ名) (PC上のバックアップフォルダのパス)」を入力し、「Enter」キーを押してPCへコピーする。

    コマンド例:「adb pull /sdcard/partbackup D:\パーティションバックアップ
  5. このような画面が表示されるので、全てのファイルのコピーが終了するまで待つ。
    ※多くの場合、かなりの時間がかかります
  6. ◯ file pulled. 0 files skipped.」(◯は環境によって異なります)と表示されることを確認する。
    ※画像では「/dev/block/mmcblk0p1」しかバックアップしていないため、1つしかコピーしていません
  7. PC上のバックアップフォルダを参照し、全てのパーティションのバックアップファイルが存在することを確認する。
PC上にコピーしたバックアップファイルは大切に保管しておきましょう。

可能ならば、バックアップした時の端末の状況(バックアップした日時や端末のAndroidバージョン、ビルド番号、ベースバンドバージョンなど)を一緒にメモしておくことをおすすめします。

ワンクリックツール

上記の方法を自動化した、簡単にバックアップが出来るワンクリックツールを作成しました。

このツールでは、以下を自動的に行います。
  1. 端末内の全パーティションを検索
  2. 検索したパーティションを全てバックアップ(userdata領域以外)
  3. バックアップしたパーティションをPCに転送
※ベータ段階なので、正しくバックアップ出来ないなどの不具合がある可能性があります。
※動作や挙動がおかしいなどの不具合が発生した場合は、コメント欄よりお知らせ下さい

必要なファイル

  • Androidパーティション自動バックアップツール
    こちらから「Android_partition_auto_backup_v◯.zip」(◯はバージョン番号)をダウンロードし、解凍しておきます。
    最新のバージョンを使用するようにして下さい。
    ※Chromeブラウザなどでダウンロードすると「不正なソフトウェア」と警告される場合がありますが、問題ありません。(batファイルが含まれているため)

準備

端末をPCに接続し、adbコマンドが使用できるようにしておいて下さい。

また、使用にはroot権限が必要で、BusyBoxをインストールしておく必要があります。 (Google Playなどから無料でインストール可能)

※OS起動中かリカバリ起動中のどちらかで接続して下さい。

ツールの使い方

ダウンロードしたzipファイルを解凍し、中にある「android_partition_auto_backup.bat」をダブルクリックして実行してください。

実行後は、画面の指示に従って下さい。

バックアップしたデータは、「android_partition_auto_backup.bat」があるフォルダの「partition_backup」内のバックアップ日時が書かれたフォルダに保存されています。(「device-name.txt」にバックアップした端末名が記録されています)

バックアップファイルからパーティションを復元する

バックアップしたファイルからパーティションを復元する場合、「dd」コマンドで入力元をバックアップファイルに、出力先をパーティションにします。

具体的には、端末とPCをUSB接続し、「su」と入力し実行した後、「dd if=/sdcard/(バックアップフォルダ名)/(パーティションの場所)_(パーティション名) of=(パーティションの場所) bs=4096」とコマンドを入力します。

「dd」コマンドに関する詳細はこちらの記事の最下部を参照してください。

※復元は、コピーが正常に完了しているか必ず確認しながら実行して下さい!失敗していると端末が起動しなくなることがあります!
※復元しようとしているパーティションとバックアップファイルが適合していることを必ず確認して下さい!異なるパーティションに復元すると、端末が起動しなくなることがあります!
Powered by Blogger.