Compare commits

..

No commits in common. "master" and "v1.0" have entirely different histories.
master ... v1.0

5 changed files with 26 additions and 214 deletions

View File

@ -1,14 +0,0 @@
#!/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"

View File

@ -1,74 +0,0 @@
#!/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

View File

@ -1,63 +1,2 @@
# 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">
## 🤔 这是什么?
该项目可以轻松备份iStoreOS已安装的软件和配置,当系统恢复出厂设置或重置后,可以一键恢复原来的软件和配置。<br>
### 特别说明对于iStoreOS系统而言docker的数据分区基本上被用户主动迁移到另一个分区因此无需备份因为重置系统并不会删除用户自己新建的分区。若用户没有迁移docker的数据分区那么我们的备份已经包含
## 💡 特色功能
- 💻 支持`一键生成备份档案 包括已安装软件及其配置`
- 💻 支持`一键恢复备份档案 包括已安装软件及其配置`
- 💻 支持`已安装软件及其配置:包含应用商店和第三方安装的ipk/run`
- 🔑 支持`同时支持终端命令行方式和iStore应用商店手动安装方式`
- 支持的OpenWrt系统列表如下
- 1、软路由iStoreOS(x86_64 | ARM64) ✅
- 2、兼容机型MT3000/2500/6000 ✅
- 3、OpenWrtsquashfs-combined
- 4、OpenWrtext4-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>![huifu](https://github.com/wukongdaily/OpenBackRestore/assets/143675923/cd111f10-e6aa-4011-a046-b3004f77c7eb)
> 确定备份文件已经上传了 再执行如下命令即可恢复,恢复完成后会自动重启
### ❤️恢复命令如下
```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>
![image](https://github.com/wukongdaily/OpenBackRestore/assets/143675923/54fdc034-ed4f-4f81-8aa7-0de556e0c3e2)
# 💰打赏作者💰
<img src="https://github.com/wukongdaily/tvhelper-docker/assets/143675923/1f92c5ba-1b6b-4967-a1ab-20697159badc" width="30%" />
# OpenBackRestore
OpenWrt Backup Restore

View File

@ -7,21 +7,16 @@ light_magenta() { echo -e "\033[95m\033[01m[NOTICE] $1\033[0m"; }
light_yellow() { echo -e "\033[93m\033[01m[NOTICE] $1\033[0m"; }
backup() {
# 检查是否传入自定义路径
local backup_path=${1:-/tmp/upload}
mkdir -p "$backup_path"
cd "$backup_path" || exit
# 备份软件源配置
mkdir -p /tmp/upload/backup
cd /tmp/upload/backup
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 backup.tar.gz distfeeds.conf packages-list.txt overlay_backup.tar.gz
# 清理临时文件
rm -rf distfeeds.conf packages-list.txt overlay_backup.tar.gz
green "系统备份文件已保存至 $backup_path/backup.tar.gz"
light_magenta "请及时下载保存到电脑 供恢复时使用"
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
rm -rf distfeeds.conf packages-list.txt overlay_backup.tar.gz etc_backup.tar.gz
green "系统备份文件已保存至 /tmp/upload/backup/backup.tar.gz"
light_yellow "请及时下载保存到电脑,恢复时使用 系统——文件传输 上传至/tmp/upload目录,再调用恢复脚本即可"
}
backup "$1"
backup

View File

@ -7,62 +7,28 @@ 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() {
mkdir -p /tmp/upload/restore
restore() {
mkdir -p /tmp/upload/backup/
# 检查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 /tmp/upload/backup.tar.gz -C /tmp/upload/backup
cd /tmp/upload/backup
# 恢复软件源
cp distfeeds.conf /etc/opkg/distfeeds.conf
# 恢复已安装列表
opkg update
cat packages-list.txt | cut -f 1 -d ' ' | xargs opkg install
# 恢复/overlay 配置
tar -xzvf overlay_backup.tar.gz -C /
# 恢复/etc 配置
tar -xzvf etc_backup.tar.gz -C /
green "恢复已完成, 系统正在重启....."
reboot
else
red "请将恢复文档backup.tar.gz上传到/tmp/upload目录再重试。"
# 如果文件不存在,提醒用户并退出脚本
light_magenta "请将恢复文档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