最近软路由崩溃了,但是没有任何备份,所以直接就升级到了最新版本ImmortalWrt 25.12.0-rc1,升级之后没有任何感觉,只不过有些设置好像变了,整体来说没有什么差别,如果你感兴趣的话,可以看看下面来自AI的总结:
核心功能对比表
| 特性 | ImmortalWrt 24 (稳定型) | ImmortalWrt 25 (先进型) |
|---|---|---|
| 上游基础 | OpenWrt 24.10 | OpenWrt 25.12 |
| 内核版本 | Linux 6.6 | Linux 6.12 |
| 包管理器 | opkg (旧款) | apk (新款/极速) |
| 无线驱动 | WiFi 6 完善 / WiFi 7 初始 | WiFi 7 深度优化 |
| HomeProxy | 兼容性极佳 | 已针对 apk 和新内核优化 |
| 系统脚本 | Shell | ucode (执行效率更高) |
有了这次经历之后,我决定设置一个定时备份的功能,加上自己本身也有一个飞牛,完全可以定时备份然后同步到飞牛上面去,避免下次再次崩溃又要安装各种软件啥的。
软路由端的操作
首先你将下面的脚本保存到你的软路由/root/目录下,并且将其命名为:auto_backup.sh
#!/bin/sh
#======================================================
# ImmortalWrt 自动备份脚本(显示详细进度版)
# 适用:ImmortalWrt 25.12 (apk) + 已挂载 NAS
#======================================================
# ============ 用户配置区 ============
# 1. 本地临时备份目录
BACKUP_DIR="/tmp/backup_local"
# 2. NAS 挂载点路径 (请通过 df -h 确认)
NAS_MOUNT_POINT="/mnt/nas_backup"
# 3. 备份保留天数
KEEP_DAYS=7
# 4. 日志文件
LOG_FILE="/tmp/router_backup.log"
# ============ 配置区结束 ============
# 颜色定义
red() { echo -e "\033[31m\033[01m[错误] $1\033[0m"; }
green() { echo -e "\033[32m\033[01m[完成] $1\033[0m"; }
yellow() { echo -e "\033[33m\033[01m[注意] $1\033[0m"; }
blue() { echo -e "\033[34m\033[01m[执行] $1\033[0m"; }
log() { echo "$(date '+%Y-%m-%d %H:%M:%S') $1" >> "$LOG_FILE" 2>/dev/null; }
do_backup() {
local date_tag=$(date '+%Y%m%d_%H%M%S')
local tmp_dir="/tmp/backup_work_${date_tag}"
CURRENT_BACKUP="backup_${date_tag}.tar.gz"
echo "------------------------------------------"
blue "开始打包流程,请观察下方文件列表:"
echo "------------------------------------------"
mkdir -p "$BACKUP_DIR"
mkdir -p "$tmp_dir"
cd "$tmp_dir" || return 1
# 1. 备份 apk 软件源 (使用 -cvzf 显示进度)
yellow ">> 正在打包 apk 软件源配置..."
[ -d /etc/apk ] && tar -cvzf apk_config.tar.gz /etc/apk
echo ""
# 2. 备份已安装软件列表
yellow ">> 正在导出已安装软件包清单..."
apk list --installed > packages-list.txt
green "清单已生成:packages-list.txt"
echo ""
# 3. 备份 /overlay (这是最耗时的一步)
yellow ">> 正在打包 /overlay 目录(包含所有插件和配置)..."
tar -cvzf overlay_backup.tar.gz /overlay
echo ""
# 4. 最终汇总打包
yellow ">> 正在生成最终压缩包: ${CURRENT_BACKUP}"
tar -cvzf "${BACKUP_DIR}/${CURRENT_BACKUP}" ./*
# 清理工作目录
rm -rf "$tmp_dir"
if [ -f "${BACKUP_DIR}/${CURRENT_BACKUP}" ]; then
local f_size=$(ls -lh "${BACKUP_DIR}/${CURRENT_BACKUP}" | awk '{print $5}')
green "✓ 本地备份成功!文件大小: $f_size"
log "本地备份成功: ${CURRENT_BACKUP} ($f_size)"
return 0
else
red "✗ 本地打包失败!"
log "错误: 本地打包失败"
return 1
fi
}
sync_to_nas() {
echo ""
blue "------------------------------------------"
blue "正在准备同步至 NAS..."
if ! mountpoint -q "$NAS_MOUNT_POINT"; then
red "✗ 错误: 挂载点 ${NAS_MOUNT_POINT} 未响应,同步终止!"
log "错误: NAS 未挂载"
return 1
fi
# 使用 cp -v 显示拷贝进度
yellow ">> 正在拷贝文件至 NAS 挂载点..."
cp -fv "${BACKUP_DIR}/${CURRENT_BACKUP}" "${NAS_MOUNT_POINT}/"
if [ $? -eq 0 ]; then
green "✓ 同步完成!"
# 清理 NAS 旧文件
yellow ">> 正在检索并清理 ${KEEP_DAYS} 天前的旧备份..."
find "$NAS_MOUNT_POINT" -name "backup_*.tar.gz" -mtime +${KEEP_DAYS} -exec rm -fv {} \;
# 删除本地临时文件
rm -f "${BACKUP_DIR}/${CURRENT_BACKUP}"
log "NAS 同步及清理完成"
else
red "✗ 同步失败,请检查 NAS 磁盘空间或写入权限。"
log "错误: 拷贝至 NAS 失败"
fi
}
main() {
do_backup && sync_to_nas
echo ""
green "=========================================="
green " 所有备份任务已成功结束"
green "=========================================="
}
main
上面的代码来自Gemini,如果你没有特殊需求,可以按照上面的文件不进行任何操作,直接保存文件即可。
然后前往软路由后台的软件包,搜索:luci-app-cifs-mount
搜索完毕之后应该可以看到下面的界面:

直接进行安装即可,安装完毕之后刷新页面或者退出再次进入软路由,你会看到目录菜单多了一个NAS并且下面有一个「挂载 SMB/CIFS 网络共享」,点击进入如下图:

默认情况下是没有任何东西的,我这里进行了添加,所以会显示相关数据,首次操作直接点击「添加」:

需要用到的数据可以参考下面的设置:

相关的说明已经在图中标出,如果有不明白的可以留言交流。
保存之后,切换到「系统」->「挂载点」:

理论上来说应该是可以看到上图所示的内容,这个时候就可以不用再管软路由了,接下来需要去飞牛里面进行操作。
飞牛需要的操作
进入文件管理,创建一个名为「ImmortalWrt」的文件夹,并且在下面创建一个「router_backup」的文件夹:

之后在「ImmortalWrt」文件夹上面鼠标右键选择「共享给此设备的用户」选中自己所在的用户组并且将权限修改为「读写」权限:

最后开启共享即可,如果有弹窗,直接点击确定。
其次,你需要在系统设置里面允许改文件夹是可见的:

虽然我不知道这个步骤是不是有用,但是我个人是设置了,有兴趣的可以自行尝试如果不勾选会有什么变化。
目前为止,在飞牛上面的操作已经完毕了,接下来我们需要前往软路由进行测试操作
测试效果
在软路由界面执行下面的指令进行测试:
/root/auto_backup.sh
执行操作之前请确保你的软路由空间充足,避免出现空间不足导致无法访问路由的情况
会看到下面的界面:

整个过程耗时根据你的设备性能和文件数量决定,操作完毕之后,你可以看到下面的界面:

接下来就需要前往飞牛的文件夹看看文件是否已经保存:

最后一步就是在软路由的「计划任务」中添加一个定时任务代码:
0 4 * * * /root/auto_backup.sh
上面的代码代表每天凌晨4点进行备份操作,如果你需要修改时间,请确保你了解如何修改。
总结
整个过程几乎都是AI来指导我怎么做的,期间出现了一些小问题,但是最后还是解决了,虽然AI解决了大部分问题,但是鉴于每个人每个设备的情况不一样,所以有些细节还是得自己去搜索和揣摩,一味的全部问AI,最后的结果可能就是token满天飞,然后还会降智等等问题。
本文只能算是一个记录,不能算是一个教程,教程具备一定的通用性,而本文只针对我个人的设备已经使用习惯来操作的,有兴趣的可以自行喂给AI看看可以做出哪些改变。

