Compare commits
46 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
46ecd0670b | ||
|
|
db722e0d7b | ||
|
|
204bfa2d62 | ||
|
|
0268803569 | ||
|
|
52d45f7a11 | ||
|
|
1692101bec | ||
|
|
eb43b12c01 | ||
|
|
d41184ece9 | ||
|
|
d6367520c7 | ||
|
|
b2382ff5ef | ||
|
|
60db853f48 | ||
|
|
53673dfbfc | ||
|
|
9f14d57b34 | ||
|
|
17fa0fb6c0 | ||
|
|
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 |
97
README.md
97
README.md
@@ -1,2 +1,95 @@
|
||||
# OpenBackRestore
|
||||
OpenWrt Backup Restore
|
||||
# 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、所有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
|
||||
```
|
||||
> 每次备份都是完整的,可以经常备份,比如每月备份一次
|
||||
### 🤔 如何自定义备份的路径?方法如下
|
||||
https://github.com/wukongdaily/OpenBackRestore/wiki
|
||||
|
||||
* 下载脚本
|
||||
```bash
|
||||
wget -O backup.run https://cafe.cpolar.cn/wkdaily/OpenBackRestore/raw/branch/master/backup/backup.run
|
||||
```
|
||||
### 举例说明 假设要备份到 `/mnt/sata1-4`目录
|
||||
* 执行备份
|
||||
```bash
|
||||
sh backup.run /mnt/sata1-4
|
||||
```
|
||||
|
||||
### 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
|
||||
```
|
||||
|
||||
|
||||
## 🚀 方法二 手动方式
|
||||
|
||||
> 1、在release页面下载backup.run或restore.run<br>
|
||||
https://github.com/wukongdaily/OpenBackRestore/releases/latest <br>
|
||||
> 2、打开iStore应用商店,点击手动安装,将run文件拖拽上去即可执行。<br>
|
||||

|
||||
|
||||
|
||||
|
||||
# 在1panel的计划任务里做定时备份iStoreOS系统
|
||||
|
||||
```
|
||||
bash -c "$(curl --insecure -fsSL https://cafe.cpolar.cn/wkdaily/OpenBackRestore/raw/branch/master/1panel/backup.sh)" -- /ahost/mnt/mmc1-4/backupSystem
|
||||
```
|
||||
- 其中 `/ahost/mnt/mmc1-4/backupSystem` 按需修改为备份文件保存的位置<br>
|
||||
|
||||
<img width="952" alt="1Panel 2024-07-02 14-49-18888" src="https://github.com/wukongdaily/OpenBackRestore/assets/143675923/d022bbc2-425b-426d-9809-0546744a3a95"><br>
|
||||
## 前提条件❤️❤️❤️
|
||||
> https://github.com/wukongdaily/OrangePiShell 这个项目的第三条命令<br>
|
||||
> 因为默认情况下istoreos的应用商店里的1panel 并没有映射全部目录,只映射了/mnt<br>
|
||||
> 所以无法完成/overlay的备份。因此需要稍微改动一下。详见上述脚本
|
||||
|
||||
<img width="216" alt="root@iStoreOS: ~ | :bin:login (iStoreOS) 2024-07-02 15-08-17" src="https://github.com/wukongdaily/OpenBackRestore/assets/143675923/7bf39fb5-5f8c-41e9-b75a-628f3763f7f4">
|
||||
|
||||
# 恢复1panel计划任务产生的iStoreOS的备份
|
||||
```
|
||||
bash -c "$(curl --insecure -fsSL https://cafe.cpolar.cn/wkdaily/OpenBackRestore/raw/branch/master/1panel/restore.sh)"
|
||||
```
|
||||
|
||||
# 扩展问题:如何备份到NAS?挂cifs即可。方法如图
|
||||
## 使用前提:iStoreOS和NAS处于同一个网段。经典模型:软路由+无线路由器ap模式
|
||||
## 使用前提:第二种情况,NAS处于软路由的上一级。举例:光猫拨号的光猫连接了NAS,后面接了软路由iStoreOS,软路由作为二级路由器也同样可以访问NAS。
|
||||
<img width="919" alt="cifs" src="https://github.com/wukongdaily/OpenBackRestore/assets/143675923/a185f505-76fe-4512-b5fe-35e9c28ee1e7">
|
||||
|
||||
# iStoreOS 如何挂载威联通NAS的共享文件夹。如图所示 注意大小写
|
||||

|
||||
|
||||

|
||||
## ❤️赞助作者 ⬇️⬇️
|
||||
|
||||
[](https://wkdaily.cpolar.cn/01)
|
||||
|
||||
@@ -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"; }
|
||||
|
||||
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
|
||||
opkg list-installed >packages-list.txt
|
||||
# 备份已安装软件列表
|
||||
opkg list-installed > packages-list.txt
|
||||
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
|
||||
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目录,再调用恢复脚本即可"
|
||||
# 将所有备份打包成一个文件
|
||||
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 "请及时下载保存到电脑 供恢复时使用"
|
||||
}
|
||||
|
||||
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_yellow() { echo -e "\033[93m\033[01m[NOTICE] $1\033[0m"; }
|
||||
|
||||
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/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
|
||||
# 检查文件传输是否已安装
|
||||
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
|
||||
# 如果文件不存在,提醒用户并退出脚本
|
||||
light_magenta "请将恢复文档backup.tar.gz 上传到 /tmp/upload 目录 再重试。"
|
||||
exit 1
|
||||
# 先恢复到一键iStoreOS风格化
|
||||
wget -O /tmp/restore.sh https://gitee.com/wukongdaily/gl_onescript/raw/master/restore.sh && sh /tmp/restore.sh
|
||||
fi
|
||||
}
|
||||
|
||||
restore
|
||||
# 恢复标准的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
|
||||
Reference in New Issue
Block a user