软路由定时备份方案:ImmortalWrt 与 NAS 联动配置

  • 享乐分享享乐分享
  • 2小时前
  • 23
  • 阅读14分钟
  • 最近软路由崩溃了,但是没有任何备份,所以直接就升级到了最新版本ImmortalWrt 25.12.0-rc1,升级之后没有任何感觉,只不过有些设置好像变了,整体来说没有什么差别,如果你感兴趣的话,可以看看下面来自AI的总结:

    核心功能对比表

    特性ImmortalWrt 24 (稳定型)ImmortalWrt 25 (先进型)
    上游基础OpenWrt 24.10OpenWrt 25.12
    内核版本Linux 6.6Linux 6.12
    包管理器opkg (旧款)apk (新款/极速)
    无线驱动WiFi 6 完善 / WiFi 7 初始WiFi 7 深度优化
    HomeProxy兼容性极佳已针对 apk 和新内核优化
    系统脚本Shellucode (执行效率更高)

    有了这次经历之后,我决定设置一个定时备份的功能,加上自己本身也有一个飞牛,完全可以定时备份然后同步到飞牛上面去,避免下次再次崩溃又要安装各种软件啥的。

    软路由端的操作

    首先你将下面的脚本保存到你的软路由/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

    搜索完毕之后应该可以看到下面的界面:
    软路由定时备份方案:ImmortalWrt 与 NAS 联动配置-享乐分享

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

    默认情况下是没有任何东西的,我这里进行了添加,所以会显示相关数据,首次操作直接点击「添加」:
    软路由定时备份方案:ImmortalWrt 与 NAS 联动配置-享乐分享

    需要用到的数据可以参考下面的设置:
    软路由定时备份方案:ImmortalWrt 与 NAS 联动配置-享乐分享

    相关的说明已经在图中标出,如果有不明白的可以留言交流。

    保存之后,切换到「系统」->「挂载点」:
    软路由定时备份方案:ImmortalWrt 与 NAS 联动配置-享乐分享

    理论上来说应该是可以看到上图所示的内容,这个时候就可以不用再管软路由了,接下来需要去飞牛里面进行操作。

    飞牛需要的操作

    进入文件管理,创建一个名为「ImmortalWrt」的文件夹,并且在下面创建一个「router_backup」的文件夹:
    软路由定时备份方案:ImmortalWrt 与 NAS 联动配置-享乐分享

    之后在「ImmortalWrt」文件夹上面鼠标右键选择「共享给此设备的用户」选中自己所在的用户组并且将权限修改为「读写」权限:
    软路由定时备份方案:ImmortalWrt 与 NAS 联动配置-享乐分享

    最后开启共享即可,如果有弹窗,直接点击确定。

    其次,你需要在系统设置里面允许改文件夹是可见的:
    软路由定时备份方案:ImmortalWrt 与 NAS 联动配置-享乐分享

    虽然我不知道这个步骤是不是有用,但是我个人是设置了,有兴趣的可以自行尝试如果不勾选会有什么变化。

    目前为止,在飞牛上面的操作已经完毕了,接下来我们需要前往软路由进行测试操作

    测试效果

    在软路由界面执行下面的指令进行测试:

    /root/auto_backup.sh
    

    执行操作之前请确保你的软路由空间充足,避免出现空间不足导致无法访问路由的情况

    会看到下面的界面:
    软路由定时备份方案:ImmortalWrt 与 NAS 联动配置-享乐分享

    整个过程耗时根据你的设备性能和文件数量决定,操作完毕之后,你可以看到下面的界面:
    软路由定时备份方案:ImmortalWrt 与 NAS 联动配置-享乐分享

    接下来就需要前往飞牛的文件夹看看文件是否已经保存:
    软路由定时备份方案:ImmortalWrt 与 NAS 联动配置-享乐分享

    最后一步就是在软路由的「计划任务」中添加一个定时任务代码:

    0 4 * * * /root/auto_backup.sh
    

    上面的代码代表每天凌晨4点进行备份操作,如果你需要修改时间,请确保你了解如何修改。

    总结

    整个过程几乎都是AI来指导我怎么做的,期间出现了一些小问题,但是最后还是解决了,虽然AI解决了大部分问题,但是鉴于每个人每个设备的情况不一样,所以有些细节还是得自己去搜索和揣摩,一味的全部问AI,最后的结果可能就是token满天飞,然后还会降智等等问题。

    本文只能算是一个记录,不能算是一个教程,教程具备一定的通用性,而本文只针对我个人的设备已经使用习惯来操作的,有兴趣的可以自行喂给AI看看可以做出哪些改变。

    推荐文章

  • 0
  • 0
  • 软路由定时备份方案:ImmortalWrt 与 NAS 联动配置
  • 发表评论

    发表

    大家在看

  • 站点
  • 软件
  • 技巧
  • 上升前十

  • 站点
  • 软件
  • 技巧
  • 订阅我们

    输入你的电子邮件地址订阅网站,我们会在有必要时通过邮件联系您
    订阅
    *订阅成功后会收到订阅通知
    微信公众号:xiangleshare
    三天内不显示