🌐 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"

脚本逻辑

  1. 等待系统稳定(启动 > 10分钟)
  2. 检查时间同步和网络连通
  3. 生成 sysupgrade 备份到 /tmp
  4. 提取配置文件并与 Git 仓库对比
  5. 仅在有变更时提交并推送到 GitHub
  6. 自动清理本地和远程旧备份

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.localexit 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)

修改任何一处都会触发备份。