Skip to content

Instantly share code, notes, and snippets.

@pexcn
Last active July 25, 2024 18:07
Show Gist options
  • Save pexcn/71d7d242c5e805d9346d2dc9db17fb90 to your computer and use it in GitHub Desktop.
Save pexcn/71d7d242c5e805d9346d2dc9db17fb90 to your computer and use it in GitHub Desktop.

Fix magisk stock backup does not exist

# put stock boot.img into /sdcard/boot.img

# get sha1
adb shell
su
SHA1=$(cat $(magisk --path)/.magisk/config | grep SHA1 | cut -d '=' -f 2)

# repack boot.img.gz
gzip -9f /sdcard/boot-stock.img

# restore backup
mkdir /data/magisk_backup_${SHA1}
mv /sdcard/boot-stock.img.gz /data/magisk_backup_${SHA1}/boot.img.gz
chmod -R 755 /data/magisk_backup_${SHA1}
chown -R root.root /data/magisk_backup_${SHA1}
@Dr-Ari-Gami
Copy link

You can also just re-patch the stock boot image in the magisk app, and then reboot. The stock boot img is backed up when you patch it.

@Github564-png
Copy link

Hi, can u detail how to do it , please
I really dont know how

@axxapy
Copy link

axxapy commented Jun 20, 2022

Huge thanks for this gist, mate!
You saved a lot of time for me

@stanleylhs
Copy link

The first command should be
adb push boot.img /sdcard/boot-stock.img
not /sdcard/boot.img

@badabing2005
Copy link

If you already have stock boot.img file in /sdcard
you can do the do following and let Magisk do the backup

cd /data/adb/magisk
cp /sdcard/boot.img stock-boot.img
./magiskboot cleanup
. ./util_functions.sh
run_migrations

@stanleylhs
Copy link

@badabing2005
Copy link

You are correct, I was responding from memory and was wrong.
It is underscore not dash.
Thanks

@mhdzli
Copy link

mhdzli commented Feb 7, 2023

Thanks!
I installed LineageOS 20 on OnePlus 9 with the instructions on official wiki. Then I root my phone with Magisk. I install Magisk by sideloading the Magisk ZIP file and then install the apk. Now I can't update the OS with updater in system settings. I find a guide that explained I need to uninstall and restore images in magisk then update my phone and reinsatall magisk before reboot. But magisk didn't create a backup during installation.
I use your guide to fix magisk stock backup does not exist
I create a backup with this guide and lineageos boot.img file and I can now restore images in magisk but I get the same error when trying to install the updates. I noticed that there is also dtbo in backup function (https://github.com/topjohnwu/Magisk/blob/master/scripts/util_functions.sh#L625) and I did the same thing for backing up dtbo.img and it doesn't solve the problem. Is there anything I'm missimg. Should I use vendor-boot.img instead of boot.img?

@jimmyli97
Copy link

jimmyli97 commented Jun 24, 2023

You can also just re-patch the stock boot image in the magisk app, and then reboot. The stock boot img is backed up when you patch it.

thank you! definitely the simplest way

@asheroto
Copy link

So it's stock_boot.img not boot_stock.img?

@jimmyli97
Copy link

@asheroto
Depends on which script you are running, if using badabing2005's script starting with existing boot image in /sdcard/boot.img then yes. If using the original pexcn script then he started with existing boot image called /sdcard/boot-stock.img

Easiest way is definitely repatching the stock boot image with magisk app though

@mailinglists35
Copy link

thanks everyone for the hint, repatching the stock with magisk then reboot saved me from interfering with command line

@mimoundaniel
Copy link

you are god

@karlicoss
Copy link

Note that Pixel 7 Pro (and possibly other newer Pixel phones) are using init_boot.img -- so you need to repack this file (not boot.img which is also present in the OTA image!) and put /data/magisk_backup_${SHA1}/boot.img.gz (yes, the latter path still is boot.img.gz)
Otherwise great manual, thanks!

@Originalimoc
Copy link

mark

@asheroto
Copy link

asheroto commented Feb 6, 2024

It appears that Android 14 uses init_boot.img and boot.img if I'm not mistaken? At least one OnePlus phones...

@giser
Copy link

giser commented Feb 6, 2024

In case of init_boot.img

# put stock init_boot.img into /sdcard/init_boot.img

# get sha1
adb shell
su
SHA1=$(cat $(magisk --path)/.magisk/config | grep SHA1 | cut -d '=' -f 2)

# repack init_boot.img.gz
gzip -9f /sdcard/init_boot.img

# restore backup
mkdir /data/magisk_backup_${SHA1}
mv /sdcard/init_boot.img.gz /data/magisk_backup_${SHA1}/boot.img.gz
chmod -R 755 /data/magisk_backup_${SHA1}
chown -R root.root /data/magisk_backup_${SHA1}

@stanleylhs
Copy link

Everyone, there's no need to calculate sha or write your own script, just use util_function.sh from the magisk folder in adb. Topjohnwu has updated it for init_boot months ago.

Follow this comment for instruction. https://gist.github.com/pexcn/71d7d242c5e805d9346d2dc9db17fb90?permalink_comment_id=4330260#gistcomment-4330260

@asheroto
Copy link

asheroto commented Feb 6, 2024

@giser have you tested this? Looks like it might work if when extracted it just overwrites the init_boot.img partition.

@stanleylhs indeed, but this fix doesn't always work as expected.

@altwu
Copy link

altwu commented Apr 8, 2024

my phone is rooted but no /data/magisk_backup_* directories exist, so i tried to get magisk to create one. i tried using the app to patch a file. a patched boot image was created but no /data/magisk_backup_* directory. the path to the boot image was /sdcard/Documents/boot_images/init_boot_14_0_0_304.img. i tried copying it and giving it the name /sdcard/Documents/boot_images/init_boot.img and patching it. a patched boot image was created but still no /data/magisk_backup_* directory.

my phone is a US oneplus 11(cph2451) running android 14 and magisk 27.0 stable. how do i get the magisk app to patch a file and create a /data/magisk_backup_* directory?

i tried using util_functions.sh and run_migrations and that worked.

@sinayou67
Copy link

Thanks a lot for the script worked perfectly with init_boot @giser

@hubbty
Copy link

hubbty commented Jul 7, 2024

My Pixel 4a 5G aka bramble runs LineageOS for microG. I've installed Magisk via patched boot.img. Therefore Magisk ought to have backuped stock boot.image already on that occasion. But it did not. Additionally I let Magisk patch stock boot.img several times after installation, in the hope it would then create a backup, which it did never.
The magisk_install.log from last installation is this:

- Device platform: arm64-v8a
- Installing: 27.0 (27000)
- Copying image to cache
- Unpacking boot image
Parsing boot image: [/data/user_de/0/com.topjohnwu.magisk/install/boot.img]
HEADER_VER      [3]
KERNEL_SZ       [11744698]
RAMDISK_SZ      [2559738]
OS_VERSION      [14.0.0]
OS_PATCH_LEVEL  [2024-05]
PAGESIZE        [4096]
CMDLINE         []
KERNEL_FMT      [lz4]
RAMDISK_FMT     [lz4_legacy]
unexpected ASN.1 DER tag: expected SEQUENCE, got APPLICATION [1] (primitive)
VBMETA
- Checking ramdisk status
Loading cpio: [ramdisk.cpio]
- Stock boot image detected
- Patching ramdisk
- Pre-init storage partition: sda15
Loading cpio: [ramdisk.cpio]
Add file [init] (100750)
Create directory [overlay.d] (0750)
Create directory [overlay.d/sbin] (0750)
Add file [overlay.d/sbin/magisk32.xz] (100644)
Add file [overlay.d/sbin/magisk64.xz] (100644)
Add file [overlay.d/sbin/stub.xz] (100644)
Patch with flag KEEPVERITY=[true] KEEPFORCEENCRYPT=[true]
Loading cpio: [ramdisk.cpio.orig]
Backup [init] -> [.backup/init.xz]
Record new entry: [overlay.d] -> [.backup/.rmlist]
Record new entry: [overlay.d/sbin] -> [.backup/.rmlist]
Record new entry: [overlay.d/sbin/magisk32.xz] -> [.backup/.rmlist]
Record new entry: [overlay.d/sbin/magisk64.xz] -> [.backup/.rmlist]
Record new entry: [overlay.d/sbin/stub.xz] -> [.backup/.rmlist]
Create directory [.backup] (0000)
Add file [.backup/.magisk] (100000)
Dumping cpio: [ramdisk.cpio]
- Repacking boot image
Parsing boot image: [/data/user_de/0/com.topjohnwu.magisk/install/boot.img]
HEADER_VER      [3]
KERNEL_SZ       [11744698]
RAMDISK_SZ      [2559738]
OS_VERSION      [14.0.0]
OS_PATCH_LEVEL  [2024-05]
PAGESIZE        [4096]
CMDLINE         []
KERNEL_FMT      [lz4]
RAMDISK_FMT     [lz4_legacy]
unexpected ASN.1 DER tag: expected SEQUENCE, got APPLICATION [1] (primitive)
VBMETA
Repack to boot image: [new-boot.img]
HEADER_VER      [3]
KERNEL_SZ       [11744698]
RAMDISK_SZ      [2496732]
OS_VERSION      [14.0.0]
OS_PATCH_LEVEL  [2024-05]
PAGESIZE        [4096]
CMDLINE         []

****************************
 Output file is written to 
 /storage/emulated/0/Download/magisk_patched-27000_Dx8Mh.img 
****************************
cp: can't preserve ownership of 'busybox': Operation not permitted
cp: can't preserve ownership of 'magisk32': Operation not permitted
cp: can't preserve ownership of 'magisk64': Operation not permitted
cp: can't preserve ownership of 'magiskboot': Operation not permitted
cp: can't preserve ownership of 'magiskinit': Operation not permitted
cp: can't preserve ownership of 'magiskpolicy': Operation not permitted
- All done

I wonder, if these not permitted operations are causing this failing to backup the stock boot.img and what I might do about it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment