🌐 ImmortalWrt 智能自动备份 (Smart Backup)
概览
- 脚本名称:
/root/smart_backup.sh - 运行时间: 每天 15:00 自动运行 + 开机自动检查
- 核心逻辑: 按需备份。智能识别
/etc/config和/etc/openclash变更,只有配置发生变化时才执行备份和推送 - 双重存档: 同时保存
sysupgrade恢复包 (.tar.gz) 和明文配置 (configs/+openclash/),便于追踪变更历史 - 保留策略: 本地保留最近 3份,GitHub 仓库保留最近 30份
- 稳定性检查: 内置开机时长检测 (>10分钟)、NTP 时间同步检查和网络连通性检查
为什么要这样做
- 避免冗余: 只有配置变了才备份,节省存储空间和 Git 提交历史
- 版本管理: 自动提取配置文件到 Git,可以清晰地看到每次修改了哪些配置项 (Diff)
- OpenClash支持: 同时备份
/etc/config/openclash和/etc/openclash/*.yaml配置文件 - 语义化提交: 自动生成 Commit Message (如
Update: dhcp, network, wireless, config.yaml) - 开机补跑: 配合
rc.local开机自启,系统稳定后自动检查并执行备份
部署步骤
1. 安装依赖
opkg update
opkg install git openssh-client openssh-keygen ca-bundle ca-certificates
2. 配置 SSH 密钥
# 生成密钥(如果还没有)
ssh-keygen -t ed25519 -f /root/.ssh/id_ed25519 -N ""
# 查看公钥,添加到 GitHub → Settings → SSH and GPG keys
cat /root/.ssh/id_ed25519.pub
# 配置 SSH 使用 443 端口(防止 22 端口被封)
cat > /root/.ssh/config <<'EOF'
Host github.com
HostName ssh.github.com
Port 443
User git
IdentityFile ~/.ssh/id_ed25519
StrictHostKeyChecking accept-new
EOF
chmod 600 /root/.ssh/config
chmod 600 /root/.ssh/id_ed25519
# 测试连接
ssh -T git@github.com
3. 部署备份脚本
从本项目获取 scripts/smart_backup.sh,修改以下配置:
# 配置段(脚本开头)
GIT_USERNAME="YOUR_USERNAME" # 你的 GitHub 用户名
BACKUP_REPO="YOUR_BACKUP_REPO" # 备份仓库名
GIT_REMOTE="git@github.com:${GIT_USERNAME}/${BACKUP_REPO}.git"
上传脚本到路由器:
scp smart_backup.sh root@192.168.1.1:/root/
ssh root@192.168.1.1 "chmod +x /root/smart_backup.sh"
脚本逻辑:
- 等待系统稳定(启动 > 10分钟)
- 检查时间同步和网络连通
- 生成 sysupgrade 备份到
/tmp - 提取配置文件并与 Git 仓库对比
- 仅在有变更时提交并推送到 GitHub
- 自动清理本地和远程旧备份
4. 配置定时任务
# 每天 15:00 执行
echo "0 15 * * * /root/smart_backup.sh >> /root/smart_backup.log 2>&1" >> /etc/crontabs/root
/etc/init.d/cron restart
5. 配置开机自动执行
在 /etc/rc.local 的 exit 0 之前添加:
/root/smart_backup.sh &
脚本内置变更检测,重复运行不会产生冗余备份。
查看日志和状态
# 查看备份日志
tail -n 100 /root/smart_backup.log
# 查看定时任务
crontab -l
# 查看 rc.local 配置
cat /etc/rc.local
# 手动运行测试
/root/smart_backup.sh
常见问题
Q: 备份没有推送到 GitHub?
检查 SSH 连接:
ssh -T git@github.com
查看日志:
tail -n 50 /root/smart_backup.log
确认配置文件确实有变更
Q: 开机后没有自动执行?
确认 /etc/rc.local 包含 /root/smart_backup.sh &,脚本会等待系统启动 10 分钟后才执行。
Q: 为什么有时候不备份?
这是正常的!脚本只在配置变更时才备份。脚本会监控:
/etc/config/下的所有系统配置文件/etc/openclash/下的 OpenClash 配置文件(如 config.yaml)
修改任何一处都会触发备份。