Compare commits
37 Commits
Author | SHA1 | Date | |
---|---|---|---|
e4b924ddf1 | |||
d7b461a225 | |||
79553ad690 | |||
974cb98bc2 | |||
4b186b0e6c | |||
|
a0f7129f08 | ||
|
091fc71a64 | ||
|
5bb8b9432b | ||
|
8e747c06e0 | ||
|
c3bbdfe701 | ||
|
b18be818c3 | ||
|
61407bca29 | ||
|
0aae39db18 | ||
|
0e73fa9457 | ||
|
da119874d2 | ||
|
ee9ef4ec88 | ||
|
e7799a6314 | ||
|
f5bd7589d2 | ||
0351387504 | |||
|
b202fb0215 | ||
|
5fa1797e84 | ||
58b9389fa9 | |||
|
a80e0e1ab0 | ||
|
2ec43cf321 | ||
|
b089c0b953 | ||
|
9dc8bd7b22 | ||
|
85e7e3a4ed | ||
c29d9d920f | |||
|
33afc3a688 | ||
c2a58ce3a6 | |||
f6ab94e5f3 | |||
|
b1eb02f685 | ||
7e23294de4 | |||
9b81be6831 | |||
|
009da41867 | ||
|
72c46a4e07 | ||
7af54f031d |
14
1panel/backup.sh
Normal file
14
1panel/backup.sh
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
backup() {
|
||||||
|
# 检查是否传入自定义路径
|
||||||
|
current_date=$(date "+%Y-%m-%d_%H-%M")
|
||||||
|
echo "备份时间:$current_date"
|
||||||
|
local backup_path=${1:-/tmp/upload}
|
||||||
|
mkdir -p "$backup_path/${current_date}"
|
||||||
|
cd "$backup_path/${current_date}" || exit
|
||||||
|
tar --strip-components=1 -czvf backup.tar.gz -C /ahost overlay
|
||||||
|
echo "系统备份文件已保存至 $backup_path/${current_date}/backup.tar.gz"
|
||||||
|
echo "请及时下载保存到电脑 供恢复时使用"
|
||||||
|
}
|
||||||
|
|
||||||
|
backup "$1"
|
74
1panel/restore.sh
Normal file
74
1panel/restore.sh
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# 定义颜色输出函数
|
||||||
|
red() { echo -e "\033[31m\033[01m[WARNING] $1\033[0m"; }
|
||||||
|
green() { echo -e "\033[32m\033[01m[INFO] $1\033[0m"; }
|
||||||
|
yellow() { echo -e "\033[33m\033[01m[NOTICE] $1\033[0m"; }
|
||||||
|
blue() { echo -e "\033[34m\033[01m[MESSAGE] $1\033[0m"; }
|
||||||
|
light_magenta() { echo -e "\033[95m\033[01m[NOTICE] $1\033[0m"; }
|
||||||
|
light_yellow() { echo -e "\033[93m\033[01m[NOTICE] $1\033[0m"; }
|
||||||
|
|
||||||
|
# 检查文件传输是否已安装
|
||||||
|
check_istoreos_style_installed() {
|
||||||
|
# 检查luci-app-filetransfer的一些关键文件是否存在
|
||||||
|
CHECK_FILES="/usr/lib/lua/luci/controller/filetransfer.lua
|
||||||
|
/usr/lib/lua/luci/view/filetransfer
|
||||||
|
/usr/lib/lua/luci/model/cbi/filetransfer"
|
||||||
|
|
||||||
|
# 设置一个标记,用来表示文件是否找到
|
||||||
|
FOUND=0
|
||||||
|
|
||||||
|
for FILE in $CHECK_FILES; do
|
||||||
|
if [ -e "$FILE" ]; then
|
||||||
|
FOUND=1
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $FOUND -eq 1 ]; then
|
||||||
|
echo "luci-app-filetransfer is installed."
|
||||||
|
else
|
||||||
|
# 先恢复到一键iStoreOS风格化
|
||||||
|
wget -O /tmp/restore.sh https://gitee.com/wukongdaily/gl_onescript/raw/master/restore.sh && sh /tmp/restore.sh
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 恢复标准的iStoreOS
|
||||||
|
normal_restore() {
|
||||||
|
# 提示用户输入要恢复的文件路径
|
||||||
|
green "恢复的文件路径(默认: /tmp/upload/backup.tar.gz) "
|
||||||
|
green "因此您可以使用 系统————文件传输 功能将backup.tar.gz上传,然后在此处【回车】即可完成恢复"
|
||||||
|
read -p "或者您有别的目录,也可以在此处输入要恢复的备份文件路径:" file_path
|
||||||
|
|
||||||
|
# 如果用户没有输入,使用默认路径
|
||||||
|
if [ -z "$file_path" ]; then
|
||||||
|
file_path="/tmp/upload/backup.tar.gz"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查文件是否存在
|
||||||
|
if [ -f "$file_path" ]; then
|
||||||
|
# 恢复overlay
|
||||||
|
tar -xzvf "$file_path" -C /
|
||||||
|
green "✅恢复已完成, 系统正在重启....."
|
||||||
|
reboot
|
||||||
|
else
|
||||||
|
red "文件不存在,请确保文件路径正确并重试。"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
restore() {
|
||||||
|
model_info=$(cat /tmp/sysinfo/model)
|
||||||
|
green "型号:$model_info"
|
||||||
|
case "$model_info" in
|
||||||
|
*2500* | *3000* | *6000*)
|
||||||
|
check_istoreos_style_installed
|
||||||
|
normal_restore
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
normal_restore
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
restore
|
65
README.md
65
README.md
@ -1,2 +1,63 @@
|
|||||||
# OpenBackRestore
|
# iStoreOS/OpenWrt一键备份与恢复脚本 <img alt="GitHub release (by tag)" src="https://img.shields.io/github/downloads/wukongdaily/OpenBackRestore/v1.0/total?label=%E4%B8%8B%E8%BD%BD%E6%AC%A1%E6%95%B0&labelColor=%2332CD32&color=black">
|
||||||
OpenWrt Backup Restore
|
## 🤔 这是什么?
|
||||||
|
|
||||||
|
该项目可以轻松备份iStoreOS已安装的软件和配置,当系统恢复出厂设置或重置后,可以一键恢复原来的软件和配置。<br>
|
||||||
|
### 特别说明:对于iStoreOS系统而言,docker的数据分区基本上被用户主动迁移到另一个分区,因此无需备份,因为重置系统并不会删除用户自己新建的分区。若用户没有迁移docker的数据分区,那么我们的备份已经包含!
|
||||||
|
## 💡 特色功能
|
||||||
|
|
||||||
|
- 💻 支持`一键生成备份档案 包括已安装软件及其配置`
|
||||||
|
- 💻 支持`一键恢复备份档案 包括已安装软件及其配置`
|
||||||
|
- 💻 支持`已安装软件及其配置:包含应用商店和第三方安装的ipk/run`
|
||||||
|
- 🔑 支持`同时支持终端命令行方式和iStore应用商店手动安装方式`
|
||||||
|
- 支持的OpenWrt系统列表如下
|
||||||
|
- 1、软路由iStoreOS(x86_64 | ARM64) ✅
|
||||||
|
- 2、兼容机型:MT3000/2500/6000 ✅
|
||||||
|
- 3、OpenWrt(squashfs-combined)✅
|
||||||
|
- 4、OpenWrt(ext4-combined)❌
|
||||||
|
> 只要是squashfs-combined类型的openwrt固件,理论上都可以兼容的。因为它们都是用了overlayfs文件系统的。
|
||||||
|
|
||||||
|
> 特别说明:GL-iNET这三款机型的恢复工作是分两步走。<br>
|
||||||
|
> 1、执行`sh restore.run `后先恢复到iStoreOS风格,执行完毕后会**提示用户上传你的备份档案。**<br>
|
||||||
|
> 2、再次执行`sh restore.run `后,提示恢复成功并重启,方可完成✅
|
||||||
|
|
||||||
|
## 🚀 方法一 命令行方式
|
||||||
|
|
||||||
|
### 1. 生成备份`/tmp/upload/backup.tar.gz`
|
||||||
|
```bash
|
||||||
|
wget -O backup.run https://cafe.cpolar.cn/wkdaily/OpenBackRestore/raw/branch/master/backup/backup.run && sh backup.run
|
||||||
|
```
|
||||||
|
> 备份仓库
|
||||||
|
```bash
|
||||||
|
wget -O backup.run https://mirror.ghproxy.com/https://raw.githubusercontent.com/wukongdaily/OpenBackRestore/master/backup/backup.run && sh backup.run
|
||||||
|
```
|
||||||
|
> 每次备份都是完整的,可以经常备份,比如每月备份一次
|
||||||
|
### 🤔 如何自定义备份的路径?方法如下
|
||||||
|
https://github.com/wukongdaily/OpenBackRestore/wiki
|
||||||
|
|
||||||
|
### 2. 恢复备份
|
||||||
|
|
||||||
|
**使用前提** 将备份档案提前上传到 `/tmp/upload/` 目录,如图<br><br>
|
||||||
|
|
||||||
|
> 确定备份文件已经上传了 再执行如下命令即可恢复,恢复完成后会自动重启
|
||||||
|
### ❤️恢复命令如下
|
||||||
|
|
||||||
|
```bash
|
||||||
|
wget -O restore.run https://cafe.cpolar.cn/wkdaily/OpenBackRestore/raw/branch/master/backup/restore.run && sh restore.run
|
||||||
|
```
|
||||||
|
> 备份仓库
|
||||||
|
```bash
|
||||||
|
wget -O restore.run https://mirror.ghproxy.com/https://raw.githubusercontent.com/wukongdaily/OpenBackRestore/master/backup/restore.run && sh restore.run
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## 🚀 方法二 手动方式
|
||||||
|
|
||||||
|
> 1、在release页面下载backup.run或restore.run<br>
|
||||||
|
https://github.com/wukongdaily/OpenBackRestore/releases/latest <br>
|
||||||
|
> 2、打开iStore应用商店,点击手动安装,将run文件拖拽上去即可执行。<br>
|
||||||
|

|
||||||
|
|
||||||
|
# 💰打赏作者💰
|
||||||
|
<img src="https://github.com/wukongdaily/tvhelper-docker/assets/143675923/1f92c5ba-1b6b-4967-a1ab-20697159badc" width="30%" />
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,16 +7,21 @@ light_magenta() { echo -e "\033[95m\033[01m[NOTICE] $1\033[0m"; }
|
|||||||
light_yellow() { echo -e "\033[93m\033[01m[NOTICE] $1\033[0m"; }
|
light_yellow() { echo -e "\033[93m\033[01m[NOTICE] $1\033[0m"; }
|
||||||
|
|
||||||
backup() {
|
backup() {
|
||||||
mkdir -p /tmp/upload/backup
|
# 检查是否传入自定义路径
|
||||||
cd /tmp/upload/backup
|
local backup_path=${1:-/tmp/upload}
|
||||||
|
mkdir -p "$backup_path"
|
||||||
|
cd "$backup_path" || exit
|
||||||
|
# 备份软件源配置
|
||||||
cp /etc/opkg/distfeeds.conf distfeeds.conf
|
cp /etc/opkg/distfeeds.conf distfeeds.conf
|
||||||
|
# 备份已安装软件列表
|
||||||
opkg list-installed > packages-list.txt
|
opkg list-installed > packages-list.txt
|
||||||
tar -czvf overlay_backup.tar.gz /overlay
|
tar -czvf overlay_backup.tar.gz /overlay
|
||||||
tar -czvf etc_backup.tar.gz --exclude='/etc/config/wireless' /etc
|
# 将所有备份打包成一个文件
|
||||||
tar -czvf backup.tar.gz distfeeds.conf packages-list.txt overlay_backup.tar.gz etc_backup.tar.gz
|
tar -czvf backup.tar.gz distfeeds.conf packages-list.txt overlay_backup.tar.gz
|
||||||
rm -rf distfeeds.conf packages-list.txt overlay_backup.tar.gz etc_backup.tar.gz
|
# 清理临时文件
|
||||||
green "系统备份文件已保存至 /tmp/upload/backup/backup.tar.gz"
|
rm -rf distfeeds.conf packages-list.txt overlay_backup.tar.gz
|
||||||
light_yellow "请及时下载保存到电脑,恢复时使用 系统——文件传输 上传至/tmp/upload目录,再调用恢复脚本即可"
|
green "系统备份文件已保存至 $backup_path/backup.tar.gz"
|
||||||
|
light_magenta "请及时下载保存到电脑 供恢复时使用"
|
||||||
}
|
}
|
||||||
|
|
||||||
backup
|
backup "$1"
|
||||||
|
@ -7,28 +7,62 @@ blue() { echo -e "\033[34m\033[01m[MESSAGE] $1\033[0m"; }
|
|||||||
light_magenta() { echo -e "\033[95m\033[01m[NOTICE] $1\033[0m"; }
|
light_magenta() { echo -e "\033[95m\033[01m[NOTICE] $1\033[0m"; }
|
||||||
light_yellow() { echo -e "\033[93m\033[01m[NOTICE] $1\033[0m"; }
|
light_yellow() { echo -e "\033[93m\033[01m[NOTICE] $1\033[0m"; }
|
||||||
|
|
||||||
restore() {
|
# 检查文件传输是否已安装
|
||||||
mkdir -p /tmp/upload/backup/
|
check_istoreos_style_installed() {
|
||||||
# 检查backup.tar.gz文件是否存在
|
# 检查luci-app-filetransfer的一些关键文件是否存在
|
||||||
if [ -f /tmp/upload/backup.tar.gz ]; then
|
CHECK_FILES="/usr/lib/lua/luci/controller/filetransfer.lua
|
||||||
tar -xzvf /tmp/upload/backup.tar.gz -C /tmp/upload/backup
|
/usr/lib/lua/luci/view/filetransfer
|
||||||
cd /tmp/upload/backup
|
/usr/lib/lua/luci/model/cbi/filetransfer"
|
||||||
# 恢复软件源
|
|
||||||
cp distfeeds.conf /etc/opkg/distfeeds.conf
|
# 设置一个标记,用来表示文件是否找到
|
||||||
# 恢复已安装列表
|
FOUND=0
|
||||||
opkg update
|
|
||||||
cat packages-list.txt | cut -f 1 -d ' ' | xargs opkg install
|
for FILE in $CHECK_FILES; do
|
||||||
# 恢复/overlay 配置
|
if [ -e "$FILE" ]; then
|
||||||
tar -xzvf overlay_backup.tar.gz -C /
|
FOUND=1
|
||||||
# 恢复/etc 配置
|
break
|
||||||
tar -xzvf etc_backup.tar.gz -C /
|
fi
|
||||||
green "恢复已完成, 系统正在重启....."
|
done
|
||||||
reboot
|
|
||||||
|
if [ $FOUND -eq 1 ]; then
|
||||||
|
echo "luci-app-filetransfer is installed."
|
||||||
else
|
else
|
||||||
# 如果文件不存在,提醒用户并退出脚本
|
# 先恢复到一键iStoreOS风格化
|
||||||
light_magenta "请将恢复文档backup.tar.gz 上传到 /tmp/upload 目录 再重试。"
|
wget -O /tmp/restore.sh https://gitee.com/wukongdaily/gl_onescript/raw/master/restore.sh && sh /tmp/restore.sh
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 恢复标准的iStoreOS
|
||||||
|
normal_restore() {
|
||||||
|
mkdir -p /tmp/upload/restore
|
||||||
|
# 检查backup.tar.gz文件是否存在
|
||||||
|
if [ -f /tmp/upload/backup.tar.gz ]; then
|
||||||
|
tar -xzvf /tmp/upload/backup.tar.gz -C /tmp/upload/restore
|
||||||
|
cd /tmp/upload/restore
|
||||||
|
# 恢复overlay
|
||||||
|
tar -xzvf overlay_backup.tar.gz -C /
|
||||||
|
green "恢复已完成, 系统正在重启....."
|
||||||
|
reboot
|
||||||
|
else
|
||||||
|
red "请将恢复文档backup.tar.gz上传到/tmp/upload目录再重试。"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
restore() {
|
||||||
|
model_info=$(cat /tmp/sysinfo/model)
|
||||||
|
green "型号:$model_info"
|
||||||
|
case "$model_info" in
|
||||||
|
*2500* | *3000* | *6000*)
|
||||||
|
check_istoreos_style_installed
|
||||||
|
normal_restore
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Router name does not contain '3000', '6000', or '2500'."
|
||||||
|
normal_restore
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
restore
|
restore
|
Loading…
Reference in New Issue
Block a user