SUが入ったGSI、KernelSUが存在する現在、imgのバックアップは容易になっています。
Bootloader Unlockさえやれれば誰でもやれるのでチャレンジしてみましょう。
DSUまたはKernelSUに対応している物が対象です。非対応機は対象外です。
Notion版はこちら
- Bootloader Unlock済みのデバイス
- DSU Sideloader
- ADBとFastbootの環境 (基本中の基本なので必ずやりましょう)
- SUが入ったGSI (Magiskで既にroot化している場合は、必ず通常の状態に戻してください)
- Magisk (緊急時に使います)
- Bootloader Unlock済みのデバイス
- KernelSU (apkと適したimg)
- ADBとFastbootの環境 (基本中の基本なので必ずやりましょう)
注意: それぞれ、Bootloader Unlockがされている状態が前提です。
-
DSU SideloaderにSUの入ったGSIを選択して「Data Size」を16GBあたりにする
-
DSU SideloaderがGSIのインストールを行なうための処理を開始します
-
処理後にコマンドの入力を求めるので
adb shell sh "/storage/emulated/0/Android/data/vegabobo.dsusideloader/files/install"
を実行します
-
実行後にAndroidの通知にDSUのインストールのプログレスバーが表示されていればインストールが行なわれています
-
完了後に再起動を促されるので「再起動」を選択します
-
GSIが適していればGSIが起動します
-
PC上で
adb shell
、su
で$
が#
になったらOK -
以下は「共通の操作」に続く
-
KernelSUのapkをインストールしてそのデバイスに適したboot.imgをダウンロードします。
-
ダウンロードしたimgを以下のコマンドで操作
fastboot boot XXXX.img (XXXX.imgはimgのパス)
注意: 絶対にfastboot flash boot
を実行しないでください。KernelSUのimgが焼かれてしまいます。
-
再起動後にKernelSUが「作動中」かつPC上で
adb shell
、su
で$
が#
になったらOK -
以下は「共通の操作」に続く
注意: Qualcomm、MediaTekで若干コマンドが変わります。
Qualcommの場合
cd /dev/block/bootdevice/by-name/
MediaTekの場合
cd /dev/block/by-name/
Qualcomm側のコマンドを実行時に「ディレクトリがない」とエラーが出た場合はそちらのパターンにすれば変更できると思います。 QualcommとMediaTekの記述のみですが、DSUまたはKernelSUが対応しているROMであればSoCは関係なしにやれます。
-
上記にある
cd
のコマンドを実行 -
バックアップのディレクトリを作成のコマンドを実行
mkdir /sdcard/backup_img
- imgをバックアップするコマンドを実行
- Qualcomm用
for file in *; do
if [[ "${file}" = cache* || "${file}" = userdata* ]]; then continue ; else dd if=/dev/block/bootdevice/by-name/"${file}" of=/sdcard/backup_img/"${file}".img ; fi
done
- MediaTek用
for file in *; do
if [[ "${file}" = cache* || "${file}" = userdata* ]]; then continue ; else dd if=/dev/block/by-name/"${file}" of=/sdcard/backup_img/"${file}".img ; fi
done
imgをバックアップするコマンドはMediaTekの場合、preloader_rawがバックアップされないので個別に実行 (imgはsdcard直下に保存されます)
dd if=/dev/block/by-name/preloader_raw$(getprop ro.boot.slot_suffix) of=/sdcard/preloader_raw.img
MD5でファイルが一致しているか確認を行なう場合は以下のコマンド
echo "" > /sdcard/backup_img/md5.txt
for file in *; do
if [[ "${file}" = cache* || "${file}" = userdata* || "${file}" = sda || "${file}" = sdb || "${file}" = sdc ]]; then continue ; else
if cmp -s "${file}" /sdcard/backup_img/"${file}".img; then
echo "${file} - OK" >> /sdcard/backup_img/md5.txt
else
echo "${file} - NG, you have to backup again!" >> /sdcard/backup_img/md5.txt
fi
fi
done
でmd5.txt
が生成されています。
- 完了後にデバイスの内部ストレージ内に
backup_img
に各種imgが保存されているのでPCへコピー (DSUは再起動で通常のROMが起動します。DSUの通知が出たら「破棄」を選択してください)
注意: バックアップを保存した物にはデバイス固有のファイル(modemstなど)が含まれています、公開を行なう場合は固有のファイルは必ず削除してください。
- 緊急時
GSI経由でのバックアップ時に容量不足のエラーが出て保存に失敗する場合があります。
この場合はboot.img
かinit_boot
をPCに保存してデバイスを一旦再起動します。
- DSUの通知が表示されたときは「破棄」をしてください。
- 保存したimgをMagiskでパッチを行なって
fastboot flash boot
またはfastboot flash init_boot
をしてMagiskでのroot化な状態にしてください - 次に
バックアップ用のコマンド
を実行でバックアップが完全に行えるはずです、バックアップ時のboot.imgまたはinit_boot.imgはパッチ済みなのでパッチ前な物に必ず差し替えてください
各種のコマンドを実行で内部ストレージの直下に保存されます。
rootにするだけでいい方はそちらが楽なのでおすすめです。必ずパッチ前のimgはしっかりと残してください。
SUが入ったGSIまたはKernelSUを実行中に
adb shell
、su
で
$
から#
にした後に以下を実行します。
- boot.img
dd if=/dev/block/bootdevice/by-name/boot$(getprop ro.boot.slot_suffix) of=/sdcard/boot.img
- init_boot.img (カーネルバージョンがAndroid 13以降)
dd if=/dev/block/bootdevice/by-name/init_boot$(getprop ro.boot.slot_suffix) of=/sdcard/init_boot.img
- boot.img
dd if=/dev/block/by-name/boot$(getprop ro.boot.slot_suffix) of=/sdcard/boot.img
- init_boot.img (カーネルバージョンがAndroid 13以降)
dd if=/dev/block/by-name/init_boot$(getprop ro.boot.slot_suffix) of=/sdcard/init_boot.img
IMEIを消失させると厄介な事が多いのでこちらもやっておく事を推奨します。
これらのファイルはデバイス固有のファイルなのでファイルの公開は非推奨です。
SUが入ったGSIまたはKernelSUを実行中に
adb shell
、su
で
$
から#
にした後に以下を実行します。
cd /dev/block/bootdevice/by-name/
for file in *; do
if [[ "${file}" == "modem" || "${file}" == "modemst1" || "${file}" == "modemst2" || "${file}" == "fsg" ]]; then dd if=/dev/block/bootdevice/by-name/"${file}" of=/sdcard/"${file}".img ; else continue ; fi
done
cd /dev/block/by-name/
for file in *; do
if [[ "${file}" == "nvcfg" || "${file}" == "nvdata" || "${file}" == "nvram" ]]; then dd if=/dev/block/by-name/"${file}" of=/sdcard/"${file}".img ; else continue ; fi
done