Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision Next revisionBoth sides next revision | ||
| docs:guide-user:installation:generic.backup [2018/08/06 00:16] – [Create Full MTD Backup from router] oslyak | docs:guide-user:installation:generic.backup [2022/07/11 15:06] – Add instructions for how to explore MTD backups spookyuser | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Generic | + | ====== Generic |
| + | * This guide describes how to perform block-level backup/ | ||
| + | * Follow [[docs: | ||
| - | ===== Backup system files ===== | + | <WRAP center round important 60%> |
| + | NAND-based devices should use [[docs: | ||
| + | </ | ||
| - | Please have a look at [[docs: | + | Please have a look at [[docs: |
| + | The **[[docs: | ||
| + | If something should go wrong and the data on these partition gets unexpectedly corrupted, you will not be able to replace it via public OpenWrt sources! | ||
| Since OpenWrt does not write to those partitions, it is very unlikely that they get corrupted by OpenWrt itself. | Since OpenWrt does not write to those partitions, it is very unlikely that they get corrupted by OpenWrt itself. | ||
| Line 9: | Line 15: | ||
| Otherwise, in case you lose that data, you would have to go to the forum, ask somebody to make a backup of his and send it to you, then you would have to replace the MAC address, and then flash it via [[docs: | Otherwise, in case you lose that data, you would have to go to the forum, ask somebody to make a backup of his and send it to you, then you would have to replace the MAC address, and then flash it via [[docs: | ||
| - | ==== Create ART backup ==== | + | ===== Create ART backup ===== |
| + | If your ART-partition got corrupted, you would still be able to boot OpenWrt and only your wireless would not function correctly any longer. | ||
| + | Easy fix with '' | ||
| - | If your ART-partition got corrupted, you would still be able to boot OpenWrt and only your wireless would not function correctly any longer. Easy fix with '' | + | < |
| - | + | dd if=/dev/$(sed -n -e '/:.*" | |
| - | < | + | |
| - | dd if=/dev/$(grep -i '" | + | |
| </ | </ | ||
| - | |||
| If your bootloader-partition got corrupted, you would not even have a [[docs: | If your bootloader-partition got corrupted, you would not even have a [[docs: | ||
| - | + | However, once you've gotten yourself into the position to write to the flash again, you will still need something you can write to it. | |
| - | However, once you've gotten yourself into the position to write to the flash again, you will still need something you can write to it. Something that will work. And here is, where your backup will come in handy: | + | Something that will work. |
| - | + | And here is, where your backup will come in handy: | |
| - | < | + | < |
| dd if=/ | dd if=/ | ||
| </ | </ | ||
| Line 29: | Line 34: | ||
| Then copy your backup-file via scp or ssh to your PC and keep them safe for the time when you may need them. | Then copy your backup-file via scp or ssh to your PC and keep them safe for the time when you may need them. | ||
| - | ==== Create | + | ===== Create |
| - | + | This script assumes a working | |
| - | This script assumes a working | + | If you've changed your router' |
| - | + | This will backup your mtd contents to a compressed tarball file '' | |
| - | On your local PC (not on the router), using a bash terminal (not Windows Command Prompt, Windows 10 Linux subsystem bash terminal is fine) create a new file (eg. ~/mtdbk.sh) containing the below script. | + | |
| - | If running on windows, make sure to save the text file as UNIX (LF) encoded, otherwise you'll get syntax errors, and then execute it (./ | + | |
| - | If running on unix-like system, give this file execution privileges (chmod u+x mtdbk.sh) and then execute it (./ | + | |
| - | This will backup your mtd contents to a compressed tarball file "mtd_backup.tgz" | + | |
| - | < | + | < |
| + | cat << " | ||
| #!/bin/bash | #!/bin/bash | ||
| Line 44: | Line 46: | ||
| function die() { | function die() { | ||
| - | echo " | + | echo "${@}" |
| exit 2 | exit 2 | ||
| } | } | ||
| OUTPUT_FILE=" | OUTPUT_FILE=" | ||
| - | + | OPENWRT=" | |
| - | OPENWRT=" | + | |
| TMPDIR=$(mktemp -d) | TMPDIR=$(mktemp -d) | ||
| - | BACKUP_DIR=" | + | BACKUP_DIR=" |
| - | mkdir -p " | + | mkdir -p "${BACKUP_DIR}" |
| - | SSH_CONTROL=" | + | SSH_CONTROL=" |
| function cleanup() { | function cleanup() { | ||
| Line 64: | Line 64: | ||
| echo " | echo " | ||
| - | rm -r " | + | rm -r "${TMPDIR}" |
| } | } | ||
| trap cleanup EXIT | trap cleanup EXIT | ||
| Line 70: | Line 70: | ||
| # Open master ssh connection, to avoid the need to authenticate multiple times | # Open master ssh connection, to avoid the need to authenticate multiple times | ||
| echo " | echo " | ||
| - | ssh -oControlMaster=yes -oControlPath=" | + | ssh -o " |
| # This is the command we'll use to reuse the master connection | # This is the command we'll use to reuse the master connection | ||
| - | SSH_CMD=(ssh -oControlMaster=no -oControlPath=" | + | SSH_CMD=(ssh -o " |
| # List remote mtd devices from /proc/mtd. The first line is just a table | # List remote mtd devices from /proc/mtd. The first line is just a table | ||
| # header, so skip it (using tail) | # header, so skip it (using tail) | ||
| " | " | ||
| - | MTD_DEV=$(echo $REPLY | cut -f1 -d:) | + | MTD_DEV=$(echo ${REPLY} | cut -f1 -d:) |
| - | MTD_NAME=$(echo $REPLY | cut -f2 -d\" | + | MTD_NAME=$(echo ${REPLY} | cut -f2 -d\" |
| - | echo " | + | echo " |
| # It's important that the remote command only prints the actual file | # It's important that the remote command only prints the actual file | ||
| # contents to stdout, otherwise our backup files will be corrupted. Other | # contents to stdout, otherwise our backup files will be corrupted. Other | ||
| Line 89: | Line 89: | ||
| # Use gzip and tar to compress the backup files | # Use gzip and tar to compress the backup files | ||
| - | echo " | + | echo " |
| - | (cd " | + | (cd "${TMPDIR}" && tar czf - " |
| # Clean up a little earlier, so the completion message is the last thing the user sees | # Clean up a little earlier, so the completion message is the last thing the user sees | ||
| Line 97: | Line 97: | ||
| trap EXIT | trap EXIT | ||
| - | echo -e "\nMTD backup complete. Extract the files using:\ntar xzf \" | + | echo -e "\nMTD backup complete. Extract the files using:\ntar xzf \"${OUTPUT_FILE}\"" |
| + | EOF | ||
| + | chmod +x mtdbk.sh | ||
| + | ./mtdbk.sh | ||
| </ | </ | ||
| - | ==== Create | + | ===== Create |
| The method above works great, but only if you have SSH root access to you router. | The method above works great, but only if you have SSH root access to you router. | ||
| In some cases when you don't have SSH root access to router, but can connected from UART console. | In some cases when you don't have SSH root access to router, but can connected from UART console. | ||
| - | For example TP-Link Archer C9 HW ver 5.0 with original stock firmware | + | For example TP-Link Archer C9 HW ver 5.0 with original stock firmware. |
| You can make backup from router to you host. | You can make backup from router to you host. | ||
| + | <code bash> | ||
| + | # Save the script | ||
| + | cat << " | ||
| + | #!/bin/sh | ||
| - | < | + | BACKUP_HOST=" |
| - | cd /tmp | + | BACKUP_USER="root" |
| - | vi ./ | + | echo " |
| - | </ | + | |
| - | Press " | + | |
| - | + | ||
| - | < | + | |
| - | # | + | |
| - | + | ||
| - | BACKUP_DIR=/ | + | |
| - | BACKUP_HOST=" | + | |
| - | BACKUP_USER=root | + | |
| - | echo " | + | |
| cat /proc/mtd | tail -n+2 | while read; do | cat /proc/mtd | tail -n+2 | while read; do | ||
| - | MTD_DEV=$(echo $REPLY | cut -f1 -d:) | + | MTD_DEV=$(echo ${REPLY} | cut -f1 -d:) |
| - | MTD_NAME=$(echo $REPLY | cut -f2 -d\" | + | MTD_NAME=$(echo ${REPLY} | cut -f2 -d\" |
| - | echo " | + | echo " |
| - | dd if=/ | + | dd if=/ |
| done | done | ||
| - | </ | + | EOF |
| - | and run this script | + | # Run the script |
| - | + | sh /tmp/backup.sh | |
| - | < | + | |
| - | chmod 777 ./backup.sh | + | |
| - | ./backup.sh | + | |
| </ | </ | ||
| + | Now you'll be asked for SSH password from PC for each mtd device 5 or more times. | ||
| + | After operation completed, you'll find all files in user home directory on PC. | ||
| + | |||
| + | If you on linux and wish to see progress you can run in separate console on PC: | ||
| + | <code bash> | ||
| + | watch -n 0.2 ls -l --block-size=K ~ | ||
| + | </ | ||
| - | ==== Create | + | ===== Create |
| + | Sometimes it might be necessary to backup settings/ | ||
| + | Depending on the bootloader, different strategies might be possible. | ||
| - | Sometimes | + | The flash-chip is mapped to a start address. |
| + | With uboot it should | ||
| - | The flash-chip is mapped to a start adress. With uboot it should be in settings | + | < |
| - | < | + | |
| printenv | printenv | ||
| bdinfo | bdinfo | ||
| </ | </ | ||
| - | * memory | + | Memory |
| - | * writing | + | Writing |
| - | ==== Restore | + | ===== Restore |
| + | Many bootloader allow you to work with mtd partition, but beware: they do not have to be identical with the Kernel mtd partitions! | ||
| + | Also, with some bootloaders, | ||
| + | In the latter case, it is probably a good idea to write down these correct offsets when you make the backups. | ||
| - | === from Bootloader console === | + | ===== Restore backup |
| - | Many bootloader allow you to work with mtd partition, but beware: they do not have to be identical with the Kernel mtd partitions! Also, with some bootloaders, | + | < |
| - | + | mtd write art.backup art | |
| - | + | </ | |
| - | === from OpenWrt console === | + | Above method could work, but most probably will not as art partition is usually not writable, so you will have to compile you own kernel after doing some [[toh:tp-link:tl-wr1043nd# |
| - | < | + | |
| - | Above method could work, but most probably will not as art partition is usually not writable, so you will have to compile you own kernel after doing some minor modification like described here: | + | |
| - | [[toh/tp-link/tl-wr1043nd# | + | |
| - | or here: [[https:// | + | |
| Then you must flash this to you device, boot it, and now the partition should be writable. | Then you must flash this to you device, boot it, and now the partition should be writable. | ||
| - | From: | + | ===== Exploring MTD Backups ===== |
| - | [[https://forum.openwrt.org/viewtopic.php? | + | If you want to explore the contents of an MTD backup on your computer, without restoring it to openwrt, you can use [[https://github.com/sviehb/jefferson|jefferson]] with the command |
| - | [[https:// | + | |
| - | ===== Backup OpenWrt configuration ===== | + | < |
| - | + | jefferson mtd4_rootfs_data.backup -d rootfs | |
| - | You can backup your OpenWrt configuration through the web interface via //System > Backup / Flash Firmware > Generate Archive//. If the web interface is not available, connect using SSH and enter: | + | |
| - | < | + | |
| - | sysupgrade --create-backup /tmp/backup-`cat / | + | |
| </ | </ | ||
| - | Now on your local computer, use scp to retreive | + | Where the mtd4_rootfs_data.backup |
| - | (Remember | + | |
| - | + | ||
| - | <code> | + | |
| - | scp root@192.168.1.1:/ | + | |
| - | </ | + | |
| - | + | ||
| - | You might also want to backup other files you have edited such as: | + | |
| - | + | ||
| - | * ''/ | + | |
| - | * ''/ | + | |
| - | * ''/ | + | |
| - | + | ||
| - | see also '' | + | |
| - | + | ||
| - | ===== Restore OpenWrt configuration ===== | + | |
| - | + | ||
| - | You can restore | + | |
| - | * web interface: //System > Backup / Flash Firmware > Backup / Restore// | + | |
| - | * command line:\\ < | + | |
| - | * If you got a .tar backup file and get " | + | |
| - | cd / | + | |
| - | tar -xvf / | + | |