Skip to content

Instantly share code, notes, and snippets.

@slabua
Forked from inhies/twrp.sh
Last active April 30, 2020 21:39
Show Gist options
  • Select an option

  • Save slabua/7616020 to your computer and use it in GitHub Desktop.

Select an option

Save slabua/7616020 to your computer and use it in GitHub Desktop.
#!/bin/bash
#
# Version 1.2
#
# twrp.sh -- a TWRP compatible backup script for your computer
# Brought to you by inhies
#
# This script creates TWRP compatible backups over usb using adb and magikz
# By default it makes a folder in the standard TWRP date--time format (I think)
# To restore these backups, place the folder in /sdcard/TWRP/BACKUPS/<serialnumber>/
#
# If you can figure out a better way to run the two netcat downloads in parallel
# I would be forever grateful
#
# USAGE: Boot your phone in to TWRP, then run this script
#
# Currently only backs up /data, /system, and /boot which mactches TWRPs default.
# It will also ignore /data/media files (like TWRP does)
#
# This might not work so well on anything other than a Nexus 4 ¯(°_o)/¯
SYSTEM_START_MESSAGE="Backing up /system..."
SYSTEM_DONE_MESSAGE="/system backup complete!"
DATA_START_MESSAGE="Backing up /data..."
DATA_DONE_MESSAGE="/data backup complete!"
BOOT_START_MESSAGE="Backing up /boot..."
BOOT_DONE_MESSAGE="/boot backup complete!"=
adb shell mount -r /system
FOLDER=`date '+%Y-%m-%d--%H-%M-%S'`
mkdir $FOLDER; cd $FOLDER
echo "Backup started in $FOLDER"
# Setup
adb forward tcp:5550 tcp:5550
adb shell "rm -rf /tmp/sys_fifo && mkfifo /tmp/sys_fifo && cd /system/ && tar -cz -f /tmp/sys_fifo * & nc -l -p 5550 -e cat /tmp/sys_fifo" &
adb forward tcp:5551 tcp:5551
adb shell "rm -rf /tmp/data_fifo && mkfifo /tmp/data_fifo && cd /data/ && tar -cz --exclude='media*' -f /tmp/data_fifo * & nc -l -p 5551 -e cat /tmp/data_fifo" &
adb forward tcp:5552 tcp:5552
adb shell "rm -rf /tmp/boot_fifo && mkfifo /tmp/boot_fifo && dd if=/dev/block/mmcblk0p6 of=/tmp/boot_fifo & nc -l -p 5552 -e cat /tmp/boot_fifo" &
sleep 1
# Backup /system
(
nc 127.0.0.1 5550 > system.ext4.win
md5sum system.ext4.win > system.ext4.win.md5
echo $SYSTEM_DONE_MESSAGE
) | tee -a recovery.log &
SYS_PID=$!
echo "$SYSTEM_START_MESSAGE (PID $SYS_PID)" | tee -a recovery.log
# Backup /data
(
nc 127.0.0.1 5551 > data.ext4.win
md5sum data.ext4.win > data.ext4.win.md5
echo $DATA_DONE_MESSAGE
) | tee -a recovery.log &
DATA_PID=$!
echo "$DATA_START_MESSAGE (PID $DATA_PID)" | tee -a recovery.log
# Backup /boot
(
nc 127.0.0.1 5552 > boot.emmc.win
md5sum boot.emmc.win > boot.emmc.win.md5
echo $BOOT_DONE_MESSAGE
) | tee -a recovery.log &
BOOT_PID=$!
echo "$BOOT_START_MESSAGE (PID $BOOT_PID)" | tee -a recovery.log
echo "If you kill me now, you'll have to manually stop the PIDs listed above"
wait $SYS_PID $DATA_PID $BOOT_PID
echo "Done!" | tee -a recovery.log
adb shell umount /system
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment