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 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 and /system. Ignores /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!"
DONE_MESSAGE="Done!"
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"&
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)"
# 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)"
echo "If you kill me now, you'll have to manually stop the PIDs listed above"
wait $SYS_PID $DATA_PID
echo $DONE_MESSAGE | 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