尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

小米智能摄像机视频自动备份:基于SMB与Rclone的NAS/网盘同步方案

小米智能摄像机视频自动备份:基于SMB与Rclone的NAS/网盘同步方案 1. 项目概述让监控视频自动“搬家”家里装了个小米智能摄像机看家护院、云吸宠物确实方便。但用久了一个现实问题就摆在了面前云存储空间有限回看要开会员本地存储卡有容量上限且存在物理损坏风险。更别提那些想长期保存孩子成长瞬间、宠物搞笑集锦的用户了。手动备份太麻烦容易忘。于是一个自动化方案的需求就变得非常迫切让小米智能摄像机录制的视频自动、定期地同步到我们自己的网盘如百度网盘、阿里云盘或NAS中。这个需求的核心是打通“本地/局域网存储”与“云端存储”之间的桥梁。小米摄像机本身支持将视频存储在MicroSD卡或通过SMB协议写入局域网内的NAS或共享文件夹。我们的目标就是在这个“中转站”SD卡或SMB共享文件夹上做文章部署一个自动化的“搬运工”将新产生的视频文件实时或定时地同步到指定的网盘目录下。这样一来我们既享受了摄像机本地的实时录制和AI功能又获得了网盘的大容量、异地备份和便捷分享优势实现存储空间的“无缝扩展”。整个方案不依赖于任何官方未开放的功能而是利用现有协议和开源工具进行组合稳定性高可玩性强。无论你是想备份到百度网盘做长期归档还是同步到阿里云盘与家人共享亦或是利用一刻相册的无限空间存宝宝照片甚至是用SMB直接备份到另一台电脑或NAS做冷备都能找到对应的实现路径。2. 核心思路与方案选型要实现自动同步我们需要一个始终运行在后台的“同步引擎”。这个引擎需要做三件事监控源文件夹的变化、调用网盘的上传接口、处理可能的错误和冲突。根据运行环境的不同主要有两大部署方向。2.1 方案一基于摄像机的SMB功能 服务器端同步这是最推荐、也是最稳定的方案。它的核心是利用小米摄像机自带的“SMB存储”功能。工作原理在局域网内准备一台7x24小时运行的设备可以是NAS、软路由、一台旧电脑甚至树莓派并在其上创建一个SMB共享文件夹。在小米智能摄像机的App米家中设置视频存储位置为“网络存储SMB”并填入该共享文件夹的路径、用户名和密码。此后摄像机录制的所有视频片段通常是按分钟或事件切割的小文件都会直接写入这台服务器的共享文件夹中。接下来我们在这台服务器上部署同步程序如rclone,alist等让它监控这个SMB共享文件夹。一旦有新的视频文件产生同步程序就立即或按计划将其上传到配置好的网盘。为什么首选这个方案减轻摄像机负担视频写入和同步上传的任务完全由性能更强的服务器承担摄像机只负责录制和传输运行更稳定不易发热或死机。同步更及时可靠服务器可以常驻后台进程实现近乎实时的同步如每5分钟扫描一次。功能强大灵活服务器端有丰富的开源工具生态支持可以实现过滤只同步事件录像、重命名、压缩后再上传等高级功能。一机多控一台服务器可以同时为多个摄像机的SMB共享文件夹提供同步服务集中管理效率高。2.2 方案二直接读取MicroSD卡 外部设备同步这个方案适用于不方便设置SMB或者摄像机放置位置网络条件受限的情况。工作原理摄像机视频存储在自身的MicroSD卡中。我们需要另一台设备同样可以是NAS、电脑等能够通过网络访问到这张SD卡的内容。这通常通过两种方式实现摄像机支持FTP/WebDAV少数型号可能支持将卡内内容以FTP等形式共享出来。通过网络文件系统挂载更通用的方法是在服务器上通过sshfs、cifs-utils如果摄像机系统是Linux且开启了ssh或SMB等工具将摄像机内部的存储路径挂载到本地的一个目录。然而小米摄像机官方系统通常不开放这些服务端口此方法对绝大多数用户不可行。因此方案二的实际可操作性远低于方案一。除非你精通设备刷机、破解否则不推荐。本博文后续内容将主要围绕“方案一SMB服务器同步”展开这是经过验证的、对普通用户最友好的路径。2.3 核心工具选型Rclone vs Alist选定方案后我们需要挑选服务器上的“同步引擎”。两个主流选择是Rclone和Alist它们定位略有不同。Rclone命令行同步利器定位专业的命令行文件同步工具号称“云存储的瑞士军刀”。优势支持广泛支持超过70种存储服务包括百度网盘需通过第三方插件、阿里云盘通过官方支持、WebDAV、SMB、FTP等几乎涵盖所有可能。功能强大增量同步、定时同步配合cron、加密、缓存控制、带宽限制等高级功能一应俱全。资源占用低纯命令行工具运行效率高适合跑在资源有限的设备上如路由器、树莓派。稳定性高久经考验社区活跃问题容易找到解决方案。劣势需要命令行操作有一定学习门槛配置过程相对复杂尤其是对于百度网盘等需要获取刷新令牌Refresh Token的网盘。Alist带Web界面的文件列表/挂载程序定位一个支持多种存储的文件列表/WebDAV程序主要功能是“挂载”和“展示”。优势操作直观提供美观的Web管理界面添加存储、管理文件像用网盘客户端一样简单。挂载方便可以轻松将阿里云盘、百度网盘等挂载为服务器的本地磁盘通过WebDAV或网络位置。分享便捷自带文件分享功能可以生成直链或密码访问链接。劣势同步非核心功能Alist本身不提供像Rclone那样的sync或copy命令。要实现自动同步需要结合其他工具如rsync,rclone本身来操作Alist挂载出来的路径或者依赖其Webhook等有限的通知功能方案更迂回。资源占用相对较高作为一个常驻的Web服务比Rclone占用更多内存。选型结论追求极致自动化、稳定同步不怕命令行首选Rclone。它是为“同步”这个任务而生的。希望有图形界面管理多个网盘并且同步需求不复杂如每天一次备份可以选择Alist挂载 系统定时任务cron执行复制命令。但对于实时性要求高的监控视频同步Rclone仍是更直接的选择。考虑到我们的核心需求是稳定、自动化的同步下文将重点讲解使用Rclone的实现流程。Alist方案会作为补充思路简要提及。3. 环境准备与基础配置在开始敲命令之前我们需要把基础设施搭建好。整个过程就像组装流水线先建好原料仓库SMB共享再准备好运输工具和目的地地址Rclone和网盘配置。3.1 创建SMB共享文件夹以Windows为例我们的服务器可以是Windows、Linux或NAS。这里以最常见的Windows 10/11为例Linux如Ubuntu或群晖等NAS系统的SMB设置原理类似界面不同。选择或创建文件夹在作为服务器的电脑上选择一个空间充足的磁盘新建一个文件夹例如D:\Xiaomi_Camera。设置文件夹共享右键点击该文件夹 - “属性” - 切换到“共享”选项卡。点击“高级共享” - 勾选“共享此文件夹” - 可以设置共享名如XiaomiCam。点击“权限” - 确保至少给Everyone用户或你指定的用户赋予“读取/写入”权限。出于安全考虑建议创建一个专用用户并设置强密码而不是长期使用Everyone。配置网络发现和共享设置确保摄像机能找到打开“控制面板\网络和 Internet\网络和共享中心\高级共享设置”。确保当前网络配置文件下“启用网络发现”和“启用文件和打印机共享”是打开的。“所有网络”部分选择“关闭密码保护共享”如果摄像机连接时总提示密码错误可以尝试此项但安全性降低或者确保你知道用于共享的用户名和密码。获取共享路径记下共享文件夹的网络路径。格式为\\服务器IP地址或计算机名\共享名。例如你的服务器IP是192.168.1.100共享名是XiaomiCam那么路径就是\\192.168.1.100\XiaomiCam。注意如果服务器有防火墙需要确保文件和打印机共享(SMB-In)规则在专用网络上被允许。可以在Windows Defender防火墙中检查。3.2 在小米摄像机中配置SMB存储打开米家App找到你的智能摄像机设备。进入摄像机设置 -存储设置。选择网络存储SMB。点击“添加网络存储”按照提示输入信息主机/IP填写你的服务器IP地址如192.168.1.100。端口默认445。目录填写共享名如XiaomiCam。有时需要填写从共享根目录开始的路径如果直接是根共享这里可以留空或填/。用户名/密码填写你共享文件夹设置的用户名和密码。如果前面关闭了密码保护这里可能留空或随意填写。点击“保存”或“连接测试”。成功后会显示存储空间容量。将默认存储位置切换到“网络存储”。之后摄像机新录制的视频就会直接保存到你的服务器上了。你可以在服务器的D:\Xiaomi_Camera文件夹里看到按日期如2024-05-20和事件类型如all全天录像,alert移动侦测分类的文件夹和.mp4文件。3.3 安装与配置Rclone接下来我们在服务器上安装配置Rclone让它成为我们的“网盘搬运工”。下载安装RcloneWindows访问 Rclone官网 下载对应的Windows版本64位选择rclone-v1.xx.x-windows-amd64.zip。解压后你会得到一个rclone.exe文件。为了方便可以将其路径如C:\rclone添加到系统的PATH环境变量中这样就能在任意命令行窗口使用rclone命令了。Linux (如Ubuntu)通常可以通过包管理器安装。sudo apt update sudo apt install rclone。或者从官网下载二进制包解压后移动rclone文件到/usr/local/bin。初始化配置 打开命令行Windows用CMD或PowerShellLinux用终端输入命令开始配置rclone config你会进入一个交互式配置界面。添加一个新的网盘存储输入n(new remote)。为这个存储起个名字例如aliyun对应阿里云盘或baidu对应百度网盘。现在进入关键步骤选择存储类型。Rclone支持很多种我们需要根据目标网盘选择。对于阿里云盘在最新的Rclone版本中阿里云盘已是官方支持。当提示Storage时输入31或找到Aliyundrive对应的编号。然后按照提示通过浏览器完成OAuth授权获取refresh_token。这是最稳定、推荐的方式。对于百度网盘官方Rclone暂未直接集成。需要用到第三方插件rclone-baidunetdisk。这意味着配置过程更复杂一些需要先编译或下载该插件的特定版本rclone然后再配置。其原理也是通过OAuth获取授权。考虑到百度网盘授权的复杂性和不稳定性如果可能优先考虑阿里云盘或一刻相册如果支持WebDAV。对于其他支持WebDAV的网盘/一刻相册如果一刻相册支持WebDAV需确认则可以选择存储类型为webdav然后填入服务商提供的WebDAV地址、用户名和密码。对于SMB/NAS如果你最终想同步到另一个SMB共享如另一台NAS也可以配置一个类型为smb的remote填入路径、用户名密码即可。测试配置 配置完成后可以使用命令测试连接和列出根目录文件确保配置正确。rclone lsd aliyun: # 列出阿里云盘根目录 rclone lsd baidu: # 列出百度网盘根目录如果已配置实操心得获取阿里云盘Refresh Token的简便方法在配置阿里云盘时Rclone会提示你打开一个本地授权页面通常是http://127.0.0.1:53682/...。如果你在无图形界面的服务器如Linux服务器上操作这一步会卡住。解决办法是在配置命令中使用rclone config --config /path/to/rclone.conf指定配置文件路径。在有浏览器的电脑比如你日常用的Windows电脑上安装相同版本的Rclone执行rclone config正常完成阿里云盘的OAuth网页授权流程。授权成功后Rclone会在用户目录如C:\Users\用户名\.config\rclone\rclone.conf生成配置文件。打开这个文件找到你配置的[aliyun]段里面就有宝贵的refresh_token。将这个refresh_token的值复制到你的服务器上Rclone配置文件的对应位置即可。这样服务器就获得了访问权限而无需图形界面。4. 实现自动同步策略与命令详解环境配置妥当流水线的起点SMB文件夹和终点网盘都已就位现在我们来设计并启动“搬运工”Rclone的工作流程。4.1 同步策略设计监控视频是持续产生的碎片化小文件我们需要一个合理的同步策略来平衡及时性、可靠性和资源消耗。实时监控 vs 定时同步实时监控--monitorRclone的mount命令或配合rclone rc可以实现类似实时同步但对于监控视频场景这可能导致频繁的小文件上传操作增加API调用次数可能触发网盘频率限制和服务器负载。不推荐。定时同步Cron Job / Scheduled Task这是最稳健的方案。例如设置每10分钟或每1小时运行一次同步命令。这样能将短时间内产生的多个小文件一次性上传效率更高也更符合网盘API的设计预期。增量同步与文件过滤增量同步Rclone的sync或copy命令默认就是增量逻辑只会传输源位置有而目标位置没有或大小、修改时间不同的文件。这完美契合我们的需求。文件过滤我们可能只关心事件录像alert文件夹而不需要全天候录像all文件夹。Rclone强大的过滤规则--filter或--include/--exclude可以轻松实现。例如只同步移动侦测事件--include /alert/**。例如排除所有all文件夹--exclude /all/**。也可以按文件时间过滤比如只同步最近7天的文件--max-age 7d。目标路径组织 为了避免网盘目录混乱最好在网盘上创建一个固定的目录结构来存放同步的视频。例如在网盘根目录创建XiaomiCamera/文件夹里面再按摄像机名称和日期建立子目录。 Rclone的路径可以这样设计aliyun:XiaomiCamera/{{ .DeviceName }}/{{ .Date }}但更简单的做法是在同步命令中直接指定目标路径如aliyun:XiaomiCamera/LivingRoom/然后利用Rclone的--backup-dir功能将文件自动按日期归档需要更复杂的脚本。4.2 核心Rclone命令解析我们将使用rclone sync命令它的作用是使目标与源内容完全相同。注意sync会删除目标端源端没有的文件如果使用--delete-during或--delete-after参数。对于备份场景我们可能更希望使用rclone copy它只复制文件不会删除目标端的任何内容。基础同步命令示例# 将本地SMB文件夹同步到阿里云盘的指定目录copy模式不删除目标端文件 rclone copy D:\Xiaomi_Camera aliyun:Backup/XiaomiCamera --progress --verbose --transfers 4 --checkers 8 # 使用sync模式并删除目标端多余文件谨慎使用 # rclone sync D:\Xiaomi_Camera aliyun:Backup/XiaomiCamera --progress --verbose --delete-during参数解释copy/sync核心命令。D:\Xiaomi_Camera源路径。如果路径有空格需要用引号包裹。aliyun:Backup/XiaomiCamera目标路径。格式为配置的remote名称:网盘内路径。--progress显示实时传输进度条。--verbose输出详细日志便于排查问题。--transfers 4同时传输的文件数。根据网络和服务器性能调整默认是4。增大此值可提高批量小文件的上传速度但可能增加API压力。--checkers 8同时进行校验的文件数。通常设置为--transfers的2倍。--delete-during在传输期间删除目标端多余的文件。非常危险备份时慎用建议先用--dry-run参数模拟运行看哪些文件会被删除。添加过滤规则# 只同步alert事件文件夹下的mp4文件并且是最近3天内的 rclone copy D:\Xiaomi_Camera aliyun:Backup/XiaomiCamera_Events \ --include /alert/*.mp4 \ --max-age 3d \ --progress --verbose4.3 创建自动化任务Windows/Linux命令需要自动、定期执行。这通过系统的计划任务Windows或CronLinux来实现。在Windows上创建计划任务打开“任务计划程序”。创建基本任务。设置触发器例如“每天”触发开始时间设为当前时间并勾选“重复任务间隔”为“10分钟”持续时间“无限期”。设置操作“启动程序”。在“程序或脚本”中填写rclone.exe的完整路径如C:\rclone\rclone.exe。在“添加参数”中填写完整的同步命令参数如copy D:\Xiaomi_Camera aliyun:Backup/XiaomiCamera --progress --transfers 4。在“条件”和“设置”中可以取消“只有在计算机使用交流电源时才启动此任务”如果你用的是笔记本服务器并确保“如果任务运行时间超过以下时间将其停止”不要勾选或设置一个很长的时间。最重要的一步在“常规”选项卡中勾选“不管用户是否登录都要运行”并输入具有足够权限的用户密码。这样即使服务器锁屏任务也能照常运行。在Linux上设置Cron Job编辑当前用户的crontab文件crontab -e。添加一行。例如每10分钟运行一次并将输出日志追加到文件中*/10 * * * * /usr/bin/rclone copy /path/to/Xiaomi_Camera aliyun:Backup/XiaomiCamera --progress --log-file/home/user/rclone_sync.log 21*/10 * * * *表示每10分钟。/usr/bin/rclone是rclone的完整路径可以用which rclone命令查找。--log-file参数将输出重定向到日志文件便于日后查看。21将错误输出也重定向到同一日志文件。注意事项路径与权限路径问题在计划任务或Cron中所有路径包括源文件夹路径和rclone程序路径必须使用绝对路径不能使用相对路径或~家目录缩写。权限问题运行计划任务/Cron的用户必须有权限读取源文件夹SMB共享文件夹和写入目标网盘由Rclone配置的refresh_token决定。在Windows上最好用管理员账户或专门的服务账户来创建任务。在Linux上确保运行Cron的用户对源目录有读权限。网络问题确保任务运行时服务器网络通畅。可以给rclone命令加上--retries 3等重试参数来应对短暂的网络波动。5. 高级优化与故障排查基础流程跑通后我们可以进一步优化体验并学会如何应对可能出现的问题。5.1 性能优化与高级参数调整传输参数--transfers和--checkers对于大量小文件监控视频正是如此适当增加--transfers如8或16可以显著提升总体吞吐量。但需注意网盘API的调用频率限制阿里云盘非会员可能有并发数限制建议从4开始逐步测试。--buffer-size增加内存缓冲区大小如--buffer-size 64M对大文件传输有好处但对小文件影响不大。--drive-chunk-size针对谷歌Drive、阿里云盘等可以调整分块上传的大小。阿里云盘通常不需要调整。使用--fast-list当同步的目录包含大量文件时使用--fast-list参数可以显著减少API调用次数提升列表检索速度。推荐始终加上。限速如果同步任务影响了服务器其他网络应用可以使用--bwlimit参数进行限速例如--bwlimit 10M表示限制速度为10MB/s。错误重试与退出码使用--retries 3和--retries-sleep 5s可以在传输失败时自动重试3次每次间隔5秒。这对于不稳定的网络环境很有帮助。在脚本中可以检查Rclone的退出码$?来判断同步是否完全成功。5.2 日志管理与监控自动化任务跑在后台我们必须有办法知道它是否在正常工作。启用详细日志在命令中始终加入--verbose和--log-file/path/to/logfile.log参数。日志文件会记录每一次同步的开始、结束、传输的文件、速度以及任何错误信息。日志轮转日志文件会不断增长需要定期清理或轮转。可以使用Linux的logrotate工具或者写一个简单的脚本定期截断日志文件。简单监控脚本可以写一个Shell脚本或Python脚本定期检查日志文件最后几行如果发现“ERROR”关键字或者最近一次成功同步的时间超过预期比如2小时就发送邮件或通过其他通知服务如Server酱、Bark报警。# 一个简单的Bash脚本示例检查日志中是否有错误并通过curl调用通知API LOG_FILE/home/user/rclone_sync.log if tail -n 50 $LOG_FILE | grep -q ERROR; then curl -s https://api.day.app/your_bark_key/Rclone同步出错/请检查日志 fi5.3 常见问题与解决方案实录问题1小米摄像机无法连接SMB共享现象在米家App中添加SMB存储时提示连接失败。排查检查IP和共享名确保IP、共享名目录完全正确。在服务器上尝试用\\127.0.0.1\共享名从本机能否访问。检查网络发现确保服务器和摄像机在同一局域网网段如都是192.168.1.x且网络发现已开启。检查SMB协议版本较新的Windows系统默认可能禁用SMBv1而一些旧设备包括部分IoT设备可能只支持SMBv1。需要在Windows服务器上“启用或关闭Windows功能”中检查SMB 1.0/CIFS File Sharing Support是否已安装。但请注意SMBv1有严重安全漏洞仅在确认设备必须使用且网络环境安全的情况下启用。更推荐尝试在摄像机端寻找更新固件以支持更高版本SMB协议。检查防火墙临时关闭服务器防火墙测试如果成功则需要在防火墙中为SMB端口445TCP添加入站规则。使用IP而非计算机名尽量使用服务器的固定局域网IP地址而不是计算机名避免NetBIOS解析问题。问题2Rclone同步时提示“Token expired”或“refresh_token invalid”现象运行一段时间后同步失败日志显示令牌失效。原因网盘的Refresh Token有时效性通常很长但可能因安全策略或手动撤销而失效。解决重新执行rclone config对相应的remote进行重新授权获取新的Refresh Token并更新到配置文件中。对于阿里云盘可以尝试使用第三方工具如阿里云盘开源脚本获取更长期有效的Token。问题3同步速度慢尤其是大量小文件时现象传输进度条几乎不动或者整体速度远低于网络带宽。排查与解决增加--transfers这是最有效的方法从4逐步提高到8、16观察速度变化和错误率。使用--fast-list必加参数。检查源磁盘性能如果SMB共享文件夹所在的磁盘是机械硬盘且碎片多读取大量小文件会成为瓶颈。可以考虑将共享文件夹放在SSD上或者定期整理磁盘碎片。网盘限速非会员账号可能会被限速这是服务商策略无法解决。可以考虑错峰同步如在凌晨设置同步任务。问题4同步后网盘上文件的时间戳变成当前时间而不是文件的原始创建时间现象视频文件在网盘上显示的上传/修改时间是同步操作的时间而不是摄像机实际录制的时间不利于按时间排序查找。原因部分网盘尤其是通过WebDAV挂载在上传时不会保留原文件的“修改时间”mtime属性。解决Rclone的copy和sync命令默认会尝试保留时间戳。但对于不支持此功能的存储后端可能无效。可以尝试添加--preserve-modetime参数但并非所有网盘都支持。这是一个普遍存在的限制如果网盘不支持则无解。作为替代方案可以在文件名中包含日期时间信息小米摄像机生成的文件名通常已经包含了。问题5如何只保留最近N天的视频自动删除旧的需求网盘空间也有限希望自动清理过期的监控视频。方案Rclone本身没有直接“删除N天前文件”的命令。但可以通过组合命令实现在源端SMB服务器清理写一个脚本用find命令Linux或forfiles命令Windows定期删除源文件夹中超过N天的文件。这样下次Rclone同步时由于源端文件已删除使用sync模式带--delete-during就会同步删除网盘上的对应文件。风险高需谨慎。在目标端网盘清理更安全的方法是在网盘上使用“按时间移动”策略。可以配置另一个Rclone任务定期将网盘上旧文件移动到一个“归档”目录使用rclone move命令配合--min-age N参数或者直接使用网盘客户端或API进行清理。这需要更复杂的脚本控制。我个人在实际部署中选择了最稳妥的方案使用Rclonecopy命令只增不删。网盘空间相对廉价如阿里云盘免费空间很大我宁愿花钱扩容也不愿承担误删重要录像的风险。对于真正需要清理的旧文件我会定期如每季度手动登录网盘进行一次批量整理和删除。自动化在带来便利的同时也引入了“自动破坏”的风险在数据备份这件事上保守一点不是坏事。整个方案搭建下来你可能需要花费一个下午的时间进行配置和调试但一旦稳定运行它就像家里的水电煤一样成为你智能家居中无声却可靠的一环。从此珍贵的家庭影像有了异地备份监控数据的安全感也大大提升。技术的乐趣就在于用这些开源工具和巧思将不同厂商的产品和服务串联起来打造一个完全符合自己需求的个性化解决方案。
返回列表