Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| zh-cn:doc:howto:generic.backup [2018/03/03 20:55] – ↷ Links adapted because of a move operation bobafetthotmail | zh:docs:guide-user:installation:generic.backup [2021/12/26 06:27] (current) – update sleppy | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== 通用备份 ====== | + | ====== 通用 |
| - | ===== 建立备份 ===== | + | |
| - | 再一次强调,请先查看 [[docs: | + | |
| - | 如前所述,这些分区不是OpenWrt固件的一部分,刷OpenWrt固件不会改写他们。因而通常不太可能受损,但并不是不可能,所以你应该做一个备份。 | + | * 本指南介绍了如何通过[[https:// |
| + | * **文件级**备份/ | ||
| - | 如果ART分区损坏,仍然能够启动OpenWrt,只是无线网络不再正常工作。简单修复办法 | + | <WRAP center round important 60%> |
| - | < | + | 基于 NAND 的设备应使用[[https:// |
| - | dd if=/dev/$(grep '" | + | </ |
| + | |||
| + | |||
| + | 请查看[[https:// | ||
| + | |||
| + | 由于 OpenWrt 不会写入这些分区,因此它们不太可能被 OpenWrt 本身损坏。但是,如果您想折腾bootloader部分,当然应该在您的 PC 上创建此数据的副本。否则,万一您丢失了该数据,您将不得不去论坛,让某人备份他的数据并发送给您,然后您必须更换MAC地址,然后通过[[https:// | ||
| + | |||
| + | ===== 创建 ART 备份 ===== | ||
| + | |||
| + | 如果您的 | ||
| + | |||
| + | < | ||
| + | dd if=/dev/$(sed -n -e '/:.*" | ||
| </ | </ | ||
| - | 如果bootloader分区损坏,不会有 [[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. Something that will work. And here is, where your backup will come in handy: | + | 如果您的引导加载程序分区已损坏,您甚至无法使用bootloader的[[https:// |
| - | (不理解这些,通过如下代码备份) | + | |
| - | (大概意思,一但出现这情况,你要想办法重写这些数据,你的备份将派上用场:) | + | 但是,一旦您已经准备好再次写入闪存,您仍然需要一些可以写入的东西,会起作用的东西。在这里,您的备份将派上用场: |
| - | < | + | |
| + | < | ||
| dd if=/ | dd if=/ | ||
| </ | </ | ||
| - | 然后通过scp或ssh复制备份文件到您的电脑并妥善保存,可能有需要它们的时候。 | ||
| - | ===== 恢复备份 ===== | + | 然后通过 scp 或 ssh 将您的备份文件复制到您的 PC 上,并确保它们的安全以供您可能需要它们。 |
| - | ===== 备份配置 | + | |
| - | < | + | ===== 创建完整的 MTD 备份 ===== |
| - | cd /etc; tar -cvzf config.tar.gz config/ | + | |
| + | 该脚本假设在原生类 Unix 或 WSL 环境中使用Bash 和SSH。如果您更改了路由器的IP地址,请将 OPENWRT 变量值更改为OpenWrt 路由器的主机名/ | ||
| + | |||
| + | <code bash> | ||
| + | cat << " | ||
| + | # | ||
| + | |||
| + | set -e | ||
| + | |||
| + | function die() { | ||
| + | echo " | ||
| + | exit 2 | ||
| + | } | ||
| + | |||
| + | OUTPUT_FILE=" | ||
| + | OPENWRT=" | ||
| + | TMPDIR=$(mktemp -d) | ||
| + | BACKUP_DIR=" | ||
| + | mkdir -p " | ||
| + | SSH_CONTROL=" | ||
| + | |||
| + | function cleanup() { | ||
| + | set +e | ||
| + | |||
| + | echo " | ||
| + | " | ||
| + | |||
| + | echo " | ||
| + | rm -r " | ||
| + | } | ||
| + | trap cleanup EXIT | ||
| + | |||
| + | # Open master ssh connection, to avoid the need to authenticate multiple times | ||
| + | echo " | ||
| + | ssh -o " | ||
| + | |||
| + | # This is the command we'll use to reuse the master connection | ||
| + | SSH_CMD=(ssh -o " | ||
| + | |||
| + | # List remote mtd devices from /proc/mtd. The first line is just a table | ||
| + | # header, so skip it (using tail) | ||
| + | " | ||
| + | MTD_DEV=$(echo ${REPLY} | cut -f1 -d:) | ||
| + | MTD_NAME=$(echo ${REPLY} | cut -f2 -d\" | ||
| + | echo " | ||
| + | # It's important that the remote command only prints the actual file | ||
| + | # contents to stdout, otherwise our backup files will be corrupted. Other | ||
| + | # info must be printed to stderr instead. Luckily, this is how the dd | ||
| + | # command already behaves by default, so no additional flags are needed. | ||
| + | " | ||
| + | done | ||
| + | |||
| + | # Use gzip and tar to compress the backup files | ||
| + | echo " | ||
| + | (cd " | ||
| + | |||
| + | # Clean up a little earlier, so the completion message is the last thing the user sees | ||
| + | cleanup | ||
| + | # Reset signal handler | ||
| + | trap EXIT | ||
| + | |||
| + | echo -e "\nMTD backup complete. Extract the files using:\ntar xzf \" | ||
| + | EOF | ||
| + | chmod +x mtdbk.sh | ||
| + | ./ | ||
| + | </ | ||
| + | |||
| + | ===== 从 OpenWrt 创建完整的 MTD 备份 ===== | ||
| + | |||
| + | 上述方法效果很好,但前提是您对路由器具有SSH根访问权限。在某些情况下,当您没有对路由器的SSH根访问权限,但可以从 UART 控制台连接时。例如带有原始官方固件的 TP-Link Archer C9 HW ver 5.0。您可以从路由器备份到您的主机。 | ||
| + | |||
| + | < | ||
| + | # Save the script | ||
| + | cat << " | ||
| + | #!/bin/sh | ||
| + | |||
| + | BACKUP_HOST=" | ||
| + | BACKUP_USER=" | ||
| + | echo " | ||
| + | |||
| + | cat /proc/mtd | tail -n+2 | while read; do | ||
| + | MTD_DEV=$(echo ${REPLY} | cut -f1 -d:) | ||
| + | MTD_NAME=$(echo ${REPLY} | cut -f2 -d\" | ||
| + | echo " | ||
| + | dd if=/ | ||
| + | done | ||
| + | EOF | ||
| + | |||
| + | # Run the script | ||
| + | sh /tmp/backup.sh | ||
| + | </code> | ||
| + | |||
| + | 现在,您需要从 PC 为每个 mtd 设备输入5 次或更多次的SSH密码 。 | ||
| + | |||
| + | 操作完成后,您将在PC 上的用户主目录中找到所有文件。 | ||
| + | |||
| + | 如果您使用 linux 并希望查看进度,您可以在 PC 上的单独控制台中运行: | ||
| + | |||
| + | <code bash> | ||
| + | watch -n 0.2 ls -l --block-size=K ~ | ||
| + | </ | ||
| + | |||
| + | ===== 从引导加载程序创建备份 ===== | ||
| + | |||
| + | 有时可能需要从原始固件备份设置/ | ||
| + | |||
| + | 闪存芯片被映射到一个起始地址。使用 uboot 它应该在以下设置中: | ||
| + | |||
| + | <code bash> | ||
| + | printenv | ||
| + | bdinfo | ||
| + | </ | ||
| + | |||
| + | 内存转储到串口(uboot: | ||
| + | |||
| + | ===== 从引导加载程序控制台恢复备份 ===== | ||
| + | |||
| + | 许多引导加载程序允许您使用 mtd 分区,但要注意:它们不必与内核 mtd 分区相同!此外,对于某些引导加载程序,您不能使用 mtd-partition,您必须使用偏移量。在后一种情况下,在进行备份时记下这些正确的偏移量可能是个好主意。 | ||
| + | |||
| + | ===== 从 OpenWrt 控制台恢复备份 ===== | ||
| + | |||
| + | <code bash> | ||
| + | mtd write art.backup art | ||
| </ | </ | ||
| - | 通过ssh等复制到其它地方。 | ||
| - | ==== Bootloader 控制台 ==== | ||
| - | 大多数bootloader允许使用mtd分区, | ||
| - | ==== OpenWrt操作 ==== | + | 上述方法可能可以使用,但很可能无法正常使用,因为art分区通常不可写,因此您必须在做一些[[https:// |
| - | 试试: < | + | |
| - | 以上代码可以正常工作, | + | |
| - | [[toh/ | + | |
| - | 或这里: [[https:// | + | |
| - | 然后写入你的设备, 重启, 现在这分区将是可写的. | + | |
| - | From: | + | |
| - | [[https:// | + | |
| - | [[https:// | + | |